From 08cd5bbb91b8504b38879280d262e9573f066f47 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Wed, 13 Dec 2023 13:09:57 +0000 Subject: [PATCH] Refactor form block layout and add functional update and view multi step forms --- .../src/DetailSummary/DetailSummary.svelte | 2 +- .../Component/ComponentSettingsSection.svelte | 22 +++---- .../app/blocks/MultiStepFormblock.svelte | 29 +++++---- .../app/blocks/form/FormBlock.svelte | 60 ++--------------- .../app/blocks/form/FormBlockWrapper.svelte | 64 +++++++++++++++++++ packages/frontend-core/src/utils/utils.js | 33 ++++++++-- 6 files changed, 123 insertions(+), 87 deletions(-) create mode 100644 packages/client/src/components/app/blocks/form/FormBlockWrapper.svelte diff --git a/packages/bbui/src/DetailSummary/DetailSummary.svelte b/packages/bbui/src/DetailSummary/DetailSummary.svelte index 598d82ed61..2cbb6796f3 100644 --- a/packages/bbui/src/DetailSummary/DetailSummary.svelte +++ b/packages/bbui/src/DetailSummary/DetailSummary.svelte @@ -78,7 +78,7 @@ var(--spacing-xl); } .property-panel.no-title { - padding-top: 0; + padding-top: var(--spacing-xl); } .show { diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Component/ComponentSettingsSection.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Component/ComponentSettingsSection.svelte index d96729d3d2..27f0f7bf7a 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Component/ComponentSettingsSection.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Component/ComponentSettingsSection.svelte @@ -32,21 +32,19 @@ const generalSettings = settings.filter( setting => !setting.section && setting.tag === tag ) - const customSections = settings.filter( setting => setting.section && setting.tag === tag ) - let sections = [ - ...(generalSettings?.length - ? [ - { - name: "General", - settings: generalSettings, - }, - ] - : []), - ...(customSections || []), - ] + let sections = [] + if (generalSettings.length) { + sections.push({ + name: "General", + settings: generalSettings, + }) + } + if (customSections.length) { + sections = sections.concat(customSections) + } // Filter out settings which shouldn't be rendered sections.forEach(section => { diff --git a/packages/client/src/components/app/blocks/MultiStepFormblock.svelte b/packages/client/src/components/app/blocks/MultiStepFormblock.svelte index db7d31eef1..4a9621f68e 100644 --- a/packages/client/src/components/app/blocks/MultiStepFormblock.svelte +++ b/packages/client/src/components/app/blocks/MultiStepFormblock.svelte @@ -1,10 +1,13 @@ - + {#each enrichedSteps as step, idx} {/each} - + diff --git a/packages/client/src/components/app/blocks/form/FormBlock.svelte b/packages/client/src/components/app/blocks/form/FormBlock.svelte index c0f1a53bae..cdf1a05628 100644 --- a/packages/client/src/components/app/blocks/form/FormBlock.svelte +++ b/packages/client/src/components/app/blocks/form/FormBlock.svelte @@ -1,10 +1,8 @@ - - {#if actionType === "Create"} - - - - {:else} - - - - - - {/if} - + + + diff --git a/packages/client/src/components/app/blocks/form/FormBlockWrapper.svelte b/packages/client/src/components/app/blocks/form/FormBlockWrapper.svelte new file mode 100644 index 0000000000..26767f84b3 --- /dev/null +++ b/packages/client/src/components/app/blocks/form/FormBlockWrapper.svelte @@ -0,0 +1,64 @@ + + + + {#if actionType === "Create"} + + + + {:else} + + + + + + {/if} + diff --git a/packages/frontend-core/src/utils/utils.js b/packages/frontend-core/src/utils/utils.js index 7c3dc2f3b5..65690cd535 100644 --- a/packages/frontend-core/src/utils/utils.js +++ b/packages/frontend-core/src/utils/utils.js @@ -242,15 +242,16 @@ export const buildFormBlockButtonConfig = props => { } export const buildMultiStepFormBlockDefaultProps = props => { - const { _id, stepCount, currentStep } = props || {} + const { _id, stepCount, currentStep, actionType, dataSource } = props || {} // Sanity check if (!_id || !stepCount) { return } - // Default the title to "Step X" const title = `Step {{ [${_id}-form].[__currentStep] }}` + const resourceId = dataSource?.resourceId + const formId = `${_id}-form` let buttons = [] // Add previous step button if we aren't the first step @@ -266,7 +267,7 @@ export const buildMultiStepFormBlockDefaultProps = props => { { parameters: { type: "prev", - componentId: `${_id}-form`, + componentId: formId, }, "##eventHandlerType": "Change Form Step", }, @@ -287,13 +288,13 @@ export const buildMultiStepFormBlockDefaultProps = props => { { "##eventHandlerType": "Validate Form", parameters: { - componentId: `${_id}-form`, + componentId: formId, }, }, { parameters: { type: "next", - componentId: `${_id}-form`, + componentId: formId, }, "##eventHandlerType": "Change Form Step", }, @@ -302,7 +303,7 @@ export const buildMultiStepFormBlockDefaultProps = props => { } // Add save button if we are the last step - if (currentStep === stepCount - 1) { + if (actionType !== "View" && currentStep === stepCount - 1) { buttons.push({ _id: Helpers.uuid(), _component: "@budibase/standard-components/button", @@ -314,9 +315,27 @@ export const buildMultiStepFormBlockDefaultProps = props => { { "##eventHandlerType": "Validate Form", parameters: { - componentId: `${_id}-form`, + componentId: formId, }, }, + { + "##eventHandlerType": "Save Row", + parameters: { + tableId: resourceId, + providerId: formId, + }, + }, + // Clear a create form once submitted + ...(actionType !== "Create" + ? [] + : [ + { + "##eventHandlerType": "Clear Form", + parameters: { + componentId: formId, + }, + }, + ]), ], }) }