|
|
|
@ -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()) |
|
|
|
} |
|
|
|
</script> |
|
|
|
|
|
|
|
<SpectrumField {label} {field} bind:fieldState bind:fieldApi> |
|
|
|
{#if fieldState} |
|
|
|
<Flatpickr |
|
|
|
{value} |
|
|
|
bind:flatpickr |
|
|
|
value={$fieldState.value} |
|
|
|
on:open={onOpen} |
|
|
|
on:close={onClose} |
|
|
|
options={flatpickrOptions} |
|
|
|
on:change={handleChange} |
|
|
|
element={`#${$fieldState.id}-wrapper`}> |
|
|
|
@ -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 @@ |
|
|
|
<button |
|
|
|
type="button" |
|
|
|
class="spectrum-Picker spectrum-InputGroup-button" |
|
|
|
tabindex="-1"> |
|
|
|
tabindex="-1" |
|
|
|
on:click={flatpickr?.open}> |
|
|
|
<svg |
|
|
|
class="spectrum-Icon spectrum-Icon--sizeM" |
|
|
|
focusable="false" |
|
|
|
|