import flatpickr from 'flatpickr'; import { Utility } from '../../core/utility'; const DATEPICKER_UTIL_SELECTOR = 'input[type="date"], input[type="time"], input[type="datetime-local"]'; const DATEPICKER_INITIALIZED_CLASS = 'datepicker--initialized'; const DATEPICKER_CONFIG = { 'datetime-local': { enableTime: true, altInput: true, altFormat: 'j. F Y, H:i', // maybe interpolate these formats for locale dateFormat: 'Y-m-dTH:i', time_24hr: true, }, 'date': { altFormat: 'j. F Y', dateFormat: 'Y-m-d', altInput: true, }, 'time': { enableTime: true, noCalendar: true, altFormat: 'H:i', dateFormat: 'H:i', altInput: true, time_24hr: true, }, }; @Utility({ selector: DATEPICKER_UTIL_SELECTOR, }) export class Datepicker { flatpickrInstance; constructor(element) { if (!element) { throw new Error('Datepicker utility needs to be passed an element!'); } if (element.classList.contains(DATEPICKER_INITIALIZED_CLASS)) { return false; } const flatpickrConfig = DATEPICKER_CONFIG[element.getAttribute('type')]; if (!flatpickrConfig) { throw new Error('Datepicker utility called on unsupported element!'); } this.flatpickrInstance = flatpickr(element, flatpickrConfig); // mark initialized element.classList.add(DATEPICKER_INITIALIZED_CLASS); } destroy() { this.flatpickrInstance.destroy(); } }