From 937a393d741f1003536fe187d207725d811f4cf2 Mon Sep 17 00:00:00 2001 From: Lucas Bordeau Date: Thu, 27 Mar 2025 16:40:30 +0100 Subject: [PATCH] Fix missing positionInRecordFilterGroup in applyFilter legacy logic (#11230) This PR fixes a bug where modifying a filter in the advanced filter dropdown was making it change its position in the filter list. This is due to the legacy logic of applyFilter(), which outlines the importance of the needed refactor to remove this logic which requires duplicating code modification in nearly every component that can modify a record filter. This refactor will be addressed over the next sprints, because there are underlying sub-refactors to tackle first, as outlined by https://github.com/twentyhq/core-team-issues/issues/559 --- .../hooks/useSelectFieldUsedInAdvancedFilterDropdown.ts | 2 ++ .../components/ObjectFilterDropdownBooleanSelect.tsx | 3 ++- .../components/ObjectFilterDropdownDateInput.tsx | 2 ++ .../components/ObjectFilterDropdownNumberInput.tsx | 2 ++ .../components/ObjectFilterDropdownOptionSelect.tsx | 4 +++- .../components/ObjectFilterDropdownRatingInput.tsx | 2 ++ .../components/ObjectFilterDropdownRecordSelect.tsx | 4 ++++ .../components/ObjectFilterDropdownSourceSelect.tsx | 2 ++ .../components/ObjectFilterDropdownTextInput.tsx | 2 ++ 9 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/twenty-front/src/modules/object-record/advanced-filter/hooks/useSelectFieldUsedInAdvancedFilterDropdown.ts b/packages/twenty-front/src/modules/object-record/advanced-filter/hooks/useSelectFieldUsedInAdvancedFilterDropdown.ts index 1c98de8631..0a91d14ed2 100644 --- a/packages/twenty-front/src/modules/object-record/advanced-filter/hooks/useSelectFieldUsedInAdvancedFilterDropdown.ts +++ b/packages/twenty-front/src/modules/object-record/advanced-filter/hooks/useSelectFieldUsedInAdvancedFilterDropdown.ts @@ -93,6 +93,8 @@ export const useSelectFieldUsedInAdvancedFilterDropdown = () => { operand: firstOperand, value, recordFilterGroupId: existingRecordFilter?.recordFilterGroupId, + positionInRecordFilterGroup: + existingRecordFilter?.positionInRecordFilterGroup, type: filterType, label: fieldMetadataItem.label, subFieldName, diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownBooleanSelect.tsx b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownBooleanSelect.tsx index 6b70943a3c..da432a10b0 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownBooleanSelect.tsx +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownBooleanSelect.tsx @@ -14,8 +14,8 @@ import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/Drop import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown'; import { SelectableList } from '@/ui/layout/selectable-list/components/SelectableList'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; -import { IconCheck } from 'twenty-ui'; import { isDefined } from 'twenty-shared/utils'; +import { IconCheck } from 'twenty-ui'; const StyledBooleanSelectContainer = styled.div<{ selected?: boolean }>` align-items: center; @@ -79,6 +79,7 @@ export const ObjectFilterDropdownBooleanSelect = () => { fieldMetadataId: fieldMetadataItemUsedInDropdown.id, value: value.toString(), recordFilterGroupId: selectedFilter?.recordFilterGroupId, + positionInRecordFilterGroup: selectedFilter?.positionInRecordFilterGroup, type: getFilterTypeFromFieldType(fieldMetadataItemUsedInDropdown.type), label: fieldMetadataItemUsedInDropdown.label, }); diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownDateInput.tsx b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownDateInput.tsx index 2823f756f5..6e6205d4d7 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownDateInput.tsx +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownDateInput.tsx @@ -60,6 +60,7 @@ export const ObjectFilterDropdownDateInput = () => { : newDate.toLocaleDateString() : '', recordFilterGroupId: selectedFilter?.recordFilterGroupId, + positionInRecordFilterGroup: selectedFilter?.positionInRecordFilterGroup, type: getFilterTypeFromFieldType(fieldMetadataItemUsedInDropdown.type), label: fieldMetadataItemUsedInDropdown.label, }); @@ -89,6 +90,7 @@ export const ObjectFilterDropdownDateInput = () => { operand: selectedOperandInDropdown, displayValue: getRelativeDateDisplayValue(relativeDate), recordFilterGroupId: selectedFilter?.recordFilterGroupId, + positionInRecordFilterGroup: selectedFilter?.positionInRecordFilterGroup, type: getFilterTypeFromFieldType(fieldMetadataItemUsedInDropdown.type), label: fieldMetadataItemUsedInDropdown.label, }); diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownNumberInput.tsx b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownNumberInput.tsx index 398ea06be9..7bab054164 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownNumberInput.tsx +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownNumberInput.tsx @@ -68,6 +68,8 @@ export const ObjectFilterDropdownNumberInput = () => { ), label: fieldMetadataItemUsedInDropdown.label, recordFilterGroupId: selectedFilter?.recordFilterGroupId, + positionInRecordFilterGroup: + selectedFilter?.positionInRecordFilterGroup, }); }} /> diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownOptionSelect.tsx b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownOptionSelect.tsx index fc9804d8e2..aa2e3aa74d 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownOptionSelect.tsx +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownOptionSelect.tsx @@ -23,8 +23,8 @@ import { SingleRecordPickerHotkeyScope } from '@/object-record/record-picker/sin import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; -import { MenuItem, MenuItemMultiSelect } from 'twenty-ui'; import { isDefined } from 'twenty-shared/utils'; +import { MenuItem, MenuItemMultiSelect } from 'twenty-ui'; export const EMPTY_FILTER_VALUE = ''; export const MAX_OPTIONS_TO_DISPLAY = 3; @@ -146,6 +146,8 @@ export const ObjectFilterDropdownOptionSelect = () => { fieldMetadataId: fieldMetadataItemUsedInDropdown.id, value: newFilterValue, recordFilterGroupId: selectedFilter?.recordFilterGroupId, + positionInRecordFilterGroup: + selectedFilter?.positionInRecordFilterGroup, }); } resetSelectedItem(); diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownRatingInput.tsx b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownRatingInput.tsx index 553fceda87..55b7e03a2c 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownRatingInput.tsx +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownRatingInput.tsx @@ -71,6 +71,8 @@ export const ObjectFilterDropdownRatingInput = () => { operand: selectedOperandInDropdown, displayValue: convertFieldRatingValueToNumber(newValue), recordFilterGroupId: selectedFilter?.recordFilterGroupId, + positionInRecordFilterGroup: + selectedFilter?.positionInRecordFilterGroup, type: getFilterTypeFromFieldType( fieldMetadataItemUsedInDropdown.type, ), diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownRecordSelect.tsx b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownRecordSelect.tsx index f5ed91e91b..1a967e63dd 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownRecordSelect.tsx +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownRecordSelect.tsx @@ -233,6 +233,8 @@ export const ObjectFilterDropdownRecordSelect = ({ value: newFilterValue, recordFilterGroupId: duplicateFilterInCurrentRecordFilters.recordFilterGroupId, + positionInRecordFilterGroup: + duplicateFilterInCurrentRecordFilters.positionInRecordFilterGroup, }); } else { applyRecordFilter({ @@ -246,6 +248,8 @@ export const ObjectFilterDropdownRecordSelect = ({ fieldMetadataId: fieldMetadataItemUsedInFilterDropdown.id, value: newFilterValue, recordFilterGroupId: selectedFilter?.recordFilterGroupId, + positionInRecordFilterGroup: + selectedFilter?.positionInRecordFilterGroup, }); } } diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownSourceSelect.tsx b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownSourceSelect.tsx index 032c27237c..a710e19070 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownSourceSelect.tsx +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownSourceSelect.tsx @@ -128,6 +128,8 @@ export const ObjectFilterDropdownSourceSelect = ({ value: newFilterValue, recordFilterGroupId: selectedFilter?.recordFilterGroupId, subFieldName: 'source', + positionInRecordFilterGroup: + selectedFilter?.positionInRecordFilterGroup, }); } }; diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownTextInput.tsx b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownTextInput.tsx index 754f941bf4..72b61368dd 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownTextInput.tsx +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownTextInput.tsx @@ -68,6 +68,8 @@ export const ObjectFilterDropdownTextInput = () => { ), label: fieldMetadataItemUsedInDropdown.label, recordFilterGroupId: selectedFilter?.recordFilterGroupId, + positionInRecordFilterGroup: + selectedFilter?.positionInRecordFilterGroup, }); }} />