UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

101 lines 13.9 kB
import { Component } from '@angular/core'; import { FormControl } from '@angular/forms'; import { debounceTime, map } from 'rxjs/operators'; import { UserValue } from '../../../data-fields/user-field/models/user-value'; import { AbstractHeaderModeComponent } from '../abstract-header-mode.component'; import * as i0 from "@angular/core"; import * as i1 from "@angular/material/dialog"; export class AbstractSearchModeComponent extends AbstractHeaderModeComponent { _dialog; /** * The time that must elapse since last keypress in search input before a search request is sent */ SEARCH_DEBOUNCE_TIME = 600; subHeaderColumn; subClearHeader; formControls = []; constructor(_dialog) { super(); this._dialog = _dialog; } ngOnInit() { this.subHeaderColumn = this.headerService.headerColumnCount$.subscribe(newCount => this.updateHeaderCount(newCount)); this.subClearHeader = this.headerService.clearHeaderSearch$.subscribe(columnNumber => this.clearInput(columnNumber)); } ngOnDestroy() { this.subClearHeader.unsubscribe(); this.subHeaderColumn.unsubscribe(); } /** * Updates the underlying objects to match the new desired number of columns. * * If the new number of columns is greater than the current one, the columns will be filled with default/blank values. * * If the new number of columns is smaller than the current one, the superfluous columns will be removed. * * @param newCount the new number of columns */ updateHeaderCount(newCount) { if (newCount < this.formControls.length) { this.formControls = this.formControls.slice(0, newCount); return; } while (this.formControls.length < newCount) { this.addNewColumn(); } } /** * Adds a new column to the headers search and binds it's FormControl to the service */ addNewColumn() { const formControl = new FormControl(); const i = this.formControls.length; formControl.valueChanges.pipe(debounceTime(this.SEARCH_DEBOUNCE_TIME), map(value => value instanceof UserValue ? value.id : value)).subscribe(value => { this.headerService.headerSearchInputChanged(i, value); }); this.formControls.push(formControl); } /** * Opens a user assign side menu component and sets the selected user as value of the form control object * that corresponds to the given column. * * If no user is selected the value of the corresponding form control si cleared. * @param column the index of the columns that should have it's form control value set to the selected user * @param component is the component that we want to open */ selectAbstractUser(column, component) { let valueReturned = false; const dialogRef = this._dialog.open(component, { panelClass: "dialog-responsive" }); dialogRef.afterClosed().subscribe($event => { if ($event.data) { this.formControls[column].setValue($event.data.fullName); this.formControls[column].setValue($event.data, { emitModelToViewChange: false }); valueReturned = true; } else if (!valueReturned) { this.formControls[column].setValue(undefined); } }); } /** * Clears the value of the form control object in the given column * @param column the index of the column that should have it's value cleared */ clearInput(column) { if (column >= 0 && column < this.formControls.length) { this.formControls[column].setValue(undefined); } } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractSearchModeComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractSearchModeComponent, selector: "ncc-abstract-seatch-mode", usesInheritance: true, ngImport: i0, template: '', isInline: true }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractSearchModeComponent, decorators: [{ type: Component, args: [{ selector: 'ncc-abstract-seatch-mode', template: '' }] }], ctorParameters: () => [{ type: i1.MatDialog }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3Qtc2VhcmNoLW1vZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9oZWFkZXIvaGVhZGVyLW1vZGVzL3NlYXJjaC1tb2RlL2Fic3RyYWN0LXNlYXJjaC1tb2RlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUEwQixNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLFlBQVksRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFFNUUsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7OztBQU85RSxNQUFNLE9BQWdCLDJCQUE0QixTQUFRLDJCQUEyQjtJQVczRDtJQVR0Qjs7T0FFRztJQUNPLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztJQUMzQixlQUFlLENBQWU7SUFDOUIsY0FBYyxDQUFlO0lBRWhDLFlBQVksR0FBdUIsRUFBRSxDQUFDO0lBRTdDLFlBQXNCLE9BQWtCO1FBQ3BDLEtBQUssRUFBRSxDQUFDO1FBRFUsWUFBTyxHQUFQLE9BQU8sQ0FBVztJQUV4QyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNySCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFF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UCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxRQUFRLEVBQUUsRUFBRTtpQkFDZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1VzZXJWYWx1ZX0gZnJvbSAnLi4vLi4vLi4vZGF0YS1maWVsZHMvdXNlci1maWVsZC9tb2RlbHMvdXNlci12YWx1ZSc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0Fic3RyYWN0SGVhZGVyTW9kZUNvbXBvbmVudH0gZnJvbSAnLi4vYWJzdHJhY3QtaGVhZGVyLW1vZGUuY29tcG9uZW50JztcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jYy1hYnN0cmFjdC1zZWF0Y2gtbW9kZScsXG4gICAgdGVtcGxhdGU6ICcnXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0U2VhcmNoTW9kZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0SGVhZGVyTW9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW1lIHRoYXQgbXVzdCBlbGFwc2Ugc2luY2UgbGFzdCBrZXlwcmVzcyBpbiBzZWFyY2ggaW5wdXQgYmVmb3JlIGEgc2VhcmNoIHJlcXVlc3QgaXMgc2VudFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBTRUFSQ0hfREVCT1VOQ0VfVElNRSA9IDYwMDtcbiAgICBwcm90ZWN0ZWQgc3ViSGVhZGVyQ29sdW1uOiBTdWJzY3JpcHRpb247XG4gICAgcHJvdGVjdGVkIHN1YkNsZWFySGVhZGVyOiBTdWJzY3JpcHRpb247XG5cbiAgICBwdWJsaWMgZm9ybUNvbnRyb2xzOiBBcnJheTxGb3JtQ29udHJvbD4gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfZGlhbG9nOiBNYXREaWFsb2cpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJIZWFkZXJDb2x1bW4gPSB0aGlzLmhlYWRlclNlcnZpY2UuaGVhZGVyQ29sdW1uQ291bnQkLnN1YnNjcmliZShuZXdDb3VudCA9PiB0aGlzLnVwZGF0ZUhlYWRlckNvdW50KG5ld0NvdW50KSk7XG4gICAgICAgIHRoaXMuc3ViQ2xlYXJIZWFkZXIgPSB0aGlzLmhlYWRlclNlcnZpY2UuY2xlYXJIZWFkZXJTZWFyY2gkLnN1YnNjcmliZShjb2x1bW5OdW1iZXIgPT4gdGhpcy5jbGVhcklucHV0KGNvbHVtbk51bWJlcikpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YkNsZWFySGVhZGVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3ViSGVhZGVyQ29sdW1uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgdW5kZXJseWluZyBvYmplY3RzIHRvIG1hdGNoIHRoZSBuZXcgZGVzaXJlZCBudW1iZXIgb2YgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIElmIHRoZSBuZXcgbnVtYmVyIG9mIGNvbHVtbnMgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG9uZSwgdGhlIGNvbHVtbnMgd2lsbCBiZSBmaWxsZWQgd2l0aCBkZWZhdWx0L2JsYW5rIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIElmIHRoZSBuZXcgbnVtYmVyIG9mIGNvbHVtbnMgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IG9uZSwgdGhlIHN1cGVyZmx1b3VzIGNvbHVtbnMgd2lsbCBiZSByZW1vdmVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5ld0NvdW50IHRoZSBuZXcgbnVtYmVyIG9mIGNvbHVtbnNcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgdXBkYXRlSGVhZGVyQ291bnQobmV3Q291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAobmV3Q291bnQgPCB0aGlzLmZvcm1Db250cm9scy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2xzID0gdGhpcy5mb3JtQ29udHJvbHMuc2xpY2UoMCwgbmV3Q291bnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKHRoaXMuZm9ybUNvbnRyb2xzLmxlbmd0aCA8IG5ld0NvdW50KSB7XG4gICAgICAgICAgICB0aGlzLmFkZE5ld0NvbHVtbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIG5ldyBjb2x1bW4gdG8gdGhlIGhlYWRlcnMgc2VhcmNoIGFuZCBiaW5kcyBpdCdzIEZvcm1Db250cm9sIHRvIHRoZSBzZXJ2aWNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFkZE5ld0NvbHVtbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMuZm9ybUNvbnRyb2xzLmxlbmd0aDtcbiAgICAgICAgZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5TRUFSQ0hfREVCT1VOQ0VfVElNRSksXG4gICAgICAgICAgICBtYXAodmFsdWUgPT4gdmFsdWUgaW5zdGFuY2VvZiBVc2VyVmFsdWUgPyB2YWx1ZS5pZCA6IHZhbHVlKVxuICAgICAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhlYWRlclNlcnZpY2UuaGVhZGVyU2VhcmNoSW5wdXRDaGFuZ2VkKGksIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xzLnB1c2goZm9ybUNvbnRyb2wpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIGEgdXNlciBhc3NpZ24gc2lkZSBtZW51IGNvbXBvbmVudCBhbmQgc2V0cyB0aGUgc2VsZWN0ZWQgdXNlciBhcyB2YWx1ZSBvZiB0aGUgZm9ybSBjb250cm9sIG9iamVjdFxuICAgICAqIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGdpdmVuIGNvbHVtbi5cbiAgICAgKlxuICAgICAqIElmIG5vIHVzZXIgaXMgc2VsZWN0ZWQgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGZvcm0gY29udHJvbCBzaSBjbGVhcmVkLlxuICAgICAqIEBwYXJhbSBjb2x1bW4gdGhlIGluZGV4IG9mIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGhhdmUgaXQncyBmb3JtIGNvbnRyb2wgdmFsdWUgc2V0IHRvIHRoZSBzZWxlY3RlZCB1c2VyXG4gICAgICogQHBhcmFtIGNvbXBvbmVudCBpcyB0aGUgY29tcG9uZW50IHRoYXQgd2Ugd2FudCB0byBvcGVuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdEFic3RyYWN0VXNlcihjb2x1bW46IG51bWJlciwgY29tcG9uZW50OiBUeXBlPGFueT4pOiB2b2lkIHtcbiAgICAgICAgbGV0IHZhbHVlUmV0dXJuZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nLm9wZW4oY29tcG9uZW50LCB7XG4gICAgICAgICAgICBwYW5lbENsYXNzOiBcImRpYWxvZy1yZXNwb25zaXZlXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgkZXZlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKCRldmVudC5kYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbHNbY29sdW1uXS5zZXRWYWx1ZSgoJGV2ZW50LmRhdGEgYXMgVXNlclZhbHVlKS5mdWxsTmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbHNbY29sdW1uXS5zZXRWYWx1ZSgkZXZlbnQuZGF0YSBhcyBVc2VyVmFsdWUsIHtlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6IGZhbHNlfSk7XG4gICAgICAgICAgICAgICAgdmFsdWVSZXR1cm5lZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVJldHVybmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbHNbY29sdW1uXS5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIHZhbHVlIG9mIHRoZSBmb3JtIGNvbnRyb2wgb2JqZWN0IGluIHRoZSBnaXZlbiBjb2x1bW5cbiAgICAgKiBAcGFyYW0gY29sdW1uIHRoZSBpbmRleCBvZiB0aGUgY29sdW1uIHRoYXQgc2hvdWxkIGhhdmUgaXQncyB2YWx1ZSBjbGVhcmVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNsZWFySW5wdXQoY29sdW1uOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbHVtbiA+PSAwICYmIGNvbHVtbiA8IHRoaXMuZm9ybUNvbnRyb2xzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbHNbY29sdW1uXS5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19