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.
73 lines
2.3 KiB
TypeScript
73 lines
2.3 KiB
TypeScript
import { lazy, Suspense } from 'react';
|
|
|
|
import { WorkspaceFolderReadOnly } from '@/object-metadata/components/WorkspaceFolderReadOnly';
|
|
import type { WorkspaceSectionItemContentProps } from '@/object-metadata/components/WorkspaceSectionItemContentProps';
|
|
|
|
const LazyWorkspaceNavigationMenuItemsFolder = lazy(() =>
|
|
import(
|
|
'@/navigation-menu-item/components/WorkspaceNavigationMenuItemsFolder'
|
|
).then((m) => ({ default: m.WorkspaceNavigationMenuItemsFolder })),
|
|
);
|
|
|
|
type NavigationDrawerSectionForWorkspaceItemFolderContentProps =
|
|
WorkspaceSectionItemContentProps;
|
|
|
|
export const NavigationDrawerSectionForWorkspaceItemFolderContent = ({
|
|
item,
|
|
editModeProps,
|
|
isDragging,
|
|
folderChildrenById,
|
|
folderCount,
|
|
selectedNavigationMenuItemId,
|
|
onNavigationMenuItemClick,
|
|
readOnly = false,
|
|
}: NavigationDrawerSectionForWorkspaceItemFolderContentProps) => {
|
|
const folderId = item.id;
|
|
const folderName = item.name ?? 'Folder';
|
|
const folderIconKey = item.icon;
|
|
const folderColor = 'color' in item ? item.color : undefined;
|
|
const navigationMenuItems = folderChildrenById.get(item.id) ?? [];
|
|
const isGroup = folderCount > 1;
|
|
|
|
if (readOnly) {
|
|
return (
|
|
<WorkspaceFolderReadOnly
|
|
folderId={folderId}
|
|
folderName={folderName}
|
|
folderIconKey={folderIconKey}
|
|
folderColor={folderColor}
|
|
navigationMenuItems={navigationMenuItems}
|
|
isGroup={isGroup}
|
|
/>
|
|
);
|
|
}
|
|
return (
|
|
<Suspense
|
|
fallback={
|
|
<WorkspaceFolderReadOnly
|
|
folderId={folderId}
|
|
folderName={folderName}
|
|
folderIconKey={folderIconKey}
|
|
folderColor={folderColor}
|
|
navigationMenuItems={navigationMenuItems}
|
|
isGroup={isGroup}
|
|
/>
|
|
}
|
|
>
|
|
<LazyWorkspaceNavigationMenuItemsFolder
|
|
folderId={folderId}
|
|
folderName={folderName}
|
|
folderIconKey={folderIconKey}
|
|
folderColor={folderColor}
|
|
navigationMenuItems={navigationMenuItems}
|
|
isGroup={isGroup}
|
|
isSelectedInEditMode={editModeProps.isSelectedInEditMode}
|
|
onEditModeClick={editModeProps.onEditModeClick}
|
|
onNavigationMenuItemClick={onNavigationMenuItemClick}
|
|
selectedNavigationMenuItemId={selectedNavigationMenuItemId}
|
|
isDragging={isDragging}
|
|
/>
|
|
</Suspense>
|
|
);
|
|
};
|