UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

260 lines 18.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; /* * @license * Copyright Akveo. All Rights Reserved. * Licensed under the MIT License. See License.txt in the project root for license information. */ import { Injectable } from '@angular/core'; import { NbDateService } from './date.service'; import { batch, range } from '../helpers'; /** * @template D */ var NbCalendarMonthModelService = /** @class */ (function () { function NbCalendarMonthModelService(dateService) { this.dateService = dateService; } /** * @param {?} activeMonth * @param {?=} boundingMonth * @return {?} */ NbCalendarMonthModelService.prototype.createDaysGrid = /** * @param {?} activeMonth * @param {?=} boundingMonth * @return {?} */ function (activeMonth, boundingMonth) { if (boundingMonth === void 0) { boundingMonth = true; } /** @type {?} */ var weeks = this.createDates(activeMonth); return this.withBoundingMonths(weeks, activeMonth, boundingMonth); }; /** * @private * @param {?} activeMonth * @return {?} */ NbCalendarMonthModelService.prototype.createDates = /** * @private * @param {?} activeMonth * @return {?} */ function (activeMonth) { /** @type {?} */ var days = this.createDateRangeForMonth(activeMonth); /** @type {?} */ var startOfWeekDayDiff = this.getStartOfWeekDayDiff(activeMonth); return batch(days, this.dateService.DAYS_IN_WEEK, startOfWeekDayDiff); }; /** * @private * @param {?} weeks * @param {?} activeMonth * @param {?} boundingMonth * @return {?} */ NbCalendarMonthModelService.prototype.withBoundingMonths = /** * @private * @param {?} weeks * @param {?} activeMonth * @param {?} boundingMonth * @return {?} */ function (weeks, activeMonth, boundingMonth) { /** @type {?} */ var withBoundingMonths = weeks; if (this.isShouldAddPrevBoundingMonth(withBoundingMonths)) { withBoundingMonths = this.addPrevBoundingMonth(withBoundingMonths, activeMonth, boundingMonth); } if (this.isShouldAddNextBoundingMonth(withBoundingMonths)) { withBoundingMonths = this.addNextBoundingMonth(withBoundingMonths, activeMonth, boundingMonth); } return withBoundingMonths; }; /** * @private * @param {?} weeks * @param {?} activeMonth * @param {?} boundingMonth * @return {?} */ NbCalendarMonthModelService.prototype.addPrevBoundingMonth = /** * @private * @param {?} weeks * @param {?} activeMonth * @param {?} boundingMonth * @return {?} */ function (weeks, activeMonth, boundingMonth) { /** @type {?} */ var firstWeek = weeks.shift(); /** @type {?} */ var requiredItems = this.dateService.DAYS_IN_WEEK - firstWeek.length; firstWeek.unshift.apply(firstWeek, tslib_1.__spread(this.createPrevBoundingDays(activeMonth, boundingMonth, requiredItems))); return tslib_1.__spread([firstWeek], weeks); }; /** * @private * @param {?} weeks * @param {?} activeMonth * @param {?} boundingMonth * @return {?} */ NbCalendarMonthModelService.prototype.addNextBoundingMonth = /** * @private * @param {?} weeks * @param {?} activeMonth * @param {?} boundingMonth * @return {?} */ function (weeks, activeMonth, boundingMonth) { /** @type {?} */ var lastWeek = weeks.pop(); /** @type {?} */ var requiredItems = this.dateService.DAYS_IN_WEEK - lastWeek.length; lastWeek.push.apply(lastWeek, tslib_1.__spread(this.createNextBoundingDays(activeMonth, boundingMonth, requiredItems))); return tslib_1.__spread(weeks, [lastWeek]); }; /** * @private * @param {?} activeMonth * @param {?} boundingMonth * @param {?} requiredItems * @return {?} */ NbCalendarMonthModelService.prototype.createPrevBoundingDays = /** * @private * @param {?} activeMonth * @param {?} boundingMonth * @param {?} requiredItems * @return {?} */ function (activeMonth, boundingMonth, requiredItems) { /** @type {?} */ var month = this.dateService.addMonth(activeMonth, -1); /** @type {?} */ var daysInMonth = this.dateService.getNumberOfDaysInMonth(month); return this.createDateRangeForMonth(month) .slice(daysInMonth - requiredItems) .map(function (date) { return boundingMonth ? date : null; }); }; /** * @private * @param {?} activeMonth * @param {?} boundingMonth * @param {?} requiredItems * @return {?} */ NbCalendarMonthModelService.prototype.createNextBoundingDays = /** * @private * @param {?} activeMonth * @param {?} boundingMonth * @param {?} requiredItems * @return {?} */ function (activeMonth, boundingMonth, requiredItems) { /** @type {?} */ var month = this.dateService.addMonth(activeMonth, 1); return this.createDateRangeForMonth(month) .slice(0, requiredItems) .map(function (date) { return boundingMonth ? date : null; }); }; /** * @private * @param {?} date * @return {?} */ NbCalendarMonthModelService.prototype.getStartOfWeekDayDiff = /** * @private * @param {?} date * @return {?} */ function (date) { /** @type {?} */ var startOfMonth = this.dateService.getMonthStart(date); return this.getWeekStartDiff(startOfMonth); }; /** * @private * @param {?} date * @return {?} */ NbCalendarMonthModelService.prototype.getWeekStartDiff = /** * @private * @param {?} date * @return {?} */ function (date) { return (7 - this.dateService.getFirstDayOfWeek() + this.dateService.getDayOfWeek(date)) % 7; }; /** * @private * @param {?} weeks * @return {?} */ NbCalendarMonthModelService.prototype.isShouldAddPrevBoundingMonth = /** * @private * @param {?} weeks * @return {?} */ function (weeks) { return weeks[0].length < this.dateService.DAYS_IN_WEEK; }; /** * @private * @param {?} weeks * @return {?} */ NbCalendarMonthModelService.prototype.isShouldAddNextBoundingMonth = /** * @private * @param {?} weeks * @return {?} */ function (weeks) { return weeks[weeks.length - 1].length < this.dateService.DAYS_IN_WEEK; }; /** * @private * @param {?} date * @return {?} */ NbCalendarMonthModelService.prototype.createDateRangeForMonth = /** * @private * @param {?} date * @return {?} */ function (date) { var _this = this; /** @type {?} */ var daysInMonth = this.dateService.getNumberOfDaysInMonth(date); return range(daysInMonth, function (i) { /** @type {?} */ var year = _this.dateService.getYear(date); /** @type {?} */ var month = _this.dateService.getMonth(date); return _this.dateService.createDate(year, month, i + 1); }); }; NbCalendarMonthModelService.decorators = [ { type: Injectable } ]; /** @nocollapse */ NbCalendarMonthModelService.ctorParameters = function () { return [ { type: NbDateService } ]; }; return NbCalendarMonthModelService; }()); export { NbCalendarMonthModelService }; if (false) { /** * @type {?} * @protected */ NbCalendarMonthModelService.prototype.dateService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbW9udGgtbW9kZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3RoZW1lLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2NhbGVuZGFyLWtpdC9zZXJ2aWNlcy9jYWxlbmRhci1tb250aC1tb2RlbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFNQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQzs7OztBQUcxQztJQUdFLHFDQUFzQixXQUE2QjtRQUE3QixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7SUFDbkQsQ0FBQzs7Ozs7O0lBRUQsb0RBQWM7Ozs7O0lBQWQsVUFBZSxXQUFjLEVBQUUsYUFBNkI7UUFBN0IsOEJBQUEsRUFBQSxvQkFBNkI7O1lBQ3BELEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztRQUMzQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7Ozs7OztJQUVPLGlEQUFXOzs7OztJQUFuQixVQUFvQixXQUFjOztZQUMxQixJQUFJLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQzs7WUFDaEQsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQztRQUNsRSxPQUFPLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN4RSxDQUFDOzs7Ozs7OztJQUVPLHdEQUFrQjs7Ozs7OztJQUExQixVQUEyQixLQUFZLEVBQUUsV0FBYyxFQUFFLGFBQXNCOztZQUN6RSxrQkFBa0Is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bnQiOlsiLypcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IEFrdmVvLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IE5iRGF0ZVNlcnZpY2UgfSBmcm9tICcuL2RhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IGJhdGNoLCByYW5nZSB9IGZyb20gJy4uL2hlbHBlcnMnO1xyXG5cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE5iQ2FsZW5kYXJNb250aE1vZGVsU2VydmljZTxEPiB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBkYXRlU2VydmljZTogTmJEYXRlU2VydmljZTxEPikge1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlRGF5c0dyaWQoYWN0aXZlTW9udGg6IEQsIGJvdW5kaW5nTW9udGg6IGJvb2xlYW4gPSB0cnVlKTogRFtdW10ge1xyXG4gICAgY29uc3Qgd2Vla3MgPSB0aGlzLmNyZWF0ZURhdGVzKGFjdGl2ZU1vbnRoKTtcclxuICAgIHJldHVybiB0aGlzLndpdGhCb3VuZGluZ01vbnRocyh3ZWVrcywgYWN0aXZlTW9udGgsIGJvdW5kaW5nTW9udGgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVEYXRlcyhhY3RpdmVNb250aDogRCk6IERbXVtdIHtcclxuICAgIGNvbnN0IGRheXMgPSB0aGlzLmNyZWF0ZURhdGVSYW5nZUZvck1vbnRoKGFjdGl2ZU1vbnRoKTtcclxuICAgIGNvbnN0IHN0YXJ0T2ZXZWVrRGF5RGlmZiA9IHRoaXMuZ2V0U3RhcnRPZldlZWtEYXlEaWZmKGFjdGl2ZU1vbnRoKTtcclxuICAgIHJldHVybiBiYXRjaChkYXlzLCB0aGlzLmRhdGVTZXJ2aWNlLkRBWVNfSU5fV0VFSywgc3RhcnRPZldlZWtEYXlEaWZmKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgd2l0aEJvdW5kaW5nTW9udGhzKHdlZWtzOiBEW11bXSwgYWN0aXZlTW9udGg6IEQsIGJvdW5kaW5nTW9udGg6IGJvb2xlYW4pOiBEW11bXSB7XHJcbiAgICBsZXQgd2l0aEJvdW5kaW5nTW9udGhzID0gd2Vla3M7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNTaG91bGRBZGRQcmV2Qm91bmRpbmdNb250aCh3aXRoQm91bmRpbmdNb250aHMpKSB7XHJcbiAgICAgIHdpdGhCb3VuZGluZ01vbnRocyA9IHRoaXMuYWRkUHJldkJvdW5kaW5nTW9udGgod2l0aEJvdW5kaW5nTW9udGhzLCBhY3RpdmVNb250aCwgYm91bmRpbmdNb250aCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNTaG91bGRBZGROZXh0Qm91bmRpbmdNb250aCh3aXRoQm91bmRpbmdNb250aHMpKSB7XHJcbiAgICAgIHdpdGhCb3VuZGluZ01vbnRocyA9IHRoaXMuYWRkTmV4dEJvdW5kaW5nTW9udGgod2l0aEJvdW5kaW5nTW9udGhzLCBhY3RpdmVNb250aCwgYm91bmRpbmdNb250aCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHdpdGhCb3VuZGluZ01vbnRocztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkUHJldkJvdW5kaW5nTW9udGgod2Vla3M6IERbXVtdLCBhY3RpdmVNb250aDogRCwgYm91bmRpbmdNb250aDogYm9vbGVhbik6IERbXVtdIHtcclxuICAgIGNvbnN0IGZpcnN0V2VlayA9IHdlZWtzLnNoaWZ0KCk7XHJcbiAgICBjb25zdCByZXF1aXJlZEl0ZW1zOiBudW1iZXIgPSB0aGlzLmRhdGVTZXJ2aWNlLkRBWVNfSU5fV0VFSyAtIGZpcnN0V2Vlay5sZW5ndGg7XHJcbiAgICBmaXJzdFdlZWsudW5zaGlmdCguLi50aGlzLmNyZWF0ZVByZXZCb3VuZGluZ0RheXMoYWN0aXZlTW9udGgsIGJvdW5kaW5nTW9udGgsIHJlcXVpcmVkSXRlbXMpKTtcclxuICAgIHJldHVybiBbZmlyc3RXZWVrLCAuLi53ZWVrc107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZE5leHRCb3VuZGluZ01vbnRoKHdlZWtzOiBEW11bXSwgYWN0aXZlTW9udGg6IEQsIGJvdW5kaW5nTW9udGg6IGJvb2xlYW4pOiBEW11bXSB7XHJcbiAgICBjb25zdCBsYXN0V2VlayA9IHdlZWtzLnBvcCgpO1xyXG4gICAgY29uc3QgcmVxdWlyZWRJdGVtczogbnVtYmVyID0gdGhpcy5kYXRlU2VydmljZS5EQVlTX0lOX1dFRUsgLSBsYXN0V2Vlay5sZW5ndGg7XHJcbiAgICBsYXN0V2Vlay5wdXNoKC4uLnRoaXMuY3JlYXRlTmV4dEJvdW5kaW5nRGF5cyhhY3RpdmVNb250aCwgYm91bmRpbmdNb250aCwgcmVxdWlyZWRJdGVtcykpO1xyXG4gICAgcmV0dXJuIFsuLi53ZWVrcywgbGFzdFdlZWtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVQcmV2Qm91bmRpbmdEYXlzKGFjdGl2ZU1vbnRoOiBELCBib3VuZGluZ01vbnRoOiBib29sZWFuLCByZXF1aXJlZEl0ZW1zOiBudW1iZXIpOiBEW10ge1xyXG4gICAgY29uc3QgbW9udGggPSB0aGlzLmRhdGVTZXJ2aWNlLmFkZE1vbnRoKGFjdGl2ZU1vbnRoLCAtMSk7XHJcbiAgICBjb25zdCBkYXlzSW5Nb250aCA9IHRoaXMuZGF0ZVNlcnZpY2UuZ2V0TnVtYmVyT2ZEYXlzSW5Nb250aChtb250aCk7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVEYXRlUmFuZ2VGb3JNb250aChtb250aClcclxuICAgICAgLnNsaWNlKGRheXNJbk1vbnRoIC0gcmVxdWlyZWRJdGVtcylcclxuICAgICAgLm1hcChkYXRlID0+IGJvdW5kaW5nTW9udGggPyBkYXRlIDogbnVsbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZU5leHRCb3VuZGluZ0RheXMoYWN0aXZlTW9udGg6IEQsIGJvdW5kaW5nTW9udGg6IGJvb2xlYW4sIHJlcXVpcmVkSXRlbXM6IG51bWJlcik6IERbXSB7XHJcbiAgICBjb25zdCBtb250aCA9IHRoaXMuZGF0ZVNlcnZpY2UuYWRkTW9udGgoYWN0aXZlTW9udGgsIDEpO1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlRGF0ZVJhbmdlRm9yTW9udGgobW9udGgpXHJcbiAgICAgIC5zbGljZSgwLCByZXF1aXJlZEl0ZW1zKVxyXG4gICAgICAubWFwKGRhdGUgPT4gYm91bmRpbmdNb250aCA/IGRhdGUgOiBudWxsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U3RhcnRPZldlZWtEYXlEaWZmKGRhdGU6IEQpOiBudW1iZXIge1xyXG4gICAgY29uc3Qgc3RhcnRPZk1vbnRoID0gdGhpcy5kYXRlU2VydmljZS5nZXRNb250aFN0YXJ0KGRhdGUpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0V2Vla1N0YXJ0RGlmZihzdGFydE9mTW9udGgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRXZWVrU3RhcnREaWZmKGRhdGU6IEQpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuICg3IC0gdGhpcy5kYXRlU2VydmljZS5nZXRGaXJzdERheU9mV2VlaygpICsgdGhpcy5kYXRlU2VydmljZS5nZXREYXlPZldlZWsoZGF0ZSkpICUgNztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNTaG91bGRBZGRQcmV2Qm91bmRpbmdNb250aCh3ZWVrczogRFtdW10pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB3ZWVrc1swXS5sZW5ndGggPCB0aGlzLmRhdGVTZXJ2aWNlLkRBWVNfSU5fV0VFSztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNTaG91bGRBZGROZXh0Qm91bmRpbmdNb250aCh3ZWVrczogRFtdW10pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB3ZWVrc1t3ZWVrcy5sZW5ndGggLSAxXS5sZW5ndGggPCB0aGlzLmRhdGVTZXJ2aWNlLkRBWVNfSU5fV0VFSztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRGF0ZVJhbmdlRm9yTW9udGgoZGF0ZTogRCk6IERbXSB7XHJcbiAgICBjb25zdCBkYXlzSW5Nb250aDogbnVtYmVyID0gdGhpcy5kYXRlU2VydmljZS5nZXROdW1iZXJPZkRheXNJbk1vbnRoKGRhdGUpO1xyXG4gICAgcmV0dXJuIHJhbmdlKGRheXNJbk1vbnRoLCBpID0+IHtcclxuICAgICAgY29uc3QgeWVhciA9IHRoaXMuZGF0ZVNlcnZpY2UuZ2V0WWVhcihkYXRlKTtcclxuICAgICAgY29uc3QgbW9udGggPSB0aGlzLmRhdGVTZXJ2aWNlLmdldE1vbnRoKGRhdGUpO1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRlU2VydmljZS5jcmVhdGVEYXRlKHllYXIsIG1vbnRoLCBpICsgMSlcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=