UNPKG

@bokeh/bokehjs

Version:

Interactive, novel data visualization

69 lines 2.3 kB
import { BaseDatetimePicker, BaseDatetimePickerView } from "./base_datetime_picker"; import { DateLike } from "./base_date_picker"; import { unreachable } from "../../core/util/assert"; export class DatetimeRangePickerView extends BaseDatetimePickerView { static __name__ = "DatetimeRangePickerView"; get flatpickr_options() { const options = super.flatpickr_options; options.mode = "range"; options.onClose = (selected) => { this._on_close(selected); }; return options; } _on_close(selected) { switch (selected.length) { case 0: break; case 1: { // Incomplete selection, treat as no selection. this.model.value = null; this.picker.clear(false, false); this.picker._input.focus(); this.picker.close(); break; } case 2: break; default: { unreachable("invalid length"); } } } _on_change(selected) { switch (selected.length) { case 0: this.model.value = null; break; case 1: { // Selection in progress, so do nothing and wait for two selected // datetimes. Single datetime selection is still possible and represented // by [datetime, datetime] tuple. break; } case 2: { const [from, to] = selected; const from_date = this._format_date(from); const to_date = this._format_date(to); this.model.value = [from_date, to_date]; break; } default: { unreachable("invalid length"); } } } } export class DatetimeRangePicker extends BaseDatetimePicker { static __name__ = "DatetimeRangePicker"; constructor(attrs) { super(attrs); } static { this.prototype.default_view = DatetimeRangePickerView; this.define(({ Nullable, Tuple }) => ({ value: [Nullable(Tuple(DateLike, DateLike)), null], })); } } //# sourceMappingURL=datetime_range_picker.js.map