From f0d79a34edca212923d307c4939c4e34d9d7f132 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Tue, 12 Oct 2021 15:20:31 +0100 Subject: [PATCH] Improve handling of toggling between HBS and JS bindings --- .../common/bindings/BindingPanel.svelte | 47 ++++++++++++++----- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/packages/builder/src/components/common/bindings/BindingPanel.svelte b/packages/builder/src/components/common/bindings/BindingPanel.svelte index 8c57b381d..15cb3ffcb 100644 --- a/packages/builder/src/components/common/bindings/BindingPanel.svelte +++ b/packages/builder/src/components/common/bindings/BindingPanel.svelte @@ -22,12 +22,13 @@ let helpers = handlebarsCompletions() let getCaretPosition let search = "" - let mode = value?.startsWith("{{ js ") ? "JavaScript" : "Handlebars" + let initialValueJS = value?.startsWith("{{ js ") + let mode = initialValueJS ? "JavaScript" : "Handlebars" + let jsValue = initialValueJS ? value : null + let hbsValue = initialValueJS ? null : value - $: jsValue = value?.startsWith("{{ js ") $: usingJS = mode === "JavaScript" $: valid = isValid(readableToRuntimeBinding(bindableProperties, value)) - $: dispatch("change", value) $: ({ context } = groupBy("type", bindableProperties)) $: searchRgx = new RegExp(search, "ig") $: filteredBindings = context?.filter(context => { @@ -39,19 +40,41 @@ // Adds a HBS helper to the expression const addHelper = helper => { - value = addHBSBinding(value, getCaretPosition(), helper.text) + hbsValue = addHBSBinding(value, getCaretPosition(), helper.text) + dispatch("change", hbsValue) } // Adds a data binding to the expression const addBinding = binding => { if (usingJS) { - let js = decodeJSBinding(value) + let js = decodeJSBinding(jsValue) js = addJSBinding(js, getCaretPosition(), binding.readableBinding) - value = encodeJSBinding(js) + jsValue = encodeJSBinding(js) + dispatch("change", jsValue) } else { - value = addHBSBinding(value, getCaretPosition(), binding.readableBinding) + hbsValue = addHBSBinding( + hbsValue, + getCaretPosition(), + binding.readableBinding + ) + dispatch("change", hbsValue) } } + + const onChangeMode = e => { + mode = e.detail + dispatch("change", mode === "JavaScript" ? jsValue : hbsValue) + } + + const onChangeHBSValue = e => { + hbsValue = e.detail + dispatch("change", hbsValue) + } + + const onChangeJSValue = e => { + jsValue = encodeJSBinding(e.detail) + dispatch("change", jsValue) + } @@ -94,13 +117,13 @@
- (mode = e.detail)}> +