@ngx-performance-ui/core
Version:
Ngx Performance UI - Core
241 lines • 18.4 kB
JavaScript
/**
* @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=