FlatObjectMetadataMaps and non FP style refactor (#13590)
# Introduction - Retrieveing flat-object-metadata-maps for input transpilation, we decided not to introduce map merge for remaining validation operation for the moment - Refactored the field metadata service v2 to sequentially optimistically render on each iteration
This commit is contained in:
+14
-25
@@ -1,7 +1,7 @@
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { fromArrayToValuesByKeyRecord, isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||
import { mergeTwoFlatFieldMetadatas } from 'src/engine/metadata-modules/flat-field-metadata/utils/merge-two-flat-field-metadatas.util';
|
||||
import { mergeFlatFieldMetadatasInFlatObjectMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/merge-flat-field-metadatas-in-flat-object-metadata.util';
|
||||
import { FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
|
||||
|
||||
type DispatchAndMergeFlatFieldMetadatasInFlatObjectMetadatasArgs = {
|
||||
@@ -12,23 +12,15 @@ export const dispatchAndMergeFlatFieldMetadatasInFlatObjectMetadatas = ({
|
||||
flatFieldMetadatas,
|
||||
flatObjectMetadatas,
|
||||
}: DispatchAndMergeFlatFieldMetadatasInFlatObjectMetadatasArgs): FlatObjectMetadata[] => {
|
||||
const initialAccumulator: Record<string, FlatFieldMetadata[]> = {};
|
||||
if (flatFieldMetadatas.length === 0) {
|
||||
return flatObjectMetadatas;
|
||||
}
|
||||
|
||||
const flatFieldMetadataGroupedByFlatObjectMetadataId =
|
||||
flatFieldMetadatas.reduce((acc, flatFieldMetadata) => {
|
||||
const { objectMetadataId } = flatFieldMetadata;
|
||||
const occurrence = acc[objectMetadataId];
|
||||
|
||||
if (isDefined(occurrence)) {
|
||||
return {
|
||||
...acc,
|
||||
[objectMetadataId]: [...occurrence, flatFieldMetadata],
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
[flatFieldMetadata.objectMetadataId]: [flatFieldMetadata],
|
||||
};
|
||||
}, initialAccumulator);
|
||||
fromArrayToValuesByKeyRecord({
|
||||
array: flatFieldMetadatas,
|
||||
key: 'objectMetadataId',
|
||||
});
|
||||
|
||||
return flatObjectMetadatas.map((flatObjectMetadata) => {
|
||||
const toMergeFlatFieldMetadatas =
|
||||
@@ -38,12 +30,9 @@ export const dispatchAndMergeFlatFieldMetadatasInFlatObjectMetadatas = ({
|
||||
return flatObjectMetadata;
|
||||
}
|
||||
|
||||
return {
|
||||
...flatObjectMetadata,
|
||||
flatFieldMetadatas: mergeTwoFlatFieldMetadatas({
|
||||
destFlatFieldMetadatas: flatObjectMetadata.flatFieldMetadatas,
|
||||
toMergeFlatFieldMetadatas,
|
||||
}),
|
||||
};
|
||||
return mergeFlatFieldMetadatasInFlatObjectMetadata({
|
||||
flatFieldMetadatas: toMergeFlatFieldMetadatas,
|
||||
flatObjectMetadata,
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
import { removePropertiesFromRecord } from 'twenty-shared/utils';
|
||||
|
||||
import { FlatObjectMetadataWithFlatFieldMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-with-flat-field-metadata-maps.type';
|
||||
import { FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
|
||||
|
||||
export const fromFlatObjectMetadataWithFlatFieldMapsToFlatObjectMetadata = (
|
||||
flatObjectMetadataWithFlatFieldMaps: FlatObjectMetadataWithFlatFieldMaps,
|
||||
): FlatObjectMetadata => {
|
||||
return removePropertiesFromRecord(flatObjectMetadataWithFlatFieldMaps, [
|
||||
'fieldsById',
|
||||
'fieldIdByName',
|
||||
'fieldIdByJoinColumnName',
|
||||
]);
|
||||
};
|
||||
+8
-22
@@ -3,30 +3,16 @@ import { isDefined } from 'twenty-shared/utils';
|
||||
import { FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
|
||||
import { fromObjectMetadataItemWithFieldMapsToFlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/utils/from-object-metadata-item-with-field-maps-to-flat-object-metadata.util';
|
||||
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
|
||||
import {
|
||||
WorkspaceMetadataCacheException,
|
||||
WorkspaceMetadataCacheExceptionCode,
|
||||
} from 'src/engine/metadata-modules/workspace-metadata-cache/exceptions/workspace-metadata-cache.exception';
|
||||
|
||||
export const fromObjectMetadataMapsToFlatObjectMetadatas = (
|
||||
objectMetadataMaps: ObjectMetadataMaps,
|
||||
): FlatObjectMetadata[] => {
|
||||
const objectMetadataIds = Object.keys(objectMetadataMaps.byId);
|
||||
|
||||
return objectMetadataIds.flatMap<FlatObjectMetadata>((objectMetadataId) => {
|
||||
const objectMetadataItemWithFieldMaps =
|
||||
objectMetadataMaps.byId[objectMetadataId];
|
||||
|
||||
if (!isDefined(objectMetadataItemWithFieldMaps)) {
|
||||
throw new WorkspaceMetadataCacheException(
|
||||
'Object metadata not found in cache',
|
||||
WorkspaceMetadataCacheExceptionCode.OBJECT_METADATA_MAP_NOT_FOUND,
|
||||
);
|
||||
}
|
||||
|
||||
return fromObjectMetadataItemWithFieldMapsToFlatObjectMetadata({
|
||||
objectMetadataItemWithFieldMaps,
|
||||
objectMetadataMaps,
|
||||
});
|
||||
});
|
||||
return Object.values(objectMetadataMaps.byId)
|
||||
.filter(isDefined)
|
||||
.map((objectMetadataItemWithFieldMaps) =>
|
||||
fromObjectMetadataItemWithFieldMapsToFlatObjectMetadata({
|
||||
objectMetadataItemWithFieldMaps,
|
||||
objectMetadataMaps,
|
||||
}),
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user