From 66a2c9ba03ed3c5630fd5aefc42f4178af9dd461 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Wed, 18 Jan 2023 12:06:01 +0000 Subject: [PATCH] Add fancy select and improve other fancy components --- .../bbui/src/FancyForm/FancyCheckbox.svelte | 26 +-- packages/bbui/src/FancyForm/FancyField.svelte | 25 +++ packages/bbui/src/FancyForm/FancyInput.svelte | 27 +-- .../bbui/src/FancyForm/FancySelect.svelte | 156 ++++++++++++++++++ packages/bbui/src/FancyForm/index.js | 1 + packages/bbui/src/Form/Core/Select.svelte | 3 + 6 files changed, 189 insertions(+), 49 deletions(-) create mode 100644 packages/bbui/src/FancyForm/FancySelect.svelte diff --git a/packages/bbui/src/FancyForm/FancyCheckbox.svelte b/packages/bbui/src/FancyForm/FancyCheckbox.svelte index 5947034c4c..91b6239bde 100644 --- a/packages/bbui/src/FancyForm/FancyCheckbox.svelte +++ b/packages/bbui/src/FancyForm/FancyCheckbox.svelte @@ -1,5 +1,5 @@ - + diff --git a/packages/bbui/src/FancyForm/FancyField.svelte b/packages/bbui/src/FancyForm/FancyField.svelte index ff02f68df9..ecdb262945 100644 --- a/packages/bbui/src/FancyForm/FancyField.svelte +++ b/packages/bbui/src/FancyForm/FancyField.svelte @@ -1,10 +1,35 @@
- import { createEventDispatcher, getContext, onMount } from "svelte" + import { createEventDispatcher } from "svelte" import FancyField from "./FancyField.svelte" - import Icon from "../Icon/Icon.svelte" export let label export let value @@ -11,8 +10,6 @@ export let validate = null const dispatch = createEventDispatcher() - const formContext = getContext("fancy-form") - const id = Math.random() let focused = false $: placeholder = !focused && !value @@ -25,29 +22,9 @@ error = validate(newValue) } } - - const API = { - validate: () => { - if (validate) { - error = validate(value) - } - return !error - }, - } - - onMount(() => { - if (formContext) { - formContext.registerField(id, API) - } - return () => { - if (formContext) { - formContext.unregisterField(id) - } - } - }) - + {#if label}
{label} diff --git a/packages/bbui/src/FancyForm/FancySelect.svelte b/packages/bbui/src/FancyForm/FancySelect.svelte new file mode 100644 index 0000000000..59eed3c193 --- /dev/null +++ b/packages/bbui/src/FancyForm/FancySelect.svelte @@ -0,0 +1,156 @@ + + +
+ (open = true)} + > + {#if label} +
+ {label} +
+ {/if} + +
+ {value || ""} +
+ +
+ +
+
+
+ + + + + + + (open = false)} + useAnchorWidth={true} + maxWidth={null} + > +
+ {#if options.length} + {#each options as option, idx} +
onChange(getOptionValue(option, idx))} + > + + {getOptionLabel(option, idx)} + + {#if value === getOptionValue(option, idx)} + + {/if} +
+ {/each} + {/if} +
+
+
+ + diff --git a/packages/bbui/src/FancyForm/index.js b/packages/bbui/src/FancyForm/index.js index 78f03202c8..836c9ed679 100644 --- a/packages/bbui/src/FancyForm/index.js +++ b/packages/bbui/src/FancyForm/index.js @@ -1,4 +1,5 @@ export { default as FancyInput } from "./FancyInput.svelte" export { default as FancyCheckbox } from "./FancyCheckbox.svelte" +export { default as FancySelect } from "./FancySelect.svelte" export { default as FancyButton } from "./FancyButton.svelte" export { default as FancyForm } from "./FancyForm.svelte" diff --git a/packages/bbui/src/Form/Core/Select.svelte b/packages/bbui/src/Form/Core/Select.svelte index 3e15b7f6ef..721083e3a6 100644 --- a/packages/bbui/src/Form/Core/Select.svelte +++ b/packages/bbui/src/Form/Core/Select.svelte @@ -18,8 +18,11 @@ export let autoWidth = false export let autocomplete = false export let sort = false + const dispatch = createEventDispatcher() + let open = false + $: fieldText = getFieldText(value, options, placeholder) $: fieldIcon = getFieldAttribute(getOptionIcon, value, options) $: fieldColour = getFieldAttribute(getOptionColour, value, options)