From 869a0a7cf41c5ff4bb137751ea9dfa53ae8d0ef8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Bosi?= <71827178+bosiraphael@users.noreply.github.com> Date: Tue, 13 Jan 2026 17:24:14 +0100 Subject: [PATCH] Hardcode workflow objects and dashboards to be last in the navigation drawer (#17123) Closes https://github.com/twentyhq/core-team-issues/issues/2058 We settled on a simpler solution by just hardcoding the objects order for now. We will change this once it's possible to reorder the workspace favorites with drag and drop. --- ...ionDrawerSectionForObjectMetadataItems.tsx | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForObjectMetadataItems.tsx b/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForObjectMetadataItems.tsx index d387dc218e..a2d1f2001b 100644 --- a/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForObjectMetadataItems.tsx +++ b/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForObjectMetadataItems.tsx @@ -8,8 +8,9 @@ import { NavigationDrawerSection } from '@/ui/navigation/navigation-drawer/compo import { NavigationDrawerSectionTitle } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerSectionTitle'; import { useNavigationSection } from '@/ui/navigation/navigation-drawer/hooks/useNavigationSection'; import { useRecoilValue } from 'recoil'; +import { isDefined } from 'twenty-shared/utils'; -const ORDERED_STANDARD_OBJECTS: string[] = [ +const ORDERED_FIRST_STANDARD_OBJECTS: string[] = [ CoreObjectNameSingular.Person, CoreObjectNameSingular.Company, CoreObjectNameSingular.Opportunity, @@ -17,6 +18,11 @@ const ORDERED_STANDARD_OBJECTS: string[] = [ CoreObjectNameSingular.Note, ]; +const ORDERED_LAST_STANDARD_OBJECTS: string[] = [ + CoreObjectNameSingular.Workflow, + CoreObjectNameSingular.Dashboard, +]; + type NavigationDrawerSectionForObjectMetadataItemsProps = { sectionTitle: string; isRemote: boolean; @@ -35,12 +41,16 @@ export const NavigationDrawerSectionForObjectMetadataItems = ({ const { objectPermissionsByObjectMetadataId } = useObjectPermissions(); const sortedStandardObjectMetadataItems = [...objectMetadataItems] - .filter((item) => ORDERED_STANDARD_OBJECTS.includes(item.nameSingular)) + .filter( + (item) => + ORDERED_FIRST_STANDARD_OBJECTS.includes(item.nameSingular) && + !ORDERED_LAST_STANDARD_OBJECTS.includes(item.nameSingular), + ) .sort((objectMetadataItemA, objectMetadataItemB) => { - const indexA = ORDERED_STANDARD_OBJECTS.indexOf( + const indexA = ORDERED_FIRST_STANDARD_OBJECTS.indexOf( objectMetadataItemA.nameSingular, ); - const indexB = ORDERED_STANDARD_OBJECTS.indexOf( + const indexB = ORDERED_FIRST_STANDARD_OBJECTS.indexOf( objectMetadataItemB.nameSingular, ); if (indexA === -1 || indexB === -1) { @@ -52,7 +62,11 @@ export const NavigationDrawerSectionForObjectMetadataItems = ({ }); const sortedCustomObjectMetadataItems = [...objectMetadataItems] - .filter((item) => !ORDERED_STANDARD_OBJECTS.includes(item.nameSingular)) + .filter( + (item) => + !ORDERED_FIRST_STANDARD_OBJECTS.includes(item.nameSingular) && + !ORDERED_LAST_STANDARD_OBJECTS.includes(item.nameSingular), + ) .sort((objectMetadataItemA, objectMetadataItemB) => { return new Date(objectMetadataItemA.createdAt) < new Date(objectMetadataItemB.createdAt) @@ -60,9 +74,17 @@ export const NavigationDrawerSectionForObjectMetadataItems = ({ : -1; }); + const sortedLastStandardObjectMetadataItems = + ORDERED_LAST_STANDARD_OBJECTS.map((nameSingular) => { + return objectMetadataItems.find( + (item) => item.nameSingular === nameSingular, + ); + }).filter(isDefined); + const objectMetadataItemsForNavigationItems = [ ...sortedStandardObjectMetadataItems, ...sortedCustomObjectMetadataItems, + ...sortedLastStandardObjectMetadataItems, ]; const objectMetadataItemsForNavigationItemsWithReadPermission =