From 7ba8bc6a1993cd069c90937ae61e64727c3bdd12 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 19 Aug 2021 12:53:31 +0100 Subject: [PATCH] Rewrite client form library to derive state where possible and handle steps --- packages/standard-components/manifest.json | 19 +- .../src/forms/AttachmentField.svelte | 8 +- .../src/forms/BooleanField.svelte | 8 +- .../src/forms/DateTimeField.svelte | 8 +- .../src/forms/Field.svelte | 23 +- .../src/forms/FieldGroup.svelte | 2 +- .../src/forms/FieldGroupFallback.svelte | 2 +- .../standard-components/src/forms/Form.svelte | 60 +++- .../src/forms/FormStep.svelte | 13 +- .../src/forms/InnerForm.svelte | 281 +++++++++--------- .../src/forms/LongFormField.svelte | 8 +- .../src/forms/OptionsField.svelte | 16 +- .../src/forms/RelationshipField.svelte | 10 +- .../src/forms/StringField.svelte | 10 +- 14 files changed, 250 insertions(+), 218 deletions(-) diff --git a/packages/standard-components/manifest.json b/packages/standard-components/manifest.json index d5d22aba3a..785b549c31 100644 --- a/packages/standard-components/manifest.json +++ b/packages/standard-components/manifest.json @@ -1749,8 +1749,12 @@ "key": "valid" }, { - "label": "Step", - "key": "step" + "label": "Current Step", + "key": "currentStep" + }, + { + "label": "Current Step Valid", + "key": "currentStepValid" } ] }, @@ -1776,16 +1780,7 @@ "defaultValue": 1, "min": 1 } - ], - "context": { - "type": "static", - "values": [ - { - "label": "Valid", - "key": "valid" - } - ] - } + ] }, "fieldgroup": { "name": "Field Group", diff --git a/packages/standard-components/src/forms/AttachmentField.svelte b/packages/standard-components/src/forms/AttachmentField.svelte index f2c4a35030..8c4eaea243 100644 --- a/packages/standard-components/src/forms/AttachmentField.svelte +++ b/packages/standard-components/src/forms/AttachmentField.svelte @@ -42,11 +42,11 @@ bind:fieldApi defaultValue={[]} > - {#if $fieldState} + {#if fieldState} { fieldApi.setValue(e.detail) }} diff --git a/packages/standard-components/src/forms/BooleanField.svelte b/packages/standard-components/src/forms/BooleanField.svelte index d8507b8a03..1e3bc2fc8c 100644 --- a/packages/standard-components/src/forms/BooleanField.svelte +++ b/packages/standard-components/src/forms/BooleanField.svelte @@ -39,10 +39,10 @@ > {#if fieldState} fieldApi.setValue(e.detail)} {text} diff --git a/packages/standard-components/src/forms/DateTimeField.svelte b/packages/standard-components/src/forms/DateTimeField.svelte index bd26e3995a..534bb5c0a4 100644 --- a/packages/standard-components/src/forms/DateTimeField.svelte +++ b/packages/standard-components/src/forms/DateTimeField.svelte @@ -51,11 +51,11 @@ > {#if fieldState} fieldApi.setValue(e.detail)} - disabled={$fieldState.disabled} - error={$fieldState.error} - id={$fieldState.fieldId} + disabled={fieldState.disabled} + error={fieldState.error} + id={fieldState.fieldId} {enableTime} {placeholder} /> diff --git a/packages/standard-components/src/forms/Field.svelte b/packages/standard-components/src/forms/Field.svelte index 5de84f6777..b202bc506c 100644 --- a/packages/standard-components/src/forms/Field.svelte +++ b/packages/standard-components/src/forms/Field.svelte @@ -15,7 +15,8 @@ // Get contexts const formContext = getContext("form") - const fieldGroupContext = getContext("fieldGroup") + const formStepContext = getContext("form-step") + const fieldGroupContext = getContext("field-group") const { styleable } = getContext("sdk") const component = getContext("component") @@ -26,16 +27,20 @@ field, defaultValue, disabled, - validation + validation, + formStepContext || 1 ) // Expose field properties to parent component - fieldState = formField?.fieldState - fieldApi = formField?.fieldApi - fieldSchema = formField?.fieldSchema + $: fieldState = $formField?.fieldState + $: fieldApi = $formField?.fieldApi + $: fieldSchema = $formField?.fieldSchema // Keep validation rules up to date - $: fieldApi?.updateValidation(validation) + $: updateValidation(validation) + const updateValidation = validation => { + fieldApi?.updateValidation(validation) + } // Extract label position from field group context $: labelPositionClass = @@ -46,7 +51,7 @@
diff --git a/packages/standard-components/src/forms/FieldGroup.svelte b/packages/standard-components/src/forms/FieldGroup.svelte index 9a3cf5c506..a2fbe7d103 100644 --- a/packages/standard-components/src/forms/FieldGroup.svelte +++ b/packages/standard-components/src/forms/FieldGroup.svelte @@ -5,7 +5,7 @@ const { styleable } = getContext("sdk") const component = getContext("component") - setContext("fieldGroup", { labelPosition }) + setContext("field-group", { labelPosition })
diff --git a/packages/standard-components/src/forms/FieldGroupFallback.svelte b/packages/standard-components/src/forms/FieldGroupFallback.svelte index 782552a54e..fd0346a9ef 100644 --- a/packages/standard-components/src/forms/FieldGroupFallback.svelte +++ b/packages/standard-components/src/forms/FieldGroupFallback.svelte @@ -1,7 +1,7 @@ {#if fieldGroupContext} diff --git a/packages/standard-components/src/forms/Form.svelte b/packages/standard-components/src/forms/Form.svelte index 2514232ebc..a065432030 100644 --- a/packages/standard-components/src/forms/Form.svelte +++ b/packages/standard-components/src/forms/Form.svelte @@ -1,5 +1,5 @@ -{#key resetKey} - - - -{/key} +{#if loaded} + {#key resetKey} + + + + {/key} +{/if} diff --git a/packages/standard-components/src/forms/FormStep.svelte b/packages/standard-components/src/forms/FormStep.svelte index 45db9d1f52..e048a600f5 100644 --- a/packages/standard-components/src/forms/FormStep.svelte +++ b/packages/standard-components/src/forms/FormStep.svelte @@ -1,5 +1,5 @@ {#if !formContext} -{:else if step === $formState.step} +{:else if step === currentStep}
-
- Step {step} is visible! -
-{:else} -
hiding step {step}!
{/if} diff --git a/packages/standard-components/src/forms/InnerForm.svelte b/packages/standard-components/src/forms/InnerForm.svelte index 9355c67660..32cae9f8bc 100644 --- a/packages/standard-components/src/forms/InnerForm.svelte +++ b/packages/standard-components/src/forms/InnerForm.svelte @@ -1,41 +1,84 @@
- {#if loaded} - - {/if} +
diff --git a/packages/standard-components/src/forms/LongFormField.svelte b/packages/standard-components/src/forms/LongFormField.svelte index f710904254..81ad42bbcb 100644 --- a/packages/standard-components/src/forms/LongFormField.svelte +++ b/packages/standard-components/src/forms/LongFormField.svelte @@ -25,11 +25,11 @@ > {#if fieldState} fieldApi.setValue(e.detail)} - disabled={$fieldState.disabled} - error={$fieldState.error} - id={$fieldState.fieldId} + disabled={fieldState.disabled} + error={fieldState.error} + id={fieldState.fieldId} {placeholder} /> {/if} diff --git a/packages/standard-components/src/forms/OptionsField.svelte b/packages/standard-components/src/forms/OptionsField.svelte index b43ddb9f36..9f3e4a4557 100644 --- a/packages/standard-components/src/forms/OptionsField.svelte +++ b/packages/standard-components/src/forms/OptionsField.svelte @@ -77,10 +77,10 @@ {#if fieldState} {#if !optionsType || optionsType === "select"} fieldApi.setValue(e.detail)} @@ -90,10 +90,10 @@ /> {:else if optionsType === "radio"} fieldApi.setValue(e.detail)} getOptionLabel={flatOptions ? x => x : x => x.label} diff --git a/packages/standard-components/src/forms/RelationshipField.svelte b/packages/standard-components/src/forms/RelationshipField.svelte index b8600513ad..43f4e64aef 100644 --- a/packages/standard-components/src/forms/RelationshipField.svelte +++ b/packages/standard-components/src/forms/RelationshipField.svelte @@ -23,8 +23,8 @@ $: linkedTableId = fieldSchema?.tableId $: fetchRows(linkedTableId) $: fetchTable(linkedTableId) - $: singleValue = flatten($fieldState?.value)?.[0] - $: multiValue = flatten($fieldState?.value) ?? [] + $: singleValue = flatten(fieldState?.value)?.[0] + $: multiValue = flatten(fieldState?.value) ?? [] $: component = multiselect ? CoreMultiselect : CoreSelect const fetchTable = async id => { @@ -81,9 +81,9 @@ {autocomplete} value={multiselect ? multiValue : singleValue} on:change={multiselect ? multiHandler : singleHandler} - id={$fieldState.fieldId} - disabled={$fieldState.disabled} - error={$fieldState.error} + id={fieldState.fieldId} + disabled={fieldState.disabled} + error={fieldState.error} getOptionLabel={getDisplayName} getOptionValue={option => option._id} {placeholder} diff --git a/packages/standard-components/src/forms/StringField.svelte b/packages/standard-components/src/forms/StringField.svelte index f04177ec05..7bc4104cc5 100644 --- a/packages/standard-components/src/forms/StringField.svelte +++ b/packages/standard-components/src/forms/StringField.svelte @@ -26,12 +26,12 @@ > {#if fieldState} fieldApi.setValue(e.detail)} - disabled={$fieldState.disabled} - error={$fieldState.error} - id={$fieldState.fieldId} + disabled={fieldState.disabled} + error={fieldState.error} + id={fieldState.fieldId} {placeholder} {type} />