UNPKG

@ngx-performance-ui/core

Version:
241 lines 18.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, Input, IterableDiffers, TemplateRef, ViewContainerRef, } from '@angular/core'; import { NgForOfContext } from '@angular/common'; import compare from 'just-compare'; /** * @template T */ var /** * @template T */ RecordViewTuple = /** @class */ (function () { function RecordViewTuple(record, view) { this.record = record; this.view = view; } return RecordViewTuple; }()); if (false) { /** @type {?} */ RecordViewTuple.prototype.record; /** @type {?} */ RecordViewTuple.prototype.view; } var ForDirective = /** @class */ (function () { function ForDirective(iterable, tempRef, vcRef) { this.iterable = iterable; this.tempRef = tempRef; this.vcRef = vcRef; } Object.defineProperty(ForDirective.prototype, "compareFn", { get: /** * @return {?} */ function () { return this.compareBy || compare; }, enumerable: true, configurable: true }); Object.defineProperty(ForDirective.prototype, "containCompareFn", { get: /** * @return {?} */ function () { return (this.containCompareBy || ((/** * @param {?} value * @param {?} comparision * @return {?} */ function (value, comparision) { return value.toLocaleLowerCase().indexOf(comparision.toLocaleLowerCase()) > -1; }))); }, enumerable: true, configurable: true }); Object.defineProperty(ForDirective.prototype, "trackByFn", { get: /** * @return {?} */ function () { return this.trackBy || ((/** * @param {?} index * @param {?=} item * @return {?} */ function (index, item) { if (item === void 0) { item = {}; } return item.id || index; })); }, enumerable: true, configurable: true }); /** * @private * @param {?} changes * @param {?} items * @return {?} */ ForDirective.prototype.applyChanges = /** * @private * @param {?} changes * @param {?} items * @return {?} */ function (changes, items) { var _this = this; /** @type {?} */ var insertTuples = []; changes.forEachOperation((/** * @param {?} item * @param {?} adjustedPreviousIndex * @param {?} currentIndex * @return {?} */ function (item, adjustedPreviousIndex, currentIndex) { if (item.previousIndex == null) { /** @type {?} */ var view = _this.vcRef.createEmbeddedView(_this.tempRef, new NgForOfContext((/** @type {?} */ (null)), items, -1, -1), currentIndex); /** @type {?} */ var tuple = new RecordViewTuple(item, view); insertTuples.push(tuple); } else if (currentIndex == null) { _this.vcRef.remove(adjustedPreviousIndex); } else { /** @type {?} */ var view = (/** @type {?} */ (_this.vcRef.get(adjustedPreviousIndex))); _this.vcRef.move(view, currentIndex); /** @type {?} */ var tuple = new RecordViewTuple(item, (/** @type {?} */ (view))); insertTuples.push(tuple); } })); for (var i = 0; i < insertTuples.length; i++) { insertTuples[i].view.context.$implicit = insertTuples[i].record.item; } for (var i = 0, ilen = this.vcRef.length; i < ilen; i++) { /** @type {?} */ var viewRef = (/** @type {?} */ (this.vcRef.get(i))); viewRef.context.index = i; viewRef.context.count = ilen; viewRef.context.ngForOf = items; } changes.forEachIdentityChange((/** * @param {?} record * @return {?} */ function (record) { /** @type {?} */ var viewRef = (/** @type {?} */ (_this.vcRef.get(record.currentIndex))); viewRef.context.$implicit = record.item; })); }; /** * @return {?} */ ForDirective.prototype.ngOnChanges = /** * @return {?} */ function () { var _this = this; if (!Array.isArray(this.items)) throw 'pForOf must be an array!'; /** @type {?} */ var items = []; if (this.filterValue !== undefined) { /** @type {?} */ var compareFn_1; if (this.filterContain) { if (typeof this.filterValue !== 'string') { throw 'filterValue must be a string when filterContain is true'; } compareFn_1 = this.containCompareFn; } else { compareFn_1 = this.compareFn; } items = this.items.filter((/** * @param {?} item * @return {?} */ function (item) { return compareFn_1(_this.filterKey ? item[_this.filterKey] : item, _this.filterValue); })); } else { items = this.items; } if (!this.iterableDiffer && items) { this.iterableDiffer = this.iterable.find(items).create(this.trackByFn); } if (this.iterableDiffer) { /** @type {?} */ var changes = this.iterableDiffer.diff(items); if (changes) this.applyChanges(changes, items); } }; ForDirective.decorators = [ { type: Directive, args: [{ selector: '[pFor]', },] } ]; /** @nocollapse */ ForDirective.ctorParameters = function () { return [ { type: IterableDiffers }, { type: TemplateRef }, { type: ViewContainerRef } ]; }; ForDirective.propDecorators = { items: [{ type: Input, args: ['pForOf',] }], trackBy: [{ type: Input, args: ['pForTrackBy',] }], filterKey: [{ type: Input, args: ['pForFilterKey',] }], filterValue: [{ type: Input, args: ['pForFilterValue',] }], filterContain: [{ type: Input, args: ['pForFilterContain',] }], compareBy: [{ type: Input, args: ['pForCompareBy',] }], containCompareBy: [{ type: Input, args: ['pForContainCompareBy',] }] }; return ForDirective; }()); export { ForDirective }; if (false) { /** @type {?} */ ForDirective.prototype.items; /** @type {?} */ ForDirective.prototype.trackBy; /** @type {?} */ ForDirective.prototype.filterKey; /** @type {?} */ ForDirective.prototype.filterValue; /** @type {?} */ ForDirective.prototype.filterContain; /** @type {?} */ ForDirective.prototype.compareBy; /** @type {?} */ ForDirective.prototype.containCompareBy; /** * @type {?} * @private */ ForDirective.prototype.iterableDiffer; /** * @type {?} * @private */ ForDirective.prototype.iterable; /** * @type {?} * @private */ ForDirective.prototype.tempRef; /** * @type {?} * @private */ ForDirective.prototype.vcRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZ3gtcGVyZm9ybWFuY2UtdWkvY29yZS8iLCJzb3VyY2VzIjpbImxpYi9kaXJlY3RpdmVzL2Zvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUdMLGVBQWUsRUFDZixXQUFXLEVBRVgsZ0JBQWdCLEdBRWpCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLE9BQU8sTUFBTSxjQUFjLENBQUM7Ozs7QUFJbkM7Ozs7SUFDRSx5QkFBbUIsTUFBVyxFQUFTLElBQXdDO1FBQTVELFdBQU0sR0FBTixNQUFNLENBQUs7UUFBUyxTQUFJLEdBQUosSUFBSSxDQUFvQztJQUFHLENBQUM7SUFDckYsc0JBQUM7QUFBRCxDQUFDLEFBRkQsSUFFQzs7O0lBRGEsaUNBQWtCOztJQUFFLCtCQUErQzs7QUFHakY7SUEwQ0Usc0JBQW9CLFFBQXlCLEVBQVUsT0FBeUIsRUFBVSxLQUF1QjtRQUE3RixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBa0I7SUFBRyxDQUFDO0lBakJySCxzQkFBSSxtQ0FBUzs7OztRQUFiO1lBQ0UsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQztRQUNuQyxDQUFDOzs7T0FBQTtJQUVELHNCQUFJLDBDQUFnQjs7OztRQUFwQjtZQUNFLE9BQU8sQ0FDTCxJQUFJLENBQUMsZ0JBQWdCO2dCQUNyQjs7Ozs7Z0JBQUMsVUFBQyxLQUFLLEVBQUUsV0FBVyxJQUFLLE9BQUEsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQXZFLENBQXVFLEVBQUMs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QUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDOztnQkE5R0YsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxRQUFRO2lCQUNuQjs7OztnQkFqQkMsZUFBZTtnQkFDZixXQUFXO2dCQUVYLGdCQUFnQjs7O3dCQWdCZixLQUFLLFNBQUMsUUFBUTswQkFHZCxLQUFLLFNBQUMsYUFBYTs0QkFHbkIsS0FBSyxTQUFDLGVBQWU7OEJBR3JCLEtBQUssU0FBQyxpQkFBaUI7Z0NBR3ZCLEtBQUssU0FBQyxtQkFBbUI7NEJBR3pCLEtBQUssU0FBQyxlQUFlO21DQUdyQixLQUFLLFNBQUMsc0JBQXNCOztJQXlGL0IsbUJBQUM7Q0FBQSxBQS9HRCxJQStHQztTQTVHWSxZQUFZOzs7SUFDdkIsNkJBQ2E7O0lBRWIsK0JBQzhCOztJQUU5QixpQ0FDa0I7O0lBRWxCLG1DQUNpQjs7SUFFakIscUNBQ3VCOztJQUV2QixpQ0FDcUI7O0lBRXJCLHdDQUM0Qjs7Ozs7SUFpQjVCLHNDQUE0Qzs7Ozs7SUFFaEMsZ0NBQWlDOzs7OztJQUFFLCtCQUFpQzs7Ozs7SUFBRSw2QkFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgSW5wdXQsXG4gIEl0ZXJhYmxlQ2hhbmdlUmVjb3JkLFxuICBJdGVyYWJsZURpZmZlcixcbiAgSXRlcmFibGVEaWZmZXJzLFxuICBUZW1wbGF0ZVJlZixcbiAgVHJhY2tCeUZ1bmN0aW9uLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBJdGVyYWJsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdGb3JPZkNvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IGNvbXBhcmUgZnJvbSAnanVzdC1jb21wYXJlJztcblxuZXhwb3J0IHR5cGUgQ29tcGFyZUZuPFQgPSBhbnk+ID0gKHZhbHVlOiBULCBjb21wYXJpc29uOiBUKSA9PiBib29sZWFuO1xuXG5jbGFzcyBSZWNvcmRWaWV3VHVwbGU8VD4ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVjb3JkOiBhbnksIHB1YmxpYyB2aWV3OiBFbWJlZGRlZFZpZXdSZWY8TmdGb3JPZkNvbnRleHQ8VD4+KSB7fVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbcEZvcl0nLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JEaXJlY3RpdmUge1xuICBASW5wdXQoJ3BGb3JPZicpXG4gIGl0ZW1zOiBhbnlbXTtcblxuICBASW5wdXQoJ3BGb3JUcmFja0J5JylcbiAgdHJhY2tCeTogVHJhY2tCeUZ1bmN0aW9uPGFueT47XG5cbiAgQElucHV0KCdwRm9yRmlsdGVyS2V5JylcbiAgZmlsdGVyS2V5OiBzdHJpbmc7XG5cbiAgQElucHV0KCdwRm9yRmlsdGVyVmFsdWUnKVxuICBmaWx0ZXJWYWx1ZTogYW55O1xuXG4gIEBJbnB1dCgncEZvckZpbHRlckNvbnRhaW4nKVxuICBmaWx0ZXJDb250YWluOiBib29sZWFuO1xuXG4gIEBJbnB1dCgncEZvckNvbXBhcmVCeScpXG4gIGNvbXBhcmVCeTogQ29tcGFyZUZuO1xuXG4gIEBJbnB1dCgncEZvckNvbnRhaW5Db21wYXJlQnknKVxuICBjb250YWluQ29tcGFyZUJ5OiBDb21wYXJlRm47XG5cbiAgZ2V0IGNvbXBhcmVGbigpOiBDb21wYXJlRm4ge1xuICAgIHJldHVybiB0aGlzLmNvbXBhcmVCeSB8fCBjb21wYXJlO1xuICB9XG5cbiAgZ2V0IGNvbnRhaW5Db21wYXJlRm4oKTogQ29tcGFyZUZuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jb250YWluQ29tcGFyZUJ5IHx8XG4gICAgICAoKHZhbHVlLCBjb21wYXJpc2lvbikgPT4gdmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmRleE9mKGNvbXBhcmlzaW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkpID4gLTEpXG4gICAgKTtcbiAgfVxuXG4gIGdldCB0cmFja0J5Rm4oKTogVHJhY2tCeUZ1bmN0aW9uPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnRyYWNrQnkgfHwgKChpbmRleCwgaXRlbSA9IHt9KSA9PiBpdGVtLmlkIHx8IGluZGV4KTtcbiAgfVxuXG4gIHByaXZhdGUgaXRlcmFibGVEaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPGFueT47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpdGVyYWJsZTogSXRlcmFibGVEaWZmZXJzLCBwcml2YXRlIHRlbXBSZWY6IFRlbXBsYXRlUmVmPGFueT4sIHByaXZhdGUgdmNSZWY6IFZpZXdDb250YWluZXJSZWYpIHt9XG5cbiAgcHJpdmF0ZSBhcHBseUNoYW5nZXMoY2hhbmdlczogSXRlcmFibGVDaGFuZ2VzPGFueT4sIGl0ZW1zOiBhbnlbXSkge1xuICAgIGNvbnN0IGluc2VydFR1cGxlczogUmVjb3JkVmlld1R1cGxlPGFueT5bXSA9IFtdO1xuICAgIGNoYW5nZXMuZm9yRWFjaE9wZXJhdGlvbigoaXRlbTogSXRlcmFibGVDaGFuZ2VSZWNvcmQ8YW55PiwgYWRqdXN0ZWRQcmV2aW91c0luZGV4OiBudW1iZXIsIGN1cnJlbnRJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoaXRlbS5wcmV2aW91c0luZGV4ID09IG51bGwpIHtcbiAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudmNSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KFxuICAgICAgICAgIHRoaXMudGVtcFJlZixcbiAgICAgICAgICBuZXcgTmdGb3JPZkNvbnRleHQ8YW55PihudWxsISwgaXRlbXMsIC0xLCAtMSksXG4gICAgICAgICAgY3VycmVudEluZGV4LFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB0dXBsZSA9IG5ldyBSZWNvcmRWaWV3VHVwbGU8YW55PihpdGVtLCB2aWV3KTtcbiAgICAgICAgaW5zZXJ0VHVwbGVzLnB1c2godHVwbGUpO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50SW5kZXggPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnZjUmVmLnJlbW92ZShhZGp1c3RlZFByZXZpb3VzSW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudmNSZWYuZ2V0KGFkanVzdGVkUHJldmlvdXNJbmRleCkhO1xuICAgICAgICB0aGlzLnZjUmVmLm1vdmUodmlldywgY3VycmVudEluZGV4KTtcbiAgICAgICAgY29uc3QgdHVwbGUgPSBuZXcgUmVjb3JkVmlld1R1cGxlKGl0ZW0sIDxFbWJlZGRlZFZpZXdSZWY8TmdGb3JPZkNvbnRleHQ8YW55Pj4+dmlldyk7XG4gICAgICAgIGluc2VydFR1cGxlcy5wdXNoKHR1cGxlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5zZXJ0VHVwbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpbnNlcnRUdXBsZXNbaV0udmlldy5jb250ZXh0LiRpbXBsaWNpdCA9IGluc2VydFR1cGxlc1tpXS5yZWNvcmQuaXRlbTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWxlbiA9IHRoaXMudmNSZWYubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKSB7XG4gICAgICBjb25zdCB2aWV3UmVmID0gPEVtYmVkZGVkVmlld1JlZjxOZ0Zvck9mQ29udGV4dDxhbnk+Pj50aGlzLnZjUmVmLmdldChpKTtcbiAgICAgIHZpZXdSZWYuY29udGV4dC5pbmRleCA9IGk7XG4gICAgICB2aWV3UmVmLmNvbnRleHQuY291bnQgPSBpbGVuO1xuICAgICAgdmlld1JlZi5jb250ZXh0Lm5nRm9yT2YgPSBpdGVtcztcbiAgICB9XG5cbiAgICBjaGFuZ2VzLmZvckVhY2hJZGVudGl0eUNoYW5nZSgocmVjb3JkOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHZpZXdSZWYgPSA8RW1iZWRkZWRWaWV3UmVmPE5nRm9yT2ZDb250ZXh0PGFueT4+PnRoaXMudmNSZWYuZ2V0KHJlY29yZC5jdXJyZW50SW5kZXgpO1xuICAgICAgdmlld1JlZi5jb250ZXh0LiRpbXBsaWNpdCA9IHJlY29yZC5pdGVtO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpKSB0aHJvdyAncEZvck9mIG11c3QgYmUgYW4gYXJyYXkhJztcblxuICAgIGxldCBpdGVtcyA9IFtdO1xuICAgIGlmICh0aGlzLmZpbHRlclZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBjb21wYXJlRm46IENvbXBhcmVGbjtcbiAgICAgIGlmICh0aGlzLmZpbHRlckNvbnRhaW4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbHRlclZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93ICdmaWx0ZXJWYWx1ZSBtdXN0IGJlIGEgc3RyaW5nIHdoZW4gZmlsdGVyQ29udGFpbiBpcyB0cnVlJztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBhcmVGbiA9IHRoaXMuY29udGFpbkNvbXBhcmVGbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBhcmVGbiA9IHRoaXMuY29tcGFyZUZuO1xuICAgICAgfVxuXG4gICAgICBpdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gY29tcGFyZUZuKHRoaXMuZmlsdGVyS2V5ID8gaXRlbVt0aGlzLmZpbHRlcktleV0gOiBpdGVtLCB0aGlzLmZpbHRlclZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXRlcmFibGVEaWZmZXIgJiYgaXRlbXMpIHtcbiAgICAgIHRoaXMuaXRlcmFibGVEaWZmZXIgPSB0aGlzLml0ZXJhYmxlLmZpbmQoaXRlbXMpLmNyZWF0ZSh0aGlzLnRyYWNrQnlGbik7XG4gICAgfVxuICAgIGlmICh0aGlzLml0ZXJhYmxlRGlmZmVyKSB7XG4gICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5pdGVyYWJsZURpZmZlci5kaWZmKGl0ZW1zKTtcbiAgICAgIGlmIChjaGFuZ2VzKSB0aGlzLmFwcGx5Q2hhbmdlcyhjaGFuZ2VzLCBpdGVtcyk7XG4gICAgfVxuICB9XG59XG4iXX0=