Skip to content

Commit f208fa2

Browse files
committed
refactor: simplify morph relation join column check
- Rename doesMorphRelationJoinColumnMatch to isMorphRelationJoinColumnKey - Reuse existing computePossibleMorphGqlFieldForFieldName utility - Fix inconsistency: use morphRelation.type instead of settings.relationType - Organize imports properly
1 parent 6f854de commit f208fa2

File tree

1 file changed

+18
-23
lines changed

1 file changed

+18
-23
lines changed

packages/twenty-front/src/modules/object-record/record-filter/utils/isRecordMatchingFilter.ts

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { isObject } from '@sniptt/guards';
22

3-
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
43
import {
54
FieldMetadataType,
65
type ActorFilter,
@@ -29,7 +28,6 @@ import {
2928
type UUIDFilter,
3029
} from 'twenty-shared/types';
3130
import {
32-
computeMorphRelationFieldName,
3331
isDefined,
3432
isEmptyObject,
3533
isMatchingArrayFilter,
@@ -46,7 +44,10 @@ import {
4644
isMatchingTSVectorFilter,
4745
isMatchingUUIDFilter,
4846
} from 'twenty-shared/utils';
47+
4948
import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
49+
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
50+
import { computePossibleMorphGqlFieldForFieldName } from '@/object-record/cache/utils/computePossibleMorphGqlFieldForFieldName';
5051

5152
const isLeafFilter = (
5253
filter: RecordGqlOperationFilter,
@@ -61,31 +62,25 @@ const isAndFilter = (
6162
const isImplicitAndFilter = (filter: RecordGqlOperationFilter) =>
6263
Object.keys(filter).length > 1;
6364

64-
const doesMorphRelationJoinColumnMatch = ({
65+
const isMorphRelationJoinColumnKey = ({
6566
fieldMetadataItem,
66-
filterKey,
67+
key,
6768
}: {
6869
fieldMetadataItem: FieldMetadataItem;
69-
filterKey: string;
70+
key: string;
7071
}): boolean => {
71-
if (!isDefined(fieldMetadataItem.settings?.relationType)) {
72+
if (!fieldMetadataItem.morphRelations?.length) {
7273
return false;
7374
}
7475

75-
const morphRelations = fieldMetadataItem.morphRelations ?? [];
76-
77-
return morphRelations.some((morphRelation) => {
78-
const relationFieldName = computeMorphRelationFieldName({
76+
const possibleJoinColumnNames = computePossibleMorphGqlFieldForFieldName({
77+
fieldMetadata: {
78+
morphRelations: fieldMetadataItem.morphRelations,
7979
fieldName: fieldMetadataItem.name,
80-
relationType: fieldMetadataItem.settings?.relationType,
81-
targetObjectMetadataNameSingular:
82-
morphRelation.targetObjectMetadata.nameSingular,
83-
targetObjectMetadataNamePlural:
84-
morphRelation.targetObjectMetadata.namePlural,
85-
});
86-
87-
return `${relationFieldName}Id` === filterKey;
88-
});
80+
},
81+
}).map((name) => `${name}Id`);
82+
83+
return possibleJoinColumnNames.includes(key);
8984
};
9085

9186
const isOrFilter = (
@@ -211,9 +206,9 @@ export const isRecordMatchingFilter = ({
211206
objectMetadataItem.fields.find(
212207
(field) =>
213208
field.type === FieldMetadataType.MORPH_RELATION &&
214-
doesMorphRelationJoinColumnMatch({
209+
isMorphRelationJoinColumnKey({
215210
fieldMetadataItem: field,
216-
filterKey,
211+
key: filterKey,
217212
}),
218213
);
219214

@@ -409,9 +404,9 @@ export const isRecordMatchingFilter = ({
409404
const isJoinColumn =
410405
objectMetadataField.settings?.joinColumnName === filterKey ||
411406
(objectMetadataField.type === FieldMetadataType.MORPH_RELATION &&
412-
doesMorphRelationJoinColumnMatch({
407+
isMorphRelationJoinColumnKey({
413408
fieldMetadataItem: objectMetadataField,
414-
filterKey,
409+
key: filterKey,
415410
}));
416411

417412
if (isJoinColumn) {

0 commit comments

Comments
 (0)