39 lines
1.2 KiB
JavaScript
39 lines
1.2 KiB
JavaScript
import { onSwap } from "./utils.js";
|
|
|
|
onSwap("#year-picker-input", function(pickerEl) {
|
|
const selectedYear = pickerEl.dataset.selectedYear;
|
|
const urlTemplate = pickerEl.dataset.urlTemplate;
|
|
const currentYear = new Date().getFullYear();
|
|
const availableYears = new Set(
|
|
pickerEl.dataset.availableYears
|
|
.split(",")
|
|
.map(s => parseInt(s.trim()))
|
|
.filter(n => !isNaN(n))
|
|
);
|
|
|
|
const picker = new Datepicker(pickerEl, {
|
|
pickLevel: 2,
|
|
format: "yyyy",
|
|
minDate: new Date(1999, 0, 1),
|
|
maxDate: new Date(currentYear, 11, 31),
|
|
autohide: false,
|
|
orientation: "bottom end",
|
|
showOnClick: false,
|
|
showOnFocus: false,
|
|
beforeShowYear: (date) => ({ enabled: availableYears.has(date.getFullYear()) }),
|
|
});
|
|
pickerEl._pickerInstance = picker;
|
|
|
|
picker.element.addEventListener("changeDate", (event) => {
|
|
const year = event.detail.date?.getFullYear();
|
|
if (year && urlTemplate) {
|
|
window.location.href = urlTemplate.replace("__year__", year);
|
|
}
|
|
});
|
|
|
|
if (selectedYear) {
|
|
picker.dates = [new Date(parseInt(selectedYear), 0, 1)];
|
|
picker.update();
|
|
}
|
|
});
|