From af4f902e1031d125ae44f2560264fd9a5cebf06a Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Fri, 29 Jan 2021 10:18:41 +0000 Subject: [PATCH] Fix validation and focus styling on datepickers --- packages/standard-components/manifest.json | 6 +++ .../src/forms/DateTimeField.svelte | 38 +++++++++++++++---- .../src/forms/validation.js | 4 +- 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/packages/standard-components/manifest.json b/packages/standard-components/manifest.json index 4214346a7f..353168938a 100644 --- a/packages/standard-components/manifest.json +++ b/packages/standard-components/manifest.json @@ -1263,6 +1263,12 @@ "type": "text", "label": "Placeholder", "key": "placeholder" + }, + { + "type": "boolean", + "label": "Show Time", + "key": "enableTime", + "defaultValue": true } ] } diff --git a/packages/standard-components/src/forms/DateTimeField.svelte b/packages/standard-components/src/forms/DateTimeField.svelte index 348a92c20a..e4beda5d3e 100644 --- a/packages/standard-components/src/forms/DateTimeField.svelte +++ b/packages/standard-components/src/forms/DateTimeField.svelte @@ -7,28 +7,48 @@ export let field export let label export let placeholder + export let enableTime let fieldState let fieldApi - let value - $: fieldApi?.setValue(value) + let open = false + let flatpickr + $: flatpickrOptions = { element: `#${$fieldState?.id}-wrapper`, - enableTime: true, + enableTime: enableTime || false, altInput: true, - altFormat: "F j Y, H:i", + altFormat: enableTime ? "F j Y, H:i" : "F j, Y", } const handleChange = event => { - const [fullDate] = event.detail - value = fullDate + const [dates] = event.detail + fieldApi.setValue(dates[0]) + } + + const onOpen = () => { + open = true + } + + const onClose = () => { + open = false + + // Manually blur all input fields since flatpickr creates a second + // duplicate input field. + // We need to blur both because the focus styling does not get properly + // applied. + const els = document.querySelectorAll(`#${$fieldState.id}-wrapper input`) + els.forEach(el => el.blur()) } {#if fieldState} @@ -37,6 +57,7 @@ aria-disabled="false" aria-invalid="false" class="flatpickr spectrum-InputGroup spectrum-Datepicker" + class:is-focused={open} aria-readonly="false" aria-required="false" aria-haspopup="true"> @@ -53,7 +74,8 @@