11import { isObject } from '@sniptt/guards' ;
22
3- import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem' ;
43import {
54 FieldMetadataType ,
65 type ActorFilter ,
@@ -29,7 +28,6 @@ import {
2928 type UUIDFilter ,
3029} from 'twenty-shared/types' ;
3130import {
32- computeMorphRelationFieldName ,
3331 isDefined ,
3432 isEmptyObject ,
3533 isMatchingArrayFilter ,
@@ -46,7 +44,10 @@ import {
4644 isMatchingTSVectorFilter ,
4745 isMatchingUUIDFilter ,
4846} from 'twenty-shared/utils' ;
47+
4948import { 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
5152const isLeafFilter = (
5253 filter : RecordGqlOperationFilter ,
@@ -61,31 +62,25 @@ const isAndFilter = (
6162const 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
9186const 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