@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
105 lines • 17.3 kB
JavaScript
import { Component } from '@angular/core';
import { FormControl } from '@angular/forms';
import { map, startWith } from 'rxjs/operators';
import { orderBy } from 'natural-orderby';
import { AbstractHeaderModeComponent } from '../abstract-header-mode.component';
import * as i0 from "@angular/core";
import * as i1 from "@ngx-translate/core";
import * as i2 from "../../../logger/services/logger.service";
export class AbstractEditModeComponent extends AbstractHeaderModeComponent {
_translate;
_log;
formControls = [];
filterOptions = [];
subHeader;
constructor(_translate, _log) {
super();
this._translate = _translate;
this._log = _log;
}
ngOnInit() {
this.subHeader = this.headerService.headerColumnCount$.subscribe(newCount => this.updateHeaderCount(newCount));
}
ngOnDestroy() {
this.subHeader.unsubscribe();
}
updateHeaderCount(newCount) {
if (this.formControls.length > newCount) {
this.formControls = this.formControls.slice(0, newCount);
this.filterOptions = this.filterOptions.slice(0, newCount);
return;
}
while (this.formControls.length < newCount) {
const i = this.formControls.length;
const formControl = new FormControl();
formControl.setValue(this.headerService.headerState.selectedHeaders[i] ?? this.headerService.headerState.lastSelectedHeaders[i] ?? null);
this.formControls.push(formControl);
this.filterOptions.push(formControl.valueChanges.pipe(startWith(''), map(inputText => this._filter(inputText))));
}
}
_filter(value) {
let filterValue;
if (typeof value === 'string') {
filterValue = value.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '');
}
else {
filterValue = '';
}
const arrayGroup = [];
arrayGroup.push(...this.headerService.fieldsGroup);
const meta = arrayGroup.splice(0, 1);
// TODO IMPROVEMENT 17.7.2020 - don't sort the fieldsGroup array here, but sort it once in the headerService and maintain
// the sorted order there
meta.push(...orderBy(arrayGroup, v => v.groupTitle, 'asc'));
meta.forEach(group => group.fields = orderBy(group.fields, v => v.title, 'asc'));
return meta.map(group => ({
groupTitle: group.groupTitle,
fields: group.fields.filter(option => this.checkImmediateTitle(option) &&
this._translate.instant(option.title).toLowerCase().normalize('NFD')
.replace(/[\u0300-\u036f]/g, '').indexOf(filterValue) === 0)
})).filter(group => group.fields.length > 0);
}
headerColumnSelected(columnIndex, newHeaderColumn) {
this.headerService.headerColumnSelected(columnIndex, newHeaderColumn);
}
renderSelection = (header) => {
return header ? this._translate.instant(header.title) : '';
};
sortingHeaderSelected(newSortingColumn) {
if (!this.advanceSortDirection(newSortingColumn)) {
return;
}
this.headerService.sortingColumnSelected(newSortingColumn);
this.headerService.applySelectedSorts();
}
removeHiddenSorts(visibleHeaderCount) {
const visibleHeaders = new Set(this.headerService.headerState.selectedHeaders.slice(0, visibleHeaderCount));
const hiddenSorts = this.headerService.headerState.selectedSorts
.filter(header => !visibleHeaders.has(header));
if (hiddenSorts.length === 0) {
return;
}
hiddenSorts.forEach(header => {
header.sortDirection = '';
this.headerService.sortingColumnSelected(header);
});
this.headerService.applySelectedSorts();
}
checkImmediateTitle(option) {
if (option.title === undefined || option.title === '') {
this._log.warn('Immediate field in column [' + option.uniqueId + '] does not have a title');
return false;
}
return true;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractEditModeComponent, deps: [{ token: i1.TranslateService }, { token: i2.LoggerService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractEditModeComponent, selector: "ncc-abstract-edit-mode", usesInheritance: true, ngImport: i0, template: '', isInline: true });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractEditModeComponent, decorators: [{
type: Component,
args: [{
selector: 'ncc-abstract-edit-mode',
template: ''
}]
}], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.LoggerService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZWRpdC1tb2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvaGVhZGVyL2hlYWRlci1tb2Rlcy9lZGl0LW1vZGUvYWJzdHJhY3QtZWRpdC1tb2RlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUUzRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUc5QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFHeEMsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7Ozs7QUFXOUUsTUFBTSxPQUFnQix5QkFBMEIsU0FBUSwyQkFBMkI7SUFLL0M7SUFDQTtJQUx6QixZQUFZLEdBQTRCLEVBQUUsQ0FBQztJQUMzQyxhQUFhLEdBQTJDLEVBQUUsQ0FBQztJQUN4RCxTQUFTLENBQWU7SUFFbEMsWUFBZ0MsVUFBNEIsRUFDNUIsSUFBbUI7UUFDL0MsS0FBSyxFQUFFLENBQUM7UUFGb0IsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBZTtJQUVuRCxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNuSCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakMsQ0FB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QUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMxQixPQUFPO1NBQ1Y7UUFFRCxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVPLG1CQUFtQixDQUFDLE1BQW9CO1FBQzVDLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQUU7WUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsTUFBTSxDQUFDLFFBQVEsR0FBRyx5QkFBeUIsQ0FBQyxDQUFDO1lBQzVGLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzt3R0FwR2lCLHlCQUF5Qjs0RkFBekIseUJBQXlCLHFGQUZqQyxFQUFFOzs0RkFFTSx5QkFBeUI7a0JBSjlDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsUUFBUSxFQUFFLEVBQUU7aUJBQ2YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIZWFkZXJDb2x1bW59IGZyb20gJy4uLy4uL21vZGVscy9oZWFkZXItY29sdW1uJztcbmltcG9ydCB7Rm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7bWFwLCBzdGFydFdpdGh9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0ZpZWxkc0dyb3VwfSBmcm9tICcuLi8uLi9tb2RlbHMvZmllbGRzLWdyb3VwJztcbmltcG9ydCB7b3JkZXJCeX0gZnJvbSAnbmF0dXJhbC1vcmRlcmJ5JztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7QWJzdHJhY3RIZWFkZXJNb2RlQ29tcG9uZW50fSBmcm9tICcuLi9hYnN0cmFjdC1oZWFkZXItbW9kZS5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhlYWRlck9wdGlvbiB7XG4gICAgZ3JvdXBUaXRsZTogc3RyaW5nO1xuICAgIGZpZWxkczogQXJyYXk8SGVhZGVyQ29sdW1uPjtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduY2MtYWJzdHJhY3QtZWRpdC1tb2RlJyxcbiAgICB0ZW1wbGF0ZTogJydcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RFZGl0TW9kZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0SGVhZGVyTW9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwdWJsaWMgZm9ybUNvbnRyb2xzOiBBcnJheTxGb3JtQ29udHJvbDxhbnk+PiA9IFtdO1xuICAgIHB1YmxpYyBmaWx0ZXJPcHRpb25zOiBBcnJheTxPYnNlcnZhYmxlPEFycmF5PEhlYWRlck9wdGlvbj4+PiA9IFtdO1xuICAgIHByb3RlY3RlZCBzdWJIZWFkZXI6IFN1YnNjcmlwdGlvbjtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sb2c6IExvZ2dlclNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJIZWFkZXIgPSB0aGlzLmhlYWRlclNlcnZpY2UuaGVhZGVyQ29sdW1uQ291bnQkLnN1YnNjcmliZShuZXdDb3VudCA9PiB0aGlzLnVwZGF0ZUhlYWRlckNvdW50KG5ld0NvdW50KSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3ViSGVhZGVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUhlYWRlckNvdW50KG5ld0NvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2xzLmxlbmd0aCA+IG5ld0NvdW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9scyA9IHRoaXMuZm9ybUNvbnRyb2xzLnNsaWNlKDAsIG5ld0NvdW50KTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucyA9IHRoaXMuZmlsdGVyT3B0aW9ucy5zbGljZSgwLCBuZXdDb3VudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAodGhpcy5mb3JtQ29udHJvbHMubGVuZ3RoIDwgbmV3Q291bnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSB0aGlzLmZvcm1Db250cm9scy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICAgICAgICAgICAgZm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5oZWFkZXJTZXJ2aWNlLmhlYWRlclN0YXRlLnNlbGVjdGVkSGVhZGVyc1tpXSA/PyB0aGlzLmhlYWRlclNlcnZpY2UuaGVhZGVyU3RhdGUubGFzdFNlbGVjdGVkSGVhZGVyc1tpXSA/PyBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2xzLnB1c2goZm9ybUNvbnRyb2wpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLnB1c2goZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKCcnKSxcbiAgICAgICAgICAgICAgICBtYXAoaW5wdXRUZXh0ID0+IHRoaXMuX2ZpbHRlcihpbnB1dFRleHQpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2ZpbHRlcih2YWx1ZSk6IEFycmF5PEhlYWRlck9wdGlvbj4ge1xuICAgICAgICBsZXQgZmlsdGVyVmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9ICh2YWx1ZSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJyYXlHcm91cDogQXJyYXk8RmllbGRzR3JvdXA+ID0gW107XG4gICAgICAgIGFycmF5R3JvdXAucHVzaCguLi50aGlzLmhlYWRlclNlcnZpY2UuZmllbGRzR3JvdXApO1xuICAgICAgICBjb25zdCBtZXRhID0gYXJyYXlHcm91cC5zcGxpY2UoMCwgMSk7XG4gICAgICAgIC8vIFRPRE8gSU1QUk9WRU1FTlQgMTcuNy4yMDIwIC0gZG9uJ3Qgc29ydCB0aGUgZmllbGRzR3JvdXAgYXJyYXkgaGVyZSwgYnV0IHNvcnQgaXQgb25jZSBpbiB0aGUgaGVhZGVyU2VydmljZSBhbmQgbWFpbnRhaW5cbiAgICAgICAgLy8gIHRoZSBzb3J0ZWQgb3JkZXIgdGhlcmVcbiAgICAgICAgbWV0YS5wdXNoKC4uLm9yZGVyQnkoYXJyYXlHcm91cCwgdiA9PiB2Lmdyb3VwVGl0bGUsICdhc2MnKSk7XG4gICAgICAgIG1ldGEuZm9yRWFjaChncm91cCA9PiBncm91cC5maWVsZHMgPSBvcmRlckJ5KGdyb3VwLmZpZWxkcywgdiA9PiB2LnRpdGxlLCAnYXNjJykpO1xuXG4gICAgICAgIHJldHVybiBtZXRhLm1hcChncm91cCA9PiAoe1xuICAgICAgICAgICAgZ3JvdXBUaXRsZTogZ3JvdXAuZ3JvdXBUaXRsZSxcbiAgICAgICAgICAgIGZpZWxkczogZ3JvdXAuZmllbGRzLmZpbHRlcihvcHRpb24gPT4gdGhpcy5jaGVja0ltbWVkaWF0ZVRpdGxlKG9wdGlvbikgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuaW5zdGFudChvcHRpb24udGl0bGUpLnRvTG93ZXJDYXNlKCkubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJykuaW5kZXhPZihmaWx0ZXJWYWx1ZSkgPT09IDApXG4gICAgICAgIH0pKS5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAuZmllbGRzLmxlbmd0aCA+IDApO1xuICAgIH1cblxuICAgIHB1YmxpYyBoZWFkZXJDb2x1bW5TZWxlY3RlZChjb2x1bW5JbmRleDogbnVtYmVyLCBuZXdIZWFkZXJDb2x1bW46IEhlYWRlckNvbHVtbikge1xuICAgICAgICB0aGlzLmhlYWRlclNlcnZpY2UuaGVhZGVyQ29sdW1uU2VsZWN0ZWQoY29sdW1uSW5kZXgsIG5ld0hlYWRlckNvbHVtbik7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlclNlbGVjdGlvbiA9IChoZWFkZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGhlYWRlciA/IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KGhlYWRlci50aXRsZSkgOiAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgc29ydGluZ0hlYWRlclNlbGVjdGVkKG5ld1NvcnRpbmdDb2x1bW46IEhlYWRlckNvbHVtbiB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmFkdmFuY2VTb3J0RGlyZWN0aW9uKG5ld1NvcnRpbmdDb2x1bW4pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhlYWRlclNlcnZpY2Uuc29ydGluZ0NvbHVtblNlbGVjdGVkKG5ld1NvcnRpbmdDb2x1bW4pO1xuICAgICAgICB0aGlzLmhlYWRlclNlcnZpY2UuYXBwbHlTZWxlY3RlZFNvcnRzKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbW92ZUhpZGRlblNvcnRzKHZpc2libGVIZWFkZXJDb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZpc2libGVIZWFkZXJzID0gbmV3IFNldCh0aGlzLmhlYWRlclNlcnZpY2UuaGVhZGVyU3RhdGUuc2VsZWN0ZWRIZWFkZXJzLnNsaWNlKDAsIHZpc2libGVIZWFkZXJDb3VudCkpO1xuICAgICAgICBjb25zdCBoaWRkZW5Tb3J0cyA9IHRoaXMuaGVhZGVyU2VydmljZS5oZWFkZXJTdGF0ZS5zZWxlY3RlZFNvcnRzXG4gICAgICAgICAgICAuZmlsdGVyKGhlYWRlciA9PiAhdmlzaWJsZUhlYWRlcnMuaGFzKGhlYWRlcikpO1xuXG4gICAgICAgIGlmIChoaWRkZW5Tb3J0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZGRlblNvcnRzLmZvckVhY2goaGVhZGVyID0+IHtcbiAgICAgICAgICAgIGhlYWRlci5zb3J0RGlyZWN0aW9uID0gJyc7XG4gICAgICAgICAgICB0aGlzLmhlYWRlclNlcnZpY2Uuc29ydGluZ0NvbHVtblNlbGVjdGVkKGhlYWRlcik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmhlYWRlclNlcnZpY2UuYXBwbHlTZWxlY3RlZFNvcnRzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0ltbWVkaWF0ZVRpdGxlKG9wdGlvbjogSGVhZGVyQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChvcHRpb24udGl0bGUgPT09IHVuZGVmaW5lZCB8fCBvcHRpb24udGl0bGUgPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2cud2FybignSW1tZWRpYXRlIGZpZWxkIGluIGNvbHVtbiBbJyArIG9wdGlvbi51bmlxdWVJZCArICddIGRvZXMgbm90IGhhdmUgYSB0aXRsZScpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbiJdfQ==