UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

96 lines 14.7 kB
import { Component, Inject, Optional, ViewChild } from '@angular/core'; import { of } from 'rxjs'; import { map, startWith } from 'rxjs/operators'; import { EnumerationFieldValidation } from '../models/enumeration-field'; import { EnumerationAutocompleteFilterProperty } from "./enumeration-autocomplete-filter-property"; import { DATA_FIELD_PORTAL_DATA } from "../../models/data-field-portal-data-injection-token"; import { AbstractBaseDataFieldComponent } from "../../base-component/abstract-base-data-field.component"; import * as i0 from "@angular/core"; import * as i1 from "@ngx-translate/core"; export class AbstractEnumerationAutocompleteSelectFieldComponent extends AbstractBaseDataFieldComponent { _translate; text; filteredOptions; constructor(_translate, dataFieldPortalData) { super(dataFieldPortalData); this._translate = _translate; } ngOnInit() { this.filteredOptions = this.formControlRef.valueChanges.pipe(startWith(''), map(value => this._filter(value))); } ngOnDestroy() { this.filteredOptions = undefined; } filterType() { if (this.checkPropertyInComponent('filter')) { return this.dataField.component.properties.filter; } } _filter(value) { let filterType = this.filterType()?.toLowerCase(); switch (filterType) { case EnumerationAutocompleteFilterProperty.SUBSTRING: return this._filterInclude(value); case EnumerationAutocompleteFilterProperty.PREFIX: return this._filterIndexOf(value); default: return this._filterIndexOf(value); } } _filterInclude(value) { const filterValue = value?.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, ''); return this.dataField.choices.filter(option => option.value.toLowerCase() .normalize('NFD') .replace(/[\u0300-\u036f]/g, '') .includes(filterValue)); } /** * Function to filter out matchless options without accent and case-sensitive differences * @param value to compare matching options * @return return matched options */ _filterIndexOf(value) { const filterValue = value?.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, ''); return this.dataField.choices.filter(option => option.value.toLowerCase().normalize('NFD') .replace(/[\u0300-\u036f]/g, '').indexOf(filterValue) === 0); } change() { if (this.text.nativeElement.value !== undefined) { this.filteredOptions = of(this._filter(this.text.nativeElement.value)); } } renderSelection = (key) => { if (key !== undefined && key !== '' && key !== null) { if (this.dataField.choices.find(choice => choice.key === key)) { return this.dataField.choices.find(choice => choice.key === key).value; } } return key; }; buildErrorMessage() { if (this.formControlRef.hasError(EnumerationFieldValidation.REQUIRED)) { return this._translate.instant('dataField.validations.required'); } if (this.formControlRef.hasError(EnumerationFieldValidation.WRONG_VALUE)) { return this._translate.instant('dataField.validations.enumeration'); } } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractEnumerationAutocompleteSelectFieldComponent, deps: [{ token: i1.TranslateService }, { token: DATA_FIELD_PORTAL_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractEnumerationAutocompleteSelectFieldComponent, selector: "ncc-abstract-enumeration-autocomplete-field", viewQueries: [{ propertyName: "text", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractEnumerationAutocompleteSelectFieldComponent, decorators: [{ type: Component, args: [{ selector: 'ncc-abstract-enumeration-autocomplete-field', template: '' }] }], ctorParameters: () => [{ type: i1.TranslateService }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DATA_FIELD_PORTAL_DATA] }] }], propDecorators: { text: [{ type: ViewChild, args: ['input'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZW51bWVyYXRpb24tYXV0b2NvbXBsZXRlLXNlbGVjdC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL2RhdGEtZmllbGRzL2VudW1lcmF0aW9uLWZpZWxkL2VudW1lcmF0aW9uLWF1dG9jb21wbGV0ZS1zZWxlY3QtZmllbGQvYWJzdHJhY3QtZW51bWVyYXRpb24tYXV0b2NvbXBsZXRlLXNlbGVjdC1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBYyxNQUFNLEVBQXFCLFFBQVEsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFhLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBbUIsMEJBQTBCLEVBQXdCLE1BQU0sNkJBQTZCLENBQUM7QUFFaEgsT0FBTyxFQUFDLHFDQUFxQyxFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDakcsT0FBTyxFQUFDLHNCQUFzQixFQUFzQixNQUFNLHFEQUFxRCxDQUFDO0FBQ2hILE9BQU8sRUFBQyw4QkFBOEIsRUFBQyxNQUFNLHlEQUF5RCxDQUFDOzs7QUFNdkcsTUFBTSxPQUFnQixtREFBb0QsU0FBUSw4QkFBZ0Q7SUFLeEc7SUFIRixJQUFJLENBQWE7SUFDckMsZUFBZSxDQUEyQztJQUUxRCxZQUFzQixVQUE0QixFQUNNLG1CQUEwRDtRQUM5RyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUZULGVBQVUsR0FBVixVQUFVLENBQWtCO0lBR2xELENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxD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Q0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQzFFO1NBQ0o7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUMsQ0FBQTtJQUVNLGlCQUFpQjtRQUNwQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ25FLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNwRTtRQUNELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDdEUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0wsQ0FBQzt3R0FuRmlCLG1EQUFtRCxrREFNckMsc0JBQXNCOzRGQU5wQyxtREFBbUQseU1BRjNELEVBQUU7OzRGQUVNLG1EQUFtRDtrQkFKeEUsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsNkNBQTZDO29CQUN2RCxRQUFRLEVBQUUsRUFBRTtpQkFDZjs7MEJBT2dCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsc0JBQXNCO3lDQUpsQyxJQUFJO3NCQUF2QixTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCBzdGFydFdpdGh9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RW51bWVyYXRpb25GaWVsZCwgRW51bWVyYXRpb25GaWVsZFZhbGlkYXRpb24sIEVudW1lcmF0aW9uRmllbGRWYWx1ZX0gZnJvbSAnLi4vbW9kZWxzL2VudW1lcmF0aW9uLWZpZWxkJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0VudW1lcmF0aW9uQXV0b2NvbXBsZXRlRmlsdGVyUHJvcGVydHl9IGZyb20gXCIuL2VudW1lcmF0aW9uLWF1dG9jb21wbGV0ZS1maWx0ZXItcHJvcGVydHlcIjtcbmltcG9ydCB7REFUQV9GSUVMRF9QT1JUQUxfREFUQSwgRGF0YUZpZWxkUG9ydGFsRGF0YX0gZnJvbSBcIi4uLy4uL21vZGVscy9kYXRhLWZpZWxkLXBvcnRhbC1kYXRhLWluamVjdGlvbi10b2tlblwiO1xuaW1wb3J0IHtBYnN0cmFjdEJhc2VEYXRhRmllbGRDb21wb25lbnR9IGZyb20gXCIuLi8uLi9iYXNlLWNvbXBvbmVudC9hYnN0cmFjdC1iYXNlLWRhdGEtZmllbGQuY29tcG9uZW50XCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmNjLWFic3RyYWN0LWVudW1lcmF0aW9uLWF1dG9jb21wbGV0ZS1maWVsZCcsXG4gICAgdGVtcGxhdGU6ICcnXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0RW51bWVyYXRpb25BdXRvY29tcGxldGVTZWxlY3RGaWVsZENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0QmFzZURhdGFGaWVsZENvbXBvbmVudDxFbnVtZXJhdGlvbkZpZWxkPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0JykgdGV4dDogRWxlbWVudFJlZjtcbiAgICBmaWx0ZXJlZE9wdGlvbnM6IE9ic2VydmFibGU8QXJyYXk8RW51bWVyYXRpb25GaWVsZFZhbHVlPj47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERBVEFfRklFTERfUE9SVEFMX0RBVEEpIGRhdGFGaWVsZFBvcnRhbERhdGE6IERhdGFGaWVsZFBvcnRhbERhdGE8RW51bWVyYXRpb25GaWVsZD4pIHtcbiAgICAgICAgc3VwZXIoZGF0YUZpZWxkUG9ydGFsRGF0YSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5mb3JtQ29udHJvbFJlZi52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIHN0YXJ0V2l0aCgnJyksXG4gICAgICAgICAgICBtYXAodmFsdWUgPT4gdGhpcy5fZmlsdGVyKHZhbHVlKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbHRlclR5cGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tQcm9wZXJ0eUluQ29tcG9uZW50KCdmaWx0ZXInKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUZpZWxkLmNvbXBvbmVudC5wcm9wZXJ0aWVzLmZpbHRlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZmlsdGVyKHZhbHVlOiBzdHJpbmcpOiBBcnJheTxFbnVtZXJhdGlvbkZpZWxkVmFsdWU+IHtcbiAgICAgICAgbGV0IGZpbHRlclR5cGUgPSB0aGlzLmZpbHRlclR5cGUoKT8udG9Mb3dlckNhc2UoKVxuICAgICAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRW51bWVyYXRpb25BdXRvY29tcGxldGVGaWx0ZXJQcm9wZXJ0eS5TVUJTVFJJTkc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckluY2x1ZGUodmFsdWUpO1xuICAgICAgICAgICAgY2FzZSBFbnVtZXJhdGlvbkF1dG9jb21wbGV0ZUZpbHRlclByb3BlcnR5LlBSRUZJWDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVySW5kZXhPZih2YWx1ZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJJbmRleE9mKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZmlsdGVySW5jbHVkZSh2YWx1ZTogc3RyaW5nKTogQXJyYXk8RW51bWVyYXRpb25GaWVsZFZhbHVlPiB7XG4gICAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdmFsdWU/LnRvTG93ZXJDYXNlKCkubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFGaWVsZC5jaG9pY2VzLmZpbHRlcihvcHRpb24gPT5cbiAgICAgICAgICAgIG9wdGlvbi52YWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXG4gICAgICAgICAgICAgICAgLmluY2x1ZGVzKGZpbHRlclZhbHVlKSk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBmaWx0ZXIgb3V0IG1hdGNobGVzcyBvcHRpb25zIHdpdGhvdXQgYWNjZW50IGFuZCBjYXNlLXNlbnNpdGl2ZSBkaWZmZXJlbmNlc1xuICAgICAqIEBwYXJhbSAgdmFsdWUgdG8gY29tcGFyZSBtYXRjaGluZyBvcHRpb25zXG4gICAgICogQHJldHVybiAgcmV0dXJuIG1hdGNoZWQgb3B0aW9uc1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBfZmlsdGVySW5kZXhPZih2YWx1ZTogc3RyaW5nKTogQXJyYXk8RW51bWVyYXRpb25GaWVsZFZhbHVlPiB7XG4gICAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdmFsdWU/LnRvTG93ZXJDYXNlKCkubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUZpZWxkLmNob2ljZXMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24udmFsdWUudG9Mb3dlckNhc2UoKS5ub3JtYWxpemUoJ05GRCcpXG4gICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpLmluZGV4T2YoZmlsdGVyVmFsdWUpID09PSAwKTtcbiAgICB9XG5cbiAgICBjaGFuZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnRleHQubmF0aXZlRWxlbWVudC52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IG9mKHRoaXMuX2ZpbHRlcih0aGlzLnRleHQubmF0aXZlRWxlbWVudC52YWx1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlclNlbGVjdGlvbiA9IChrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkICYmIGtleSAhPT0gJycgJiYga2V5ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhRmllbGQuY2hvaWNlcy5maW5kKGNob2ljZSA9PiBjaG9pY2Uua2V5ID09PSBrZXkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUZpZWxkLmNob2ljZXMuZmluZChjaG9pY2UgPT4gY2hvaWNlLmtleSA9PT0ga2V5KS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cblxuICAgIHB1YmxpYyBidWlsZEVycm9yTWVzc2FnZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2xSZWYuaGFzRXJyb3IoRW51bWVyYXRpb25GaWVsZFZhbGlkYXRpb24uUkVRVUlSRUQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ2RhdGFGaWVsZC52YWxpZGF0aW9ucy5yZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvcm1Db250cm9sUmVmLmhhc0Vycm9yKEVudW1lcmF0aW9uRmllbGRWYWxpZGF0aW9uLldST05HX1ZBTFVFKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdkYXRhRmllbGQudmFsaWRhdGlvbnMuZW51bWVyYXRpb24nKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==