UNPKG

@bimeister/pupakit.calendar

Version:
69 lines 9.83 kB
import { Injectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import { take } from 'rxjs/operators'; import '../declarations/enums/calendar-quick-select-mode.enum'; import { getClearDate } from '../declarations/functions/get-clear-date.function'; import { getSortedDates } from '../declarations/functions/get-sorted-dates.function'; import * as i0 from "@angular/core"; const MULTI_SELECTION_DATES_COUNT = 2; function getDateWithClearedTime(date) { const clearDate = getClearDate(); clearDate.setFullYear(date.getFullYear()); clearDate.setMonth(date.getMonth()); clearDate.setDate(date.getDate()); return clearDate; } function findDateIndexInArray(array, date) { return array.findIndex((item) => item.getTime() === date.getTime()); } function getUniqDates(dates) { return dates.filter((date, index, array) => { const foundIndex = findDateIndexInArray(array, date); return foundIndex === index; }); } function getProcessedDates(dates) { return getSortedDates(getUniqDates(dates.map(getDateWithClearedTime)), 'ascending'); } export class CalendarStateService { constructor() { this.isRange = false; this.selectedDates$ = new BehaviorSubject([]); this.quickSelectMode$ = new BehaviorSubject(null); } setSelectedDates(dates) { this.selectedDates$.next(getProcessedDates(dates)); } addSelectedDate(newDate) { const preparedDate = getDateWithClearedTime(newDate); this.selectedDates$.pipe(take(1)).subscribe((selectedDates) => { const updatedDates = this.isRange ? this.patchDatesForRangeSelection(selectedDates, preparedDate) : [preparedDate]; this.selectedDates$.next(updatedDates); }); } patchDatesForRangeSelection(dates, newDate) { const hasAlreadyAdded = findDateIndexInArray(dates, newDate) >= 0; const isResetNeeded = dates.length >= MULTI_SELECTION_DATES_COUNT; if (hasAlreadyAdded || isResetNeeded) { return [newDate]; } return getProcessedDates([...dates, newDate]); } setQuickSelectMode(mode) { this.quickSelectMode$.next(mode); } resetQuickSelectMode() { this.quickSelectMode$.next(null); } setIsRange(isRange) { this.isRange = isRange; } } CalendarStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CalendarStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); CalendarStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CalendarStateService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CalendarStateService, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItc3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9jYWxlbmRhci1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBd0MsdURBQXVELENBQUM7QUFDaEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxREFBcUQsQ0FBQzs7QUFFckYsTUFBTSwyQkFBMkIsR0FBVyxDQUFDLENBQUM7QUFFOUMsU0FBUyxzQkFBc0IsQ0FBQyxJQUFVO0lBQ3hDLE1BQU0sU0FBUyxHQUFTLFlBQVksRUFBRSxDQUFDO0lBRXZDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDMUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNwQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBRWxDLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLEtBQWEsRUFBRSxJQUFVO0lBQ3JELE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxLQUFhO0lBQ2pDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVUsRUFBRSxLQUFhLEVBQUUsS0FBYSxFQUFFLEVBQUU7UUFDL0QsTUFBTSxVQUFVLEdBQVcsb0JBQW9CLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTdELE9BQU8sVUFBVSxLQUFLLEtBQUssQ0FBQztJQUM5QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEtBQWE7SUFDdEMsT0FBTyxjQUFjLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3RGLENBQUM7QUFHRCxNQUFNLE9BQU8sb0JBQW9CO0lBRGpDO1FBRVUsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUVqQixtQkFBYyxHQUE0QixJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUUxRSxxQkFBZ0IsR0FDOUIsSUFBSSxlQUFlLENBQTBCLElBQUksQ0FBQyxDQUFDO0tBd0N0RDtJQXRDUSxnQkFBZ0IsQ0FBQyxLQUFhO1FBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVNLGVBQWUsQ0FBQyxPQUFhO1FBQ2xDLE1BQU0sWUFBWSxHQUFTLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQXFCLEVBQUUsRUFBRTtZQUNwRSxNQUFNLFlBQVksR0FBVyxJQUFJLENBQUMsT0FBTztnQkFDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDO2dCQUMvRCxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUVuQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSwyQkFBMkIsQ0FBQyxLQUFhLEVBQUUsT0FBYTtRQUM3RCxNQUFNLGVBQWUsR0FBWSxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNFLE1BQU0sYUFBYSxHQUFZLEtBQUssQ0FBQyxNQUFNLElBQUksMkJBQTJCLENBQUM7UUFFM0UsSUFBSSxlQUFlLElBQUksYUFBYSxFQUFFO1lBQ3BDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNsQjtRQUVELE9BQU8saUJBQWlCLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxJQUE2QjtRQUNyRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTSxvQkFBb0I7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU0sVUFBVSxDQUFDLE9BQWdCO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7O2tIQTdDVSxvQkFBb0I7c0hBQXBCLG9CQUFvQjs0RkFBcEIsb0JBQW9CO2tCQURoQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2FsZW5kYXJRdWlja1NlbGVjdE1vZGUgfSBmcm9tICcuLi9kZWNsYXJhdGlvbnMvZW51bXMvY2FsZW5kYXItcXVpY2stc2VsZWN0LW1vZGUuZW51bSc7XG5pbXBvcnQgeyBnZXRDbGVhckRhdGUgfSBmcm9tICcuLi9kZWNsYXJhdGlvbnMvZnVuY3Rpb25zL2dldC1jbGVhci1kYXRlLmZ1bmN0aW9uJztcbmltcG9ydCB7IGdldFNvcnRlZERhdGVzIH0gZnJvbSAnLi4vZGVjbGFyYXRpb25zL2Z1bmN0aW9ucy9nZXQtc29ydGVkLWRhdGVzLmZ1bmN0aW9uJztcblxuY29uc3QgTVVMVElfU0VMRUNUSU9OX0RBVEVTX0NPVU5UOiBudW1iZXIgPSAyO1xuXG5mdW5jdGlvbiBnZXREYXRlV2l0aENsZWFyZWRUaW1lKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgY29uc3QgY2xlYXJEYXRlOiBEYXRlID0gZ2V0Q2xlYXJEYXRlKCk7XG5cbiAgY2xlYXJEYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gIGNsZWFyRGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkpO1xuICBjbGVhckRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSk7XG5cbiAgcmV0dXJuIGNsZWFyRGF0ZTtcbn1cblxuZnVuY3Rpb24gZmluZERhdGVJbmRleEluQXJyYXkoYXJyYXk6IERhdGVbXSwgZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gIHJldHVybiBhcnJheS5maW5kSW5kZXgoKGl0ZW06IERhdGUpID0+IGl0ZW0uZ2V0VGltZSgpID09PSBkYXRlLmdldFRpbWUoKSk7XG59XG5cbmZ1bmN0aW9uIGdldFVuaXFEYXRlcyhkYXRlczogRGF0ZVtdKTogRGF0ZVtdIHtcbiAgcmV0dXJuIGRhdGVzLmZpbHRlcigoZGF0ZTogRGF0ZSwgaW5kZXg6IG51bWJlciwgYXJyYXk6IERhdGVbXSkgPT4ge1xuICAgIGNvbnN0IGZvdW5kSW5kZXg6IG51bWJlciA9IGZpbmREYXRlSW5kZXhJbkFycmF5KGFycmF5LCBkYXRlKTtcblxuICAgIHJldHVybiBmb3VuZEluZGV4ID09PSBpbmRleDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFByb2Nlc3NlZERhdGVzKGRhdGVzOiBEYXRlW10pOiBEYXRlW10ge1xuICByZXR1cm4gZ2V0U29ydGVkRGF0ZXMoZ2V0VW5pcURhdGVzKGRhdGVzLm1hcChnZXREYXRlV2l0aENsZWFyZWRUaW1lKSksICdhc2NlbmRpbmcnKTtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyU3RhdGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBpc1JhbmdlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGVkRGF0ZXMkOiBCZWhhdmlvclN1YmplY3Q8RGF0ZVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0ZVtdPihbXSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHF1aWNrU2VsZWN0TW9kZSQ6IEJlaGF2aW9yU3ViamVjdDxDYWxlbmRhclF1aWNrU2VsZWN0TW9kZSB8IG51bGw+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PENhbGVuZGFyUXVpY2tTZWxlY3RNb2RlPihudWxsKTtcblxuICBwdWJsaWMgc2V0U2VsZWN0ZWREYXRlcyhkYXRlczogRGF0ZVtdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZERhdGVzJC5uZXh0KGdldFByb2Nlc3NlZERhdGVzKGRhdGVzKSk7XG4gIH1cblxuICBwdWJsaWMgYWRkU2VsZWN0ZWREYXRlKG5ld0RhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBwcmVwYXJlZERhdGU6IERhdGUgPSBnZXREYXRlV2l0aENsZWFyZWRUaW1lKG5ld0RhdGUpO1xuXG4gICAgdGhpcy5zZWxlY3RlZERhdGVzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoc2VsZWN0ZWREYXRlczogRGF0ZVtdKSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkRGF0ZXM6IERhdGVbXSA9IHRoaXMuaXNSYW5nZVxuICAgICAgICA/IHRoaXMucGF0Y2hEYXRlc0ZvclJhbmdlU2VsZWN0aW9uKHNlbGVjdGVkRGF0ZXMsIHByZXBhcmVkRGF0ZSlcbiAgICAgICAgOiBbcHJlcGFyZWREYXRlXTtcblxuICAgICAgdGhpcy5zZWxlY3RlZERhdGVzJC5uZXh0KHVwZGF0ZWREYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcGF0Y2hEYXRlc0ZvclJhbmdlU2VsZWN0aW9uKGRhdGVzOiBEYXRlW10sIG5ld0RhdGU6IERhdGUpOiBEYXRlW10ge1xuICAgIGNvbnN0IGhhc0FscmVhZHlBZGRlZDogYm9vbGVhbiA9IGZpbmREYXRlSW5kZXhJbkFycmF5KGRhdGVzLCBuZXdEYXRlKSA+PSAwO1xuICAgIGNvbnN0IGlzUmVzZXROZWVkZWQ6IGJvb2xlYW4gPSBkYXRlcy5sZW5ndGggPj0gTVVMVElfU0VMRUNUSU9OX0RBVEVTX0NPVU5UO1xuXG4gICAgaWYgKGhhc0FscmVhZHlBZGRlZCB8fCBpc1Jlc2V0TmVlZGVkKSB7XG4gICAgICByZXR1cm4gW25ld0RhdGVdO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRQcm9jZXNzZWREYXRlcyhbLi4uZGF0ZXMsIG5ld0RhdGVdKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRRdWlja1NlbGVjdE1vZGUobW9kZTogQ2FsZW5kYXJRdWlja1NlbGVjdE1vZGUpOiB2b2lkIHtcbiAgICB0aGlzLnF1aWNrU2VsZWN0TW9kZSQubmV4dChtb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldFF1aWNrU2VsZWN0TW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLnF1aWNrU2VsZWN0TW9kZSQubmV4dChudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJc1JhbmdlKGlzUmFuZ2U6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzUmFuZ2UgPSBpc1JhbmdlO1xuICB9XG59XG4iXX0=