@@ -18,14 +18,26 @@ import { getNestedProperty } from './object_utils';
1818export type SetUrlState = ( attribute : string | Dictionary < any > , value ?: any ) => void ;
1919export type UrlState = [ Dictionary < any > , SetUrlState ] ;
2020
21- const decodedParams = new Set ( [ '_a' , '_g' ] ) ;
21+ /**
22+ * Set of URL query parameters that require the rison serialization.
23+ */
24+ const risonSerializedParams = new Set ( [ '_a' , '_g' ] ) ;
25+
26+ /**
27+ * Checks if the URL query parameter requires rison serialization.
28+ * @param queryParam
29+ */
30+ function isRisonSerializationRequired ( queryParam : string ) : boolean {
31+ return risonSerializedParams . has ( queryParam ) ;
32+ }
33+
2234export function getUrlState ( search : string ) : Dictionary < any > {
2335 const urlState : Dictionary < any > = { } ;
2436 const parsedQueryString = queryString . parse ( search ) ;
2537
2638 try {
2739 Object . keys ( parsedQueryString ) . forEach ( a => {
28- if ( decodedParams . has ( a ) ) {
40+ if ( isRisonSerializationRequired ( a ) ) {
2941 urlState [ a ] = decode ( parsedQueryString [ a ] ) as Dictionary < any > ;
3042 } else {
3143 urlState [ a ] = parsedQueryString [ a ] ;
@@ -75,7 +87,11 @@ export const useUrlState = (accessor: string): UrlState => {
7587 const oldLocationSearch = queryString . stringify ( parsedQueryString , { encode : false } ) ;
7688
7789 Object . keys ( urlState ) . forEach ( a => {
78- parsedQueryString [ a ] = encode ( urlState [ a ] ) ;
90+ if ( isRisonSerializationRequired ( a ) ) {
91+ parsedQueryString [ a ] = encode ( urlState [ a ] ) ;
92+ } else {
93+ parsedQueryString [ a ] = urlState [ a ] ;
94+ }
7995 } ) ;
8096 const newLocationSearch = queryString . stringify ( parsedQueryString , { encode : false } ) ;
8197
0 commit comments