From 808d2d0f731d10605ade46cfc23f6d9212f109bf Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Tue, 2 Nov 2021 08:45:27 +0000 Subject: [PATCH] Add generic block structure with support for writing blocks like normal svelte components rather than a JSON builder --- packages/client/manifest.json | 1 - .../client/src/components/Component.svelte | 6 +- .../src/components/app/DataProvider.svelte | 2 +- .../src/components/app/blocks/Block.svelte | 14 ++ .../app/blocks/BlockComponent.svelte | 33 ++++ .../app/blocks/TableWithSearch.svelte | 148 ++++++++---------- packages/client/src/utils/styleable.js | 12 +- 7 files changed, 125 insertions(+), 91 deletions(-) create mode 100644 packages/client/src/components/app/blocks/Block.svelte create mode 100644 packages/client/src/components/app/blocks/BlockComponent.svelte diff --git a/packages/client/manifest.json b/packages/client/manifest.json index 9b0bf7605c..08744c1952 100644 --- a/packages/client/manifest.json +++ b/packages/client/manifest.json @@ -2576,7 +2576,6 @@ ] }, "tablewithsearch": { - "block": true, "name": "Table with search", "icon": "Table", "styles": ["size"], diff --git a/packages/client/src/components/Component.svelte b/packages/client/src/components/Component.svelte index faf0226604..c13a50d52e 100644 --- a/packages/client/src/components/Component.svelte +++ b/packages/client/src/components/Component.svelte @@ -40,6 +40,7 @@ // Get contexts const context = getContext("context") const insideScreenslot = !!getContext("screenslot") + const insideBlock = !!getContext("block") // Create component context const componentStore = writable({}) @@ -53,7 +54,8 @@ $: name = instance._instanceName $: interactive = $builderStore.inBuilder && - ($builderStore.previewType === "layout" || insideScreenslot) + ($builderStore.previewType === "layout" || insideScreenslot) && + !insideBlock $: empty = interactive && !children.length && definition?.hasChildren $: emptyState = empty && definition?.showEmptyState !== false $: rawProps = getRawProps(instance) @@ -197,6 +199,8 @@ {/each} {:else if emptyState} + {:else if insideBlock} + {/if} diff --git a/packages/client/src/components/app/DataProvider.svelte b/packages/client/src/components/app/DataProvider.svelte index 991c41b77d..df59820506 100644 --- a/packages/client/src/components/app/DataProvider.svelte +++ b/packages/client/src/components/app/DataProvider.svelte @@ -234,7 +234,7 @@ {:else} - {#if !$component.children} + {#if $component.emptyState} {:else} diff --git a/packages/client/src/components/app/blocks/Block.svelte b/packages/client/src/components/app/blocks/Block.svelte new file mode 100644 index 0000000000..112b2387a7 --- /dev/null +++ b/packages/client/src/components/app/blocks/Block.svelte @@ -0,0 +1,14 @@ + + +
+ +
diff --git a/packages/client/src/components/app/blocks/BlockComponent.svelte b/packages/client/src/components/app/blocks/BlockComponent.svelte new file mode 100644 index 0000000000..5ef0509391 --- /dev/null +++ b/packages/client/src/components/app/blocks/BlockComponent.svelte @@ -0,0 +1,33 @@ + + + + + diff --git a/packages/client/src/components/app/blocks/TableWithSearch.svelte b/packages/client/src/components/app/blocks/TableWithSearch.svelte index dba50eb4b8..95960e49af 100644 --- a/packages/client/src/components/app/blocks/TableWithSearch.svelte +++ b/packages/client/src/components/app/blocks/TableWithSearch.svelte @@ -1,99 +1,89 @@ -
- -
+ + + {#if searchColumns?.length} + + {/if} + + + + + + + diff --git a/packages/client/src/utils/styleable.js b/packages/client/src/utils/styleable.js index 6a2562fb48..f35e45d3fe 100644 --- a/packages/client/src/utils/styleable.js +++ b/packages/client/src/utils/styleable.js @@ -64,9 +64,7 @@ export const styleable = (node, styles = {}) => { // Handler to select a component in the builder when clicking it in the // builder preview selectComponent = event => { - if (newStyles.interactive) { - builderStore.actions.selectComponent(componentId) - } + builderStore.actions.selectComponent(componentId) event.preventDefault() event.stopPropagation() return false @@ -77,7 +75,7 @@ export const styleable = (node, styles = {}) => { node.addEventListener("mouseout", applyNormalStyles) // Add builder preview click listener - if (get(builderStore).inBuilder) { + if (newStyles.interactive) { node.addEventListener("click", selectComponent, false) } @@ -89,11 +87,7 @@ export const styleable = (node, styles = {}) => { const removeListeners = () => { node.removeEventListener("mouseover", applyHoverStyles) node.removeEventListener("mouseout", applyNormalStyles) - - // Remove builder preview click listener - if (get(builderStore).inBuilder) { - node.removeEventListener("click", selectComponent) - } + node.removeEventListener("click", selectComponent) } // Apply initial styles