budibase/packages/standard-components/src/forms/DateTimeField.svelte

81 lines
2.0 KiB
Svelte
Raw Normal View History

2021-01-28 19:53:40 +01:00
<script>
import Flatpickr from "svelte-flatpickr"
import SpectrumField from "./SpectrumField.svelte"
import "flatpickr/dist/flatpickr.css"
import "@spectrum-css/inputgroup/dist/index-vars.css"
export let field
export let label
export let placeholder
let fieldState
let fieldApi
let value
$: fieldApi?.setValue(value)
2021-01-28 20:41:46 +01:00
$: flatpickrOptions = {
element: `#${$fieldState?.id}-wrapper`,
enableTime: true,
altInput: true,
altFormat: "F j Y, H:i",
}
2021-01-28 19:53:40 +01:00
const handleChange = event => {
const [fullDate] = event.detail
value = fullDate
}
</script>
<SpectrumField {label} {field} bind:fieldState bind:fieldApi>
{#if fieldState}
<Flatpickr
{value}
2021-01-28 20:41:46 +01:00
options={flatpickrOptions}
2021-01-28 19:53:40 +01:00
on:change={handleChange}
element={`#${$fieldState.id}-wrapper`}>
<div
id={`${$fieldState.id}-wrapper`}
aria-disabled="false"
aria-invalid="false"
class="flatpickr spectrum-InputGroup spectrum-Datepicker"
aria-readonly="false"
aria-required="false"
aria-haspopup="true">
<div class="spectrum-Textfield spectrum-InputGroup-textfield">
<input
data-input
type="text"
class="spectrum-Textfield-input spectrum-InputGroup-input"
aria-invalid="false"
{placeholder}
id={$fieldState.id}
2021-01-28 20:41:46 +01:00
value={$fieldState.value} />
2021-01-28 19:53:40 +01:00
</div>
<button
type="button"
class="spectrum-Picker spectrum-InputGroup-button"
tabindex="-1">
<svg
class="spectrum-Icon spectrum-Icon--sizeM"
focusable="false"
aria-hidden="true"
aria-label="Calendar">
<use xlink:href="#spectrum-icon-18-Calendar" />
</svg>
</button>
</div>
</Flatpickr>
{/if}
</SpectrumField>
<style>
.flatpickr {
width: var(
--spectrum-alias-single-line-width,
var(--spectrum-global-dimension-size-2400)
);
}
.flatpickr .spectrum-Textfield {
width: auto;
}
</style>