UNPKG

@ux-aspects/ux-aspects

Version:

Open source user interface framework for building modern, responsive, mobile big data applications

86 lines 14.6 kB
import { WeekDay } from '@angular/common'; import { inject, Injectable } from '@angular/core'; import { BehaviorSubject, combineLatest } from 'rxjs'; import { DateTimePickerService, ModeDirection } from '../date-time-picker.service'; import { compareDays, dateRange, gridify } from '../date-time-picker.utils'; import * as i0 from "@angular/core"; export class DayViewService { constructor() { this._datepicker = inject(DateTimePickerService); this.grid$ = new BehaviorSubject([[]]); this.focused$ = new BehaviorSubject(null); this._subscription = combineLatest(this._datepicker.month$, this._datepicker.year$, this._datepicker.startOfWeek$) .subscribe(([month, year]) => this.createDayGrid(month, year)); } ngOnDestroy() { this._subscription.unsubscribe(); } setFocus(day, month, year) { this.focused$.next({ day, month, year }); // update the date picker to show the required month and year this._datepicker.setViewportMonth(month); this._datepicker.setViewportYear(year); } createDayGrid(month, year) { // update the header this._datepicker.setHeader(this._datepicker.months[month] + ' ' + year); // find the lower and upper boundaries const start = new Date(year, month, 1); const end = new Date(year, month + 1, 0); // ensure the startOfWeek value is between 0-6 to prevent any infinite loop const startOfWeek = Math.min(WeekDay.Saturday, Math.max(WeekDay.Sunday, this._datepicker.startOfWeek$.value)); // we always want to show from the specified start of week - this may include showing some dates from the previous month while (start.getDay() !== startOfWeek) { start.setDate(start.getDate() - 1); } // we also want to make sure that the range ends on a saturday end.setDate(end.getDate() + (6 - end.getDay())); // create an array of all the days to display const dates = dateRange(start, end).map(date => ({ day: date.getDate(), month: date.getMonth(), year: date.getFullYear(), date, isToday: this.isToday(date), isActive: this.isActive(date), isCurrentMonth: date.getMonth() === month })); // turn the dates into a grid const items = gridify(dates, 7); this.grid$.next(items); // if no item has yet been focused then focus the first day of the month if ((this._datepicker.modeDirection === ModeDirection.None || this._datepicker.modeDirection === ModeDirection.Descend) && this.focused$.value === null) { // check if the selected item is visible const selectedDay = dates.find(day => day.isCurrentMonth && day.isActive); if (selectedDay) { this.setFocus(selectedDay.day, selectedDay.month, selectedDay.year); } else { // find the first day of the month const first = dates.find(date => date.day === 1); // focus the date this.setFocus(first.day, first.month, first.year); } } } /** * Determine whether or not a specific date is today * @param date The date to check */ isToday(date) { return compareDays(new Date(), date); } /** * Determines whether or not a specific date is the selected one * @param date the date to check */ isActive(date) { return this._datepicker.selected$.value ? compareDays(this._datepicker.selected$.value, date) : false; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DayViewService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DayViewService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DayViewService, decorators: [{ type: Injectable }], ctorParameters: () => [] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5LXZpZXcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2RhdGUtdGltZS1waWNrZXIvZGF5LXZpZXcvZGF5LXZpZXcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFHNUUsTUFBTSxPQUFPLGNBQWM7SUFRdkI7UUFQaUIsZ0JBQVcsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUU3RCxVQUFLLEdBQUcsSUFBSSxlQUFlLENBQWtCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRCxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQWlCLElBQUksQ0FBQyxDQUFDO1FBS2pELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO2FBQzdHLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFX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QUM7WUFFMUUsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEUsQ0FBQztpQkFBTSxDQUFDO2dCQUVKLGtDQUFrQztnQkFDbEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBRWpELGlCQUFpQjtnQkFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RELENBQUM7UUFFTCxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLE9BQU8sQ0FBQyxJQUFVO1FBQ3RCLE9BQU8sV0FBVyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7T0FHRztJQUNLLFFBQVEsQ0FBQyxJQUFVO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDMUcsQ0FBQzsrR0FoR1EsY0FBYzttSEFBZCxjQUFjOzs0RkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV2Vla0RheSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhdGVUaW1lUGlja2VyU2VydmljZSwgTW9kZURpcmVjdGlvbiB9IGZyb20gJy4uL2RhdGUtdGltZS1waWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBjb21wYXJlRGF5cywgZGF0ZVJhbmdlLCBncmlkaWZ5IH0gZnJvbSAnLi4vZGF0ZS10aW1lLXBpY2tlci51dGlscyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYXlWaWV3U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGF0ZXBpY2tlciA9IGluamVjdChEYXRlVGltZVBpY2tlclNlcnZpY2UpO1xuXG4gICAgZ3JpZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERheVZpZXdJdGVtW11bXT4oW1tdXSk7XG4gICAgZm9jdXNlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZvY3VzZWREYXlJdGVtPihudWxsKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IGNvbWJpbmVMYXRlc3QodGhpcy5fZGF0ZXBpY2tlci5tb250aCQsIHRoaXMuX2RhdGVwaWNrZXIueWVhciQsIHRoaXMuX2RhdGVwaWNrZXIuc3RhcnRPZldlZWskKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoW21vbnRoLCB5ZWFyXSkgPT4gdGhpcy5jcmVhdGVEYXlHcmlkKG1vbnRoLCB5ZWFyKSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHNldEZvY3VzKGRheTogbnVtYmVyLCBtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXIpOiB2b2lkIHtcblxuICAgICAgICB0aGlzLmZvY3VzZWQkLm5leHQoeyBkYXksIG1vbnRoLCB5ZWFyIH0pO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgZGF0ZSBwaWNrZXIgdG8gc2hvdyB0aGUgcmVxdWlyZWQgbW9udGggYW5kIHllYXJcbiAgICAgICAgdGhpcy5fZGF0ZXBpY2tlci5zZXRWaWV3cG9ydE1vbnRoKG1vbnRoKTtcbiAgICAgICAgdGhpcy5fZGF0ZXBpY2tlci5zZXRWaWV3cG9ydFllYXIoeWVhcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVEYXlHcmlkKG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlcik6IHZvaWQge1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgaGVhZGVyXG4gICAgICAgIHRoaXMuX2RhdGVwaWNrZXIuc2V0SGVhZGVyKHRoaXMuX2RhdGVwaWNrZXIubW9udGhzW21vbnRoXSArICcgJyArIHllYXIpO1xuXG4gICAgICAgIC8vIGZpbmQgdGhlIGxvd2VyIGFuZCB1cHBlciBib3VuZGFyaWVzXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpO1xuICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApO1xuXG4gICAgICAgIC8vIGVuc3VyZSB0aGUgc3RhcnRPZldlZWsgdmFsdWUgaXMgYmV0d2VlbiAwLTYgdG8gcHJldmVudCBhbnkgaW5maW5pdGUgbG9vcFxuICAgICAgICBjb25zdCBzdGFydE9mV2VlayA9IE1hdGgubWluKFdlZWtEYXkuU2F0dXJkYXksIE1hdGgubWF4KFdlZWtEYXkuU3VuZGF5LCB0aGlzLl9kYXRlcGlja2VyLnN0YXJ0T2ZXZWVrJC52YWx1ZSkpO1xuXG4gICAgICAgIC8vIHdlIGFsd2F5cyB3YW50IHRvIHNob3cgZnJvbSB0aGUgc3BlY2lmaWVkIHN0YXJ0IG9mIHdlZWsgLSB0aGlzIG1heSBpbmNsdWRlIHNob3dpbmcgc29tZSBkYXRlcyBmcm9tIHRoZSBwcmV2aW91cyBtb250aFxuICAgICAgICB3aGlsZSAoc3RhcnQuZ2V0RGF5KCkgIT09IHN0YXJ0T2ZXZWVrKSB7XG4gICAgICAgICAgICBzdGFydC5zZXREYXRlKHN0YXJ0LmdldERhdGUoKSAtIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2UgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByYW5nZSBlbmRzIG9uIGEgc2F0dXJkYXlcbiAgICAgICAgZW5kLnNldERhdGUoZW5kLmdldERhdGUoKSArICg2IC0gZW5kLmdldERheSgpKSk7XG5cbiAgICAgICAgLy8gY3JlYXRlIGFuIGFycmF5IG9mIGFsbCB0aGUgZGF5cyB0byBkaXNwbGF5XG4gICAgICAgIGNvbnN0IGRhdGVzOiBEYXlWaWV3SXRlbVtdID0gZGF0ZVJhbmdlKHN0YXJ0LCBlbmQpLm1hcChkYXRlID0+ICh7XG4gICAgICAgICAgICBkYXk6IGRhdGUuZ2V0RGF0ZSgpLFxuICAgICAgICAgICAgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBpc1RvZGF5OiB0aGlzLmlzVG9kYXkoZGF0ZSksXG4gICAgICAgICAgICBpc0FjdGl2ZTogdGhpcy5pc0FjdGl2ZShkYXRlKSxcbiAgICAgICAgICAgIGlzQ3VycmVudE1vbnRoOiBkYXRlLmdldE1vbnRoKCkgPT09IG1vbnRoXG4gICAgICAgIH0pKTtcblxuICAgICAgICAvLyB0dXJuIHRoZSBkYXRlcyBpbnRvIGEgZ3JpZFxuICAgICAgICBjb25zdCBpdGVtczogRGF5Vmlld0l0ZW1bXVtdID0gZ3JpZGlmeShkYXRlcywgNyk7XG5cbiAgICAgICAgdGhpcy5ncmlkJC5uZXh0KGl0ZW1zKTtcblxuICAgICAgICAvLyBpZiBubyBpdGVtIGhhcyB5ZXQgYmVlbiBmb2N1c2VkIHRoZW4gZm9jdXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcbiAgICAgICAgaWYgKCh0aGlzLl9kYXRlcGlja2VyLm1vZGVEaXJlY3Rpb24gPT09IE1vZGVEaXJlY3Rpb24uTm9uZSB8fCB0aGlzLl9kYXRlcGlja2VyLm1vZGVEaXJlY3Rpb24gPT09IE1vZGVEaXJlY3Rpb24uRGVzY2VuZCkgJiYgdGhpcy5mb2N1c2VkJC52YWx1ZSA9PT0gbnVsbCkge1xuXG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGUgc2VsZWN0ZWQgaXRlbSBpcyB2aXNpYmxlXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZERheSA9IGRhdGVzLmZpbmQoZGF5ID0+IGRheS5pc0N1cnJlbnRNb250aCAmJiBkYXkuaXNBY3RpdmUpO1xuXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzKHNlbGVjdGVkRGF5LmRheSwgc2VsZWN0ZWREYXkubW9udGgsIHNlbGVjdGVkRGF5LnllYXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIC8vIGZpbmQgdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdCA9IGRhdGVzLmZpbmQoZGF0ZSA9PiBkYXRlLmRheSA9PT0gMSk7XG5cbiAgICAgICAgICAgICAgICAvLyBmb2N1cyB0aGUgZGF0ZVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXMoZmlyc3QuZGF5LCBmaXJzdC5tb250aCwgZmlyc3QueWVhcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGVybWluZSB3aGV0aGVyIG9yIG5vdCBhIHNwZWNpZmljIGRhdGUgaXMgdG9kYXlcbiAgICAgKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSB0byBjaGVja1xuICAgICAqL1xuICAgIHByaXZhdGUgaXNUb2RheShkYXRlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjb21wYXJlRGF5cyhuZXcgRGF0ZSgpLCBkYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGEgc3BlY2lmaWMgZGF0ZSBpcyB0aGUgc2VsZWN0ZWQgb25lXG4gICAgICogQHBhcmFtIGRhdGUgdGhlIGRhdGUgdG8gY2hlY2tcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzQWN0aXZlKGRhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVwaWNrZXIuc2VsZWN0ZWQkLnZhbHVlID8gY29tcGFyZURheXModGhpcy5fZGF0ZXBpY2tlci5zZWxlY3RlZCQudmFsdWUsIGRhdGUpIDogZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERheVZpZXdJdGVtIHtcbiAgICBkYXk6IG51bWJlcjtcbiAgICBtb250aDogbnVtYmVyO1xuICAgIHllYXI6IG51bWJlcjtcbiAgICBkYXRlOiBEYXRlO1xuICAgIGlzVG9kYXk6IGJvb2xlYW47XG4gICAgaXNBY3RpdmU6IGJvb2xlYW47XG4gICAgaXNDdXJyZW50TW9udGg6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9jdXNlZERheUl0ZW0ge1xuICAgIGRheTogbnVtYmVyO1xuICAgIG1vbnRoOiBudW1iZXI7XG4gICAgeWVhcjogbnVtYmVyO1xufSJdfQ==