Remove filter definition (#10227)

This PR removes completely filter definition usage and states,
everything is now derived from fieldMetadataItem.
This commit is contained in:
Lucas Bordeau
2025-02-14 18:37:34 +01:00
committed by GitHub
parent 68db9a7a8c
commit 70e5cdfe83
51 changed files with 250 additions and 766 deletions

View File

@ -20,6 +20,15 @@ const baseDefinition = {
fieldName: 'fieldName',
};
const baseFieldMetadataItem = {
id: '05731f68-6e7a-4903-8374-c0b6a9063482',
createdAt: '2021-01-01',
updatedAt: '2021-01-01',
name: 'name',
label: 'Name',
type: FieldMetadataType.FULL_NAME,
};
describe('mapViewSortsToSorts', () => {
it('should map each ViewSort object to a corresponding Sort object', () => {
const viewSorts: ViewSort[] = [
@ -62,23 +71,12 @@ describe('mapViewFiltersToFilters', () => {
value: 'testValue',
displayValue: 'Test Display Value',
operand: ViewFilterOperand.Is,
definition: {
...baseDefinition,
type: 'FULL_NAME',
},
label: baseDefinition.label,
type: 'FULL_NAME',
positionInViewFilterGroup: undefined,
viewFilterGroupId: undefined,
label: baseFieldMetadataItem.label,
type: FieldMetadataType.FULL_NAME,
},
];
expect(
mapViewFiltersToFilters(viewFilters, [
{
...baseDefinition,
type: 'FULL_NAME',
},
]),
mapViewFiltersToFilters(viewFilters, [baseFieldMetadataItem]),
).toEqual(expectedFilters);
});
});

View File

@ -1,6 +1,6 @@
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { formatFieldMetadataItemsAsFilterDefinitions } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { formatFieldMetadataItemsAsSortDefinitions } from '@/object-metadata/utils/formatFieldMetadataItemsAsSortDefinitions';
import { turnSortsIntoOrderBy } from '@/object-record/object-sort-dropdown/utils/turnSortsIntoOrderBy';
import { RecordFilterValueDependencies } from '@/object-record/record-filter/types/RecordFilterValueDependencies';
@ -15,13 +15,11 @@ export const getQueryVariablesFromView = ({
view,
fieldMetadataItems,
objectMetadataItem,
isJsonFilterEnabled,
filterValueDependencies,
}: {
view: View | null | undefined;
fieldMetadataItems: FieldMetadataItem[];
objectMetadataItem: ObjectMetadataItem;
isJsonFilterEnabled: boolean;
filterValueDependencies: RecordFilterValueDependencies;
}) => {
if (!isDefined(view)) {
@ -33,18 +31,13 @@ export const getQueryVariablesFromView = ({
const { viewFilterGroups, viewFilters, viewSorts } = view;
const filterDefinitions = formatFieldMetadataItemsAsFilterDefinitions({
fields: fieldMetadataItems,
isJsonFilterEnabled,
});
const sortDefinitions = formatFieldMetadataItemsAsSortDefinitions({
fields: fieldMetadataItems,
});
const filter = computeViewRecordGqlOperationFilter(
filterValueDependencies,
mapViewFiltersToFilters(viewFilters, filterDefinitions),
mapViewFiltersToFilters(viewFilters, fieldMetadataItems),
objectMetadataItem?.fields ?? [],
viewFilterGroups ?? [],
);

View File

@ -1,21 +1,31 @@
import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { isDefined } from 'twenty-shared';
import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
import { getFilterTypeFromFieldType } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { ViewFilter } from '../types/ViewFilter';
export const mapViewFiltersToFilters = (
viewFilters: ViewFilter[],
availableFilterDefinitions: RecordFilterDefinition[],
availableFieldMetadataItems: FieldMetadataItem[],
): RecordFilter[] => {
return viewFilters
.map((viewFilter) => {
const availableFilterDefinition = availableFilterDefinitions.find(
(filterDefinition) =>
filterDefinition.fieldMetadataId === viewFilter.fieldMetadataId,
const availableFieldMetadataItem = availableFieldMetadataItems.find(
(fieldMetadataItem) =>
fieldMetadataItem.id === viewFilter.fieldMetadataId,
);
if (!availableFilterDefinition) return null;
if (!isDefined(availableFieldMetadataItem)) {
throw new Error(
`Field metadata item not found for view filter ${viewFilter.id} and field metadata id ${viewFilter.fieldMetadataId}`,
);
}
const filterType = getFilterTypeFromFieldType(
availableFieldMetadataItem.type,
);
return {
id: viewFilter.id,
@ -25,9 +35,8 @@ export const mapViewFiltersToFilters = (
operand: viewFilter.operand,
viewFilterGroupId: viewFilter.viewFilterGroupId,
positionInViewFilterGroup: viewFilter.positionInViewFilterGroup,
definition: viewFilter.definition ?? availableFilterDefinition,
label: viewFilter.definition?.label ?? availableFilterDefinition.label,
type: viewFilter.definition?.type ?? availableFilterDefinition.type,
label: availableFieldMetadataItem.label,
type: filterType,
};
})
.filter(isDefined);