diff --git a/packages/twenty-front/src/modules/views/hooks/__tests__/useInitializeFilterOnFieldMetadataItemFromViewBarFilterDropdown.test.tsx b/packages/twenty-front/src/modules/views/hooks/__tests__/useInitializeFilterOnFieldMetadataItemFromViewBarFilterDropdown.test.tsx index 68b25590c17..99a053226f2 100644 --- a/packages/twenty-front/src/modules/views/hooks/__tests__/useInitializeFilterOnFieldMetadataItemFromViewBarFilterDropdown.test.tsx +++ b/packages/twenty-front/src/modules/views/hooks/__tests__/useInitializeFilterOnFieldMetadataItemFromViewBarFilterDropdown.test.tsx @@ -184,7 +184,7 @@ describe('useInitializeFilterOnFieldMetadataItemFromViewBarFilterDropdown', () = }); }); - it('should initialize filter with a duplicate field on city', () => { + it('should allow adding a second filter on a field that already has one', () => { const { result } = renderHook( () => { const { initializeFilterOnFieldMetataItemFromViewBarFilterDropdown } = @@ -262,9 +262,11 @@ describe('useInitializeFilterOnFieldMetadataItemFromViewBarFilterDropdown', () = ); }); - expect(result.current.objectFilterDropdownCurrentRecordFilter).toBe( - mockExistingFilterOnCity, - ); + // Should NOT reuse the existing filter — a new filter should be initialized + expect( + result.current.objectFilterDropdownCurrentRecordFilter, + ).toBeUndefined(); + expect(result.current.selectedOperandInDropdown).toBe(defaultOperand); }); it('should initialize filter on a date field correctly', () => { diff --git a/packages/twenty-front/src/modules/views/hooks/useInitializeFilterOnFieldMetadataItemFromViewBarFilterDropdown.ts b/packages/twenty-front/src/modules/views/hooks/useInitializeFilterOnFieldMetadataItemFromViewBarFilterDropdown.ts index e0eb522a320..eb0ffa77945 100644 --- a/packages/twenty-front/src/modules/views/hooks/useInitializeFilterOnFieldMetadataItemFromViewBarFilterDropdown.ts +++ b/packages/twenty-front/src/modules/views/hooks/useInitializeFilterOnFieldMetadataItemFromViewBarFilterDropdown.ts @@ -5,9 +5,7 @@ import { fieldMetadataItemIdUsedInDropdownComponentState } from '@/object-record import { objectFilterDropdownCurrentRecordFilterComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownCurrentRecordFilterComponentState'; import { objectFilterDropdownFilterIsSelectedComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownFilterIsSelectedComponentState'; import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState'; -import { currentRecordFiltersComponentState } from '@/object-record/record-filter/states/currentRecordFiltersComponentState'; import { type RecordFilter } from '@/object-record/record-filter/types/RecordFilter'; -import { findDuplicateRecordFilterInNonAdvancedRecordFilters } from '@/object-record/record-filter/utils/findDuplicateRecordFilterInNonAdvancedRecordFilters'; import { getRecordFilterOperands } from '@/object-record/record-filter/utils/getRecordFilterOperands'; import { usePushFocusItemToFocusStack } from '@/ui/utilities/focus/hooks/usePushFocusItemToFocusStack'; @@ -17,7 +15,7 @@ import { ViewBarFilterDropdownIds } from '@/views/constants/ViewBarFilterDropdow import { useStore } from 'jotai'; import { useCallback } from 'react'; -import { getFilterTypeFromFieldType, isDefined } from 'twenty-shared/utils'; +import { getFilterTypeFromFieldType } from 'twenty-shared/utils'; import { v4 } from 'uuid'; export const useInitializeFilterOnFieldMetadataItemFromViewBarFilterDropdown = @@ -27,9 +25,6 @@ export const useInitializeFilterOnFieldMetadataItemFromViewBarFilterDropdown = selectedOperandInDropdownComponentState, ); - const currentRecordFiltersCallbackState = - useAtomComponentStateCallbackState(currentRecordFiltersComponentState); - const objectFilterDropdownCurrentRecordFilterCallbackState = useAtomComponentStateCallbackState( objectFilterDropdownCurrentRecordFilterComponentState, @@ -61,10 +56,6 @@ export const useInitializeFilterOnFieldMetadataItemFromViewBarFilterDropdown = fieldMetadataItem.id, ); - const currentRecordFilters = store.get( - currentRecordFiltersCallbackState, - ); - const filterType = getFilterTypeFromFieldType(fieldMetadataItem.type); if (filterType === 'RELATION' || filterType === 'SELECT') { @@ -86,58 +77,35 @@ export const useInitializeFilterOnFieldMetadataItemFromViewBarFilterDropdown = filterType, })[0]; - const duplicateFilterInCurrentRecordFilters = - findDuplicateRecordFilterInNonAdvancedRecordFilters({ - recordFilters: currentRecordFilters, - fieldMetadataItemId: fieldMetadataItem.id, - }); + store.set(selectedOperandInDropdownCallbackState, defaultOperand); - const filterIsAlreadyInCurrentRecordFilters = isDefined( - duplicateFilterInCurrentRecordFilters, - ); + if (filterType === 'DATE' || filterType === 'DATE_TIME') { + const { displayValue, value } = getInitialFilterValue( + filterType, + defaultOperand, + ); + + const initialDateRecordFilter: RecordFilter = { + id: v4(), + fieldMetadataId: fieldMetadataItem.id, + operand: defaultOperand, + displayValue, + label: fieldMetadataItem.label, + type: filterType, + value, + }; + + upsertObjectFilterDropdownCurrentFilter(initialDateRecordFilter); - if (filterIsAlreadyInCurrentRecordFilters) { store.set( objectFilterDropdownCurrentRecordFilterCallbackState, - duplicateFilterInCurrentRecordFilters, + initialDateRecordFilter, ); - - store.set( - selectedOperandInDropdownCallbackState, - duplicateFilterInCurrentRecordFilters.operand, - ); - } else { - store.set(selectedOperandInDropdownCallbackState, defaultOperand); - - if (filterType === 'DATE' || filterType === 'DATE_TIME') { - const { displayValue, value } = getInitialFilterValue( - filterType, - defaultOperand, - ); - - const initialDateRecordFilter: RecordFilter = { - id: v4(), - fieldMetadataId: fieldMetadataItem.id, - operand: defaultOperand, - displayValue, - label: fieldMetadataItem.label, - type: filterType, - value, - }; - - upsertObjectFilterDropdownCurrentFilter(initialDateRecordFilter); - - store.set( - objectFilterDropdownCurrentRecordFilterCallbackState, - initialDateRecordFilter, - ); - } } }, [ store, fieldMetadataItemUsedInDropdownCallbackState, - currentRecordFiltersCallbackState, objectFilterDropdownFilterIsSelectedCallbackState, pushFocusItemToFocusStack, objectFilterDropdownCurrentRecordFilterCallbackState,