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:
@@ -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,
|
||||
};
|
||||
}
|
||||
};
|
||||
+43
@@ -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,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user