Merge pull request #15071 from grafana/explore-url-fixes

Updated url query param encoding to exctly match angular encoding
This commit is contained in:
Torkel Ödegaard 2019-01-26 12:41:32 +01:00 committed by GitHub
commit 84d1ce8fe3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 3 deletions

View File

@ -14,3 +14,12 @@ describe('toUrlParams', () => {
expect(url).toBe('server=backend-01&hasSpace=has%20space&many=1&many=2&many=3&true&number=20&isNull=&isUndefined='); expect(url).toBe('server=backend-01&hasSpace=has%20space&many=1&many=2&many=3&true&number=20&isNull=&isUndefined=');
}); });
}); });
describe('toUrlParams', () => {
it('should encode the same way as angularjs', () => {
const url = toUrlParams({
server: ':@',
});
expect(url).toBe('server=:@');
});
});

View File

@ -84,7 +84,7 @@ export async function getExploreUrl(
} }
const exploreState = JSON.stringify(state); const exploreState = JSON.stringify(state);
url = renderUrl('/explore', { state: exploreState }); url = renderUrl('/explore', { left: exploreState });
} }
return url; return url;
} }

View File

@ -11,6 +11,16 @@ export function renderUrl(path: string, query: UrlQueryMap | undefined): string
return path; return path;
} }
export function encodeURIComponentAsAngularJS(val, pctEncodeSpaces) {
return encodeURIComponent(val).
replace(/%40/gi, '@').
replace(/%3A/gi, ':').
replace(/%24/g, '$').
replace(/%2C/gi, ',').
replace(/%3B/gi, ';').
replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
}
export function toUrlParams(a) { export function toUrlParams(a) {
const s = []; const s = [];
const rbracket = /\[\]$/; const rbracket = /\[\]$/;
@ -22,9 +32,9 @@ export function toUrlParams(a) {
const add = (k, v) => { const add = (k, v) => {
v = typeof v === 'function' ? v() : v === null ? '' : v === undefined ? '' : v; v = typeof v === 'function' ? v() : v === null ? '' : v === undefined ? '' : v;
if (typeof v !== 'boolean') { if (typeof v !== 'boolean') {
s[s.length] = encodeURIComponent(k) + '=' + encodeURIComponent(v); s[s.length] = encodeURIComponentAsAngularJS(k, true) + '=' + encodeURIComponentAsAngularJS(v, true);
} else { } else {
s[s.length] = encodeURIComponent(k); s[s.length] = encodeURIComponentAsAngularJS(k, true);
} }
}; };