@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
126 lines • 18.8 kB
JavaScript
import { Component, Inject, Optional, ViewChild } from '@angular/core';
import { COMMA, ENTER } from '@angular/cdk/keycodes';
import { of } from 'rxjs';
import { MultichoiceAutocompleteFilterProperty } from './multichoice-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";
export class AbstractMultichoiceAutocompleteFieldComponentComponent extends AbstractBaseDataFieldComponent {
input;
separatorKeysCodes = [ENTER, COMMA];
subscriptionChangeData$;
filteredOptions;
constructor(dataFieldPortalData) {
super(dataFieldPortalData);
}
ngOnInit() {
this.subscriptionChangeData$ = this.formControlRef.valueChanges.subscribe(newVal => {
this.filteredOptions = of(this._filter(newVal ?? '').filter((option) => !this.dataField.value?.includes(option.key)));
});
}
ngOnDestroy() {
this.filteredOptions = undefined;
this.subscriptionChangeData$.unsubscribe();
}
add(event) {
if (this.formControlRef.disabled) {
this.input.nativeElement.value = '';
return;
}
const value = event['key'] ?? '';
if (value) {
this.dataField.value = this.dataField.value === null ? [] : this.dataField.value;
const choiceArray = [...this.dataField.value];
choiceArray.push(value);
this.dataField.value = choiceArray;
this.input.nativeElement.value = '';
this.change();
}
else {
this.input.nativeElement.value = '';
this.change();
}
}
remove(value) {
if (this.formControlRef.disabled) {
return;
}
const index = this.dataField.value.indexOf(value);
if (index >= 0) {
const choiceArray = [...this.dataField.value];
choiceArray.splice(index, 1);
this.dataField.value = choiceArray;
this.change();
}
}
change() {
if (this.formControlRef.disabled) {
this.filteredOptions = of([]);
return;
}
if (this.input.nativeElement.value !== undefined) {
this.filteredOptions = of(this._filter(this.input.nativeElement.value).filter((option) => !this.dataField.value?.includes(option.key)));
}
}
filterType() {
if (this.checkPropertyInComponent('filter')) {
return this.dataField.component.properties.filter;
}
}
_filter(value) {
let filterType = this.filterType()?.toLowerCase();
switch (filterType) {
case MultichoiceAutocompleteFilterProperty.SUBSTRING:
return this._filterInclude(value);
case MultichoiceAutocompleteFilterProperty.PREFIX:
return this._filterIndexOf(value);
default:
return this._filterIndexOf(value);
}
}
_filterInclude(value) {
if (Array.isArray(value)) {
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));
}
_filterIndexOf(value) {
if (Array.isArray(value)) {
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);
}
renderSelection = (key) => {
if (key !== undefined && key !== '' && key !== null) {
const choice = this.dataField.choices.find(c => c.key === key);
if (choice) {
return choice.value;
}
}
return key;
};
getValueFromKey(key) {
return this.dataField.choices.find(choice => choice.key === key)?.value;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractMultichoiceAutocompleteFieldComponentComponent, deps: [{ token: DATA_FIELD_PORTAL_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractMultichoiceAutocompleteFieldComponentComponent, selector: "ncc-abstract-multichoice-autocomplete-field", viewQueries: [{ propertyName: "input", 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: AbstractMultichoiceAutocompleteFieldComponentComponent, decorators: [{
type: Component,
args: [{
selector: 'ncc-abstract-multichoice-autocomplete-field',
template: ''
}]
}], ctorParameters: () => [{ type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [DATA_FIELD_PORTAL_DATA]
}] }], propDecorators: { input: [{
type: ViewChild,
args: ['input']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbXVsdGljaG9pY2UtYXV0b2NvbXBsZXRlLWZpZWxkLWNvbXBvbmVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL2RhdGEtZmllbGRzL211bHRpY2hvaWNlLWZpZWxkL211bHRpY2hvaWNlLWF1dG9jb21wbGV0ZS1maWVsZC9hYnN0cmFjdC1tdWx0aWNob2ljZS1hdXRvY29tcGxldGUtZmllbGQtY29tcG9uZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLE1BQU0sRUFBcUIsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVwRyxPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRW5ELE9BQU8sRUFBYSxFQUFFLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFDLHFDQUFxQyxFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDakcsT0FBTyxFQUFDLHNCQUFzQixFQUFzQixNQUFNLHFEQUFxRCxDQUFDO0FBQ2hILE9BQU8sRUFBQyw4QkFBOEIsRUFBQyxNQUFNLHlEQUF5RCxDQUFDOztBQU12RyxNQUFNLE9BQWdCLHNEQUF1RCxTQUFRLDhCQUFnRDtJQUU3RyxLQUFLLENBQWE7SUFFdEMsa0JBQWtCLEdBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFOUMsdUJBQXVCLENBQWU7SUFFdEMsZUFBZSxDQUEyQztJQUUxRCxZQUF3RCxtQkFBMEQ7UUFDOUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFD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d0dBeEhpQixzREFBc0Qsa0JBVXhDLHNCQUFzQjs0RkFWcEMsc0RBQXNELDBNQUY5RCxFQUFFOzs0RkFFTSxzREFBc0Q7a0JBSjNFLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLDZDQUE2QztvQkFDdkQsUUFBUSxFQUFFLEVBQUU7aUJBQ2Y7OzBCQVdnQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLHNCQUFzQjt5Q0FSbEMsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNdWx0aWNob2ljZUZpZWxkLCBNdWx0aWNob2ljZUZpZWxkVmFsdWV9IGZyb20gJy4uL21vZGVscy9tdWx0aWNob2ljZS1maWVsZCc7XG5pbXBvcnQge0NPTU1BLCBFTlRFUn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7TWF0Q2hpcElucHV0RXZlbnR9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge011bHRpY2hvaWNlQXV0b2NvbXBsZXRlRmlsdGVyUHJvcGVydHl9IGZyb20gJy4vbXVsdGljaG9pY2UtYXV0b2NvbXBsZXRlLWZpbHRlci1wcm9wZXJ0eSc7XG5pbXBvcnQge0RBVEFfRklFTERfUE9SVEFMX0RBVEEsIERhdGFGaWVsZFBvcnRhbERhdGF9IGZyb20gXCIuLi8uLi9tb2RlbHMvZGF0YS1maWVsZC1wb3J0YWwtZGF0YS1pbmplY3Rpb24tdG9rZW5cIjtcbmltcG9ydCB7QWJzdHJhY3RCYXNlRGF0YUZpZWxkQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vYmFzZS1jb21wb25lbnQvYWJzdHJhY3QtYmFzZS1kYXRhLWZpZWxkLmNvbXBvbmVudFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jYy1hYnN0cmFjdC1tdWx0aWNob2ljZS1hdXRvY29tcGxldGUtZmllbGQnLFxuICAgIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE11bHRpY2hvaWNlQXV0b2NvbXBsZXRlRmllbGRDb21wb25lbnRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEJhc2VEYXRhRmllbGRDb21wb25lbnQ8TXVsdGljaG9pY2VGaWVsZD4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0OiBFbGVtZW50UmVmO1xuXG4gICAgc2VwYXJhdG9yS2V5c0NvZGVzOiBudW1iZXJbXSA9IFtFTlRFUiwgQ09NTUFdO1xuXG4gICAgc3Vic2NyaXB0aW9uQ2hhbmdlRGF0YSQ6IFN1YnNjcmlwdGlvbjtcblxuICAgIGZpbHRlcmVkT3B0aW9uczogT2JzZXJ2YWJsZTxBcnJheTxNdWx0aWNob2ljZUZpZWxkVmFsdWU+PjtcblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoREFUQV9GSUVMRF9QT1JUQUxfREFUQSkgZGF0YUZpZWxkUG9ydGFsRGF0YTogRGF0YUZpZWxkUG9ydGFsRGF0YTxNdWx0aWNob2ljZUZpZWxkPikge1xuICAgICAgICBzdXBlcihkYXRhRmllbGRQb3J0YWxEYXRhKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25DaGFuZ2VEYXRhJCA9IHRoaXMuZm9ybUNvbnRyb2xSZWYudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShuZXdWYWwgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBvZih0aGlzLl9maWx0ZXIobmV3VmFsID8/ICcnKS5maWx0ZXIoKG9wdGlvbikgPT4gIXRoaXMuZGF0YUZpZWxkLnZhbHVlPy5pbmNsdWRlcyhvcHRpb24ua2V5KSkpO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25DaGFuZ2VEYXRhJC51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGFkZChldmVudDogTWF0Q2hpcElucHV0RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2xSZWYuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudFsna2V5J10gPz8gJyc7XG5cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC52YWx1ZSA9IHRoaXMuZGF0YUZpZWxkLnZhbHVlID09PSBudWxsID8gW10gOiB0aGlzLmRhdGFGaWVsZC52YWx1ZVxuICAgICAgICAgICAgY29uc3QgY2hvaWNlQXJyYXkgPSBbLi4udGhpcy5kYXRhRmllbGQudmFsdWVdO1xuICAgICAgICAgICAgY2hvaWNlQXJyYXkucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC52YWx1ZSA9IGNob2ljZUFycmF5O1xuICAgICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2xSZWYuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhRmllbGQudmFsdWUuaW5kZXhPZih2YWx1ZSk7XG5cbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNob2ljZUFycmF5ID0gWy4uLnRoaXMuZGF0YUZpZWxkLnZhbHVlXTtcbiAgICAgICAgICAgIGNob2ljZUFycmF5LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC52YWx1ZSA9IGNob2ljZUFycmF5O1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoYW5nZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2xSZWYuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gb2YoW10pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IG9mKHRoaXMuX2ZpbHRlcih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUpLmZpbHRlcigob3B0aW9uKSA9PiAhdGhpcy5kYXRhRmllbGQudmFsdWU/LmluY2x1ZGVzKG9wdGlvbi5rZXkpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZmlsdGVyVHlwZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodGhpcy5jaGVja1Byb3BlcnR5SW5Db21wb25lbnQoJ2ZpbHRlcicpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhRmllbGQuY29tcG9uZW50LnByb3BlcnRpZXMuZmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9maWx0ZXIodmFsdWU6IHN0cmluZyk6IEFycmF5PE11bHRpY2hvaWNlRmllbGRWYWx1ZT4ge1xuICAgICAgICBsZXQgZmlsdGVyVHlwZSA9IHRoaXMuZmlsdGVyVHlwZSgpPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBNdWx0aWNob2ljZUF1dG9jb21wbGV0ZUZpbHRlclByb3BlcnR5LlNVQlNUUklORzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVySW5jbHVkZSh2YWx1ZSk7XG4gICAgICAgICAgICBjYXNlIE11bHRpY2hvaWNlQXV0b2NvbXBsZXRlRmlsdGVyUHJvcGVydHkuUFJFRklYOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJJbmRleE9mKHZhbHVlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckluZGV4T2YodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9maWx0ZXJJbmNsdWRlKHZhbHVlOiBzdHJpbmcpOiBBcnJheTxNdWx0aWNob2ljZUZpZWxkVmFsdWU+IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdmFsdWU/LnRvTG93ZXJDYXNlKCkubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFGaWVsZC5jaG9pY2VzLmZpbHRlcihvcHRpb24gPT4gb3B0aW9uLnZhbHVlLnRvTG93ZXJDYXNlKCkubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJykuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2ZpbHRlckluZGV4T2YodmFsdWU6IHN0cmluZyk6IEFycmF5PE11bHRpY2hvaWNlRmllbGRWYWx1ZT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSB2YWx1ZT8udG9Mb3dlckNhc2UoKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhRmllbGQuY2hvaWNlcy5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi52YWx1ZS50b0xvd2VyQ2FzZSgpLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJykuaW5kZXhPZihmaWx0ZXJWYWx1ZSkgPT09IDApO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW5kZXJTZWxlY3Rpb24gPSAoa2V5KSA9PiB7XG4gICAgICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZCAmJiBrZXkgIT09ICcnICYmIGtleSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY2hvaWNlID0gdGhpcy5kYXRhRmllbGQuY2hvaWNlcy5maW5kKGMgPT4gYy5rZXkgPT09IGtleSk7XG4gICAgICAgICAgICBpZiAoY2hvaWNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNob2ljZS52YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlRnJvbUtleShrZXk6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFGaWVsZC5jaG9pY2VzLmZpbmQoY2hvaWNlID0+IGNob2ljZS5rZXkgPT09IGtleSk/LnZhbHVlO1xuICAgIH1cbn1cbiJdfQ==