diff --git a/packages/bbui/src/Drawer/Drawer.svelte b/packages/bbui/src/Drawer/Drawer.svelte index 51408c793..e5eacb1a4 100644 --- a/packages/bbui/src/Drawer/Drawer.svelte +++ b/packages/bbui/src/Drawer/Drawer.svelte @@ -6,7 +6,8 @@ export let title export let fillWidth - export let visible = false + + let visible = false export function show() { if (visible) { diff --git a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/OptionsEditor/OptionsDrawer.svelte b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/OptionsEditor/OptionsDrawer.svelte index 340c1eb10..5fab1eaef 100644 --- a/packages/builder/src/components/design/PropertiesPanel/PropertyControls/OptionsEditor/OptionsDrawer.svelte +++ b/packages/builder/src/components/design/PropertiesPanel/PropertyControls/OptionsEditor/OptionsDrawer.svelte @@ -41,12 +41,14 @@ bind:value={option.label} label="Label" labelPosition="left" + error={option.error?.label} /> { - // Filter out incomplete options, but if all are incomplete then show error - let filteredOptions = tempValue.filter( - option => option.value && option.label - ) - if (filteredOptions.length > 0 || tempValue.length === 0) { - tempValue = filteredOptions - valid = true - dispatch("change", tempValue) + let hasError = false + for (let i = 0; i < tempValue.length; i++) { + let option = tempValue[i] + if (!(option.label && option.value)) { + option.error = { + label: option.label ? undefined : "You must provide a label.", + value: option.value ? undefined : "You must provide a value.", + } + tempValue[i] = option + hasError = true + } + } + if (!hasError) { drawer.hide() - } else { - valid = false + } + dispatch("change", tempValue) + } + + const clearOptionErrors = () => { + for (let i = 0; i < tempValue.length; i++) { + let option = tempValue[i] + option.error = undefined + tempValue[i] = option } } - //If the drawer is hidden or error corrected, reset the validation $: { - if ( - !drawerVisible || - tempValue.some(option => option.label && option.value) - ) { - valid = true + for (let i = 0; i < tempValue.length; i++) { + let option = tempValue[i] + if (option.error?.label && option.label) { + option.error.label = undefined + } + if (option.error?.value && option.value) { + option.error.value = undefined + } + tempValue[i] = option } } -Define Options - + { + clearOptionErrors() + drawer.show() + }}>Define Options + - {#if !valid} - You must provide option labels and values. - {:else} - Define the options for this picker. - {/if} + Define the options for this picker. - -