UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

158 lines 17.7 kB
import { __decorate, __metadata } from "tslib"; import { CommonModule } from '@angular/common'; import { Directive, ElementRef, EventEmitter, Input, NgModule, OnChanges, Output, Pipe, PipeTransform, Renderer2, SimpleChanges } from '@angular/core'; export class IgxFilterOptions { constructor() { // Input text value that will be used as a filtering pattern (matching condition is based on it) this.inputValue = ''; } // Function - get value to be tested from the item // item - single item of the list to be filtered // key - property name of item, which value should be tested // Default behavior - returns "key"- named property value of item if key si provided, // otherwise textContent of the item's html element get_value(item, key) { let result = ''; if (key && item[key]) { result = item[key].toString(); } else if (item.element) { if (item.element.nativeElement) { result = item.element.nativeElement.textContent.trim(); // Check if element doesn't return the DOM element directly } else if (item.element.textContent) { result = item.element.textContent.trim(); } } return result; } // Function - formats the original text before matching process // Default behavior - returns text to lower case formatter(valueToTest) { return valueToTest.toLowerCase(); } // Function - determines whether the item met the condition // valueToTest - text value that should be tested // inputValue - text value from input that condition is based on // Default behavior - "contains" matchFn(valueToTest, inputValue) { return valueToTest.indexOf(inputValue && inputValue.toLowerCase() || '') > -1; } // Function - executed after matching test for every matched item // Default behavior - shows the item metConditionFn(item) { if (item.hasOwnProperty('hidden')) { item.hidden = false; } } // Function - executed for every NOT matched item after matching test // Default behavior - hides the item overdueConditionFn(item) { if (item.hasOwnProperty('hidden')) { item.hidden = true; } } } let IgxFilterDirective = class IgxFilterDirective { constructor(element, renderer) { this.element = element; this.filtering = new EventEmitter(false); // synchronous event emitter this.filtered = new EventEmitter(); } ngOnChanges(changes) { // Detect only changes of input value if (changes.filterOptions && changes.filterOptions.currentValue && changes.filterOptions.currentValue.inputValue !== undefined && changes.filterOptions.previousValue && changes.filterOptions.currentValue.inputValue !== changes.filterOptions.previousValue.inputValue) { this.filter(); } } filter() { if (!this.filterOptions.items) { return; } const args = { cancel: false, items: this.filterOptions.items }; this.filtering.emit(args); if (args.cancel) { return; } const pipe = new IgxFilterPipe(); const filtered = pipe.transform(this.filterOptions.items, this.filterOptions); this.filtered.emit({ filteredItems: filtered }); } }; IgxFilterDirective.ctorParameters = () => [ { type: ElementRef }, { type: Renderer2 } ]; __decorate([ Output(), __metadata("design:type", Object) ], IgxFilterDirective.prototype, "filtering", void 0); __decorate([ Output(), __metadata("design:type", Object) ], IgxFilterDirective.prototype, "filtered", void 0); __decorate([ Input('igxFilter'), __metadata("design:type", IgxFilterOptions) ], IgxFilterDirective.prototype, "filterOptions", void 0); IgxFilterDirective = __decorate([ Directive({ selector: '[igxFilter]' }), __metadata("design:paramtypes", [ElementRef, Renderer2]) ], IgxFilterDirective); export { IgxFilterDirective }; let IgxFilterPipe = class IgxFilterPipe { transform(items, // options - initial settings of filter functionality options) { let result = []; if (!items || !items.length || !options) { return; } if (options.items) { items = options.items; } result = items.filter((item) => { const match = options.matchFn(options.formatter(options.get_value(item, options.key)), options.inputValue); if (match) { if (options.metConditionFn) { options.metConditionFn(item); } } else { if (options.overdueConditionFn) { options.overdueConditionFn(item); } } return match; }); return result; } }; IgxFilterPipe = __decorate([ Pipe({ name: 'igxFilter', pure: false }) ], IgxFilterPipe); export { IgxFilterPipe }; /** * @hidden */ let IgxFilterModule = class IgxFilterModule { }; IgxFilterModule = __decorate([ NgModule({ declarations: [IgxFilterDirective, IgxFilterPipe], exports: [IgxFilterDirective, IgxFilterPipe], imports: [CommonModule] }) ], IgxFilterModule); export { IgxFilterModule }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvZGlyZWN0aXZlcy9maWx0ZXIvZmlsdGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxNQUFNLEVBQ04sSUFBSSxFQUNKLGFBQWEsRUFDYixTQUFTLEVBQ1QsYUFBYSxFQUNoQixNQUFNLGVBQWUsQ0FBQztBQUV2QixNQUFNLE9BQU8sZ0JBQWdCO0lBQTdCO1FBQ0ksZ0dBQWdHO1FBQ3pGLGVBQVUsR0FBRyxFQUFFLENBQUM7SUEyRDNCLENBQUM7SUFuREcsa0RBQWtEO0lBQ2xELGdEQUFnRDtJQUNoRCw0REFBNEQ7SUFDNUQscUZBQXFGO0lBQ3JGLG1EQUFtRDtJQUM1QyxTQUFTLENBQUMsSUFBUyxFQUFFLEdBQVc7UUFDbkMsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRWhCLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNsQixNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pDO2FBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3JCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7Z0JBQzVCLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzNELDJEQUEyRDthQUMxRDtpQkFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO2dCQUNqQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxX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Q0FBQztHQUVXLGFBQWEsQ0FpQ3pCO1NBakNZLGFBQWE7QUFtQzFCOztHQUVHO0FBTUgsSUFBYSxlQUFlLEdBQTVCLE1BQWEsZUFBZTtDQUMzQixDQUFBO0FBRFksZUFBZTtJQUwzQixRQUFRLENBQUM7UUFDTixZQUFZLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLENBQUM7UUFDakQsT0FBTyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDO1FBQzVDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztLQUMxQixDQUFDO0dBQ1csZUFBZSxDQUMzQjtTQURZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE91dHB1dCxcbiAgICBQaXBlLFxuICAgIFBpcGVUcmFuc2Zvcm0sXG4gICAgUmVuZGVyZXIyLFxuICAgIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBJZ3hGaWx0ZXJPcHRpb25zIHtcbiAgICAvLyBJbnB1dCB0ZXh0IHZhbHVlIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGEgZmlsdGVyaW5nIHBhdHRlcm4gKG1hdGNoaW5nIGNvbmRpdGlvbiBpcyBiYXNlZCBvbiBpdClcbiAgICBwdWJsaWMgaW5wdXRWYWx1ZSA9ICcnO1xuXG4gICAgLy8gSXRlbSBwcm9wZXJ0eSwgd2hpY2ggdmFsdWUgc2hvdWxkIGJlIHVzZWQgZm9yIGZpbHRlcmluZ1xuICAgIHB1YmxpYyBrZXk6IHN0cmluZztcblxuICAgIC8vIFJlcHJlc2VudCBpdGVtcyBvZiB0aGUgbGlzdC4gSXQgc2hvdWxkIGJlIHVzZWQgdG8gaGFuZGxlIGRlY2FsYXJhdGV2ZWx5IGRlZmluZWQgd2lkZ2V0c1xuICAgIHB1YmxpYyBpdGVtczogYW55W107XG5cbiAgICAvLyBGdW5jdGlvbiAtIGdldCB2YWx1ZSB0byBiZSB0ZXN0ZWQgZnJvbSB0aGUgaXRlbVxuICAgIC8vIGl0ZW0gLSBzaW5nbGUgaXRlbSBvZiB0aGUgbGlzdCB0byBiZSBmaWx0ZXJlZFxuICAgIC8vIGtleSAtIHByb3BlcnR5IG5hbWUgb2YgaXRlbSwgd2hpY2ggdmFsdWUgc2hvdWxkIGJlIHRlc3RlZFxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3IgLSByZXR1cm5zIFwia2V5XCItIG5hbWVkIHByb3BlcnR5IHZhbHVlIG9mIGl0ZW0gaWYga2V5IHNpIHByb3ZpZGVkLFxuICAgIC8vIG90aGVyd2lzZSB0ZXh0Q29udGVudCBvZiB0aGUgaXRlbSdzIGh0bWwgZWxlbWVudFxuICAgIHB1YmxpYyBnZXRfdmFsdWUoaXRlbTogYW55LCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcblxuICAgICAgICBpZiAoa2V5ICYmIGl0ZW1ba2V5XSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gaXRlbVtrZXldLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5lbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpdGVtLmVsZW1lbnQubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudC50cmltKCk7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBlbGVtZW50IGRvZXNuJ3QgcmV0dXJuIHRoZSBET00gZWxlbWVudCBkaXJlY3RseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmVsZW1lbnQudGV4dENvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpdGVtLmVsZW1lbnQudGV4dENvbnRlbnQudHJpbSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiAtIGZvcm1hdHMgdGhlIG9yaWdpbmFsIHRleHQgYmVmb3JlIG1hdGNoaW5nIHByb2Nlc3NcbiAgICAvLyBEZWZhdWx0IGJlaGF2aW9yIC0gcmV0dXJucyB0ZXh0IHRvIGxvd2VyIGNhc2VcbiAgICBwdWJsaWMgZm9ybWF0dGVyKHZhbHVlVG9UZXN0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWVUb1Rlc3QudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiAtIGRldGVybWluZXMgd2hldGhlciB0aGUgaXRlbSBtZXQgdGhlIGNvbmRpdGlvblxuICAgIC8vIHZhbHVlVG9UZXN0IC0gdGV4dCB2YWx1ZSB0aGF0IHNob3VsZCBiZSB0ZXN0ZWRcbiAgICAvLyBpbnB1dFZhbHVlIC0gdGV4dCB2YWx1ZSBmcm9tIGlucHV0IHRoYXQgY29uZGl0aW9uIGlzIGJhc2VkIG9uXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciAtIFwiY29udGFpbnNcIlxuICAgIHB1YmxpYyBtYXRjaEZuKHZhbHVlVG9UZXN0OiBzdHJpbmcsIGlucHV0VmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmFsdWVUb1Rlc3QuaW5kZXhPZihpbnB1dFZhbHVlICYmIGlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSB8fCAnJykgPiAtMTtcbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiAtIGV4ZWN1dGVkIGFmdGVyIG1hdGNoaW5nIHRlc3QgZm9yIGV2ZXJ5IG1hdGNoZWQgaXRlbVxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3IgLSBzaG93cyB0aGUgaXRlbVxuICAgIHB1YmxpYyBtZXRDb25kaXRpb25GbihpdGVtOiBhbnkpIHtcbiAgICAgICAgaWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoJ2hpZGRlbicpKSB7XG4gICAgICAgICAgICBpdGVtLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gLSBleGVjdXRlZCBmb3IgZXZlcnkgTk9UIG1hdGNoZWQgaXRlbSBhZnRlciBtYXRjaGluZyB0ZXN0XG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciAtIGhpZGVzIHRoZSBpdGVtXG4gICAgcHVibGljIG92ZXJkdWVDb25kaXRpb25GbihpdGVtOiBhbnkpIHtcbiAgICAgICAgaWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoJ2hpZGRlbicpKSB7XG4gICAgICAgICAgICBpdGVtLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4RmlsdGVyXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4RmlsdGVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICBAT3V0cHV0KCkgcHVibGljIGZpbHRlcmluZyA9IG5ldyBFdmVudEVtaXR0ZXIoZmFsc2UpOyAvLyBzeW5jaHJvbm91cyBldmVudCBlbWl0dGVyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBmaWx0ZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBJbnB1dCgnaWd4RmlsdGVyJykgcHVibGljIGZpbHRlck9wdGlvbnM6IElneEZpbHRlck9wdGlvbnM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICAvLyBEZXRlY3Qgb25seSBjaGFuZ2VzIG9mIGlucHV0IHZhbHVlXG4gICAgICAgIGlmIChjaGFuZ2VzLmZpbHRlck9wdGlvbnMgJiZcbiAgICAgICAgICAgIGNoYW5nZXMuZmlsdGVyT3B0aW9ucy5jdXJyZW50VmFsdWUgJiZcbiAgICAgICAgICAgIGNoYW5nZXMuZmlsdGVyT3B0aW9ucy5jdXJyZW50VmFsdWUuaW5wdXRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBjaGFuZ2VzLmZpbHRlck9wdGlvbnMucHJldmlvdXNWYWx1ZSAmJlxuICAgICAgICAgICAgY2hhbmdlcy5maWx0ZXJPcHRpb25zLmN1cnJlbnRWYWx1ZS5pbnB1dFZhbHVlICE9PSBjaGFuZ2VzLmZpbHRlck9wdGlvbnMucHJldmlvdXNWYWx1ZS5pbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5maWx0ZXJPcHRpb25zLml0ZW1zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0geyBjYW5jZWw6IGZhbHNlLCBpdGVtczogdGhpcy5maWx0ZXJPcHRpb25zLml0ZW1zIH07XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nLmVtaXQoYXJncyk7XG5cbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwaXBlID0gbmV3IElneEZpbHRlclBpcGUoKTtcblxuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHBpcGUudHJhbnNmb3JtKHRoaXMuZmlsdGVyT3B0aW9ucy5pdGVtcywgdGhpcy5maWx0ZXJPcHRpb25zKTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZC5lbWl0KHsgZmlsdGVyZWRJdGVtczogZmlsdGVyZWQgfSk7XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgbmFtZTogJ2lneEZpbHRlcicsXG4gICAgcHVyZTogZmFsc2Vcbn0pXG5cbmV4cG9ydCBjbGFzcyBJZ3hGaWx0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgcHVibGljIHRyYW5zZm9ybShpdGVtczogYW55W10sXG4gICAgICAgICAgICAgICAgICAgICAvLyBvcHRpb25zIC0gaW5pdGlhbCBzZXR0aW5ncyBvZiBmaWx0ZXIgZnVuY3Rpb25hbGl0eVxuICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogSWd4RmlsdGVyT3B0aW9ucykge1xuXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcblxuICAgICAgICBpZiAoIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGggfHwgIW9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLml0ZW1zKSB7XG4gICAgICAgICAgICBpdGVtcyA9IG9wdGlvbnMuaXRlbXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQgPSBpdGVtcy5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBvcHRpb25zLm1hdGNoRm4ob3B0aW9ucy5mb3JtYXR0ZXIob3B0aW9ucy5nZXRfdmFsdWUoaXRlbSwgb3B0aW9ucy5rZXkpKSwgb3B0aW9ucy5pbnB1dFZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubWV0Q29uZGl0aW9uRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tZXRDb25kaXRpb25GbihpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm92ZXJkdWVDb25kaXRpb25Gbikge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm92ZXJkdWVDb25kaXRpb25GbihpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0lneEZpbHRlckRpcmVjdGl2ZSwgSWd4RmlsdGVyUGlwZV0sXG4gICAgZXhwb3J0czogW0lneEZpbHRlckRpcmVjdGl2ZSwgSWd4RmlsdGVyUGlwZV0sXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4RmlsdGVyTW9kdWxlIHtcbn1cbiJdfQ==