import { Injectable } from '@angular/core'; import { TimeUnit } from '../../chronos/types'; import { Action } from '../../mini-ngrx/index'; import { BsDatepickerViewMode, BsViewNavigationEvent, CellHoverEvent, DatepickerRenderOptions } from '../models/index'; @Injectable() export class BsDatepickerActions { static readonly CALCULATE = '[datepicker] calculate dates matrix'; static readonly FORMAT = '[datepicker] format datepicker values'; static readonly FLAG = '[datepicker] set flags'; static readonly SELECT = '[datepicker] select date'; static readonly NAVIGATE_OFFSET = '[datepicker] shift view date'; static readonly NAVIGATE_TO = '[datepicker] change view date'; static readonly SET_OPTIONS = '[datepicker] update render options'; static readonly HOVER = '[datepicker] hover date'; static readonly CHANGE_VIEWMODE = '[datepicker] switch view mode'; static readonly SET_MIN_DATE = '[datepicker] set min date'; static readonly SET_MAX_DATE = '[datepicker] set max date'; static readonly SET_IS_DISABLED = '[datepicker] set is disabled'; static readonly SET_LOCALE = '[datepicker] set datepicker locale'; static readonly SELECT_RANGE = '[daterangepicker] select dates range'; calculate(): Action { return { type: BsDatepickerActions.CALCULATE }; } format(): Action { return { type: BsDatepickerActions.FORMAT }; } flag(): Action { return { type: BsDatepickerActions.FLAG }; } select(date: Date): Action { return { type: BsDatepickerActions.SELECT, payload: date }; } changeViewMode(event: BsDatepickerViewMode): Action { return { type: BsDatepickerActions.CHANGE_VIEWMODE, payload: event }; } navigateTo(event: BsViewNavigationEvent): Action { return { type: BsDatepickerActions.NAVIGATE_TO, payload: event }; } navigateStep(step: TimeUnit): Action { return { type: BsDatepickerActions.NAVIGATE_OFFSET, payload: step }; } setOptions(options: DatepickerRenderOptions): Action { return { type: BsDatepickerActions.SET_OPTIONS, payload: options }; } // date range picker selectRange(value: Date[]): Action { return { type: BsDatepickerActions.SELECT_RANGE, payload: value }; } hoverDay(event: CellHoverEvent): Action { return { type: BsDatepickerActions.HOVER, payload: event.isHovered ? event.cell.date : null }; } minDate(date: Date): Action { return { type: BsDatepickerActions.SET_MIN_DATE, payload: date }; } maxDate(date: Date): Action { return { type: BsDatepickerActions.SET_MAX_DATE, payload: date }; } isDisabled(value: boolean): Action { return { type: BsDatepickerActions.SET_IS_DISABLED, payload: value }; } setLocale(locale: string): Action { return { type: BsDatepickerActions.SET_LOCALE, payload: locale }; } }