class CustomDatePicker {
RANGES = {
TODAY: 'Сегодня',
YESTERDAY: 'Вчера',
LAST_7_DAYS: 'Последние 7 дней',
LAST_30_DAYS: 'Последние 30 дней',
THIS_MONTH: 'Этот месяц',
LAST_MONTH: 'Прошлый месяц',
CURRENT_AND_FUTURE: 'Текущее и будущее',
ALL_TIME: 'Все время',
};
pickerInstance = null;
cb(start, end) {
// startVal = start;
// endVal = end;
// $(this.outputElement).val(start.format('DD.MM.YYYY') + '—' + end.format('DD.MM.YYYY'));
}
constructor(outputElement, options = null) {
this.outputElement = outputElement;
options = {
singleDatePicker: false,
parentEl: null,
applyButtonClasses: null,
cancelButtonClasses: null,
containerClass: null,
autoUpdateInput: true,
rangeLabels: null,
...options,
};
if (options.rangeLabels) {
this.RANGES = options.rangeLabels;
}
options.startDate = options.startDate || new Date();
options.endDate = options.endDate || new Date();
let ranges = {};
if (!options.singleDatePicker) {
ranges = {
// [CustomDatePicker.RANGES.TODAY]: [moment(), moment()],
// [CustomDatePicker.RANGES.YESTERDAY]: [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
// [CustomDatePicker.RANGES.LAST_7_DAYS]: [moment().subtract(6, 'days'), moment()],
// [CustomDatePicker.RANGES.LAST_30_DAYS]: [moment().subtract(29, 'days'), moment()],
[this.RANGES.THIS_MONTH]: [moment().startOf('month'), moment().endOf('month')],
[this.RANGES.LAST_MONTH]: [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],
[this.RANGES.CURRENT_AND_FUTURE]: [moment(), moment().add(10, 'year')],
[this.RANGES.ALL_TIME]: [moment().subtract(10, 'year'), moment().add(10, 'year')],
};
}
$(outputElement).daterangepicker({
parentEl: '#content',
...options,
locale: {
"format": "DD.MM.YYYY",
"separator": "—",
"applyLabel": "Выбрать",
"cancelLabel": "Отмена",
"fromLabel": "с",
"toLabel": "по",
"customRangeLabel": "Произвольно",
"weekLabel": "W",
"daysOfWeek": [
"ВС", "ПН", "ВТ", "СР", "ЧТ", "ПТ", "СБ"
],
"monthNames": [
"Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"
],
"firstDay": 1
},
ranges: ranges
}, (startVal, endVal) => this.cb(startVal, endVal));
this.cb(options.startDate, options.endDate);
this.pickerInstance = $(outputElement).data('daterangepicker');
}
getChosenRangeName() {
let picker = this.pickerInstance;
let start = picker.startDate;
let end = picker.endDate;
for (let key in this.RANGES) {
let label = this.RANGES[key];
let range = picker.ranges[label];
if (range && start.isSame(range[0], 'day') && end.isSame(range[1], 'day')) {
return key;
}
}
return null;
}
getChosenLabel() {
let picker = this.pickerInstance;
let start = picker.startDate;
let end = picker.endDate;
for (let label in picker.ranges) {
let range = picker.ranges[label];
if (start.isSame(range[0], 'day') && end.isSame(range[1], 'day')) {
return label;
}
}
return null;
}
getStartDate() {
return this.pickerInstance.startDate;
}
getEndDate() {
return this.pickerInstance.endDate;
}
getRootElement() {
return this.pickerInstance.container[0];
}
}