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