From aec8b01bc2dd90a41902e9b57bf66c63ae65690c Mon Sep 17 00:00:00 2001 From: Birk Johansson Date: Thu, 28 Apr 2022 17:53:03 +0200 Subject: [PATCH] fix: use-query-param replaceIn instead of pushIn --- .../use-context-selection.js | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/context-selection/use-context-selection/use-context-selection.js b/src/context-selection/use-context-selection/use-context-selection.js index f6532a15e4..66e99b3338 100644 --- a/src/context-selection/use-context-selection/use-context-selection.js +++ b/src/context-selection/use-context-selection/use-context-selection.js @@ -6,6 +6,7 @@ import { useQueryParam, withDefault, } from 'use-query-params' +import { useIsValidSelection } from './use-is-valid-selection.js' export const PARAMS_SCHEMA = { dataSetId: StringParam, @@ -15,16 +16,30 @@ export const PARAMS_SCHEMA = { sectionFilter: StringParam, } +const useCustomQueryParam = (name, schema) => { + const [paramValue, setParamValue] = useQueryParam(name, schema) + const isValidSelection = useIsValidSelection() + const defaultUpdateType = isValidSelection ? 'pushIn' : 'replaceIn' + + const setSelection = useCallback( + (value, updateType) => { + return setParamValue(value, updateType || defaultUpdateType) + }, + [setParamValue, defaultUpdateType] + ) + return [paramValue, setSelection] +} + export function useDataSetId() { - return useQueryParam('dataSetId', PARAMS_SCHEMA.dataSetId) + return useCustomQueryParam('dataSetId', PARAMS_SCHEMA.dataSetId) } export function useOrgUnitId() { - return useQueryParam('orgUnitId', PARAMS_SCHEMA.orgUnitId) + return useCustomQueryParam('orgUnitId', PARAMS_SCHEMA.orgUnitId) } export function usePeriodId() { - return useQueryParam('periodId', PARAMS_SCHEMA.periodId) + return useCustomQueryParam('periodId', PARAMS_SCHEMA.periodId) } /** @@ -36,14 +51,14 @@ export function usePeriodId() { * */ export function useAttributeOptionComboSelection() { - return useQueryParam( + return useCustomQueryParam( 'attributeOptionComboSelection', PARAMS_SCHEMA.attributeOptionComboSelection ) } export function useSectionFilter() { - return useQueryParam('sectionFilter', PARAMS_SCHEMA.sectionFilter) + return useCustomQueryParam('sectionFilter', PARAMS_SCHEMA.sectionFilter) } export function useContextSelection() {