refactor: rename ObjectMetadataItem to EnrichedObjectMetadataItem and clean up metadata flows (#18830)
## 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)
This commit is contained in:
+9
-7
@@ -1,14 +1,16 @@
|
||||
import { type ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
|
||||
import { generatedMockObjectMetadataItems } from '~/testing/utils/generatedMockObjectMetadataItems';
|
||||
import { getTestEnrichedObjectMetadataItemsMock } from '~/testing/utils/getTestEnrichedObjectMetadataItemsMock';
|
||||
import { getFieldPreviewValueFromRecord } from '@/settings/data-model/utils/getFieldPreviewValueFromRecord';
|
||||
const mockedCompanyObjectMetadataItem = generatedMockObjectMetadataItems.find(
|
||||
(item) => item.nameSingular === 'company',
|
||||
);
|
||||
const mockedCompanyObjectMetadataItem =
|
||||
getTestEnrichedObjectMetadataItemsMock().find(
|
||||
(item) => item.nameSingular === 'company',
|
||||
);
|
||||
|
||||
const mockedPersonObjectMetadataItem = generatedMockObjectMetadataItems.find(
|
||||
(item) => item.nameSingular === 'person',
|
||||
);
|
||||
const mockedPersonObjectMetadataItem =
|
||||
getTestEnrichedObjectMetadataItemsMock().find(
|
||||
(item) => item.nameSingular === 'person',
|
||||
);
|
||||
|
||||
describe('getFieldPreviewValueFromRecord', () => {
|
||||
describe('RELATION field', () => {
|
||||
|
||||
+5
-3
@@ -1,8 +1,8 @@
|
||||
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { type EnrichedObjectMetadataItem } from '@/object-metadata/types/EnrichedObjectMetadataItem';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
type GetConflictingObjectMetadataItemParams = {
|
||||
objectMetadataItems: ObjectMetadataItem[];
|
||||
objectMetadataItems: EnrichedObjectMetadataItem[];
|
||||
nameSingular?: string;
|
||||
namePlural?: string;
|
||||
excludeObjectId?: string;
|
||||
@@ -13,7 +13,9 @@ export const getConflictingObjectMetadataItem = ({
|
||||
nameSingular,
|
||||
namePlural,
|
||||
excludeObjectId,
|
||||
}: GetConflictingObjectMetadataItemParams): ObjectMetadataItem | undefined => {
|
||||
}: GetConflictingObjectMetadataItemParams):
|
||||
| EnrichedObjectMetadataItem
|
||||
| undefined => {
|
||||
if (!isDefined(nameSingular) && !isDefined(namePlural)) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,11 +1,11 @@
|
||||
import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
|
||||
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { type EnrichedObjectMetadataItem } from '@/object-metadata/types/EnrichedObjectMetadataItem';
|
||||
import { isLabelIdentifierField } from '@/object-metadata/utils/isLabelIdentifierField';
|
||||
import { type FieldIdentifierType } from '@/settings/data-model/types/FieldIdentifierType';
|
||||
|
||||
export const getFieldIdentifierType = (
|
||||
activeFieldMetadatItem: FieldMetadataItem,
|
||||
activeObjectMetadataItem: ObjectMetadataItem,
|
||||
activeObjectMetadataItem: EnrichedObjectMetadataItem,
|
||||
): FieldIdentifierType | undefined => {
|
||||
const fieldIsLabelIdentifier = isLabelIdentifierField({
|
||||
fieldMetadataItem: activeFieldMetadatItem,
|
||||
|
||||
Reference in New Issue
Block a user