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

@ -1,9 +1,6 @@
import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById';
import { availableFieldMetadataItemsForFilterFamilySelector } from '@/object-metadata/states/availableFieldMetadataItemsForFilterFamilySelector';
import {
formatFieldMetadataItemAsFilterDefinition,
getFilterTypeFromFieldType,
} from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { getFilterTypeFromFieldType } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { useUpsertCombinedViewFilterGroup } from '@/object-record/advanced-filter/hooks/useUpsertCombinedViewFilterGroup';
import { getRecordFilterOperands } from '@/object-record/record-filter/utils/getRecordFilterOperands';
import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
@ -85,10 +82,6 @@ export const AdvancedFilterAddFilterRuleSelect = ({
const defaultFieldMetadataItem = getDefaultFieldMetadataItem();
const defaultFilterDefinition = formatFieldMetadataItemAsFilterDefinition({
field: defaultFieldMetadataItem,
});
const filterType = getFilterTypeFromFieldType(
defaultFieldMetadataItem.type,
);
@ -100,11 +93,11 @@ export const AdvancedFilterAddFilterRuleSelect = ({
operand: getRecordFilterOperands({
filterType,
})[0],
definition: defaultFilterDefinition,
value: '',
displayValue: '',
viewFilterGroupId: viewFilterGroup.id,
positionInViewFilterGroup: newPositionInViewFilterGroup,
label: defaultFieldMetadataItem.label,
});
};
@ -127,10 +120,6 @@ export const AdvancedFilterAddFilterRuleSelect = ({
const defaultFieldMetadataItem = getDefaultFieldMetadataItem();
const defaultFilterDefinition = formatFieldMetadataItemAsFilterDefinition({
field: defaultFieldMetadataItem,
});
const filterType = getFilterTypeFromFieldType(
defaultFieldMetadataItem.type,
);
@ -142,11 +131,11 @@ export const AdvancedFilterAddFilterRuleSelect = ({
operand: getRecordFilterOperands({
filterType,
})[0],
definition: defaultFilterDefinition,
value: '',
displayValue: '',
viewFilterGroupId: newViewFilterGroup.id,
positionInViewFilterGroup: newPositionInViewFilterGroup,
label: defaultFieldMetadataItem.label,
});
};

View File

@ -1,7 +1,6 @@
import { useCurrentViewFilter } from '@/object-record/advanced-filter/hooks/useCurrentViewFilter';
import { ObjectFilterDropdownFilterInput } from '@/object-record/object-filter-dropdown/components/ObjectFilterDropdownFilterInput';
import { fieldMetadataItemIdUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemIdUsedInDropdownComponentState';
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { SelectControl } from '@/ui/input/components/SelectControl';
@ -23,10 +22,6 @@ export const AdvancedFilterViewFilterValueInput = ({
const isDisabled = !filter?.fieldMetadataId || !filter.operand;
const setFilterDefinitionUsedInDropdown = useSetRecoilComponentStateV2(
filterDefinitionUsedInDropdownComponentState,
);
const setFieldMetadataItemIdUsedInDropdown = useSetRecoilComponentStateV2(
fieldMetadataItemIdUsedInDropdownComponentState,
);
@ -64,7 +59,6 @@ export const AdvancedFilterViewFilterValueInput = ({
}
onOpen={() => {
setFieldMetadataItemIdUsedInDropdown(filter.fieldMetadataId);
setFilterDefinitionUsedInDropdown(filter.definition);
setSelectedOperandInDropdown(filter.operand);
setSelectedFilter(filter);
}}

View File

@ -1,4 +1,4 @@
import { useFilterDefinitionsFromFilterableFieldMetadataItems } from '@/object-record/record-filter/hooks/useFilterDefinitionsFromFilterableFieldMetadataItems';
import { useFilterableFieldMetadataItemsInRecordIndexContext } from '@/object-record/record-filter/hooks/useFilterableFieldMetadataItemsInRecordIndexContext';
import { useGetCurrentView } from '@/views/hooks/useGetCurrentView';
import { mapViewFiltersToFilters } from '@/views/utils/mapViewFiltersToFilters';
@ -7,8 +7,8 @@ export const useCurrentViewFilter = ({
}: {
viewFilterId?: string;
}) => {
const { filterDefinitions } =
useFilterDefinitionsFromFilterableFieldMetadataItems();
const { filterableFieldMetadataItems } =
useFilterableFieldMetadataItemsInRecordIndexContext();
const { currentViewWithCombinedFiltersAndSorts } = useGetCurrentView();
@ -20,7 +20,10 @@ export const useCurrentViewFilter = ({
return undefined;
}
const [filter] = mapViewFiltersToFilters([viewFilter], filterDefinitions);
const [filter] = mapViewFiltersToFilters(
[viewFilter],
filterableFieldMetadataItems,
);
return filter;
};

View File

@ -1,9 +1,6 @@
import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById';
import { availableFieldMetadataItemsForFilterFamilySelector } from '@/object-metadata/states/availableFieldMetadataItemsForFilterFamilySelector';
import {
formatFieldMetadataItemAsFilterDefinition,
getFilterTypeFromFieldType,
} from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { getFilterTypeFromFieldType } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { useUpsertCombinedViewFilterGroup } from '@/object-record/advanced-filter/hooks/useUpsertCombinedViewFilterGroup';
import { OBJECT_FILTER_DROPDOWN_ID } from '@/object-record/object-filter-dropdown/constants/ObjectFilterDropdownId';
import { getRecordFilterOperands } from '@/object-record/record-filter/utils/getRecordFilterOperands';
@ -110,10 +107,6 @@ export const AdvancedFilterButton = () => {
throw new Error('Missing default filter definition');
}
const filterDefinition = formatFieldMetadataItemAsFilterDefinition({
field: defaultFieldMetadataItem,
});
const filterType = getFilterTypeFromFieldType(
defaultFieldMetadataItem.type,
);
@ -126,10 +119,11 @@ export const AdvancedFilterButton = () => {
id: v4(),
fieldMetadataId: defaultFieldMetadataItem.id,
operand: firstOperand,
definition: filterDefinition,
value: '',
displayValue: '',
viewFilterGroupId: newViewFilterGroup.id,
type: getFilterTypeFromFieldType(defaultFieldMetadataItem.type),
label: defaultFieldMetadataItem.label,
});
}

View File

@ -3,7 +3,7 @@ import styled from '@emotion/styled';
import { useEffect, useState } from 'react';
import { v4 } from 'uuid';
import { formatFieldMetadataItemAsFilterDefinition } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { getFilterTypeFromFieldType } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { fieldMetadataItemUsedInDropdownComponentSelector } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemUsedInDropdownComponentSelector';
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
@ -72,18 +72,15 @@ export const ObjectFilterDropdownBooleanSelect = () => {
return;
}
const filterDefinition = formatFieldMetadataItemAsFilterDefinition({
field: fieldMetadataItemUsedInDropdown,
});
applyRecordFilter({
id: selectedFilter?.id ?? v4(),
definition: filterDefinition,
operand: selectedOperandInDropdown,
displayValue: value ? 'True' : 'False',
fieldMetadataId: fieldMetadataItemUsedInDropdown.id,
value: value.toString(),
viewFilterGroupId: selectedFilter?.viewFilterGroupId,
type: getFilterTypeFromFieldType(fieldMetadataItemUsedInDropdown.type),
label: fieldMetadataItemUsedInDropdown.label,
});
setSelectedValue(value);

View File

@ -1,6 +1,6 @@
import { v4 } from 'uuid';
import { formatFieldMetadataItemAsFilterDefinition } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { getFilterTypeFromFieldType } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { fieldMetadataItemUsedInDropdownComponentSelector } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemUsedInDropdownComponentSelector';
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
@ -49,13 +49,8 @@ export const ObjectFilterDropdownDateInput = () => {
if (!fieldMetadataItemUsedInDropdown || !selectedOperandInDropdown) return;
const filterDefinition = formatFieldMetadataItemAsFilterDefinition({
field: fieldMetadataItemUsedInDropdown,
});
applyRecordFilter({
id: selectedFilter?.id ? selectedFilter.id : v4(),
definition: filterDefinition,
fieldMetadataId: fieldMetadataItemUsedInDropdown.id,
value: newDate?.toISOString() ?? '',
operand: selectedOperandInDropdown,
@ -65,6 +60,8 @@ export const ObjectFilterDropdownDateInput = () => {
: newDate.toLocaleDateString()
: '',
viewFilterGroupId: selectedFilter?.viewFilterGroupId,
type: getFilterTypeFromFieldType(fieldMetadataItemUsedInDropdown.type),
label: fieldMetadataItemUsedInDropdown.label,
});
};
@ -77,10 +74,6 @@ export const ObjectFilterDropdownDateInput = () => {
) => {
if (!fieldMetadataItemUsedInDropdown || !selectedOperandInDropdown) return;
const filterDefinition = formatFieldMetadataItemAsFilterDefinition({
field: fieldMetadataItemUsedInDropdown,
});
const value = relativeDate
? computeVariableDateViewFilterValue(
relativeDate.direction,
@ -95,8 +88,9 @@ export const ObjectFilterDropdownDateInput = () => {
value,
operand: selectedOperandInDropdown,
displayValue: getRelativeDateDisplayValue(relativeDate),
definition: filterDefinition,
viewFilterGroupId: selectedFilter?.viewFilterGroupId,
type: getFilterTypeFromFieldType(fieldMetadataItemUsedInDropdown.type),
label: fieldMetadataItemUsedInDropdown.label,
});
};

View File

@ -6,7 +6,7 @@ import { useAdvancedFilterDropdown } from '@/object-record/advanced-filter/hooks
import { AdvancedFilterButton } from '@/object-record/object-filter-dropdown/components/AdvancedFilterButton';
import { ObjectFilterDropdownFilterSelectMenuItem } from '@/object-record/object-filter-dropdown/components/ObjectFilterDropdownFilterSelectMenuItem';
import { OBJECT_FILTER_DROPDOWN_ID } from '@/object-record/object-filter-dropdown/constants/ObjectFilterDropdownId';
import { useSelectFilterDefinitionUsedInDropdown } from '@/object-record/object-filter-dropdown/hooks/useSelectFilterDefinitionUsedInDropdown';
import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState';
import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext';
@ -23,7 +23,7 @@ import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
import { isDefined } from 'twenty-shared';
import { FeatureFlagKey } from '~/generated/graphql';
import { formatFieldMetadataItemAsFilterDefinition } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { useSelectFilterUsedInDropdown } from '@/object-record/object-filter-dropdown/hooks/useSelectFilterUsedInDropdown';
import { advancedFilterViewFilterIdComponentState } from '@/object-record/object-filter-dropdown/states/advancedFilterViewFilterIdComponentState';
import { fieldMetadataItemIdUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemIdUsedInDropdownComponentState';
import { FiltersHotkeyScope } from '@/object-record/object-filter-dropdown/types/FiltersHotkeyScope';
@ -124,8 +124,7 @@ export const ObjectFilterDropdownFilterSelect = ({
(fieldMetadataItem) => fieldMetadataItem.id,
);
const { selectFilterDefinitionUsedInDropdown } =
useSelectFilterDefinitionUsedInDropdown();
const { selectFilterUsedInDropdown } = useSelectFilterUsedInDropdown();
const setFieldMetadataItemIdUsedInDropdown = useSetRecoilComponentStateV2(
fieldMetadataItemIdUsedInDropdownComponentState,
@ -144,12 +143,8 @@ export const ObjectFilterDropdownFilterSelect = ({
resetSelectedItem();
const selectedFilterDefinition = formatFieldMetadataItemAsFilterDefinition({
field: selectedFieldMetadataItem,
});
selectFilterDefinitionUsedInDropdown({
filterDefinition: selectedFilterDefinition,
selectFilterUsedInDropdown({
fieldMetadataItemId,
});
setFieldMetadataItemIdUsedInDropdown(fieldMetadataItemId);

View File

@ -5,9 +5,7 @@ import { advancedFilterViewFilterGroupIdComponentState } from '@/object-record/o
import { advancedFilterViewFilterIdComponentState } from '@/object-record/object-filter-dropdown/states/advancedFilterViewFilterIdComponentState';
import { fieldMetadataItemIdUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemIdUsedInDropdownComponentState';
import { fieldMetadataItemUsedInDropdownComponentSelector } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemUsedInDropdownComponentSelector';
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
import { objectFilterDropdownFilterIsSelectedComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownFilterIsSelectedComponentState';
import { objectFilterDropdownFirstLevelFilterDefinitionComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownFirstLevelFilterDefinitionComponentState';
import { objectFilterDropdownIsSelectingCompositeFieldComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownIsSelectingCompositeFieldComponentState';
import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState';
import { objectFilterDropdownSubMenuFieldTypeComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSubMenuFieldTypeComponentState';
@ -17,7 +15,6 @@ import { getCompositeSubFieldLabel } from '@/object-record/object-filter-dropdow
import { getFilterableFieldTypeLabel } from '@/object-record/object-filter-dropdown/utils/getFilterableFieldTypeLabel';
import { getInitialFilterValue } from '@/object-record/object-filter-dropdown/utils/getInitialFilterValue';
import { useApplyRecordFilter } from '@/object-record/record-filter/hooks/useApplyRecordFilter';
import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { getRecordFilterOperands } from '@/object-record/record-filter/utils/getRecordFilterOperands';
import { SETTINGS_COMPOSITE_FIELD_TYPE_CONFIGS } from '@/settings/data-model/constants/SettingsCompositeFieldTypeConfigs';
import { DropdownMenuHeader } from '@/ui/layout/dropdown/components/DropdownMenuHeader';
@ -34,13 +31,6 @@ export const ObjectFilterDropdownFilterSelectCompositeFieldSubMenu = () => {
const { getIcon } = useIcons();
const [
objectFilterDropdownFirstLevelFilterDefinition,
setObjectFilterDropdownFirstLevelFilterDefinition,
] = useRecoilComponentStateV2(
objectFilterDropdownFirstLevelFilterDefinitionComponentState,
);
const fieldMetadataItemUsedInDropdown = useRecoilComponentValueV2(
fieldMetadataItemUsedInDropdownComponentSelector,
);
@ -65,10 +55,6 @@ export const ObjectFilterDropdownFilterSelectCompositeFieldSubMenu = () => {
objectFilterDropdownSubMenuFieldTypeComponentState,
);
const setFilterDefinitionUsedInDropdown = useSetRecoilComponentStateV2(
filterDefinitionUsedInDropdownComponentState,
);
const setFieldMetadataItemIdUsedInDropdown = useSetRecoilComponentStateV2(
fieldMetadataItemIdUsedInDropdownComponentState,
);
@ -100,14 +86,6 @@ export const ObjectFilterDropdownFilterSelectCompositeFieldSubMenu = () => {
subFieldName?: string | null | undefined,
) => {
if (isDefined(fieldMetadataItem)) {
const filterDefinition: RecordFilterDefinition = {
fieldMetadataId: fieldMetadataItem.id,
type: getFilterTypeFromFieldType(fieldMetadataItem.type),
label: fieldMetadataItem.label,
iconName: fieldMetadataItem.icon ?? '',
compositeFieldName: subFieldName ?? undefined,
};
if (
isDefined(advancedFilterViewFilterId) &&
isDefined(advancedFilterViewFilterGroupId)
@ -129,13 +107,13 @@ export const ObjectFilterDropdownFilterSelectCompositeFieldSubMenu = () => {
value,
operand,
displayValue,
definition: filterDefinition,
type: getFilterTypeFromFieldType(fieldMetadataItem.type),
label: fieldMetadataItem.label,
viewFilterGroupId: advancedFilterViewFilterGroupId,
subFieldName: subFieldName,
});
}
setFilterDefinitionUsedInDropdown(filterDefinition);
setFieldMetadataItemIdUsedInDropdown(fieldMetadataItem.id);
const type = getFilterTypeFromFieldType(fieldMetadataItem.type);
@ -157,17 +135,12 @@ export const ObjectFilterDropdownFilterSelectCompositeFieldSubMenu = () => {
const handleSubMenuBack = () => {
setFieldMetadataItemIdUsedInDropdown(null);
setFilterDefinitionUsedInDropdown(null);
setObjectFilterDropdownSubMenuFieldType(null);
setObjectFilterDropdownFirstLevelFilterDefinition(null);
setObjectFilterDropdownIsSelectingCompositeField(false);
setObjectFilterDropdownFilterIsSelected(false);
};
if (
!isDefined(objectFilterDropdownSubMenuFieldType) ||
!isDefined(objectFilterDropdownFirstLevelFilterDefinition)
) {
if (!isDefined(objectFilterDropdownSubMenuFieldType)) {
return null;
}

View File

@ -3,17 +3,13 @@ import { OBJECT_FILTER_DROPDOWN_ID } from '@/object-record/object-filter-dropdow
import { advancedFilterViewFilterIdComponentState } from '@/object-record/object-filter-dropdown/states/advancedFilterViewFilterIdComponentState';
import { fieldMetadataItemIdUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemIdUsedInDropdownComponentState';
import { objectFilterDropdownFilterIsSelectedComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownFilterIsSelectedComponentState';
import { objectFilterDropdownFirstLevelFilterDefinitionComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownFirstLevelFilterDefinitionComponentState';
import { objectFilterDropdownIsSelectingCompositeFieldComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownIsSelectingCompositeFieldComponentState';
import { objectFilterDropdownSubMenuFieldTypeComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSubMenuFieldTypeComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
import {
formatFieldMetadataItemAsFilterDefinition,
getFilterTypeFromFieldType,
} from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
import { getFilterTypeFromFieldType } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { isCompositeField } from '@/object-record/object-filter-dropdown/utils/isCompositeField';
import { getRecordFilterOperands } from '@/object-record/record-filter/utils/getRecordFilterOperands';
import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types/RelationPickerHotkeyScope';
@ -36,11 +32,6 @@ export const ObjectFilterDropdownFilterSelectMenuItem = ({
fieldMetadataItemIdUsedInDropdownComponentState,
);
const [, setObjectFilterDropdownFirstLevelFilterDefinition] =
useRecoilComponentStateV2(
objectFilterDropdownFirstLevelFilterDefinitionComponentState,
);
const [, setObjectFilterDropdownSubMenuFieldType] = useRecoilComponentStateV2(
objectFilterDropdownSubMenuFieldTypeComponentState,
);
@ -66,10 +57,6 @@ export const ObjectFilterDropdownFilterSelectMenuItem = ({
selectedOperandInDropdownComponentState,
);
const setFilterDefinitionUsedInDropdown = useSetRecoilComponentStateV2(
filterDefinitionUsedInDropdownComponentState,
);
const advancedFilterViewFilterId = useRecoilComponentValueV2(
advancedFilterViewFilterIdComponentState,
);
@ -85,12 +72,6 @@ export const ObjectFilterDropdownFilterSelectMenuItem = ({
setFieldMetadataItemIdUsedInDropdown(fieldMetadataItem.id);
const filterDefinition = formatFieldMetadataItemAsFilterDefinition({
field: fieldMetadataItem,
});
setFilterDefinitionUsedInDropdown(filterDefinition);
const filterType = getFilterTypeFromFieldType(fieldMetadataItem.type);
if (filterType === 'RELATION' || filterType === 'SELECT') {
@ -122,11 +103,6 @@ export const ObjectFilterDropdownFilterSelectMenuItem = ({
if (isCompositeField(filterType)) {
setObjectFilterDropdownSubMenuFieldType(filterType);
const filterDefinition = formatFieldMetadataItemAsFilterDefinition({
field: fieldMetadataItemToSelect,
});
setObjectFilterDropdownFirstLevelFilterDefinition(filterDefinition);
setFieldMetadataItemIdUsedInDropdown(fieldMetadataItemToSelect.id);
setObjectFilterDropdownIsSelectingCompositeField(true);
} else {

View File

@ -1,7 +1,7 @@
import { ChangeEvent, useCallback, useState } from 'react';
import { v4 } from 'uuid';
import { formatFieldMetadataItemAsFilterDefinition } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { getFilterTypeFromFieldType } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { fieldMetadataItemUsedInDropdownComponentSelector } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemUsedInDropdownComponentSelector';
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
@ -55,17 +55,16 @@ export const ObjectFilterDropdownNumberInput = () => {
setInputValue(newValue);
const filterDefinition = formatFieldMetadataItemAsFilterDefinition({
field: fieldMetadataItemUsedInDropdown,
});
applyRecordFilter({
id: selectedFilter?.id ? selectedFilter.id : v4(),
fieldMetadataId: fieldMetadataItemUsedInDropdown?.id ?? '',
value: newValue,
operand: selectedOperandInDropdown,
displayValue: newValue,
definition: filterDefinition,
type: getFilterTypeFromFieldType(
fieldMetadataItemUsedInDropdown.type,
),
label: fieldMetadataItemUsedInDropdown.label,
viewFilterGroupId: selectedFilter?.viewFilterGroupId,
});
}}

View File

@ -1,9 +1,6 @@
import { v4 } from 'uuid';
import {
formatFieldMetadataItemAsFilterDefinition,
getFilterTypeFromFieldType,
} from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { getFilterTypeFromFieldType } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { fieldMetadataItemUsedInDropdownComponentSelector } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemUsedInDropdownComponentSelector';
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
@ -68,17 +65,14 @@ export const ObjectFilterDropdownOperandSelect = () => {
setSelectedOperandInDropdown(newOperand);
if (isValuelessOperand && isDefined(fieldMetadataItemUsedInDropdown)) {
const filterDefinition = formatFieldMetadataItemAsFilterDefinition({
field: fieldMetadataItemUsedInDropdown,
});
applyRecordFilter({
id: v4(),
fieldMetadataId: fieldMetadataItemUsedInDropdown.id,
displayValue: '',
operand: newOperand,
value: '',
definition: filterDefinition,
type: getFilterTypeFromFieldType(fieldMetadataItemUsedInDropdown.type),
label: fieldMetadataItemUsedInDropdown.label,
});
return;
}
@ -98,17 +92,14 @@ export const ObjectFilterDropdownOperandSelect = () => {
selectedFilter.displayValue,
);
const filterDefinition = formatFieldMetadataItemAsFilterDefinition({
field: fieldMetadataItemUsedInDropdown,
});
applyRecordFilter({
id: selectedFilter.id ? selectedFilter.id : v4(),
fieldMetadataId: selectedFilter.fieldMetadataId,
displayValue,
operand: newOperand,
value,
definition: filterDefinition,
type: filterType,
label: fieldMetadataItemUsedInDropdown.label,
});
}
};

View File

@ -13,7 +13,7 @@ import { SelectableList } from '@/ui/layout/selectable-list/components/Selectabl
import { useSelectableListStates } from '@/ui/layout/selectable-list/hooks/internal/useSelectableListStates';
import { useSelectableList } from '@/ui/layout/selectable-list/hooks/useSelectableList';
import { formatFieldMetadataItemAsFilterDefinition } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { getFilterTypeFromFieldType } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { fieldMetadataItemUsedInDropdownComponentSelector } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemUsedInDropdownComponentSelector';
import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState';
import { objectFilterDropdownSelectedOptionValuesComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSelectedOptionValuesComponentState';
@ -134,13 +134,10 @@ export const ObjectFilterDropdownOptionSelect = () => {
? JSON.stringify(selectedOptions.map((option) => option.value))
: EMPTY_FILTER_VALUE;
const filterDefinition = formatFieldMetadataItemAsFilterDefinition({
field: fieldMetadataItemUsedInDropdown,
});
applyRecordFilter({
id: selectedFilter?.id ? selectedFilter.id : v4(),
definition: filterDefinition,
type: getFilterTypeFromFieldType(fieldMetadataItemUsedInDropdown.type),
label: fieldMetadataItemUsedInDropdown.label,
operand: selectedOperandInDropdown,
displayValue: filterDisplayValue,
fieldMetadataId: fieldMetadataItemUsedInDropdown.id,

View File

@ -8,7 +8,7 @@ import { RatingInput } from '@/ui/field/input/components/RatingInput';
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { formatFieldMetadataItemAsFilterDefinition } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { getFilterTypeFromFieldType } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { fieldMetadataItemUsedInDropdownComponentSelector } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemUsedInDropdownComponentSelector';
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
const convertFieldRatingValueToNumber = (
@ -59,18 +59,17 @@ export const ObjectFilterDropdownRatingInput = () => {
return;
}
const filterDefinition = formatFieldMetadataItemAsFilterDefinition({
field: fieldMetadataItemUsedInDropdown,
});
applyRecordFilter?.({
id: selectedFilter?.id ? selectedFilter.id : v4(),
fieldMetadataId: fieldMetadataItemUsedInDropdown.id,
value: convertFieldRatingValueToNumber(newValue),
operand: selectedOperandInDropdown,
displayValue: convertFieldRatingValueToNumber(newValue),
definition: filterDefinition,
viewFilterGroupId: selectedFilter?.viewFilterGroupId,
type: getFilterTypeFromFieldType(
fieldMetadataItemUsedInDropdown.type,
),
label: fieldMetadataItemUsedInDropdown.label,
});
}}
/>

View File

@ -1,12 +1,11 @@
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import {
formatFieldMetadataItemAsFilterDefinition,
getFilterTypeFromFieldType,
getRelationObjectMetadataNameSingular,
} from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { ObjectFilterDropdownRecordPinnedItems } from '@/object-record/object-filter-dropdown/components/ObjectFilterDropdownRecordPinnedItems';
import { CURRENT_WORKSPACE_MEMBER_SELECTABLE_ITEM_ID } from '@/object-record/object-filter-dropdown/constants/CurrentWorkspaceMemberSelectableItemId';
import { fieldMetadataItemUsedInDropdownComponentSelector } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemUsedInDropdownComponentSelector';
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState';
import { objectFilterDropdownSelectedRecordIdsComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSelectedRecordIdsComponentState';
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
@ -40,10 +39,6 @@ type ObjectFilterDropdownRecordSelectProps = {
export const ObjectFilterDropdownRecordSelect = ({
viewComponentId,
}: ObjectFilterDropdownRecordSelectProps) => {
const filterDefinitionUsedInDropdown = useRecoilComponentValueV2(
filterDefinitionUsedInDropdownComponentState,
);
const fieldMetadataItemUsedInFilterDropdown = useRecoilComponentValueV2(
fieldMetadataItemUsedInDropdownComponentSelector,
);
@ -182,10 +177,7 @@ export const ObjectFilterDropdownRecordSelect = ({
? `${selectedItemNames.length} ${objectLabelPlural.toLowerCase()}`
: selectedItemNames.join(', ');
if (
isDefined(filterDefinitionUsedInDropdown) &&
isDefined(selectedOperandInDropdown)
) {
if (isDefined(selectedOperandInDropdown)) {
const newFilterValue =
newSelectedRecordIds.length > 0 || newIsCurrentWorkspaceMemberSelected
? JSON.stringify({
@ -204,13 +196,12 @@ export const ObjectFilterDropdownRecordSelect = ({
const filterId = viewFilter?.id ?? v4();
const filterDefinition = formatFieldMetadataItemAsFilterDefinition({
field: fieldMetadataItemUsedInFilterDropdown,
});
applyRecordFilter({
id: selectedFilter?.id ? selectedFilter.id : filterId,
definition: filterDefinition,
type: getFilterTypeFromFieldType(
fieldMetadataItemUsedInFilterDropdown.type,
),
label: fieldMetadataItemUsedInFilterDropdown.label,
operand: selectedOperandInDropdown,
displayValue: filterDisplayValue,
fieldMetadataId: fieldMetadataItemUsedInFilterDropdown.id,

View File

@ -1,7 +1,7 @@
import { useState } from 'react';
import { v4 } from 'uuid';
import { formatFieldMetadataItemAsFilterDefinition } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { getFilterTypeFromFieldType } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { useEmptyRecordFilter } from '@/object-record/object-filter-dropdown/hooks/useEmptyRecordFilter';
import { fieldMetadataItemUsedInDropdownComponentSelector } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemUsedInDropdownComponentSelector';
import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState';
@ -130,13 +130,12 @@ export const ObjectFilterDropdownSourceSelect = ({
const filterId = viewFilter?.id ?? fieldId;
const filterDefinition = formatFieldMetadataItemAsFilterDefinition({
field: fieldMetadataItemUsedInFilterDropdown,
});
applyRecordFilter({
id: selectedFilter?.id ? selectedFilter.id : filterId,
definition: filterDefinition,
type: getFilterTypeFromFieldType(
fieldMetadataItemUsedInFilterDropdown.type,
),
label: fieldMetadataItemUsedInFilterDropdown.label,
operand: selectedOperandInDropdown || ViewFilterOperand.Is,
displayValue: filterDisplayValue,
fieldMetadataId: fieldMetadataItemUsedInFilterDropdown.id,

View File

@ -1,6 +1,6 @@
import { ChangeEvent, useCallback, useState } from 'react';
import { formatFieldMetadataItemAsFilterDefinition } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { getFilterTypeFromFieldType } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { fieldMetadataItemUsedInDropdownComponentSelector } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemUsedInDropdownComponentSelector';
import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState';
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
@ -58,18 +58,17 @@ export const ObjectFilterDropdownTextSearchInput = () => {
onChange={(event: ChangeEvent<HTMLInputElement>) => {
setObjectFilterDropdownSearchInput(event.target.value);
const filterDefinition = formatFieldMetadataItemAsFilterDefinition({
field: fieldMetadataItemUsedInDropdown,
});
applyRecordFilter({
id: selectedFilter?.id ?? v4(),
fieldMetadataId: fieldMetadataItemUsedInDropdown.id,
value: event.target.value,
operand: selectedOperandInDropdown,
displayValue: event.target.value,
definition: filterDefinition,
viewFilterGroupId: selectedFilter?.viewFilterGroupId,
type: getFilterTypeFromFieldType(
fieldMetadataItemUsedInDropdown.type,
),
label: fieldMetadataItemUsedInDropdown.label,
});
}}
/>

View File

@ -1,9 +1,6 @@
import {
formatFieldMetadataItemAsFilterDefinition,
getFilterTypeFromFieldType,
} from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { getFilterTypeFromFieldType } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { fieldMetadataItemIdUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemIdUsedInDropdownComponentState';
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { useFilterableFieldMetadataItemsInRecordIndexContext } from '@/object-record/record-filter/hooks/useFilterableFieldMetadataItemsInRecordIndexContext';
import { getRecordFilterOperands } from '@/object-record/record-filter/utils/getRecordFilterOperands';
@ -11,10 +8,6 @@ import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-sta
import { useEffect } from 'react';
export const SingleEntityObjectFilterDropdownButtonEffect = () => {
const setFilterDefinitionUsedInDropdown = useSetRecoilComponentStateV2(
filterDefinitionUsedInDropdownComponentState,
);
const setFieldMetadataItemIdUsedInDropdown = useSetRecoilComponentStateV2(
fieldMetadataItemIdUsedInDropdownComponentState,
);
@ -28,13 +21,8 @@ export const SingleEntityObjectFilterDropdownButtonEffect = () => {
const firstFieldMetadataItem = filterableFieldMetadataItems[0];
const firstFieldDefinition = formatFieldMetadataItemAsFilterDefinition({
field: firstFieldMetadataItem,
});
useEffect(() => {
setFieldMetadataItemIdUsedInDropdown(firstFieldMetadataItem.id);
setFilterDefinitionUsedInDropdown(firstFieldDefinition);
const filterType = getFilterTypeFromFieldType(firstFieldMetadataItem.type);
@ -43,8 +31,6 @@ export const SingleEntityObjectFilterDropdownButtonEffect = () => {
setSelectedOperandInDropdown(defaultOperand);
}, [
firstFieldMetadataItem,
firstFieldDefinition,
setFilterDefinitionUsedInDropdown,
setSelectedOperandInDropdown,
setFieldMetadataItemIdUsedInDropdown,
]);

View File

@ -1,4 +1,4 @@
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
import { fieldMetadataItemIdUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemIdUsedInDropdownComponentState';
import { objectFilterDropdownFilterIsSelectedComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownFilterIsSelectedComponentState';
import { objectFilterDropdownIsSelectingCompositeFieldComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownIsSelectingCompositeFieldComponentState';
import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState';
@ -15,6 +15,12 @@ export const useResetFilterDropdown = (componentInstanceId?: string) => {
componentInstanceId,
);
const fieldMetadataItemIdUsedInDropdownCallbackState =
useRecoilComponentCallbackStateV2(
fieldMetadataItemIdUsedInDropdownComponentState,
componentInstanceId,
);
const objectFilterDropdownSelectedRecordIdsCallbackState =
useRecoilComponentCallbackStateV2(
objectFilterDropdownSelectedRecordIdsComponentState,
@ -26,12 +32,6 @@ export const useResetFilterDropdown = (componentInstanceId?: string) => {
componentInstanceId,
);
const filterDefinitionUsedInDropdownCallbackState =
useRecoilComponentCallbackStateV2(
filterDefinitionUsedInDropdownComponentState,
componentInstanceId,
);
const selectedOperandInDropdownCallbackState =
useRecoilComponentCallbackStateV2(
selectedOperandInDropdownComponentState,
@ -56,19 +56,19 @@ export const useResetFilterDropdown = (componentInstanceId?: string) => {
set(objectFilterDropdownSearchInputCallbackState, '');
set(objectFilterDropdownSelectedRecordIdsCallbackState, []);
set(selectedFilterCallbackState, undefined);
set(filterDefinitionUsedInDropdownCallbackState, null);
set(selectedOperandInDropdownCallbackState, null);
set(objectFilterDropdownFilterIsSelectedCallbackState, false);
set(objectFilterDropdownIsSelectingCompositeFieldCallbackState, false);
set(fieldMetadataItemIdUsedInDropdownCallbackState, null);
},
[
filterDefinitionUsedInDropdownCallbackState,
objectFilterDropdownSearchInputCallbackState,
objectFilterDropdownSelectedRecordIdsCallbackState,
selectedFilterCallbackState,
selectedOperandInDropdownCallbackState,
objectFilterDropdownFilterIsSelectedCallbackState,
objectFilterDropdownIsSelectingCompositeFieldCallbackState,
fieldMetadataItemIdUsedInDropdownCallbackState,
],
);

View File

@ -1,11 +1,12 @@
import { useGetFieldMetadataItemById } from '@/object-metadata/hooks/useGetFieldMetadataItemById';
import { getFilterTypeFromFieldType } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { advancedFilterViewFilterGroupIdComponentState } from '@/object-record/object-filter-dropdown/states/advancedFilterViewFilterGroupIdComponentState';
import { advancedFilterViewFilterIdComponentState } from '@/object-record/object-filter-dropdown/states/advancedFilterViewFilterIdComponentState';
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
import { fieldMetadataItemIdUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemIdUsedInDropdownComponentState';
import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { getInitialFilterValue } from '@/object-record/object-filter-dropdown/utils/getInitialFilterValue';
import { useApplyRecordFilter } from '@/object-record/record-filter/hooks/useApplyRecordFilter';
import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { getRecordFilterOperands } from '@/object-record/record-filter/utils/getRecordFilterOperands';
import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types/RelationPickerHotkeyScope';
@ -16,19 +17,17 @@ import { isDefined } from 'twenty-shared';
import { v4 } from 'uuid';
type SelectFilterParams = {
filterDefinition: RecordFilterDefinition;
fieldMetadataItemId: string;
};
export const useSelectFilterDefinitionUsedInDropdown = (
componentInstanceId?: string,
) => {
const setFilterDefinitionUsedInDropdown = useSetRecoilComponentStateV2(
filterDefinitionUsedInDropdownComponentState,
export const useSelectFilterUsedInDropdown = (componentInstanceId?: string) => {
const setSelectedOperandInDropdown = useSetRecoilComponentStateV2(
selectedOperandInDropdownComponentState,
componentInstanceId,
);
const setSelectedOperandInDropdown = useSetRecoilComponentStateV2(
selectedOperandInDropdownComponentState,
const setFieldMetadataItemIdUsedInDropdown = useSetRecoilComponentStateV2(
fieldMetadataItemIdUsedInDropdownComponentState,
componentInstanceId,
);
@ -51,26 +50,36 @@ export const useSelectFilterDefinitionUsedInDropdown = (
const { applyRecordFilter } = useApplyRecordFilter(componentInstanceId);
const selectFilterDefinitionUsedInDropdown = ({
filterDefinition,
const { getFieldMetadataItemById } = useGetFieldMetadataItemById();
const selectFilterUsedInDropdown = ({
fieldMetadataItemId,
}: SelectFilterParams) => {
setFilterDefinitionUsedInDropdown(filterDefinition);
setFieldMetadataItemIdUsedInDropdown(fieldMetadataItemId);
const fieldMetadataItem = getFieldMetadataItemById(fieldMetadataItemId);
if (!isDefined(fieldMetadataItem)) {
return;
}
if (
filterDefinition.type === 'RELATION' ||
filterDefinition.type === 'SELECT'
fieldMetadataItem.type === 'RELATION' ||
fieldMetadataItem.type === 'SELECT'
) {
setHotkeyScope(RelationPickerHotkeyScope.RelationPicker);
}
const filterType = getFilterTypeFromFieldType(fieldMetadataItem.type);
const firstOperand = getRecordFilterOperands({
filterType: filterDefinition.type,
filterType,
})[0];
setSelectedOperandInDropdown(firstOperand);
const { value, displayValue } = getInitialFilterValue(
filterDefinition.type,
filterType,
firstOperand,
);
@ -79,12 +88,13 @@ export const useSelectFilterDefinitionUsedInDropdown = (
if (isAdvancedFilter || value !== '') {
applyRecordFilter({
id: advancedFilterViewFilterId ?? v4(),
fieldMetadataId: filterDefinition.fieldMetadataId,
fieldMetadataId: fieldMetadataItem.id,
displayValue,
operand: firstOperand,
value,
definition: filterDefinition,
viewFilterGroupId: advancedFilterViewFilterGroupId,
type: filterType,
label: fieldMetadataItem.label,
});
}
@ -92,6 +102,6 @@ export const useSelectFilterDefinitionUsedInDropdown = (
};
return {
selectFilterDefinitionUsedInDropdown,
selectFilterUsedInDropdown,
};
};

View File

@ -1,10 +0,0 @@
import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext';
import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2';
export const filterDefinitionUsedInDropdownComponentState =
createComponentStateV2<RecordFilterDefinition | null>({
key: 'filterDefinitionUsedInDropdownComponentState',
defaultValue: null,
componentInstanceContext: ObjectFilterDropdownComponentInstanceContext,
});

View File

@ -1,10 +0,0 @@
import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext';
import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2';
export const objectFilterDropdownFirstLevelFilterDefinitionComponentState =
createComponentStateV2<RecordFilterDefinition | null>({
key: 'objectFilterDropdownFirstLevelFilterDefinitionComponentState',
defaultValue: null,
componentInstanceContext: ObjectFilterDropdownComponentInstanceContext,
});

View File

@ -1,11 +0,0 @@
import { FieldActorValue } from '@/object-record/record-field/types/FieldMetadata';
import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
export const isActorSourceCompositeFilter = (
filterDefinition: Pick<RecordFilterDefinition, 'compositeFieldName'>,
) => {
return (
filterDefinition.compositeFieldName ===
('source' satisfies keyof FieldActorValue)
);
};

View File

@ -5,6 +5,7 @@ import { currentRecordFiltersComponentState } from '@/object-record/record-filte
import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';
import { FieldMetadataType } from '~/generated/graphql';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
import { useRemoveRecordFilter } from '../useRemoveRecordFilter';
import { useUpsertRecordFilter } from '../useUpsertRecordFilter';
@ -41,14 +42,8 @@ describe('useRemoveRecordFilter', () => {
value: 'test-value',
operand: ViewFilterOperand.Contains,
displayValue: 'test-value',
definition: {
type: 'TEXT',
fieldMetadataId: 'field-1',
label: 'Test Field',
iconName: 'IconText',
},
label: 'Test Field',
type: 'TEXT',
type: FieldMetadataType.TEXT,
};
// First add a filter
@ -92,14 +87,8 @@ describe('useRemoveRecordFilter', () => {
value: 'test-value',
operand: ViewFilterOperand.Contains,
displayValue: 'test-value',
definition: {
type: 'TEXT',
fieldMetadataId: 'field-1',
label: 'Test Field',
iconName: 'IconText',
},
label: 'Test Field',
type: 'TEXT',
type: FieldMetadataType.TEXT,
};
// Add a filter

View File

@ -5,6 +5,7 @@ import { currentRecordFiltersComponentState } from '@/object-record/record-filte
import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';
import { FieldMetadataType } from '~/generated/graphql';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
import { useUpsertRecordFilter } from '../useUpsertRecordFilter';
@ -35,14 +36,8 @@ describe('useUpsertRecordFilter', () => {
value: 'test-value',
operand: ViewFilterOperand.Contains,
displayValue: 'test-value',
definition: {
type: 'TEXT',
fieldMetadataId: 'field-1',
label: 'Test Field',
iconName: 'IconText',
},
label: 'Test Field',
type: 'TEXT',
type: FieldMetadataType.TEXT,
};
act(() => {
@ -75,14 +70,8 @@ describe('useUpsertRecordFilter', () => {
value: 'initial-value',
operand: ViewFilterOperand.Contains,
displayValue: 'initial-value',
definition: {
type: 'TEXT',
fieldMetadataId: 'field-1',
label: 'Test Field',
iconName: 'IconText',
},
label: 'Test Field',
type: 'TEXT',
type: FieldMetadataType.TEXT,
};
const updatedFilter: RecordFilter = {
@ -91,14 +80,8 @@ describe('useUpsertRecordFilter', () => {
value: 'updated-value',
operand: ViewFilterOperand.Contains,
displayValue: 'updated-value',
definition: {
type: 'TEXT',
fieldMetadataId: 'field-1',
label: 'Test Field',
iconName: 'IconText',
},
label: 'Test Field',
type: 'TEXT',
type: FieldMetadataType.TEXT,
};
act(() => {

View File

@ -1,23 +0,0 @@
import { availableFieldMetadataItemsForFilterFamilySelector } from '@/object-metadata/states/availableFieldMetadataItemsForFilterFamilySelector';
import { formatFieldMetadataItemAsFilterDefinition } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext';
import { useRecoilValue } from 'recoil';
export const useFilterDefinitionsFromFilterableFieldMetadataItems = () => {
const { objectMetadataItem } = useRecordIndexContextOrThrow();
const availableFieldMetadataItemsForFilter = useRecoilValue(
availableFieldMetadataItemsForFilterFamilySelector({
objectMetadataItemId: objectMetadataItem.id,
}),
);
const filterDefinitions = availableFieldMetadataItemsForFilter.map(
(fieldMetadataItem) =>
formatFieldMetadataItemAsFilterDefinition({
field: fieldMetadataItem,
}),
);
return { filterDefinitions };
};

View File

@ -11,20 +11,12 @@ export const useUpsertRecordFilter = () => {
const upsertRecordFilter = useRecoilCallback(
({ set, snapshot }) =>
(filter: RecordFilter) => {
(recordFilterToSet: RecordFilter) => {
const currentRecordFilters = getSnapshotValue(
snapshot,
currentRecordFiltersCallbackState,
);
// TODO: This is a temporary solution to ensure that the record filter is compatible with filter definitions
// Label and type will be set without definition
const recordFilterToSet: RecordFilter = {
...filter,
label: filter.definition.label,
type: filter.definition.type,
};
const foundRecordFilterInCurrentRecordFilters =
currentRecordFilters.some(
(existingFilter) =>

View File

@ -1,5 +1,4 @@
import { FilterableFieldType } from '@/object-record/record-filter/types/FilterableFieldType';
import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';
export type RecordFilter = {
@ -7,12 +6,11 @@ export type RecordFilter = {
fieldMetadataId: string;
value: string;
displayValue: string;
type?: FilterableFieldType;
type: FilterableFieldType;
viewFilterGroupId?: string;
displayAvatarUrl?: string;
operand: ViewFilterOperand;
positionInViewFilterGroup?: number | null;
definition: RecordFilterDefinition;
label?: string;
label: string;
subFieldName?: string | null | undefined;
};

View File

@ -1,9 +0,0 @@
import { FilterableFieldType } from './FilterableFieldType';
export type RecordFilterDefinition = {
fieldMetadataId: string;
label: string;
iconName: string;
type: FilterableFieldType;
compositeFieldName?: string;
};

View File

@ -3,6 +3,7 @@ import { RecordFilterOperand } from '@/object-record/record-filter/types/RecordF
import { RecordFilterValueDependencies } from '@/object-record/record-filter/types/RecordFilterValueDependencies';
import { computeViewRecordGqlOperationFilter } from '@/object-record/record-filter/utils/computeViewRecordGqlOperationFilter';
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';
import { FieldMetadataType } from '~/generated/graphql';
import { getCompaniesMock } from '~/testing/mock-data/companies';
import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
@ -37,12 +38,6 @@ describe('computeViewRecordGqlOperationFilter', () => {
operand: RecordFilterOperand.Contains,
type: 'TEXT',
label: 'Name',
definition: {
type: 'TEXT',
fieldMetadataId: companyMockNameFieldMetadataId?.id,
label: 'Name',
iconName: 'text',
},
};
const result = computeViewRecordGqlOperationFilter(
@ -76,12 +71,8 @@ describe('computeViewRecordGqlOperationFilter', () => {
fieldMetadataId: companyMockNameFieldMetadataId?.id,
displayValue: companiesMock[0].name,
operand: ViewFilterOperand.Contains,
definition: {
type: 'TEXT',
fieldMetadataId: companyMockNameFieldMetadataId?.id,
label: 'Name',
iconName: 'text',
},
type: FieldMetadataType.TEXT,
label: 'Name',
};
const employeesFilter: RecordFilter = {
@ -90,12 +81,8 @@ describe('computeViewRecordGqlOperationFilter', () => {
fieldMetadataId: companyMockEmployeesFieldMetadataId?.id,
displayValue: '1000',
operand: ViewFilterOperand.GreaterThan,
definition: {
type: 'NUMBER',
fieldMetadataId: companyMockEmployeesFieldMetadataId?.id,
label: 'Employees',
iconName: 'number',
},
type: FieldMetadataType.NUMBER,
label: 'Employees',
};
const result = computeViewRecordGqlOperationFilter(
@ -135,12 +122,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: companyMockAddressFieldMetadataId?.id,
displayValue: '123 Main St',
operand: ViewFilterOperand.Contains,
definition: {
type: 'ADDRESS',
fieldMetadataId: companyMockAddressFieldMetadataId?.id,
label: 'Address',
iconName: 'address',
},
type: FieldMetadataType.ADDRESS,
label: 'Address',
};
const addressFilterDoesNotContain: RecordFilter = {
@ -149,12 +132,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: companyMockAddressFieldMetadataId?.id,
displayValue: '123 Main St',
operand: ViewFilterOperand.DoesNotContain,
definition: {
type: 'ADDRESS',
fieldMetadataId: companyMockAddressFieldMetadataId?.id,
label: 'Address',
iconName: 'address',
},
type: FieldMetadataType.ADDRESS,
label: 'Address',
};
const addressFilterIsEmpty: RecordFilter = {
@ -163,12 +142,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: companyMockAddressFieldMetadataId?.id,
displayValue: '',
operand: ViewFilterOperand.IsEmpty,
definition: {
type: 'ADDRESS',
fieldMetadataId: companyMockAddressFieldMetadataId?.id,
label: 'Address',
iconName: 'address',
},
type: FieldMetadataType.ADDRESS,
label: 'Address',
};
const addressFilterIsNotEmpty: RecordFilter = {
@ -177,12 +152,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: companyMockAddressFieldMetadataId?.id,
displayValue: '',
operand: ViewFilterOperand.IsNotEmpty,
definition: {
type: 'ADDRESS',
fieldMetadataId: companyMockAddressFieldMetadataId?.id,
label: 'Address',
iconName: 'address',
},
label: 'Address',
type: FieldMetadataType.ADDRESS,
};
const result = computeViewRecordGqlOperationFilter(
@ -518,12 +489,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: personMockPhonesFieldMetadataId?.id,
displayValue: '1234567890',
operand: ViewFilterOperand.Contains,
definition: {
type: 'PHONES',
fieldMetadataId: personMockPhonesFieldMetadataId?.id,
label: 'Phones',
iconName: 'phone',
},
label: 'Phones',
type: FieldMetadataType.PHONES,
};
const phonesFilterDoesNotContain: RecordFilter = {
@ -532,12 +499,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: personMockPhonesFieldMetadataId?.id,
displayValue: '1234567890',
operand: ViewFilterOperand.DoesNotContain,
definition: {
type: 'PHONES',
fieldMetadataId: personMockPhonesFieldMetadataId?.id,
label: 'Phones',
iconName: 'phone',
},
label: 'Phones',
type: FieldMetadataType.PHONES,
};
const phonesFilterIsEmpty: RecordFilter = {
@ -546,12 +509,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: personMockPhonesFieldMetadataId?.id,
displayValue: '',
operand: ViewFilterOperand.IsEmpty,
definition: {
type: 'PHONES',
fieldMetadataId: personMockPhonesFieldMetadataId?.id,
label: 'Phones',
iconName: 'phone',
},
label: 'Phones',
type: FieldMetadataType.PHONES,
};
const phonesFilterIsNotEmpty: RecordFilter = {
@ -560,12 +519,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: personMockPhonesFieldMetadataId?.id,
displayValue: '',
operand: ViewFilterOperand.IsNotEmpty,
definition: {
type: 'PHONES',
fieldMetadataId: personMockPhonesFieldMetadataId?.id,
label: 'Phones',
iconName: 'phone',
},
label: 'Phones',
type: FieldMetadataType.PHONES,
};
const result = computeViewRecordGqlOperationFilter(
@ -668,12 +623,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: personMockEmailFieldMetadataId?.id,
displayValue: 'test@test.com',
operand: ViewFilterOperand.Contains,
definition: {
type: 'EMAILS',
fieldMetadataId: personMockEmailFieldMetadataId?.id,
iconName: 'email',
label: 'Emails',
},
label: 'Emails',
type: FieldMetadataType.EMAILS,
};
const emailsFilterDoesNotContain: RecordFilter = {
@ -682,12 +633,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: personMockEmailFieldMetadataId?.id,
displayValue: 'test@test.com',
operand: ViewFilterOperand.DoesNotContain,
definition: {
type: 'EMAILS',
fieldMetadataId: personMockEmailFieldMetadataId?.id,
label: 'Emails',
iconName: 'email',
},
label: 'Emails',
type: FieldMetadataType.EMAILS,
};
const emailsFilterIsEmpty: RecordFilter = {
@ -696,12 +643,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: personMockEmailFieldMetadataId?.id,
displayValue: '',
operand: ViewFilterOperand.IsEmpty,
definition: {
type: 'EMAILS',
label: 'Emails',
iconName: 'email',
fieldMetadataId: personMockEmailFieldMetadataId?.id,
},
label: 'Emails',
type: FieldMetadataType.EMAILS,
};
const emailsFilterIsNotEmpty: RecordFilter = {
@ -710,12 +653,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: personMockEmailFieldMetadataId?.id,
displayValue: '',
operand: ViewFilterOperand.IsNotEmpty,
definition: {
type: 'EMAILS',
label: 'Emails',
iconName: 'email',
fieldMetadataId: personMockEmailFieldMetadataId?.id,
},
label: 'Emails',
type: FieldMetadataType.EMAILS,
};
const result = computeViewRecordGqlOperationFilter(
@ -810,12 +749,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: companyMockDateFieldMetadataId?.id,
displayValue: '2024-09-17T20:46:58.922Z',
operand: ViewFilterOperand.IsAfter,
definition: {
type: 'DATE_TIME',
fieldMetadataId: companyMockDateFieldMetadataId?.id,
label: 'Created At',
iconName: 'date',
},
label: 'Created At',
type: FieldMetadataType.DATE_TIME,
};
const dateFilterIsBefore: RecordFilter = {
@ -824,12 +759,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: companyMockDateFieldMetadataId?.id,
displayValue: '2024-09-17T20:46:58.922Z',
operand: ViewFilterOperand.IsBefore,
definition: {
type: 'DATE_TIME',
fieldMetadataId: companyMockDateFieldMetadataId?.id,
label: 'Created At',
iconName: 'date',
},
label: 'Created At',
type: FieldMetadataType.DATE_TIME,
};
const dateFilterIs: RecordFilter = {
@ -838,12 +769,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: companyMockDateFieldMetadataId?.id,
displayValue: '2024-09-17T20:46:58.922Z',
operand: ViewFilterOperand.Is,
definition: {
type: 'DATE_TIME',
fieldMetadataId: companyMockDateFieldMetadataId?.id,
label: 'Created At',
iconName: 'date',
},
label: 'Created At',
type: FieldMetadataType.DATE_TIME,
};
const dateFilterIsEmpty: RecordFilter = {
@ -852,12 +779,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: companyMockDateFieldMetadataId?.id,
displayValue: '',
operand: ViewFilterOperand.IsEmpty,
definition: {
type: 'DATE_TIME',
fieldMetadataId: companyMockDateFieldMetadataId?.id,
label: 'Created At',
iconName: 'date',
},
label: 'Created At',
type: FieldMetadataType.DATE_TIME,
};
const dateFilterIsNotEmpty: RecordFilter = {
@ -866,12 +789,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: companyMockDateFieldMetadataId?.id,
displayValue: '',
operand: ViewFilterOperand.IsNotEmpty,
definition: {
type: 'DATE_TIME',
fieldMetadataId: companyMockDateFieldMetadataId?.id,
label: 'Created At',
iconName: 'date',
},
label: 'Created At',
type: FieldMetadataType.DATE_TIME,
};
const result = computeViewRecordGqlOperationFilter(
@ -941,12 +860,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: companyMockEmployeesFieldMetadataId?.id,
displayValue: '1000',
operand: ViewFilterOperand.GreaterThan,
definition: {
type: 'NUMBER',
fieldMetadataId: companyMockEmployeesFieldMetadataId?.id,
label: 'Employees',
iconName: 'number',
},
label: 'Employees',
type: FieldMetadataType.NUMBER,
};
const employeesFilterIsLessThan: RecordFilter = {
@ -955,12 +870,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: companyMockEmployeesFieldMetadataId?.id,
displayValue: '1000',
operand: ViewFilterOperand.LessThan,
definition: {
type: 'NUMBER',
fieldMetadataId: companyMockEmployeesFieldMetadataId?.id,
label: 'Employees',
iconName: 'number',
},
label: 'Employees',
type: FieldMetadataType.NUMBER,
};
const employeesFilterIsEmpty: RecordFilter = {
@ -969,12 +880,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: companyMockEmployeesFieldMetadataId?.id,
displayValue: '',
operand: ViewFilterOperand.IsEmpty,
definition: {
type: 'NUMBER',
fieldMetadataId: companyMockEmployeesFieldMetadataId?.id,
label: 'Employees',
iconName: 'number',
},
label: 'Employees',
type: FieldMetadataType.NUMBER,
};
const employeesFilterIsNotEmpty: RecordFilter = {
@ -983,12 +890,8 @@ describe('should work as expected for the different field types', () => {
fieldMetadataId: companyMockEmployeesFieldMetadataId?.id,
displayValue: '',
operand: ViewFilterOperand.IsNotEmpty,
definition: {
type: 'NUMBER',
fieldMetadataId: companyMockEmployeesFieldMetadataId?.id,
label: 'Employees',
iconName: 'number',
},
label: 'Employees',
type: FieldMetadataType.NUMBER,
};
const result = computeViewRecordGqlOperationFilter(

View File

@ -280,7 +280,6 @@ export const computeFilterRecordGqlOperationFilter = ({
),
} as RatingFilter,
};
default:
throw new Error(
`Unknown operand ${filter.operand} for ${filterType} filter`,

View File

@ -26,7 +26,7 @@ import { RecordIndexActionMenu } from '@/action-menu/components/RecordIndexActio
import { ContextStoreCurrentViewTypeEffect } from '@/context-store/components/ContextStoreCurrentViewTypeEffect';
import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState';
import { ContextStoreViewType } from '@/context-store/types/ContextStoreViewType';
import { useFilterDefinitionsFromFilterableFieldMetadataItems } from '@/object-record/record-filter/hooks/useFilterDefinitionsFromFilterableFieldMetadataItems';
import { useFilterableFieldMetadataItemsInRecordIndexContext } from '@/object-record/record-filter/hooks/useFilterableFieldMetadataItemsInRecordIndexContext';
import { useSetRecordGroup } from '@/object-record/record-group/hooks/useSetRecordGroup';
import { RecordIndexFiltersToContextStoreEffect } from '@/object-record/record-index/components/RecordIndexFiltersToContextStoreEffect';
import { RecordIndexTableContainerEffect } from '@/object-record/record-index/components/RecordIndexTableContainerEffect';
@ -180,8 +180,8 @@ export const RecordIndexContainer = () => {
contextStoreTargetedRecordsRuleComponentState,
);
const { filterDefinitions } =
useFilterDefinitionsFromFilterableFieldMetadataItems();
const { filterableFieldMetadataItems } =
useFilterableFieldMetadataItemsInRecordIndexContext();
const isCommandMenuV2Enabled = useIsFeatureEnabled(
FeatureFlagKey.IsCommandMenuV2Enabled,
@ -218,17 +218,23 @@ export const RecordIndexContainer = () => {
onViewGroupsChange(view.viewGroups);
setTableViewFilterGroups(view.viewFilterGroups ?? []);
setTableFilters(
mapViewFiltersToFilters(view.viewFilters, filterDefinitions),
mapViewFiltersToFilters(
view.viewFilters,
filterableFieldMetadataItems,
),
);
setRecordIndexFilters(
mapViewFiltersToFilters(view.viewFilters, filterDefinitions),
mapViewFiltersToFilters(
view.viewFilters,
filterableFieldMetadataItems,
),
);
setRecordIndexViewFilterGroups(view.viewFilterGroups ?? []);
setContextStoreTargetedRecordsRule((prev) => ({
...prev,
filters: mapViewFiltersToFilters(
view.viewFilters,
filterDefinitions,
filterableFieldMetadataItems,
),
}));
setTableSorts(

View File

@ -6,6 +6,7 @@ import {
useExportFetchRecords,
} from '../useExportFetchRecords';
import { useLazyFetchAllRecords } from '@/object-record/hooks/useLazyFetchAllRecords';
import { useObjectOptionsForBoard } from '@/object-record/object-options-dropdown/hooks/useObjectOptionsForBoard';
import { recordGroupFieldMetadataComponentState } from '@/object-record/record-group/states/recordGroupFieldMetadataComponentState';
import { useRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentStateV2';
@ -13,7 +14,6 @@ import { ViewType } from '@/views/types/ViewType';
import { expect } from '@storybook/test';
import { getJestMetadataAndApolloMocksAndActionMenuWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksAndContextStoreWrapper';
import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
import { useLazyFetchAllRecords } from '@/object-record/hooks/useLazyFetchAllRecords';
const mockPerson = {
__typename: 'Person',
@ -155,7 +155,9 @@ describe('useRecordData', () => {
it('should call the callback function with kanban field included as column if view type is kanban', async () => {
const callback = jest.fn();
mockFetchAllRecords.mockReturnValue([mockPerson]);
const { result } = renderHook(
() => {
const [recordGroupFieldMetadata, setRecordGroupFieldMetadata] =
@ -234,7 +236,7 @@ describe('useRecordData', () => {
displayAsRelativeDate: true,
},
},
position: expect.any(Number),
position: 10,
showLabel: undefined,
size: 100,
type: 'DATE_TIME',

View File

@ -5,19 +5,15 @@ import { useColumnDefinitionsFromFieldMetadata } from '@/object-metadata/hooks/u
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { availableFieldMetadataItemsForFilterFamilySelector } from '@/object-metadata/states/availableFieldMetadataItemsForFilterFamilySelector';
import {
formatFieldMetadataItemAsFilterDefinition,
getFilterTypeFromFieldType,
} from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { useSelectFilterDefinitionUsedInDropdown } from '@/object-record/object-filter-dropdown/hooks/useSelectFilterDefinitionUsedInDropdown';
import { fieldMetadataItemIdUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemIdUsedInDropdownComponentState';
import { getFilterTypeFromFieldType } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { useSelectFilterUsedInDropdown } from '@/object-record/object-filter-dropdown/hooks/useSelectFilterUsedInDropdown';
import { useUpsertRecordFilter } from '@/object-record/record-filter/hooks/useUpsertRecordFilter';
import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { getRecordFilterOperands } from '@/object-record/record-filter/utils/getRecordFilterOperands';
import { useSetActiveDropdownFocusIdAndMemorizePrevious } from '@/ui/layout/dropdown/hooks/useSetFocusedDropdownIdAndMemorizePrevious';
import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDropdownOpenComponentState';
import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope';
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
import { extractComponentState } from '@/ui/utilities/state/component-state/utils/extractComponentState';
import { useGetCurrentView } from '@/views/hooks/useGetCurrentView';
import { useUpsertCombinedViewFilters } from '@/views/hooks/useUpsertCombinedViewFilters';
@ -76,13 +72,8 @@ export const useHandleToggleColumnFilter = ({
const { currentViewWithCombinedFiltersAndSorts } = useGetCurrentView();
const { selectFilterDefinitionUsedInDropdown } =
useSelectFilterDefinitionUsedInDropdown(viewBarId);
const setFieldMetadataItemIdUsedInDropdown = useSetRecoilComponentStateV2(
fieldMetadataItemIdUsedInDropdownComponentState,
viewBarId,
);
const { selectFilterUsedInDropdown } =
useSelectFilterUsedInDropdown(viewBarId);
const handleToggleColumnFilter = useCallback(
async (fieldMetadataId: string) => {
@ -110,14 +101,6 @@ export const useHandleToggleColumnFilter = ({
throw new Error('Field metadata item not found');
}
const filterDefinition = formatFieldMetadataItemAsFilterDefinition({
field: fieldMetadataItem,
});
if (!isDefined(filterDefinition)) {
throw new Error('Filter definition not found');
}
const filterType = getFilterTypeFromFieldType(fieldMetadataItem.type);
const availableOperandsForFilter = getRecordFilterOperands({
@ -131,7 +114,8 @@ export const useHandleToggleColumnFilter = ({
fieldMetadataId,
operand: defaultOperand,
displayValue: '',
definition: filterDefinition,
label: fieldMetadataItem.label,
type: filterType,
value: '',
};
@ -139,8 +123,7 @@ export const useHandleToggleColumnFilter = ({
await upsertCombinedViewFilter(newFilter);
selectFilterDefinitionUsedInDropdown({ filterDefinition });
setFieldMetadataItemIdUsedInDropdown(fieldMetadataId);
selectFilterUsedInDropdown({ fieldMetadataItemId: fieldMetadataId });
}
openDropdown(existingViewFilter?.id ?? newFilterId);
@ -149,11 +132,10 @@ export const useHandleToggleColumnFilter = ({
openDropdown,
columnDefinitions,
upsertCombinedViewFilter,
selectFilterDefinitionUsedInDropdown,
selectFilterUsedInDropdown,
currentViewWithCombinedFiltersAndSorts,
availableFieldMetadataItemsForFilter,
upsertRecordFilter,
setFieldMetadataItemIdUsedInDropdown,
],
);

View File

@ -64,12 +64,6 @@ export const useHandleToggleTrashColumnFilter = ({
displayValue: '',
type: filterType,
label: `Deleted`,
definition: {
label: `Deleted`,
iconName: 'IconTrash',
fieldMetadataId: trashFieldMetadata.id,
type: filterType,
},
value: '',
};