UNPKG

@bimeister/pupakit.calendar

Version:
80 lines 14 kB
import '@angular/cdk/scrolling'; import { Injectable } from '@angular/core'; import { filterNotNil, filterTruthy, isNil, shareReplayWithRefCount } from '@bimeister/utilities'; import { BehaviorSubject } from 'rxjs'; import { map, startWith, switchMap, take } from 'rxjs/operators'; import { MONTHS_IN_YEAR } from '../declarations/constants/months-in-year.const'; import '../declarations/enums/month-index.enum'; import '../declarations/interfaces/calendar-month.interface'; import { CalendarConfigService } from './calendar-config.service'; import * as i0 from "@angular/core"; import * as i1 from "./calendar-config.service"; export class CalendarManipulatorService { constructor(calendarConfigService) { this.calendarConfigService = calendarConfigService; this.virtualScrollViewport$ = new BehaviorSubject(null); this.currentIndex$ = this.virtualScrollViewport$.pipe(filterNotNil(), switchMap((viewport) => viewport.scrolledIndexChange), shareReplayWithRefCount()); this.virtualScrollInitialized$ = this.currentIndex$.pipe(map(() => true), startWith(false), shareReplayWithRefCount()); this.currentCalendarMonth$ = this.currentIndex$.pipe(map((currentIndex) => { const monthIndex = currentIndex % MONTHS_IN_YEAR; const yearsCount = (currentIndex - monthIndex) / MONTHS_IN_YEAR; return { year: yearsCount + this.calendarConfigService.startYear, month: monthIndex, }; })); } get initialCalendarMonth() { const currentDate = new Date(); return { month: currentDate.getMonth(), year: currentDate.getFullYear(), }; } get initialMonthIndex() { const initialCalendarMonth = this.initialCalendarMonth; return ((initialCalendarMonth.year - this.calendarConfigService.startYear) * MONTHS_IN_YEAR + Number(initialCalendarMonth.month)); } setVirtualScrollViewport(viewport) { if (isNil(viewport)) { throw new Error('[CalendarStateService] viewport can not be null or undefined'); } this.virtualScrollViewport$.next(viewport); } clearVirtualScrollViewport() { this.virtualScrollViewport$.next(null); } resetScroll(behavior) { this.scrollToMonthByIndex(this.initialMonthIndex, behavior); } scrollToYear(year, behavior) { const yearFirstMonthIndex = (year - this.calendarConfigService.startYear) * MONTHS_IN_YEAR; this.scrollToMonthByIndex(yearFirstMonthIndex, behavior); } scrollToMonth(calendarMonth, behavior) { const monthIndex = (calendarMonth.year - this.calendarConfigService.startYear) * MONTHS_IN_YEAR + Number(calendarMonth.month); this.scrollToMonthByIndex(monthIndex, behavior); } scrollToNextMonth(behavior) { this.currentIndex$.pipe(take(1)).subscribe((currentIndex) => { this.scrollToMonthByIndex(currentIndex + 1, behavior); }); } scrollToPreviousMonth(behavior) { this.currentIndex$.pipe(take(1)).subscribe((currentIndex) => { this.scrollToMonthByIndex(currentIndex - 1, behavior); }); } scrollToMonthByIndex(index, behavior) { this.virtualScrollInitialized$ .pipe(filterTruthy(), switchMap(() => this.virtualScrollViewport$), take(1)) .subscribe((viewport) => requestAnimationFrame(() => viewport.scrollToIndex(index, behavior))); } } CalendarManipulatorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CalendarManipulatorService, deps: [{ token: i1.CalendarConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); CalendarManipulatorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CalendarManipulatorService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CalendarManipulatorService, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i1.CalendarConfigService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbWFuaXB1bGF0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9jYWxlbmRhci1tYW5pcHVsYXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQXlDLHdCQUF3QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2hGLE9BQTJCLHdDQUF3QyxDQUFDO0FBQ3BFLE9BQThCLHFEQUFxRCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7QUFHbEUsTUFBTSxPQUFPLDBCQUEwQjtJQThDckMsWUFBNkIscUJBQTRDO1FBQTVDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUE3Q3hELDJCQUFzQixHQUNyQyxJQUFJLGVBQWUsQ0FBa0MsSUFBSSxDQUFDLENBQUM7UUFFNUMsa0JBQWEsR0FBdUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FDbkYsWUFBWSxFQUFFLEVBQ2QsU0FBUyxDQUFDLENBQUMsUUFBa0MsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQy9FLHVCQUF1QixFQUFFLENBQzFCLENBQUM7UUFFZSw4QkFBeUIsR0FBd0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3ZGLEdBQUcsQ0FBQyxHQUFHLEVBQUUs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QUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFvQixFQUFFLEVBQUU7WUFDbEUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sb0JBQW9CLENBQUMsS0FBYSxFQUFFLFFBQXdCO1FBQ2pFLElBQUksQ0FBQyx5QkFBeUI7YUFDM0IsSUFBSSxDQUNILFlBQVksRUFBRSxFQUNkLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFDNUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNSO2FBQ0EsU0FBUyxDQUFDLENBQUMsUUFBa0MsRUFBRSxFQUFFLENBQ2hELHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQ3JFLENBQUM7SUFDTixDQUFDOzt3SEFuR1UsMEJBQTBCOzRIQUExQiwwQkFBMEI7NEZBQTFCLDBCQUEwQjtrQkFEdEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyTm90TmlsLCBmaWx0ZXJUcnV0aHksIGlzTmlsLCBzaGFyZVJlcGxheVdpdGhSZWZDb3VudCB9IGZyb20gJ0BiaW1laXN0ZXIvdXRpbGl0aWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1PTlRIU19JTl9ZRUFSIH0gZnJvbSAnLi4vZGVjbGFyYXRpb25zL2NvbnN0YW50cy9tb250aHMtaW4teWVhci5jb25zdCc7XG5pbXBvcnQgeyBNb250aEluZGV4IH0gZnJvbSAnLi4vZGVjbGFyYXRpb25zL2VudW1zL21vbnRoLWluZGV4LmVudW0nO1xuaW1wb3J0IHsgQ2FsZW5kYXJNb250aCB9IGZyb20gJy4uL2RlY2xhcmF0aW9ucy9pbnRlcmZhY2VzL2NhbGVuZGFyLW1vbnRoLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDYWxlbmRhckNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2NhbGVuZGFyLWNvbmZpZy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyTWFuaXB1bGF0b3JTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSB2aXJ0dWFsU2Nyb2xsVmlld3BvcnQkOiBCZWhhdmlvclN1YmplY3Q8Q2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IHwgbnVsbD4gPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8Q2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IHwgbnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50SW5kZXgkOiBPYnNlcnZhYmxlPG51bWJlcj4gPSB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCQucGlwZShcbiAgICBmaWx0ZXJOb3ROaWwoKSxcbiAgICBzd2l0Y2hNYXAoKHZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpID0+IHZpZXdwb3J0LnNjcm9sbGVkSW5kZXhDaGFuZ2UpLFxuICAgIHNoYXJlUmVwbGF5V2l0aFJlZkNvdW50KClcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHZpcnR1YWxTY3JvbGxJbml0aWFsaXplZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmN1cnJlbnRJbmRleCQucGlwZShcbiAgICBtYXAoKCkgPT4gdHJ1ZSksXG4gICAgc3RhcnRXaXRoKGZhbHNlKSxcbiAgICBzaGFyZVJlcGxheVdpdGhSZWZDb3VudCgpXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRDYWxlbmRhck1vbnRoJDogT2JzZXJ2YWJsZTxDYWxlbmRhck1vbnRoPiA9IHRoaXMuY3VycmVudEluZGV4JC5waXBlKFxuICAgIG1hcCgoY3VycmVudEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IG1vbnRoSW5kZXg6IE1vbnRoSW5kZXggPSBjdXJyZW50SW5kZXggJSBNT05USFNfSU5fWUVBUjtcbiAgICAgIGNvbnN0IHllYXJzQ291bnQ6IG51bWJlciA9IChjdXJyZW50SW5kZXggLSBtb250aEluZGV4KSAvIE1PTlRIU19JTl9ZRUFSO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB5ZWFyOiB5ZWFyc0NvdW50ICsgdGhpcy5jYWxlbmRhckNvbmZpZ1NlcnZpY2Uuc3RhcnRZZWFyLFxuICAgICAgICBtb250aDogbW9udGhJbmRleCxcbiAgICAgIH07XG4gICAgfSlcbiAgKTtcblxuICBwcml2YXRlIGdldCBpbml0aWFsQ2FsZW5kYXJNb250aCgpOiBDYWxlbmRhck1vbnRoIHtcbiAgICBjb25zdCBjdXJyZW50RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbW9udGg6IGN1cnJlbnREYXRlLmdldE1vbnRoKCksXG4gICAgICB5ZWFyOiBjdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldCBpbml0aWFsTW9udGhJbmRleCgpOiBudW1iZXIge1xuICAgIGNvbnN0IGluaXRpYWxDYWxlbmRhck1vbnRoOiBDYWxlbmRhck1vbnRoID0gdGhpcy5pbml0aWFsQ2FsZW5kYXJNb250aDtcblxuICAgIHJldHVybiAoXG4gICAgICAoaW5pdGlhbENhbGVuZGFyTW9udGgueWVhciAtIHRoaXMuY2FsZW5kYXJDb25maWdTZXJ2aWNlLnN0YXJ0WWVhcikgKiBNT05USFNfSU5fWUVBUiArXG4gICAgICBOdW1iZXIoaW5pdGlhbENhbGVuZGFyTW9udGgubW9udGgpXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2FsZW5kYXJDb25maWdTZXJ2aWNlOiBDYWxlbmRhckNvbmZpZ1NlcnZpY2UpIHt9XG5cbiAgcHVibGljIHNldFZpcnR1YWxTY3JvbGxWaWV3cG9ydCh2aWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KTogdm9pZCB7XG4gICAgaWYgKGlzTmlsKHZpZXdwb3J0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdbQ2FsZW5kYXJTdGF0ZVNlcnZpY2VdIHZpZXdwb3J0IGNhbiBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCQubmV4dCh2aWV3cG9ydCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJWaXJ0dWFsU2Nyb2xsVmlld3BvcnQoKTogdm9pZCB7XG4gICAgdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQkLm5leHQobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRTY3JvbGwoYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yKTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGxUb01vbnRoQnlJbmRleCh0aGlzLmluaXRpYWxNb250aEluZGV4LCBiZWhhdmlvcik7XG4gIH1cblxuICBwdWJsaWMgc2Nyb2xsVG9ZZWFyKHllYXI6IG51bWJlciwgYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yKTogdm9pZCB7XG4gICAgY29uc3QgeWVhckZpcnN0TW9udGhJbmRleDogbnVtYmVyID0gKHllYXIgLSB0aGlzLmNhbGVuZGFyQ29uZmlnU2VydmljZS5zdGFydFllYXIpICogTU9OVEhTX0lOX1lFQVI7XG5cbiAgICB0aGlzLnNjcm9sbFRvTW9udGhCeUluZGV4KHllYXJGaXJzdE1vbnRoSW5kZXgsIGJlaGF2aW9yKTtcbiAgfVxuXG4gIHB1YmxpYyBzY3JvbGxUb01vbnRoKGNhbGVuZGFyTW9udGg6IENhbGVuZGFyTW9udGgsIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvcik6IHZvaWQge1xuICAgIGNvbnN0IG1vbnRoSW5kZXg6IG51bWJlciA9XG4gICAgICAoY2FsZW5kYXJNb250aC55ZWFyIC0gdGhpcy5jYWxlbmRhckNvbmZpZ1NlcnZpY2Uuc3RhcnRZZWFyKSAqIE1PTlRIU19JTl9ZRUFSICsgTnVtYmVyKGNhbGVuZGFyTW9udGgubW9udGgpO1xuXG4gICAgdGhpcy5zY3JvbGxUb01vbnRoQnlJbmRleChtb250aEluZGV4LCBiZWhhdmlvcik7XG4gIH1cblxuICBwdWJsaWMgc2Nyb2xsVG9OZXh0TW9udGgoYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50SW5kZXgkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChjdXJyZW50SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgdGhpcy5zY3JvbGxUb01vbnRoQnlJbmRleChjdXJyZW50SW5kZXggKyAxLCBiZWhhdmlvcik7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2Nyb2xsVG9QcmV2aW91c01vbnRoKGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvcik6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudEluZGV4JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoY3VycmVudEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsVG9Nb250aEJ5SW5kZXgoY3VycmVudEluZGV4IC0gMSwgYmVoYXZpb3IpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNjcm9sbFRvTW9udGhCeUluZGV4KGluZGV4OiBudW1iZXIsIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvcik6IHZvaWQge1xuICAgIHRoaXMudmlydHVhbFNjcm9sbEluaXRpYWxpemVkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlclRydXRoeSgpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQkKSxcbiAgICAgICAgdGFrZSgxKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmlld3BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCkgPT5cbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHZpZXdwb3J0LnNjcm9sbFRvSW5kZXgoaW5kZXgsIGJlaGF2aW9yKSlcbiAgICAgICk7XG4gIH1cbn1cbiJdfQ==