d5a7dec117
## 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)
30 lines
909 B
TypeScript
30 lines
909 B
TypeScript
import { CoreObjectNameSingular } from 'twenty-shared/types';
|
|
import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
|
|
import { type EnrichedObjectMetadataItem } from '@/object-metadata/types/EnrichedObjectMetadataItem';
|
|
|
|
export const isImageIdentifierField = ({
|
|
fieldMetadataItem,
|
|
objectMetadataItem,
|
|
}: {
|
|
fieldMetadataItem: Pick<FieldMetadataItem, 'id' | 'name'>;
|
|
objectMetadataItem: Pick<
|
|
EnrichedObjectMetadataItem,
|
|
'imageIdentifierFieldMetadataId' | 'nameSingular'
|
|
>;
|
|
}) => {
|
|
if (
|
|
objectMetadataItem.nameSingular === CoreObjectNameSingular.Company &&
|
|
fieldMetadataItem.name === 'domainName'
|
|
) {
|
|
return true;
|
|
}
|
|
|
|
if (objectMetadataItem.nameSingular === CoreObjectNameSingular.Person) {
|
|
return fieldMetadataItem.name === 'avatarFile';
|
|
}
|
|
|
|
return (
|
|
fieldMetadataItem.id === objectMetadataItem.imageIdentifierFieldMetadataId
|
|
);
|
|
};
|