From 32e4493a96973d857a93f60447e6076a2744afb8 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Wed, 5 Jun 2024 11:58:40 +0100 Subject: [PATCH] Quick fix for using the roles option within the builder - this was broken in JS which was a bit of a pain - this works properly now and allows more compat between HBS and JS. --- packages/builder/src/dataBinding.js | 2 +- packages/string-templates/src/helpers/javascript.ts | 5 +++++ packages/string-templates/test/javascript.spec.ts | 7 +++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/builder/src/dataBinding.js b/packages/builder/src/dataBinding.js index 4e48c237ca..64257e7a7b 100644 --- a/packages/builder/src/dataBinding.js +++ b/packages/builder/src/dataBinding.js @@ -728,7 +728,7 @@ const getRoleBindings = () => { return (get(rolesStore) || []).map(role => { return { type: "context", - runtimeBinding: `trim "${role._id}"`, + runtimeBinding: `'${role._id}'`, readableBinding: `Role.${role.name}`, category: "Role", icon: "UserGroup", diff --git a/packages/string-templates/src/helpers/javascript.ts b/packages/string-templates/src/helpers/javascript.ts index 931cc46dc7..3e16d8a07b 100644 --- a/packages/string-templates/src/helpers/javascript.ts +++ b/packages/string-templates/src/helpers/javascript.ts @@ -33,7 +33,12 @@ const removeSquareBrackets = (value: string) => { // Our context getter function provided to JS code as $. // Extracts a value from context. const getContextValue = (path: string, context: any) => { + const literalStringRegex = /^(["'`]).*\1$/ let data = context + // check if it's a literal string - just return path if its quoted + if (literalStringRegex.test(path)) { + return path.substring(1, path.length - 1) + } path.split(".").forEach(key => { if (data == null || typeof data !== "object") { return null diff --git a/packages/string-templates/test/javascript.spec.ts b/packages/string-templates/test/javascript.spec.ts index cb2f765007..99e6ee122a 100644 --- a/packages/string-templates/test/javascript.spec.ts +++ b/packages/string-templates/test/javascript.spec.ts @@ -149,4 +149,11 @@ describe("Javascript", () => { expect(output).toMatch(UUID_REGEX) }) }) + + describe("JS literal strings", () => { + it("should be able to handle a literal string that is quoted (like role IDs)", () => { + const output = processJS(`return $("'Custom'")`) + expect(output).toBe("Custom") + }) + }) })