import { useRecoilValue } from 'recoil'; import { IconApps, IconAt, IconCalendarEvent, IconCode, IconColorSwatch, IconComponent, IconCurrencyDollar, IconDoorEnter, IconFunction, IconHierarchy2, IconMail, IconRocket, IconSettings, IconUserCircle, IconUsers, } from 'twenty-ui'; import { useAuth } from '@/auth/hooks/useAuth'; import { billingState } from '@/client-config/states/billingState'; import { SettingsNavigationDrawerItem } from '@/settings/components/SettingsNavigationDrawerItem'; import { getSettingsPagePath } from '@/settings/utils/getSettingsPagePath'; import { SettingsPath } from '@/types/SettingsPath'; import { NavigationDrawerItem, NavigationDrawerItemIndentationLevel, } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItem'; import { NavigationDrawerItemGroup } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItemGroup'; import { NavigationDrawerSection } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerSection'; import { NavigationDrawerSectionTitle } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerSectionTitle'; import { getNavigationSubItemState } from '@/ui/navigation/navigation-drawer/utils/getNavigationSubItemState'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { matchPath, resolvePath, useLocation } from 'react-router-dom'; type SettingsNavigationItem = { label: string; path: SettingsPath; Icon: IconComponent; matchSubPages?: boolean; indentationLevel?: NavigationDrawerItemIndentationLevel; }; export const SettingsNavigationDrawerItems = () => { const { signOut } = useAuth(); const billing = useRecoilValue(billingState); const isFunctionSettingsEnabled = useIsFeatureEnabled( 'IS_FUNCTION_SETTINGS_ENABLED', ); const isFreeAccessEnabled = useIsFeatureEnabled('IS_FREE_ACCESS_ENABLED'); const isCRMMigrationEnabled = useIsFeatureEnabled('IS_CRM_MIGRATION_ENABLED'); const isBillingPageEnabled = billing?.isBillingEnabled && !isFreeAccessEnabled; // TODO: Refactor this part to only have arrays of navigation items const currentPathName = useLocation().pathname; const accountSubSettings: SettingsNavigationItem[] = [ { label: 'Emails', path: SettingsPath.AccountsEmails, Icon: IconMail, matchSubPages: true, indentationLevel: 2, }, { label: 'Calendars', path: SettingsPath.AccountsCalendars, Icon: IconCalendarEvent, matchSubPages: true, indentationLevel: 2, }, ]; const selectedIndex = accountSubSettings.findIndex((accountSubSetting) => { const href = getSettingsPagePath(accountSubSetting.path); const pathName = resolvePath(href).pathname; return matchPath( { path: pathName, end: !accountSubSetting.matchSubPages, }, currentPathName, ); }); return ( <> {accountSubSettings.map((navigationItem, index) => ( ))} {isBillingPageEnabled && ( )} {isFunctionSettingsEnabled && ( )} {isCRMMigrationEnabled && ( )} ); };