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:
Paul Rastoin
2025-09-09 12:47:07 +02:00
committed by GitHub
parent ef68236735
commit 861cb1c222
3 changed files with 84 additions and 67 deletions
@@ -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];
};