72 lines
2.1 KiB
JavaScript
72 lines
2.1 KiB
JavaScript
import { Controller } from 'stimulus';
|
|
|
|
export default class extends Controller {
|
|
static targets = ['input'];
|
|
|
|
today(event) {
|
|
event?.preventDefault?.();
|
|
|
|
const today = this.startOfDay(new Date());
|
|
this.setRange(today, today);
|
|
}
|
|
|
|
tomorrow(event) {
|
|
event?.preventDefault?.();
|
|
|
|
const tomorrow = this.addDays(this.startOfDay(new Date()), 1);
|
|
this.setRange(tomorrow, tomorrow);
|
|
}
|
|
|
|
setRange(startDate, endDate) {
|
|
const input = this.inputTarget;
|
|
const formattedStart = this.formatDate(startDate);
|
|
const formattedEnd = this.formatDate(endDate);
|
|
const value = `${formattedStart} - ${formattedEnd}`;
|
|
|
|
// If daterangepicker is attached, keep it in sync.
|
|
if (typeof $ !== 'undefined') {
|
|
const picker = $(input).data('daterangepicker');
|
|
if (picker) {
|
|
picker.setStartDate(formattedStart);
|
|
picker.setEndDate(formattedEnd);
|
|
|
|
// Ensure UI is refreshed for both calendars & input.
|
|
if (typeof picker.updateCalendars === 'function') {
|
|
picker.updateCalendars();
|
|
}
|
|
if (typeof picker.updateView === 'function') {
|
|
picker.updateView();
|
|
}
|
|
}
|
|
}
|
|
|
|
input.value = value;
|
|
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
|
|
const form = this.element.closest('form');
|
|
if (form) {
|
|
if (typeof form.requestSubmit === 'function') {
|
|
form.requestSubmit();
|
|
} else {
|
|
form.submit();
|
|
}
|
|
}
|
|
}
|
|
|
|
startOfDay(date) {
|
|
return new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
|
}
|
|
|
|
addDays(date, days) {
|
|
return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);
|
|
}
|
|
|
|
formatDate(date) {
|
|
const dd = String(date.getDate()).padStart(2, '0');
|
|
const mm = String(date.getMonth() + 1).padStart(2, '0');
|
|
const yyyy = String(date.getFullYear());
|
|
return `${dd}.${mm}.${yyyy}`;
|
|
}
|
|
}
|
|
|