From aa399ca91efdc1f28a8995db4748c28b1e6aa67f Mon Sep 17 00:00:00 2001 From: Lucas Bordeau Date: Tue, 15 Apr 2025 15:32:41 +0200 Subject: [PATCH] Fix a bug that overwrites currentRecordFilters when using URL filtered view (#11525) This PR fixes a bug that happened when navigating to a filtered view from a record show page related record section, clicking on 'All'. The problem was that the QueryParamsFiltersEffect effect component was overwriting the currentRecordFilter of a different object metadata item than the current view. Which when we navigated back on the original view, had emptied the filters, while they shouldn't change if we only navigate without refreshing the app. Fixes https://github.com/twentyhq/core-team-issues/issues/657 --- .../components/QueryParamsFiltersEffect.tsx | 19 ++++++++++++++++--- .../hooks/internal/useViewFromQueryParams.ts | 1 + 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/twenty-front/src/modules/views/components/QueryParamsFiltersEffect.tsx b/packages/twenty-front/src/modules/views/components/QueryParamsFiltersEffect.tsx index 6ae7ec02d..de06205f2 100644 --- a/packages/twenty-front/src/modules/views/components/QueryParamsFiltersEffect.tsx +++ b/packages/twenty-front/src/modules/views/components/QueryParamsFiltersEffect.tsx @@ -2,16 +2,28 @@ import { useEffect } from 'react'; import { useViewFromQueryParams } from '@/views/hooks/internal/useViewFromQueryParams'; import { useApplyViewFiltersToCurrentRecordFilters } from '@/views/hooks/useApplyViewFiltersToCurrentRecordFilters'; +import { useGetCurrentViewOnly } from '@/views/hooks/useGetCurrentViewOnly'; export const QueryParamsFiltersEffect = () => { - const { hasFiltersQueryParams, getFiltersFromQueryParams } = - useViewFromQueryParams(); + const { + hasFiltersQueryParams, + getFiltersFromQueryParams, + objectMetadataItem, + } = useViewFromQueryParams(); + + const { currentView } = useGetCurrentViewOnly(); const { applyViewFiltersToCurrentRecordFilters } = useApplyViewFiltersToCurrentRecordFilters(); + const currentViewObjectMetadataItemIsDifferentFromURLObjectMetadataItem = + currentView?.objectMetadataId !== objectMetadataItem.id; + useEffect(() => { - if (!hasFiltersQueryParams) { + if ( + !hasFiltersQueryParams || + currentViewObjectMetadataItemIsDifferentFromURLObjectMetadataItem + ) { return; } @@ -21,6 +33,7 @@ export const QueryParamsFiltersEffect = () => { } }); }, [ + currentViewObjectMetadataItemIsDifferentFromURLObjectMetadataItem, applyViewFiltersToCurrentRecordFilters, getFiltersFromQueryParams, hasFiltersQueryParams, diff --git a/packages/twenty-front/src/modules/views/hooks/internal/useViewFromQueryParams.ts b/packages/twenty-front/src/modules/views/hooks/internal/useViewFromQueryParams.ts index 187dba269..a6313ec7f 100644 --- a/packages/twenty-front/src/modules/views/hooks/internal/useViewFromQueryParams.ts +++ b/packages/twenty-front/src/modules/views/hooks/internal/useViewFromQueryParams.ts @@ -189,5 +189,6 @@ export const useViewFromQueryParams = () => { viewIdQueryParam, hasFiltersQueryParams, getFiltersFromQueryParams, + objectMetadataItem, }; };