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.
-
-