From 99537ae93d982b96d53fccb66d368cd026c3ac97 Mon Sep 17 00:00:00 2001 From: Peter Clement Date: Tue, 14 Jan 2025 15:06:17 +0000 Subject: [PATCH 01/32] Find components with state vars and allow user to select --- .../[screenId]/_components/StatePanel.svelte | 147 +++++++++++++++++- 1 file changed, 142 insertions(+), 5 deletions(-) diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte index 5212f243af..a98b03b0c2 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte @@ -1,14 +1,151 @@ - State - Some awesome state content. + +
+ +
{@html JSON.stringify(stateValue, null, 2)}
+
+ {#if componentsUsingState.length > 0} +
+

Components using this state:

+ {#each componentsUsingState as component} + + {/each} +
+ {/if}
+ + From 7bd718b0d9005f4c84a8711de075fda46fb95215 Mon Sep 17 00:00:00 2001 From: Peter Clement Date: Wed, 15 Jan 2025 09:53:27 +0000 Subject: [PATCH 02/32] work to highlight setting when selected --- .../[screenId]/_components/StatePanel.svelte | 114 +++++++++--------- 1 file changed, 56 insertions(+), 58 deletions(-) diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte index a98b03b0c2..d3c579441b 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte @@ -1,7 +1,11 @@ State @@ -72,19 +104,15 @@ -
- -
{@html JSON.stringify(stateValue, null, 2)}
-
{#if componentsUsingState.length > 0}

Components using this state:

{#each componentsUsingState as component} {/each}
@@ -93,36 +121,6 @@
From 10748505382a06ae8234a50851d5e38a22eb5181 Mon Sep 17 00:00:00 2001 From: Peter Clement Date: Tue, 21 Jan 2025 10:49:35 +0000 Subject: [PATCH 09/32] add ability for user to add default state value --- .../[screenId]/_components/AppPanel.svelte | 2 - .../[screenId]/_components/LeftPanel.svelte | 3 +- .../[screenId]/_components/StatePanel.svelte | 162 ++++++++++-------- .../builder/src/stores/builder/preview.ts | 4 + packages/client/src/index.js | 4 + 5 files changed, 104 insertions(+), 71 deletions(-) diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/AppPanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/AppPanel.svelte index 3df2332543..108103cde3 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/AppPanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/AppPanel.svelte @@ -5,7 +5,6 @@ import UndoRedoControl from "@/components/common/UndoRedoControl.svelte" import { ActionButton } from "@budibase/bbui" import BindingsPanel from "./BindingsPanel.svelte" - import StatePanel from "./StatePanel.svelte"
@@ -19,7 +18,6 @@
-
diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/LeftPanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/LeftPanel.svelte index b680140170..a46efb8a8a 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/LeftPanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/LeftPanel.svelte @@ -3,6 +3,7 @@ import ComponentList from "./ComponentList/index.svelte" import { getHorizontalResizeActions } from "@/components/common/resizable" import { ActionButton } from "@budibase/bbui" + import StatePanel from "./StatePanel.svelte" const [resizable, resizableHandle] = getHorizontalResizeActions() @@ -34,7 +35,7 @@ {:else if activeTab === Tabs.Bindings}
Bindings
{:else if activeTab === Tabs.State} -
State
+
{/if}
diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte index b52a27c23e..be47a18b3e 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte @@ -5,6 +5,7 @@ componentStore, selectedScreen, builderStore, + previewStore, } from "@/stores/builder" import { decodeJSBinding, @@ -12,7 +13,7 @@ isJSBinding, } from "@budibase/string-templates" import { onMount } from "svelte" - + import CodeMirrorEditor from "@/components/common/CodeMirrorEditor.svelte" type ComponentUsingState = { id: string name: string @@ -21,18 +22,29 @@ const keyOptions = getAllStateVariables() - let popoverAnchor: any - let popover: any - let selectedKey: string | null + let selectedKey: string | undefined = undefined let componentsUsingState: ComponentUsingState[] = [] let componentsUpdatingState: ComponentUsingState[] = [] + let editorValue: string = "" onMount(() => { if (selectedKey) { searchComponents(selectedKey) } + previewStore.requestComponentContext() }) + $: { + let previewContext = $previewStore.selectedComponentContext || {} + + if (selectedKey && previewContext.state) { + // It's unlikely value will ever be populated immediately as state is never populated automatically in preview + const value = previewContext.state[selectedKey] ?? null + editorValue = JSON.stringify(value, null, 2) + } else { + editorValue = "" + } + } function findComponentsUpdatingState( component: any, stateKey: string @@ -145,78 +157,92 @@ component.settings.forEach(setting => { builderStore.highlightSetting(setting) }) - popover.hide() + } + + function handleStateInspectorChange(e: CustomEvent) { + if (!selectedKey || !$previewStore.selectedComponentContext) { + throw new Error("No state key selected") + } + + if (!e.detail) { + return + } + + const value = JSON.parse(e.detail) + const stateUpdate = { [selectedKey]: value } + + previewStore.updateState(stateUpdate) + + previewStore.setSelectedComponentContext({ + ...$previewStore.selectedComponentContext, + state: stateUpdate, + }) + + previewStore.requestComponentContext() } -
- State -
- - -
-
-
State
-
- -
-
-
- Showing state variables for {$selectedScreen?.routing?.route.split( - "/" - )[1]}: -
-
- +
+ +
+ +
+ + + {#if componentsUsingState.length > 0} +
+ Updates: + {#each componentsUsingState as component, i} + + {/each} +
+ {/if} + {#if componentsUpdatingState.length > 0} +
+ Updated by: + {#each componentsUpdatingState as component, i} + + {/each} +
+ {/if} +
From c199b681e3308c0233cf3d000b526383a1200a22 Mon Sep 17 00:00:00 2001 From: Peter Clement Date: Tue, 21 Jan 2025 16:04:14 +0000 Subject: [PATCH 11/32] some duplicate code --- .../design/[screenId]/_components/StatePanel.svelte | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte index 99f4b252a2..cf6cd12d91 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte @@ -178,10 +178,6 @@ editorError = null previewStore.updateState(stateUpdate) - previewStore.updateState(stateUpdate) - - previewStore.updateState(stateUpdate) - previewStore.setSelectedComponentContext({ ...$previewStore.selectedComponentContext, state: stateUpdate, From 8cab28d5b64147b6d6c1dd4bcb398e3cb8daa788 Mon Sep 17 00:00:00 2001 From: Peter Clement Date: Thu, 23 Jan 2025 10:08:34 +0000 Subject: [PATCH 12/32] add link for each individual setting --- .../Component/ComponentSettingsPanel.svelte | 9 + .../Component/ConditionalUISection.svelte | 23 ++- .../[screenId]/_components/StatePanel.svelte | 162 +++++++++++------- 3 files changed, 134 insertions(+), 60 deletions(-) diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Component/ComponentSettingsPanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Component/ComponentSettingsPanel.svelte index 30f11e6cab..d9862e6e14 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Component/ComponentSettingsPanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Component/ComponentSettingsPanel.svelte @@ -16,6 +16,7 @@ } from "@/dataBinding" import { ActionButton, notifications } from "@budibase/bbui" import { capitalise } from "@/helpers" + import { builderStore } from "@/stores/builder" import TourWrap from "@/components/portal/onboarding/TourWrap.svelte" import { TOUR_STEP_KEYS } from "@/components/portal/onboarding/tours.js" @@ -55,6 +56,14 @@ $: id = $selectedComponent?._id $: id, (section = tabs[0]) $: componentName = getComponentName(componentInstance) + + $: highlightedSettings = $builderStore.highlightedSettings + $: if (highlightedSettings?.length) { + const settings = highlightedSettings.map(s => s.key) + if (settings.length === 1 && settings[0] === "_conditions") { + section = "conditions" + } + } {#if $selectedComponent} diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Component/ConditionalUISection.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Component/ConditionalUISection.svelte index b40a6af3c6..d91799b6da 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Component/ConditionalUISection.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Component/ConditionalUISection.svelte @@ -9,6 +9,7 @@ import { componentStore } from "@/stores/builder" import ConditionalUIDrawer from "./ConditionalUIDrawer.svelte" import ComponentSettingsSection from "./ComponentSettingsSection.svelte" + import { builderStore } from "@/stores/builder" export let componentInstance export let componentDefinition @@ -18,6 +19,10 @@ let tempValue let drawer + $: highlightCondition = $builderStore.highlightedSettings?.find( + setting => setting.key === "_conditions" + ) + const openDrawer = () => { tempValue = JSON.parse(JSON.stringify(componentInstance?._conditions ?? [])) drawer.show() @@ -52,7 +57,9 @@ /> - {conditionText} +
+ {conditionText} +
@@ -61,3 +68,17 @@ + + diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte index cf6cd12d91..9dc3d3137d 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte @@ -1,5 +1,5 @@
- State -
Showing state variables for this screen
0 ? false : "No state variables found"} options={keyOptions} on:change={handleStateKeySelect} />
-
- -
- + {#if selectedKey && keyOptions.length > 0} +
+ handleStateInspectorChange(e)} + {bindings} + /> +
+ {/if} {#if componentsUsingState.length > 0}
Updates: @@ -276,7 +288,6 @@ From 680f52adbd8e96c6e3998fe099802413838fd0c6 Mon Sep 17 00:00:00 2001 From: Peter Clement Date: Wed, 29 Jan 2025 09:35:13 +0000 Subject: [PATCH 29/32] remove link --- .../design/[screenId]/_components/StatePanel.svelte | 9 --------- 1 file changed, 9 deletions(-) diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte index e3fa50f07f..61630f3c98 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/StatePanel.svelte @@ -246,15 +246,6 @@
-
0 ? false : "No state variables found"} - options={keyOptions} - on:change={handleStateKeySelect} - /> -
+