diff --git a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawer.tsx b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawer.tsx index 57bd1eaea7..a24046f696 100644 --- a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawer.tsx +++ b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawer.tsx @@ -2,18 +2,27 @@ import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { NavigationDrawerAiChatContent } from '@/ai/components/NavigationDrawerAiChatContent'; import { MainNavigationDrawerNavigationContent } from '@/navigation/components/MainNavigationDrawerNavigationContent'; import { MainNavigationDrawerTabsRow } from '@/navigation/components/MainNavigationDrawerTabsRow'; +import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; import { NavigationDrawer } from '@/ui/navigation/navigation-drawer/components/NavigationDrawer'; import { NavigationDrawerFixedContent } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerFixedContent'; import { NavigationDrawerScrollableContent } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerScrollableContent'; import { navigationDrawerActiveTabState } from '@/ui/navigation/states/navigationDrawerActiveTabState'; import { NAVIGATION_DRAWER_TABS } from '@/ui/navigation/states/navigationDrawerTabs'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; +import { PermissionFlagType } from '~/generated-metadata/graphql'; export const MainNavigationDrawer = ({ className }: { className?: string }) => { const navigationDrawerActiveTab = useAtomStateValue( navigationDrawerActiveTabState, ); const currentWorkspace = useAtomStateValue(currentWorkspaceState); + const hasAiSettingsPermission = useHasPermissionFlag( + PermissionFlagType.AI_SETTINGS, + ); + + const showAiChatContent = + hasAiSettingsPermission && + navigationDrawerActiveTab === NAVIGATION_DRAWER_TABS.AI_CHAT_HISTORY; return ( { - {navigationDrawerActiveTab === - NAVIGATION_DRAWER_TABS.AI_CHAT_HISTORY ? ( + {showAiChatContent ? ( ) : ( diff --git a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx index 0c53d35d0c..1650bf696e 100644 --- a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx +++ b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx @@ -12,6 +12,7 @@ import { useIsMobile } from 'twenty-ui/utilities'; import { useContext } from 'react'; import { useSwitchToNewAiChat } from '@/ai/hooks/useSwitchToNewAiChat'; +import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; import { NavigationDrawerAnimatedCollapseWrapper } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerAnimatedCollapseWrapper'; import { isNavigationDrawerExpandedState } from '@/ui/navigation/states/isNavigationDrawerExpanded'; import { navigationDrawerActiveTabState } from '@/ui/navigation/states/navigationDrawerActiveTabState'; @@ -22,6 +23,7 @@ import { import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; +import { PermissionFlagType } from '~/generated-metadata/graphql'; const StyledRow = styled.div<{ isExpanded: boolean }>` align-items: center; @@ -142,9 +144,16 @@ export const MainNavigationDrawerTabsRow = () => { const setIsNavigationDrawerExpanded = useSetAtomState( isNavigationDrawerExpandedState, ); + const hasAiSettingsPermission = useHasPermissionFlag( + PermissionFlagType.AI_SETTINGS, + ); const isExpanded = isNavigationDrawerExpanded || isMobile; + if (!hasAiSettingsPermission) { + return null; + } + const handleTabClick = (tab: NavigationDrawerActiveTab) => () => { setNavigationDrawerActiveTab(tab); }; diff --git a/packages/twenty-front/src/modules/navigation/components/MobileNavigationBar.tsx b/packages/twenty-front/src/modules/navigation/components/MobileNavigationBar.tsx index d07205b6ec..7e1430d92d 100644 --- a/packages/twenty-front/src/modules/navigation/components/MobileNavigationBar.tsx +++ b/packages/twenty-front/src/modules/navigation/components/MobileNavigationBar.tsx @@ -5,6 +5,7 @@ import { useDefaultHomePagePath } from '@/navigation/hooks/useDefaultHomePagePat import { useIsSettingsPage } from '@/navigation/hooks/useIsSettingsPage'; import { currentMobileNavigationDrawerState } from '@/navigation/states/currentMobileNavigationDrawerState'; import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems'; +import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; import { useOpenRecordsSearchPageInSidePanel } from '@/side-panel/hooks/useOpenRecordsSearchPageInSidePanel'; import { useSidePanelMenu } from '@/side-panel/hooks/useSidePanelMenu'; import { isSidePanelOpenedState } from '@/side-panel/states/isSidePanelOpenedState'; @@ -20,6 +21,7 @@ import { IconSearch, } from 'twenty-ui/display'; import { NavigationBar } from 'twenty-ui/navigation'; +import { PermissionFlagType } from '~/generated-metadata/graphql'; type NavigationBarItemName = 'main' | 'search' | 'newAiChat'; @@ -37,6 +39,9 @@ export const MobileNavigationBar = () => { const { switchToNewChat } = useSwitchToNewAiChat(); const { alphaSortedActiveNonSystemObjectMetadataItems } = useFilteredObjectMetadataItems(); + const hasAiSettingsPermission = useHasPermissionFlag( + PermissionFlagType.AI_SETTINGS, + ); const setContextStoreCurrentObjectMetadataItemId = useSetAtomComponentState( contextStoreCurrentObjectMetadataItemIdComponentState, @@ -89,15 +94,19 @@ export const MobileNavigationBar = () => { openRecordsSearchPage(); }, }, - { - name: 'newAiChat' as const, - Icon: IconMessageCirclePlus, - onClick: () => { - setIsNavigationDrawerExpanded(false); - closeSidePanelMenu(); - switchToNewChat(); - }, - }, + ...(hasAiSettingsPermission + ? [ + { + name: 'newAiChat' as const, + Icon: IconMessageCirclePlus, + onClick: () => { + setIsNavigationDrawerExpanded(false); + closeSidePanelMenu(); + switchToNewChat(); + }, + }, + ] + : []), ]; return ;