1bb642d7cd
## Summary - Removes `ProcessedNavigationMenuItem` type and the `sortNavigationMenuItems` enrichment pipeline that pre-computed display fields (label, link, icon, avatarUrl, etc.) for every navigation menu item upfront - Replaces with `filterAndSortNavigationMenuItems` (pure filter+sort returning raw `NavigationMenuItem[]`) and small utility functions (`getNavigationMenuItemLabel`, `getNavigationMenuItemComputedLink`, `getNavigationMenuItemObjectNameSingular`) that components call on demand - Eliminates the redundant `itemType` field (was identical to the raw `type` field) across ~30 consumer files - Each type-specific renderer (`NavigationDrawerItemForObjectMetadataItem`, `NavigationMenuItemIcon`, link/folder components) now derives only the 1-2 display fields it actually needs from the raw item + globally available Jotai atoms Net result: -1199 / +1177 lines, 7 files deleted, 4 new utility files.
65 lines
2.6 KiB
TypeScript
65 lines
2.6 KiB
TypeScript
import { NavigationMenuItemType } from 'twenty-shared/types';
|
|
import { NavigationDrawerSectionForWorkspaceItemFolderContent } from '@/object-metadata/components/NavigationDrawerSectionForWorkspaceItemFolderContent';
|
|
import { NavigationDrawerSectionForWorkspaceItemLinkContent } from '@/object-metadata/components/NavigationDrawerSectionForWorkspaceItemLinkContent';
|
|
import { NavigationDrawerSectionForWorkspaceItemObjectContent } from '@/object-metadata/components/NavigationDrawerSectionForWorkspaceItemObjectContent';
|
|
import type { WorkspaceSectionItemContentProps } from '@/object-metadata/components/WorkspaceSectionItemContentProps';
|
|
|
|
type NavigationDrawerSectionForWorkspaceItemContentProps =
|
|
WorkspaceSectionItemContentProps;
|
|
|
|
export const NavigationDrawerSectionForWorkspaceItemContent = ({
|
|
item,
|
|
editModeProps,
|
|
isDragging,
|
|
folderChildrenById,
|
|
folderCount,
|
|
selectedNavigationMenuItemId,
|
|
onNavigationMenuItemClick,
|
|
onActiveObjectMetadataItemClick,
|
|
readOnly,
|
|
}: NavigationDrawerSectionForWorkspaceItemContentProps) => {
|
|
switch (item.type) {
|
|
case NavigationMenuItemType.FOLDER:
|
|
return (
|
|
<NavigationDrawerSectionForWorkspaceItemFolderContent
|
|
item={item}
|
|
editModeProps={editModeProps}
|
|
isDragging={isDragging}
|
|
folderChildrenById={folderChildrenById}
|
|
folderCount={folderCount}
|
|
selectedNavigationMenuItemId={selectedNavigationMenuItemId}
|
|
onNavigationMenuItemClick={onNavigationMenuItemClick}
|
|
readOnly={readOnly}
|
|
/>
|
|
);
|
|
case NavigationMenuItemType.LINK:
|
|
return (
|
|
<NavigationDrawerSectionForWorkspaceItemLinkContent
|
|
item={item}
|
|
editModeProps={editModeProps}
|
|
isDragging={isDragging}
|
|
folderChildrenById={folderChildrenById}
|
|
folderCount={folderCount}
|
|
selectedNavigationMenuItemId={selectedNavigationMenuItemId}
|
|
onNavigationMenuItemClick={onNavigationMenuItemClick}
|
|
onActiveObjectMetadataItemClick={onActiveObjectMetadataItemClick}
|
|
readOnly={readOnly}
|
|
/>
|
|
);
|
|
default:
|
|
return (
|
|
<NavigationDrawerSectionForWorkspaceItemObjectContent
|
|
item={item}
|
|
editModeProps={editModeProps}
|
|
isDragging={isDragging}
|
|
folderChildrenById={folderChildrenById}
|
|
folderCount={folderCount}
|
|
selectedNavigationMenuItemId={selectedNavigationMenuItemId}
|
|
onNavigationMenuItemClick={onNavigationMenuItemClick}
|
|
onActiveObjectMetadataItemClick={onActiveObjectMetadataItemClick}
|
|
readOnly={readOnly}
|
|
/>
|
|
);
|
|
}
|
|
};
|