Improve object metadata maps size (#8635)
## Context The object metadata map is becoming quite large and its structure could be simplified. We are removing byNameSingular/byNamePlural keys, the former can be retrieved through a new helper and the latter is not used in the code base currently.
This commit is contained in:
@ -2,6 +2,5 @@ import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/typ
|
||||
|
||||
export type ObjectMetadataMaps = {
|
||||
byId: Record<string, ObjectMetadataItemWithFieldMaps>;
|
||||
byNameSingular: Record<string, ObjectMetadataItemWithFieldMaps>;
|
||||
byNamePlural: Record<string, ObjectMetadataItemWithFieldMaps>;
|
||||
idByNameSingular: Record<string, string>;
|
||||
};
|
||||
|
||||
@ -0,0 +1,42 @@
|
||||
import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps';
|
||||
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
|
||||
import { getObjectMetadataMapItemByNameSingular } from 'src/engine/metadata-modules/utils/get-object-metadata-map-item-by-name-singular.util';
|
||||
|
||||
describe('getObjectMetadataMapItemByNameSingular', () => {
|
||||
it('should return the correct metadata item when given a valid singular name', () => {
|
||||
const mockMetadataItem = {
|
||||
id: 'test-id',
|
||||
nameSingular: 'company',
|
||||
} as ObjectMetadataItemWithFieldMaps;
|
||||
|
||||
const mockObjectMetadataMaps: ObjectMetadataMaps = {
|
||||
byId: {
|
||||
'test-id': mockMetadataItem,
|
||||
},
|
||||
idByNameSingular: {
|
||||
company: 'test-id',
|
||||
},
|
||||
};
|
||||
|
||||
const result = getObjectMetadataMapItemByNameSingular(
|
||||
mockObjectMetadataMaps,
|
||||
'company',
|
||||
);
|
||||
|
||||
expect(result).toBe(mockMetadataItem);
|
||||
});
|
||||
|
||||
it('should return undefined when the singular name does not exist', () => {
|
||||
const mockObjectMetadataMaps: ObjectMetadataMaps = {
|
||||
byId: {},
|
||||
idByNameSingular: {},
|
||||
};
|
||||
|
||||
const result = getObjectMetadataMapItemByNameSingular(
|
||||
mockObjectMetadataMaps,
|
||||
'nonexistent',
|
||||
);
|
||||
|
||||
expect(result).toBeUndefined();
|
||||
});
|
||||
});
|
||||
@ -9,8 +9,7 @@ export const generateObjectMetadataMaps = (
|
||||
): ObjectMetadataMaps => {
|
||||
const objectMetadataMaps: ObjectMetadataMaps = {
|
||||
byId: {},
|
||||
byNameSingular: {},
|
||||
byNamePlural: {},
|
||||
idByNameSingular: {},
|
||||
};
|
||||
|
||||
for (const objectMetadata of objectMetadataCollection) {
|
||||
@ -29,10 +28,8 @@ export const generateObjectMetadataMaps = (
|
||||
};
|
||||
|
||||
objectMetadataMaps.byId[objectMetadata.id] = processedObjectMetadata;
|
||||
objectMetadataMaps.byNameSingular[objectMetadata.nameSingular] =
|
||||
processedObjectMetadata;
|
||||
objectMetadataMaps.byNamePlural[objectMetadata.namePlural] =
|
||||
processedObjectMetadata;
|
||||
objectMetadataMaps.idByNameSingular[objectMetadata.nameSingular] =
|
||||
objectMetadata.id;
|
||||
}
|
||||
|
||||
return objectMetadataMaps;
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps';
|
||||
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
|
||||
|
||||
export const getObjectMetadataMapItemByNameSingular = (
|
||||
objectMetadataMaps: ObjectMetadataMaps,
|
||||
nameSingular: string,
|
||||
): ObjectMetadataItemWithFieldMaps | undefined => {
|
||||
return objectMetadataMaps.byId[
|
||||
objectMetadataMaps.idByNameSingular[nameSingular]
|
||||
];
|
||||
};
|
||||
Reference in New Issue
Block a user