valor-software/ng2-bootstrap

View on GitHub
src/datepicker/models/index.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { TimeUnit } from '../../chronos/types';

export type BsDatepickerViewMode = 'day' | 'month' | 'year';

/** *************** */
// navigation bar settings
export interface NavigationViewModel {
  monthTitle: string;
  yearTitle: string;
  hideLeftArrow?: boolean;
  hideRightArrow?: boolean;
  disableLeftArrow?: boolean;
  disableRightArrow?: boolean;
}

export interface CalendarCellViewModel {
  date: Date;
  label: string;
  isDisabled?: boolean;
  isHovered?: boolean;
}

/** *************** */
// days matrix: day cell view model
export interface DayViewModel extends CalendarCellViewModel {
  isOtherMonth?: boolean;
  isInRange?: boolean;
  isSelectionStart?: boolean;
  isSelectionEnd?: boolean;
  isSelected?: boolean;
  // day index
  monthIndex?: number;
  weekIndex?: number;
  dayIndex?: number;
}

export interface WeekViewModel {
  days: DayViewModel[];
}

// todo: split navigation settings
export interface DaysCalendarViewModel extends NavigationViewModel {
  weeks: WeekViewModel[];
  // additional information
  month: Date;
  weekNumbers: string[];
  weekdays: string[];
}

/** *************** */
// months calendar
export interface MonthsCalendarViewModel extends NavigationViewModel {
  months: CalendarCellViewModel[][];
}

/** *************** */
// years calendar
export interface YearsCalendarViewModel extends NavigationViewModel {
  years: CalendarCellViewModel[][];
}

/** *************** */

// math model
/** *************** */

// days Date's array
export interface DaysCalendarModel {
  daysMatrix: Date[][];
  month: Date;
}

/** *************** */
// some func options
export interface MonthViewOptions {
  width?: number;
  height?: number;
  firstDayOfWeek?: number;
}

/** *************** */
// rendering options
export interface DatepickerFormatOptions {
  locale: string;

  monthTitle: string;
  yearTitle: string;

  dayLabel: string;
  monthLabel: string;
  yearLabel: string;

  weekNumbers: string;
}

export interface DatepickerRenderOptions {
  showWeekNumbers?: boolean;
  displayMonths?: number;
}

/** *************** */
// events
/** *************** */
export enum BsNavigationDirection {
  UP,
  DOWN
}

// used for navigation events, to change view date in state
export interface BsNavigationEvent {
  direction?: BsNavigationDirection;
  step?: TimeUnit;
}

export interface BsViewNavigationEvent {
  unit?: TimeUnit;
  viewMode: BsDatepickerViewMode;
}

export interface CellHoverEvent {
  cell: CalendarCellViewModel;
  isHovered: boolean;
}