valor-software/ng2-bootstrap

View on GitHub
src/datepicker/engine/format-years-calendar.ts

Summary

Maintainability
A
35 mins
Test Coverage
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}`;
}