diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7adf61a..4695d57 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,6 +33,7 @@ jobs: run: npm run backend:test env: FF_ENABLE_BACKUPS: 'true' + FF_ENABLE_CALDAV: 'true' FF_ENABLE_CALENDAR: 'true' - name: Build frontend diff --git a/Dockerfile b/Dockerfile index 7b439fe..77a999d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -128,6 +128,7 @@ ENV NODE_ENV=production \ TUDUDI_UPLOAD_PATH="/app/backend/uploads" \ SWAGGER_ENABLED=false \ FF_ENABLE_BACKUPS=false \ + FF_ENABLE_CALDAV=false \ FF_ENABLE_CALENDAR=false \ FF_ENABLE_HABITS=false diff --git a/backend/.env.example b/backend/.env.example index 28133ed..a443a17 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -29,6 +29,7 @@ DISABLE_TELEGRAM=false # Feature Flags FF_ENABLE_BACKUPS=false +FF_ENABLE_CALDAV=false FF_ENABLE_CALENDAR=false FF_ENABLE_HABITS=false FF_ENABLE_MCP=false diff --git a/backend/.env.test b/backend/.env.test index b7b00b4..e17e4af 100644 --- a/backend/.env.test +++ b/backend/.env.test @@ -4,5 +4,6 @@ TUDUDI_SESSION_SECRET=test-secret-key-for-testing TUDUDI_ALLOWED_ORIGINS=http://localhost:3000,http://localhost:8080 FF_ENABLE_BACKUPS=false +FF_ENABLE_CALDAV=false FF_ENABLE_CALENDAR=false FF_ENABLE_HABITS=false diff --git a/backend/modules/feature-flags/service.js b/backend/modules/feature-flags/service.js index f09d023..61ff471 100644 --- a/backend/modules/feature-flags/service.js +++ b/backend/modules/feature-flags/service.js @@ -8,6 +8,9 @@ class FeatureFlagsService { return { backups: process.env.FF_ENABLE_BACKUPS === 'true', calendar: process.env.FF_ENABLE_CALENDAR === 'true', + caldav: + process.env.FF_ENABLE_CALDAV === 'true' || + process.env.CALDAV_ENABLED === 'true', habits: process.env.FF_ENABLE_HABITS === 'true', mcp: process.env.FF_ENABLE_MCP === 'true', }; diff --git a/frontend/components/Navbar.tsx b/frontend/components/Navbar.tsx index 5022053..e16985d 100644 --- a/frontend/components/Navbar.tsx +++ b/frontend/components/Navbar.tsx @@ -42,6 +42,7 @@ const Navbar: React.FC = ({ const [featureFlags, setFeatureFlags] = useState({ backups: false, calendar: false, + caldav: false, habits: false, mcp: false, }); diff --git a/frontend/components/Profile/ProfileSettings.tsx b/frontend/components/Profile/ProfileSettings.tsx index 81137e9..7658bfe 100644 --- a/frontend/components/Profile/ProfileSettings.tsx +++ b/frontend/components/Profile/ProfileSettings.tsx @@ -144,6 +144,7 @@ const ProfileSettings: React.FC = ({ const [featureFlags, setFeatureFlags] = useState({ backups: false, calendar: false, + caldav: false, habits: false, mcp: false, }); @@ -1174,7 +1175,7 @@ const ProfileSettings: React.FC = ({ id: 'caldav', name: t('profile.tabs.caldav', 'CalDAV Sync'), icon: , - featureFlag: 'calendar', + featureFlag: 'caldav', }, { id: 'mcp', diff --git a/frontend/components/Sidebar.tsx b/frontend/components/Sidebar.tsx index bc56d17..50f5a8d 100644 --- a/frontend/components/Sidebar.tsx +++ b/frontend/components/Sidebar.tsx @@ -56,6 +56,7 @@ const Sidebar: React.FC = ({ const [featureFlags, setFeatureFlags] = useState({ backups: false, calendar: false, + caldav: false, habits: false, mcp: false, }); diff --git a/frontend/components/Sidebar/SidebarNav.tsx b/frontend/components/Sidebar/SidebarNav.tsx index 5e7e0db..a9e0cfd 100644 --- a/frontend/components/Sidebar/SidebarNav.tsx +++ b/frontend/components/Sidebar/SidebarNav.tsx @@ -30,6 +30,7 @@ const SidebarNav: React.FC = ({ const [featureFlags, setFeatureFlags] = useState({ backups: false, calendar: false, + caldav: false, habits: false, mcp: false, }); diff --git a/frontend/utils/featureFlags.ts b/frontend/utils/featureFlags.ts index aa8bc99..70fa77a 100644 --- a/frontend/utils/featureFlags.ts +++ b/frontend/utils/featureFlags.ts @@ -3,6 +3,7 @@ import { getApiPath } from '../config/paths'; export interface FeatureFlags { backups: boolean; calendar: boolean; + caldav: boolean; habits: boolean; mcp: boolean; } @@ -24,6 +25,7 @@ export const getFeatureFlags = async (): Promise => { return { backups: false, calendar: false, + caldav: false, habits: false, mcp: false, }; @@ -33,6 +35,7 @@ export const getFeatureFlags = async (): Promise => { const defaultFlags: FeatureFlags = { backups: false, calendar: false, + caldav: false, habits: false, mcp: false, }; @@ -46,6 +49,7 @@ export const getFeatureFlags = async (): Promise => { return { backups: false, calendar: false, + caldav: false, habits: false, mcp: false, };