* fix: add FF_ENABLE_CALDAV feature flag for CalDAV functionality Introduces a new dedicated feature flag for CalDAV sync that checks both FF_ENABLE_CALDAV and CALDAV_ENABLED environment variables. This allows the CalDAV tab to appear in profile settings when users set CALDAV_ENABLED=true as documented. The existing FF_ENABLE_CALENDAR remains unchanged as it's for a separate (hidden) calendar feature. Changes: - Added 'caldav' feature flag to backend service (checks FF_ENABLE_CALDAV or CALDAV_ENABLED) - Updated frontend FeatureFlags interface to include 'caldav' - Changed CalDAV tab to use 'caldav' feature flag instead of 'calendar' - Added FF_ENABLE_CALDAV to .env.example, .env.test, Dockerfile, and CI Fixes #1048 * fix: add caldav property to all FeatureFlags initializations Fixes TypeScript errors where FeatureFlags objects were missing the new caldav property in: - frontend/utils/featureFlags.ts (defaultFlags and error return) - frontend/components/Navbar.tsx - frontend/components/Sidebar.tsx - frontend/components/Sidebar/SidebarNav.tsx
61 lines
1.5 KiB
TypeScript
61 lines
1.5 KiB
TypeScript
import { getApiPath } from '../config/paths';
|
|
|
|
export interface FeatureFlags {
|
|
backups: boolean;
|
|
calendar: boolean;
|
|
caldav: boolean;
|
|
habits: boolean;
|
|
mcp: boolean;
|
|
}
|
|
|
|
let cachedFeatureFlags: FeatureFlags | null = null;
|
|
|
|
export const getFeatureFlags = async (): Promise<FeatureFlags> => {
|
|
if (cachedFeatureFlags) {
|
|
return cachedFeatureFlags;
|
|
}
|
|
|
|
try {
|
|
const response = await fetch(getApiPath('feature-flags'), {
|
|
credentials: 'include',
|
|
});
|
|
|
|
if (!response.ok) {
|
|
console.error('Failed to fetch feature flags');
|
|
return {
|
|
backups: false,
|
|
calendar: false,
|
|
caldav: false,
|
|
habits: false,
|
|
mcp: false,
|
|
};
|
|
}
|
|
|
|
const data = await response.json();
|
|
const defaultFlags: FeatureFlags = {
|
|
backups: false,
|
|
calendar: false,
|
|
caldav: false,
|
|
habits: false,
|
|
mcp: false,
|
|
};
|
|
cachedFeatureFlags = {
|
|
...defaultFlags,
|
|
...data.featureFlags,
|
|
};
|
|
return cachedFeatureFlags;
|
|
} catch (error) {
|
|
console.error('Error fetching feature flags:', error);
|
|
return {
|
|
backups: false,
|
|
calendar: false,
|
|
caldav: false,
|
|
habits: false,
|
|
mcp: false,
|
|
};
|
|
}
|
|
};
|
|
|
|
export const clearFeatureFlagsCache = () => {
|
|
cachedFeatureFlags = null;
|
|
};
|