import {Component, Input, TemplateRef, Output, EventEmitter} from '@angular/core'; import {MonthViewModel, DayViewModel, WeekViewModel} from './datepicker-view-model'; import {Ng2vDate} from './ng2v-date'; import {Ng2vDatepickerI18n} from './datepicker-i18n'; import {DayTemplateContext} from './datepicker-day-template-context'; @Component({ selector: 'ng2v-datepicker-month-view', host: {'class': 'd-block'}, styles: [` .ng2v-dp-weekday, .ng2v-dp-week-number { line-height: 2rem; } .ng2v-dp-day, .ng2v-dp-weekday, .ng2v-dp-week-number { width: 2rem; height: 2rem; } .ng2v-dp-day { cursor: pointer; } .ng2v-dp-day.disabled, .ng2v-dp-day.hidden { cursor: default; } `], template: `
{{ i18n.getWeekdayShortName(w) }}
{{ week.number }}
` }) export class Ng2vDatepickerMonthView { @Input() dayTemplate: TemplateRef; @Input() disabled: boolean; @Input() month: MonthViewModel; @Input() outsideDays: 'visible' | 'hidden' | 'collapsed'; @Input() selectedDate: Ng2vDate; @Input() showWeekdays; @Input() showWeekNumbers; @Output() select = new EventEmitter(); constructor(public i18n: Ng2vDatepickerI18n) {} doSelect(day: DayViewModel) { if (!this.isDisabled(day) && !this.isHidden(day)) { this.select.emit(Ng2vDate.from(day.date)); } } isDisabled(day: DayViewModel) { return this.disabled || day.disabled; } isSelected(date: Ng2vDate) { return this.selectedDate && this.selectedDate.equals(date); } isCollapsed(week: WeekViewModel) { return this.outsideDays === 'collapsed' && week.days[0].date.month !== this.month.number && week.days[week.days.length - 1].date.month !== this.month.number; } isHidden(day: DayViewModel) { return (this.outsideDays === 'hidden' || this.outsideDays === 'collapsed') && this.month.number !== day.date.month; } }