src/datepicker/engine/format-years-calendar.ts
import {
DatepickerFormatOptions,
YearsCalendarViewModel,
CalendarCellViewModel
} from '../models/index';
import { shiftDate } from '../../chronos/utils/date-setters';
import { formatDate } from '../../chronos/format';
import { createMatrix } from '../utils/matrix-utils';
const height = 4;
const width = 4;
export const yearsPerCalendar = height * width;
const initialShift = (Math.floor(yearsPerCalendar / 2) - 1) * -1;
const shift = { year: 1 };
export function formatYearsCalendar(
viewDate: Date,
formatOptions: DatepickerFormatOptions
): YearsCalendarViewModel {
const initialDate = shiftDate(viewDate, { year: initialShift });
const matrixOptions = { width, height, initialDate, shift };
const yearsMatrix = createMatrix<
CalendarCellViewModel
>(matrixOptions, date => ({
date,
label: formatDate(date, formatOptions.yearLabel, formatOptions.locale)
}));
const yearTitle = formatYearRangeTitle(yearsMatrix, formatOptions);
return {
years: yearsMatrix,
monthTitle: '',
yearTitle
};
}
function formatYearRangeTitle(
yearsMatrix: CalendarCellViewModel[][],
formatOptions: DatepickerFormatOptions
): string {
const from = formatDate(
yearsMatrix[0][0].date,
formatOptions.yearTitle,
formatOptions.locale
);
const to = formatDate(
yearsMatrix[height - 1][width - 1].date,
formatOptions.yearTitle,
formatOptions.locale
);
return `${from} - ${to}`;
}