fix(server): morph relation fields filtering (#14365)
Tested: object metadata items retrieval and standard overrides Please be sure to cache flush before testing this for the data loader to be hit
This commit is contained in:
+51
-14
@@ -1,16 +1,53 @@
|
||||
import { transpileToDateIfNot } from 'src/utils/transpile-to-date-if-not.util';
|
||||
import { FieldMetadataType } from 'twenty-shared/types';
|
||||
|
||||
export const filterMorphRelationDuplicateFields = <
|
||||
T extends { createdAt: Date; morphId: string | null },
|
||||
>(
|
||||
fields: T[],
|
||||
) => {
|
||||
return fields.filter((currentField) => {
|
||||
return !fields.some(
|
||||
(otherField) =>
|
||||
otherField.morphId === currentField.morphId &&
|
||||
transpileToDateIfNot(otherField.createdAt).getTime() >
|
||||
transpileToDateIfNot(currentField.createdAt).getTime(),
|
||||
);
|
||||
});
|
||||
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||
import { isFlatFieldMetadataOfType } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-of-type.util';
|
||||
|
||||
export const filterMorphRelationDuplicateFields = (
|
||||
flatFieldMetadatas: FlatFieldMetadata[],
|
||||
): FlatFieldMetadata[] => {
|
||||
const initialAccumulator: {
|
||||
morphFlatFieldMetadatas: FlatFieldMetadata<FieldMetadataType.MORPH_RELATION>[];
|
||||
otherFlatFieldMetadatas: FlatFieldMetadata[];
|
||||
} = {
|
||||
morphFlatFieldMetadatas: [],
|
||||
otherFlatFieldMetadatas: [],
|
||||
};
|
||||
const { morphFlatFieldMetadatas, otherFlatFieldMetadatas } =
|
||||
flatFieldMetadatas.reduce((acc, flatFieldMetadata) => {
|
||||
if (
|
||||
isFlatFieldMetadataOfType(
|
||||
flatFieldMetadata,
|
||||
FieldMetadataType.MORPH_RELATION,
|
||||
)
|
||||
) {
|
||||
return {
|
||||
...acc,
|
||||
morphFlatFieldMetadatas: [
|
||||
...acc.morphFlatFieldMetadatas,
|
||||
flatFieldMetadata,
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
...acc,
|
||||
otherFlatFieldMetadatas: [
|
||||
...acc.otherFlatFieldMetadatas,
|
||||
flatFieldMetadata,
|
||||
],
|
||||
};
|
||||
}, initialAccumulator);
|
||||
|
||||
const filteredMorphFlatFieldMetadatas = morphFlatFieldMetadatas.filter(
|
||||
(currentField) =>
|
||||
!morphFlatFieldMetadatas.some(
|
||||
(otherField) =>
|
||||
currentField.id !== otherField.id &&
|
||||
otherField.morphId === currentField.morphId &&
|
||||
otherField.id < currentField.id,
|
||||
),
|
||||
);
|
||||
|
||||
return [...otherFlatFieldMetadatas, ...filteredMorphFlatFieldMetadatas];
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user