All files / modules/10-common/hooks useUpdateQueryParams.ts

100% Statements 12/12
75% Branches 3/4
100% Functions 3/3
100% Lines 12/12

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35              1077x 1077x     1077x             1077x 350x 349x 349x   349x   17x 17x     2x 2x        
/*
 * Copyright 2021 Harness Inc. All rights reserved.
 * Use of this source code is governed by the PolyForm Shield 1.0.0 license
 * that can be found in the licenses directory at the root of this repository, also available at
 * https://polyformproject.org/wp-content/uploads/2020/06/PolyForm-Shield-1.0.0.txt.
 */
 
import { useLocation, useHistory } from 'react-router-dom'
import qs from 'qs'
import type { IStringifyOptions } from 'qs'
 
import { useQueryParams } from './useQueryParams'
 
export interface UseUpdateQueryParamsReturn<T> {
  updateQueryParams(values: T, options?: IStringifyOptions, replaceHistory?: boolean): void
  replaceQueryParams(values: T, options?: IStringifyOptions, replaceHistory?: boolean): void
}
 
export function useUpdateQueryParams<T = Record<string, string>>(): UseUpdateQueryParamsReturn<T> {
  const { pathname } = useLocation()
  const { push, replace } = useHistory()
  const queryParams = useQueryParams<T>()
 
  return {
    updateQueryParams(values: T, options?: IStringifyOptions, replaceHistory?: boolean): void {
      const path = `${pathname}?${qs.stringify({ ...queryParams, ...values }, options)}`
      replaceHistory ? replace(path) : push(path)
    },
    replaceQueryParams(values: T, options?: IStringifyOptions, replaceHistory?: boolean): void {
      const path = `${pathname}?${qs.stringify(values, options)}`
      replaceHistory ? replace(path) : push(path)
    }
  }
}