diff --git a/packages/twenty-front/src/modules/navigation-menu-item/display/hooks/useWorkspaceNavigationMenuItems.ts b/packages/twenty-front/src/modules/navigation-menu-item/display/hooks/useWorkspaceNavigationMenuItems.ts index db339c26a8..2e3daff1ca 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/display/hooks/useWorkspaceNavigationMenuItems.ts +++ b/packages/twenty-front/src/modules/navigation-menu-item/display/hooks/useWorkspaceNavigationMenuItems.ts @@ -1,8 +1,3 @@ -import { useMemo } from 'react'; - -import { isNavigationMenuItemFolder } from '@/navigation-menu-item/common/utils/isNavigationMenuItemFolder'; -import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems'; -import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { viewsSelector } from '@/views/states/selectors/viewsSelector'; @@ -10,68 +5,28 @@ import { isDefined } from 'twenty-shared/utils'; import { useNavigationMenuItemsData } from './useNavigationMenuItemsData'; export const useWorkspaceNavigationMenuItems = (): { - workspaceNavigationMenuItemsObjectMetadataItems: ObjectMetadataItem[]; + objectMetadataIdsInWorkspaceNav: Set; } => { const { workspaceNavigationMenuItems: rawWorkspaceNavigationMenuItems } = useNavigationMenuItemsData(); const views = useAtomStateValue(viewsSelector); - const workspaceFolderIds = useMemo( - () => - new Set( - rawWorkspaceNavigationMenuItems - .filter(isNavigationMenuItemFolder) - .map((item) => item.id), - ), - [rawWorkspaceNavigationMenuItems], - ); - - const workspaceNavigationMenuItemsIncludingFolderItems = useMemo( - () => - rawWorkspaceNavigationMenuItems.filter( - (item) => - !isDefined(item.folderId) || - (isDefined(item.folderId) && workspaceFolderIds.has(item.folderId)), - ), - [rawWorkspaceNavigationMenuItems, workspaceFolderIds], - ); - - const workspaceNavigationMenuItemViewIds = new Set( - workspaceNavigationMenuItemsIncludingFolderItems + const workspaceNavViewIds = new Set( + rawWorkspaceNavigationMenuItems .map((item) => item.viewId) .filter((viewId) => isDefined(viewId)), ); - const navigationMenuItemViewObjectMetadataIds = new Set( - views.reduce((acc, view) => { - if (workspaceNavigationMenuItemViewIds.has(view.id)) { - acc.push(view.objectMetadataId); - } - return acc; - }, []), - ); - - const navigationMenuItemRecordObjectMetadataIds = new Set( - workspaceNavigationMenuItemsIncludingFolderItems + const objectMetadataIdsInWorkspaceNav = new Set([ + ...views + .filter((view) => workspaceNavViewIds.has(view.id)) + .map((view) => view.objectMetadataId), + ...rawWorkspaceNavigationMenuItems .map((item) => item.targetObjectMetadataId) .filter((objectMetadataId) => isDefined(objectMetadataId)), - ); - - const allNavigationMenuItemObjectMetadataIds = new Set([ - ...navigationMenuItemViewObjectMetadataIds, - ...navigationMenuItemRecordObjectMetadataIds, ]); - const { activeNonSystemObjectMetadataItems } = - useFilteredObjectMetadataItems(); - - const activeNonSystemObjectMetadataItemsInWorkspaceNavigationMenuItems: ObjectMetadataItem[] = - activeNonSystemObjectMetadataItems.filter((item: ObjectMetadataItem) => - allNavigationMenuItemObjectMetadataIds.has(item.id), - ); - return { - workspaceNavigationMenuItemsObjectMetadataItems: - activeNonSystemObjectMetadataItemsInWorkspaceNavigationMenuItems, + objectMetadataIdsInWorkspaceNav, }; }; diff --git a/packages/twenty-front/src/modules/navigation-menu-item/display/sections/components/NavigationDrawerOpenedSection.tsx b/packages/twenty-front/src/modules/navigation-menu-item/display/sections/components/NavigationDrawerOpenedSection.tsx index b453096bc1..11659139ad 100644 --- a/packages/twenty-front/src/modules/navigation-menu-item/display/sections/components/NavigationDrawerOpenedSection.tsx +++ b/packages/twenty-front/src/modules/navigation-menu-item/display/sections/components/NavigationDrawerOpenedSection.tsx @@ -3,15 +3,8 @@ import { useParams } from 'react-router-dom'; import { useWorkspaceNavigationMenuItems } from '@/navigation-menu-item/display/hooks/useWorkspaceNavigationMenuItems'; import { NavigationDrawerSectionForObjectMetadataItems } from '@/object-metadata/components/NavigationDrawerSectionForObjectMetadataItems'; import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems'; -import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useLingui } from '@lingui/react/macro'; -const WORKFLOW_OBJECTS_IN_SIDEBAR = [ - CoreObjectNameSingular.Workflow, - CoreObjectNameSingular.WorkflowRun, - CoreObjectNameSingular.WorkflowVersion, -]; - export const NavigationDrawerOpenedSection = () => { const { t } = useLingui(); @@ -19,8 +12,7 @@ export const NavigationDrawerOpenedSection = () => { const filteredActiveNonSystemObjectMetadataItems = activeObjectMetadataItems.filter((item) => !item.isRemote); - const { workspaceNavigationMenuItemsObjectMetadataItems } = - useWorkspaceNavigationMenuItems(); + const { objectMetadataIdsInWorkspaceNav } = useWorkspaceNavigationMenuItems(); const { objectNamePlural: currentObjectNamePlural, @@ -41,18 +33,12 @@ export const NavigationDrawerOpenedSection = () => { return; } - const isWorkflowObjectInSidebar = WORKFLOW_OBJECTS_IN_SIDEBAR.includes( - objectMetadataItem.nameSingular as CoreObjectNameSingular, + const isObjectAlreadyInNavbar = objectMetadataIdsInWorkspaceNav.has( + objectMetadataItem.id, ); - const shouldDisplayObjectInOpenedSection = - !isWorkflowObjectInSidebar && - !workspaceNavigationMenuItemsObjectMetadataItems - .map((item) => item.id) - .includes(objectMetadataItem.id); - return ( - shouldDisplayObjectInOpenedSection && ( + !isObjectAlreadyInNavbar && (