Skip to content

Commit 72b4507

Browse files
committed
[ML] conditional rison encoding for query params
1 parent a8622cf commit 72b4507

2 files changed

Lines changed: 20 additions & 4 deletions

File tree

x-pack/legacy/plugins/ml/public/application/util/url_state.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ describe('useUrlState', () => {
7575

7676
expect(mockHistoryPush).toHaveBeenCalledWith({
7777
search:
78-
'_a=%28mlExplorerFilter%3A%28%29%2CmlExplorerSwimlane%3A%28viewByFieldName%3Aaction%29%2Cquery%3A%28%29%29&_g=%28ml%3A%28jobIds%3A%21%28dec-2%29%29%2CrefreshInterval%3A%28display%3AOff%2Cpause%3A%21f%2Cvalue%3A0%29%2Ctime%3A%28from%3A%272019-01-01T00%3A03%3A40.000Z%27%2Cmode%3Aabsolute%2Cto%3A%272019-08-30T11%3A55%3A07.000Z%27%29%29&savedSearchId=%27571aaf70-4c88-11e8-b3d7-01146121b73d%27',
78+
'_a=%28mlExplorerFilter%3A%28%29%2CmlExplorerSwimlane%3A%28viewByFieldName%3Aaction%29%2Cquery%3A%28%29%29&_g=%28ml%3A%28jobIds%3A%21%28dec-2%29%29%2CrefreshInterval%3A%28display%3AOff%2Cpause%3A%21f%2Cvalue%3A0%29%2Ctime%3A%28from%3A%272019-01-01T00%3A03%3A40.000Z%27%2Cmode%3Aabsolute%2Cto%3A%272019-08-30T11%3A55%3A07.000Z%27%29%29&savedSearchId=571aaf70-4c88-11e8-b3d7-01146121b73d',
7979
});
8080
});
8181
});

x-pack/legacy/plugins/ml/public/application/util/url_state.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,26 @@ import { getNestedProperty } from './object_utils';
1818
export type SetUrlState = (attribute: string | Dictionary<any>, value?: any) => void;
1919
export 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+
2234
export 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

Comments
 (0)