import { DatepickerFormatOptions, DaysCalendarModel, DaysCalendarViewModel } from '../models'; import { formatDate, getLocale } from 'ngx-bootstrap/chronos'; export function formatDaysCalendar(daysCalendar: DaysCalendarModel, formatOptions: DatepickerFormatOptions, monthIndex: number): DaysCalendarViewModel { return { month: daysCalendar.month, monthTitle: formatDate( daysCalendar.month, formatOptions.monthTitle, formatOptions.locale ), yearTitle: formatDate( daysCalendar.month, formatOptions.yearTitle, formatOptions.locale ), weekNumbers: getWeekNumbers( daysCalendar.daysMatrix, formatOptions.weekNumbers, formatOptions.locale ), weekdays: getShiftedWeekdays(formatOptions.locale), weeks: daysCalendar.daysMatrix.map((week: Date[], weekIndex: number) => ({ days: week.map((date: Date, dayIndex: number) => ({ date, label: formatDate(date, formatOptions.dayLabel, formatOptions.locale), monthIndex, weekIndex, dayIndex })) })), hideLeftArrow: false, hideRightArrow: false, disableLeftArrow: false, disableRightArrow: false }; } export function getWeekNumbers(daysMatrix: Date[][], format?: string, locale?: string): string[] { return daysMatrix.map( (days: Date[]) => (days[0] ? formatDate(days[0], format, locale) : '') ); } export function getShiftedWeekdays(locale?: string): string[] { const _locale = getLocale(locale); const weekdays = _locale.weekdaysShort() as string[]; const firstDayOfWeek = _locale.firstDayOfWeek(); return [...weekdays.slice(firstDayOfWeek), ...weekdays.slice(0, firstDayOfWeek)]; }