Fix filters + add behaviour for select (#13997)

On field selection, we need to retrieve the fieldMetadata to set the
filter type. Current code was using the current step filter
fieldMetdataId instead of the new one.

Also adding a special behaviour for Select filter: it behaves as
arrays/multiselect but the opearands are not the same.

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
Thomas Trompette
2025-08-20 17:14:31 +02:00
committed by GitHub
parent f9abea2387
commit 4b66e8021a
17 changed files with 287 additions and 146 deletions
@@ -0,0 +1,24 @@
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { getFieldMetadataItemByIdOrThrow } from '@/object-metadata/utils/getFieldMetadataItemByIdOrThrow';
type GetFieldMetadataItemByIdParams = {
fieldMetadataId: string;
objectMetadataItems: ObjectMetadataItem[];
};
export const getFieldMetadataItemById = ({
fieldMetadataId,
objectMetadataItems,
}: GetFieldMetadataItemByIdParams) => {
try {
return getFieldMetadataItemByIdOrThrow({
fieldMetadataId,
objectMetadataItems,
});
} catch {
return {
fieldMetadataItem: undefined,
objectMetadataItem: undefined,
};
}
};
@@ -0,0 +1,43 @@
import { CustomError } from '@/error-handler/CustomError';
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { isDefined } from 'twenty-shared/utils';
type GetFieldMetadataItemByIdParams = {
fieldMetadataId: string;
objectMetadataItems: ObjectMetadataItem[];
};
const FIELD_METADATA_ITEM_NOT_FOUND_ERROR_CODE =
'FIELD_METADATA_ITEM_NOT_FOUND';
export const getFieldMetadataItemByIdOrThrow = ({
fieldMetadataId,
objectMetadataItems,
}: GetFieldMetadataItemByIdParams) => {
const objectMetadataItem = objectMetadataItems.find((objectMetadataItem) =>
objectMetadataItem.fields.some((field) => field.id === fieldMetadataId),
);
if (!isDefined(objectMetadataItem)) {
throw new CustomError(
`Object metadata item not found for field id ${fieldMetadataId}`,
FIELD_METADATA_ITEM_NOT_FOUND_ERROR_CODE,
);
}
const fieldMetadataItem = objectMetadataItem.fields.find(
(field) => field.id === fieldMetadataId,
);
if (!isDefined(fieldMetadataItem)) {
throw new CustomError(
`Field metadata item not found for field id ${fieldMetadataId}`,
FIELD_METADATA_ITEM_NOT_FOUND_ERROR_CODE,
);
}
return {
fieldMetadataItem,
objectMetadataItem,
};
};