UNPKG

@3mo/date-time-fields

Version:

Date time fields let people select dates, date-ranges, and times.

98 lines (97 loc) 3.5 kB
import { __decorate } from "tslib"; import { component, html, join, property } from '@a11d/lit'; import { Localizer } from '@3mo/localization'; import { FieldDateTimeBase } from './FieldDateTimeBase.js'; import { FieldDateTimePrecision } from './FieldDateTimePrecision.js'; import { Memoize as memoize } from 'typescript-memoize'; Localizer.dictionaries.add('de', { 'Date & Time': 'Datum & Uhrzeit', 'Today': 'Heute', 'Yesterday': 'Gestern', 'Tomorrow': 'Morgen', 'Week start': 'Wochenstart', 'Week end': 'Wochenende', 'Month start': 'Monatsanfang', 'Month end': 'Monatsende', 'Year start': 'Jahresanfang', 'Year end': 'Jahresende', }); /** * @element mo-field-date-time * * @i18n "Date & Time" * @i18n "Today" * @i18n "Yesterday" * @i18n "Tomorrow" * @i18n "Week start" * @i18n "Week end" * @i18n "Month start" * @i18n "Month end" * @i18n "Year start" * @i18n "Year end" */ let FieldDateTime = class FieldDateTime extends FieldDateTimeBase { constructor() { super(...arguments); this.label = t('Date & Time'); } get selectedDate() { if (!this.value) { return undefined; } if (this.value instanceof Date) { return new DateTime(this.value); } return this.value; } get placeholder() { return new DateTime().format(this.formatOptions); } resetNavigationDate() { this.navigationDate = this.selectedDate ?? new DateTime(); } get calendarValue() { return new DateTimeRange(this.selectedDate, this.selectedDate); } get presetsTemplate() { return join([this.precision < FieldDateTimePrecision.Day ? undefined : html ` ${this.getPresetTemplate(t('Today'), () => new DateTime().dayStart)} ${this.getPresetTemplate(t('Yesterday'), () => new DateTime().subtract({ days: 1 }).dayStart)} ${this.getPresetTemplate(t('Tomorrow'), () => new DateTime().add({ days: 1 }).dayStart)} <mo-line></mo-line> ${this.getPresetTemplate(t('Week start'), () => new DateTime().weekStart.dayStart)} ${this.getPresetTemplate(t('Week end'), () => new DateTime().weekEnd.dayEnd)} <mo-line></mo-line> ${this.getPresetTemplate(t('Month start'), () => new DateTime().monthStart.dayStart)} ${this.getPresetTemplate(t('Month end'), () => new DateTime().monthEnd.dayEnd)} <mo-line></mo-line> ${this.getPresetTemplate(t('Year start'), () => new DateTime().yearStart.dayStart)} ${this.getPresetTemplate(t('Year end'), () => new DateTime().yearEnd.dayEnd)} `].filter(Boolean), html `<mo-line></mo-line>`); } handleSelectedDateChange(date, precision) { const { hour, minute, second } = this.navigationDate; date = date.with({ hour, minute, second }); this.value = !date ? undefined : this.precision.getRange(date).start; super.handleSelectedDateChange(date, precision); } valueToInputValue(value) { return value?.format(this.formatOptions) ?? ''; } inputValueToValue(value) { return value ? DateTime.parseAsDateTime(value, this.shortcutReferenceDate) : undefined; } }; __decorate([ property() ], FieldDateTime.prototype, "label", void 0); __decorate([ property({ type: Object }) ], FieldDateTime.prototype, "value", void 0); __decorate([ memoize() ], FieldDateTime.prototype, "placeholder", null); FieldDateTime = __decorate([ component('mo-field-date-time') ], FieldDateTime); export { FieldDateTime };