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 1c98de863..0a91d14ed 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 6b70943a3..da432a10b 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 2823f756f..6e6205d4d 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 398ea06be..7bab05416 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 fc9804d8e..aa2e3aa74 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 553fceda8..55b7e03a2 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 f5ed91e91..1a967e63d 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 032c27237..a710e1907 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 754f941bf..72b61368d 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, }); }} />