## Summary - Renames `ObjectMetadataItem` to `EnrichedObjectMetadataItem` across the entire frontend (~440 files) to clarify that this type includes derived fields (`readableFields`, `updatableFields`, nested `fields[]`, `indexMetadatas[]`) computed at read time from the metadata store - Creates `splitObjectMetadataGqlResponse` that goes directly from a GraphQL `ObjectMetadataItemsQuery` response to flat store items (combining the old `mapPaginatedObjectMetadataItemsToObjectMetadataItems` + `splitObjectMetadataItemWithRelated` two-step flow into one call) - Removes `ObjectMetadataItemWithRelated` type and all "WithRelated" naming - Renames `generatedMockObjectMetadataItems` to `generateTestEnrichedObjectMetadataItemsMock` to make it clear this is test-only enriched data - Deletes `useLoadMockedObjectMetadataItems` hook (consolidated into `useLoadMockedMinimalMetadata`) - Ensures nothing destined for the metadata store computes `readableFields`/`updatableFields` (preventing the localStorage bloat from #18809) ## Type hierarchy (before → after) **Before:** ``` ObjectMetadataItemsQuery → mapPaginated → ObjectMetadataItemWithRelated → enrich → ObjectMetadataItem → split → FlatObjectMetadataItem (store) ``` **After:** ``` ObjectMetadataItemsQuery → splitObjectMetadataGqlResponse → FlatObjectMetadataItem (store) → mapPaginated + enrich (tests only) → EnrichedObjectMetadataItem ``` ## Test plan - [x] `npx nx typecheck twenty-front` passes - [x] `npx nx test twenty-front` passes (767 suites, 4505 tests) - [x] `npx nx lint twenty-front` passes - [ ] CI checks pass Made with [Cursor](https://cursor.com)
66 lines
2.4 KiB
TypeScript
66 lines
2.4 KiB
TypeScript
import { type CommandMenuContextType } from '@/command-menu-item/contexts/CommandMenuContext';
|
|
import { CommandMenuContextProviderDefault } from '@/command-menu-item/contexts/CommandMenuContextProviderDefault';
|
|
import { CommandMenuContextProviderWorkflowObjects } from '@/command-menu-item/contexts/CommandMenuContextProviderWorkflowObjects';
|
|
import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
|
|
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
|
import { CoreObjectNameSingular } from 'twenty-shared/types';
|
|
import { type EnrichedObjectMetadataItem } from '@/object-metadata/types/EnrichedObjectMetadataItem';
|
|
import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue';
|
|
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
|
import { isDefined } from 'twenty-shared/utils';
|
|
|
|
export const CommandMenuContextProviderLegacy = ({
|
|
children,
|
|
isInSidePanel,
|
|
displayType,
|
|
containerType,
|
|
objectMetadataItemOverride,
|
|
}: Omit<CommandMenuContextType, 'commandMenuItems'> & {
|
|
children: React.ReactNode;
|
|
objectMetadataItemOverride?: EnrichedObjectMetadataItem;
|
|
}) => {
|
|
const contextStoreCurrentObjectMetadataItemId = useAtomComponentStateValue(
|
|
contextStoreCurrentObjectMetadataItemIdComponentState,
|
|
);
|
|
|
|
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
|
|
|
|
const objectMetadataItem =
|
|
objectMetadataItemOverride ??
|
|
objectMetadataItems.find(
|
|
(objectMetadataItem) =>
|
|
objectMetadataItem.id === contextStoreCurrentObjectMetadataItemId,
|
|
);
|
|
|
|
if (!isDefined(objectMetadataItem)) {
|
|
return null;
|
|
}
|
|
|
|
const isWorkflowObject =
|
|
objectMetadataItem.nameSingular === CoreObjectNameSingular.Workflow;
|
|
|
|
if (isWorkflowObject) {
|
|
return (
|
|
<CommandMenuContextProviderWorkflowObjects
|
|
isInSidePanel={isInSidePanel}
|
|
displayType={displayType}
|
|
containerType={containerType}
|
|
objectMetadataItem={objectMetadataItem}
|
|
>
|
|
{children}
|
|
</CommandMenuContextProviderWorkflowObjects>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<CommandMenuContextProviderDefault
|
|
isInSidePanel={isInSidePanel}
|
|
displayType={displayType}
|
|
containerType={containerType}
|
|
objectMetadataItem={objectMetadataItem}
|
|
>
|
|
{children}
|
|
</CommandMenuContextProviderDefault>
|
|
);
|
|
};
|