@bokeh/bokehjs
Version:
Interactive, novel data visualization
64 lines • 2.05 kB
JavaScript
import { BaseDatePicker, BaseDatePickerView, DateLike } from "./base_date_picker";
import { unreachable } from "../../core/util/assert";
export class DateRangePickerView extends BaseDatePickerView {
static __name__ = "DateRangePickerView";
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:
case 1: {
// Incomplete selection, treat as no selection.
this.model.value = null;
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
// dates. Single date selection is still possible and represented
// by [date, date] 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 DateRangePicker extends BaseDatePicker {
static __name__ = "DateRangePicker";
constructor(attrs) {
super(attrs);
}
static {
this.prototype.default_view = DateRangePickerView;
this.define(({ Tuple, Nullable }) => ({
value: [Nullable(Tuple(DateLike, DateLike)), null],
}));
}
}
//# sourceMappingURL=date_range_picker.js.map