From a9e9adf253d44177eb9a4fbb9ecc3ab830cdecd5 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Mon, 15 Aug 2022 14:44:07 +0100 Subject: [PATCH] DEV: Modernise rest adapter query parameter construction (#17925) Using `URLSearchParams` means that we don't have to manually encode/join strings --- .../discourse/app/adapters/rest.js | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/app/assets/javascripts/discourse/app/adapters/rest.js b/app/assets/javascripts/discourse/app/adapters/rest.js index fcd7e4175bc..6209ea9cca8 100644 --- a/app/assets/javascripts/discourse/app/adapters/rest.js +++ b/app/assets/javascripts/discourse/app/adapters/rest.js @@ -47,20 +47,22 @@ export default EmberObject.extend({ appendQueryParams(path, findArgs, extension) { if (findArgs) { if (typeof findArgs === "object") { - const queryString = Object.keys(findArgs) - .reject((k) => !findArgs[k]) - .map((k) => k + "=" + encodeURIComponent(findArgs[k])); + const urlSearchParams = new URLSearchParams(); - if (queryString.length) { - return `${path}${extension ? extension : ""}?${queryString.join( - "&" - )}`; + for (const [key, value] of Object.entries(findArgs)) { + if (value) { + urlSearchParams.set(key, value); + } + } + + const queryString = urlSearchParams.toString(); + + if (queryString) { + return `${path}${extension || ""}?${queryString}`; } } else { // It's serializable as a string if not an object - return `${path}/${encodeURIComponent(findArgs)}${ - extension ? extension : "" - }`; + return `${path}/${encodeURIComponent(findArgs)}${extension || ""}`; } } return path;