From 0f83ceaf01926ffe5da379748319034f0155f37b Mon Sep 17 00:00:00 2001 From: Carlos Valente Date: Sun, 8 Feb 2026 11:23:57 +0100 Subject: [PATCH] fix: maintain lock on param changes --- .../view-params-editor/ViewParamsEditor.tsx | 12 +++++++--- .../view-params-editor/viewParams.utils.ts | 23 +++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/apps/client/src/common/components/view-params-editor/ViewParamsEditor.tsx b/apps/client/src/common/components/view-params-editor/ViewParamsEditor.tsx index bc7ffd428..9fa66a5dd 100644 --- a/apps/client/src/common/components/view-params-editor/ViewParamsEditor.tsx +++ b/apps/client/src/common/components/view-params-editor/ViewParamsEditor.tsx @@ -11,7 +11,7 @@ import IconButton from '../buttons/IconButton'; import Info from '../info/Info'; import { ViewOption } from './viewParams.types'; -import { getURLSearchParamsFromObj } from './viewParams.utils'; +import { getPreservedSearchParams, getURLSearchParamsFromObj } from './viewParams.utils'; import { useViewParamsEditorStore } from './viewParamsEditor.store'; import { ViewParamsPresets } from './ViewParamsPresets'; import ViewParamsSection from './ViewParamsSection'; @@ -25,17 +25,19 @@ interface EditFormDrawerProps { export default memo(ViewParamsEditor); function ViewParamsEditor({ target, viewOptions }: EditFormDrawerProps) { - const [_, setSearchParams] = useSearchParams(); + const [searchParams, setSearchParams] = useSearchParams(); const { data: viewSettings } = useViewSettings(); const { isOpen, close } = useViewParamsEditorStore(); const isSmallScreen = useIsSmallScreen(); + const getPreservedParams = () => getPreservedSearchParams(searchParams, viewOptions); + const handleClose = () => { close(); }; const resetParams = () => { - setSearchParams(); + setSearchParams(getPreservedParams()); }; const onParamsFormSubmit = (formEvent: FormEvent) => { @@ -43,6 +45,10 @@ function ViewParamsEditor({ target, viewOptions }: EditFormDrawerProps) { const newParamsObject = Object.fromEntries(new FormData(formEvent.currentTarget)); const newSearchParams = getURLSearchParamsFromObj(newParamsObject, viewOptions); + const preservedParams = getPreservedParams(); + preservedParams.forEach((value, key) => { + newSearchParams.append(key, value); + }); setSearchParams(newSearchParams); if (isSmallScreen) { diff --git a/apps/client/src/common/components/view-params-editor/viewParams.utils.ts b/apps/client/src/common/components/view-params-editor/viewParams.utils.ts index 0a4052d29..c26c63fbc 100644 --- a/apps/client/src/common/components/view-params-editor/viewParams.utils.ts +++ b/apps/client/src/common/components/view-params-editor/viewParams.utils.ts @@ -191,3 +191,26 @@ export function getURLSearchParamsFromObj(paramsObj: ViewParamsObj, paramFields: return newSearchParams; } + +/** + * Extracts search params that are not managed by the view params editor + * @param currentParams - The current URL search params + * @param paramFields - The view options that define the managed parameters + * @returns A new URLSearchParams object with preserved params + */ +export function getPreservedSearchParams(currentParams: URLSearchParams, paramFields: ViewOption[]) { + const managedParamIds = new Set(); + paramFields.forEach((section) => { + section.options.forEach((option) => { + managedParamIds.add(option.id); + }); + }); + + const preserved = new URLSearchParams(); + currentParams.forEach((value, key) => { + if (!managedParamIds.has(key)) { + preserved.append(key, value); + } + }); + return preserved; +}