diff --git a/lerna.json b/lerna.json
index 623fbf6d43..e1a469adf1 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,5 +1,5 @@
{
- "version": "2.20.11",
+ "version": "2.20.12",
"npmClient": "yarn",
"packages": [
"packages/*",
diff --git a/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/ExportData.svelte b/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/ExportData.svelte
index 5955cc762d..096341783d 100644
--- a/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/ExportData.svelte
+++ b/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/ExportData.svelte
@@ -106,11 +106,12 @@
/>
{
const columns = e.detail
+ parameters.columns = columns
parameters.customHeaders = columns.reduce((headerMap, column) => {
return {
[column.name]: column.displayName,
diff --git a/packages/builder/src/helpers/data/utils.js b/packages/builder/src/helpers/data/utils.js
index a29ce8db6d..a592b57a26 100644
--- a/packages/builder/src/helpers/data/utils.js
+++ b/packages/builder/src/helpers/data/utils.js
@@ -17,6 +17,10 @@ export function breakQueryString(qs) {
return paramObj
}
+function isEncoded(str) {
+ return typeof str == "string" && decodeURIComponent(str) !== str
+}
+
export function buildQueryString(obj) {
let str = ""
if (obj) {
@@ -35,7 +39,7 @@ export function buildQueryString(obj) {
value = value.replace(binding, marker)
bindingMarkers[marker] = binding
})
- let encoded = encodeURIComponent(value || "")
+ let encoded = isEncoded(value) ? value : encodeURIComponent(value || "")
Object.entries(bindingMarkers).forEach(([marker, binding]) => {
encoded = encoded.replace(marker, binding)
})
diff --git a/packages/builder/src/helpers/tests/dataUtils.test.js b/packages/builder/src/helpers/tests/dataUtils.test.js
index 8fc2d706d7..bd207ea339 100644
--- a/packages/builder/src/helpers/tests/dataUtils.test.js
+++ b/packages/builder/src/helpers/tests/dataUtils.test.js
@@ -39,4 +39,11 @@ describe("check query string utils", () => {
expect(broken.key1).toBe(obj2.key1)
expect(broken.key2).toBe(obj2.key2)
})
+
+ it("should not encode a URL more than once when building the query string", () => {
+ const queryString = buildQueryString({
+ values: "a%2Cb%2Cc",
+ })
+ expect(queryString).toBe("values=a%2Cb%2Cc")
+ })
})