File size: 1,559 Bytes
cf86710 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import type { DateLib } from "../classes/DateLib.js";
import type { DropdownOption } from "../components/Dropdown.js";
import type { Formatters } from "../types/index.js";
/**
* Returns the years to display in the dropdown.
*
* This function generates a list of years between the navigation start and end
* dates, formatted using the provided formatter.
*
* @param navStart The start date for navigation.
* @param navEnd The end date for navigation.
* @param formatters The formatters to use for formatting the year labels.
* @param dateLib The date library to use for date manipulation.
* @param reverse If true, reverses the order of the years (descending).
* @returns An array of dropdown options representing the years, or `undefined`
* if `navStart` or `navEnd` is not provided.
*/
export function getYearOptions(
navStart: Date | undefined,
navEnd: Date | undefined,
formatters: Pick<Formatters, "formatYearDropdown">,
dateLib: DateLib,
reverse: boolean = false,
): DropdownOption[] | undefined {
if (!navStart) return undefined;
if (!navEnd) return undefined;
const { startOfYear, endOfYear, eachYearOfInterval, getYear } = dateLib;
const firstNavYear = startOfYear(navStart);
const lastNavYear = endOfYear(navEnd);
const years = eachYearOfInterval({ start: firstNavYear, end: lastNavYear });
if (reverse) years.reverse();
return years.map((year) => {
const label = formatters.formatYearDropdown(year, dateLib);
return {
value: getYear(year),
label,
disabled: false,
};
});
}
|