theme-lib
Version:
This is a simple example Angular Library published to npm.
260 lines • 18.4 kB
JavaScript
/**
* @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=