UNPKG

@knora/search

Version:
88 lines 12.5 kB
import * as tslib_1 from "tslib"; import { Component, Inject, Input, ViewChild } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { MatMenuTrigger } from '@angular/material/menu'; import { ApiResponseError, Constants, KnoraApiConnection, ListNodeV2 } from '@knora/api'; import { IRI, KnoraApiConnectionToken, Property } from '@knora/core'; // https://stackoverflow.com/questions/45661010/dynamic-nested-reactive-form-expressionchangedafterithasbeencheckederror const resolvedPromise = Promise.resolve(null); let ListValueComponent = class ListValueComponent { constructor(knoraApiConnection, fb) { this.knoraApiConnection = knoraApiConnection; this.fb = fb; this.type = Constants.ListValue; } getRootNodeIri() { const guiAttr = this.property.guiAttribute; if (guiAttr.length === 1 && guiAttr[0].startsWith('hlist=')) { const listNodeIri = guiAttr[0].substr(7, guiAttr[0].length - (1 + 7)); // hlist=<>, get also rid of <> return listNodeIri; } else { console.log('No root node Iri given for property'); } } ngOnInit() { this.form = this.fb.group({ listValue: [null, Validators.required] }); resolvedPromise.then(() => { // add form to the parent form group this.formGroup.addControl('propValue', this.form); }); const rootNodeIri = this.getRootNodeIri(); this.knoraApiConnection.v2.listNodeCache.getNode(rootNodeIri).subscribe((response) => { this.listRootNode = response; }, (error) => { console.error(error); }); // this._listCacheService.getList(rootNodeIri).subscribe( // (list: ListNodeV2) => { // this.listRootNode = list; // } // ); } ngOnDestroy() { // remove form from the parent form group resolvedPromise.then(() => { this.formGroup.removeControl('propValue'); }); } getValue() { return new IRI(this.form.value.listValue); } getSelectedNode(item) { this.menuTrigger.closeMenu(); this.selectedNode = item; this.form.controls['listValue'].setValue(item.id); } }; ListValueComponent.ctorParameters = () => [ { type: KnoraApiConnection, decorators: [{ type: Inject, args: [KnoraApiConnectionToken,] }] }, { type: FormBuilder, decorators: [{ type: Inject, args: [FormBuilder,] }] } ]; tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", FormGroup) ], ListValueComponent.prototype, "formGroup", void 0); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Property) ], ListValueComponent.prototype, "property", void 0); tslib_1.__decorate([ ViewChild(MatMenuTrigger, { static: false }), tslib_1.__metadata("design:type", MatMenuTrigger) ], ListValueComponent.prototype, "menuTrigger", void 0); ListValueComponent = tslib_1.__decorate([ Component({ selector: 'list-value', template: "<span *ngIf=\"listRootNode !== undefined\">\n <button mat-stroked-button [matMenuTriggerFor]=\"mainMenu\" type=\"button\">\n <span *ngIf=\"!selectedNode\">Select list value</span>\n <span *ngIf=\"selectedNode\">{{selectedNode.label}}</span>\n </button>\n\n <mat-menu #mainMenu=\"matMenu\" [overlapTrigger]=\"false\">\n <span *ngFor=\"let child of listRootNode.children\">\n <span *ngIf=\"child.children && child.children.length > 0\">\n <button mat-menu-item [matMenuTriggerFor]=\"menu.childMenu\" (click)=\"getSelectedNode(child)\"\n type=\"button\">\n {{child.label}}\n </button>\n <list-display #menu [children]=\"child.children\" (selectedNode)=\"getSelectedNode($event)\">\n </list-display>\n </span>\n\n <span *ngIf=\"!child.children || child.children.length === 0\">\n <button mat-menu-item (click)=\"getSelectedNode(child)\" type=\"button\">\n {{child.label}}\n </button>\n </span>\n </span>\n </mat-menu>\n</span>\n\n<!-- hidden input field for the selected list item (listNode iri) -->\n<mat-form-field class=\"hidden\">\n <input matInput [formControl]=\"form.controls['listValue']\" placeholder=\"list value\">\n</mat-form-field>\n", styles: [".hidden{display:none}"] }), tslib_1.__param(0, Inject(KnoraApiConnectionToken)), tslib_1.__param(1, Inject(FormBuilder)), tslib_1.__metadata("design:paramtypes", [KnoraApiConnection, FormBuilder]) ], ListValueComponent); export { ListValueComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12YWx1ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aa25vcmEvc2VhcmNoLyIsInNvdXJjZXMiOlsibGliL2V4dGVuZGVkLXNlYXJjaC9zZWxlY3QtcHJvcGVydHkvc3BlY2lmeS1wcm9wZXJ0eS12YWx1ZS9saXN0LXZhbHVlL2xpc3QtdmFsdWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekYsT0FBTyxFQUFFLEdBQUcsRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQXdCLE1BQU0sYUFBYSxDQUFDO0FBRTNGLHdIQUF3SDtBQUN4SCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBTzlDLElBQWEsa0JBQWtCLEdBQS9CLE1BQWEsa0JBQWtCO0lBbUIzQixZQUM2QyxrQkFBc0MsRUFDbEQsRUFBZTtRQURILHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDbEQsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQWhCaEQsU0FBSSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7SUFrQjNCLENBQUM7SUFFTyxjQUFjO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBRTNDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVB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IEluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2VFcnJvciwgQ29uc3RhbnRzLCBLbm9yYUFwaUNvbm5lY3Rpb24sIExpc3ROb2RlVjIgfSBmcm9tICdAa25vcmEvYXBpJztcbmltcG9ydCB7IElSSSwgS25vcmFBcGlDb25uZWN0aW9uVG9rZW4sIFByb3BlcnR5LCBQcm9wZXJ0eVZhbHVlLCBWYWx1ZSB9IGZyb20gJ0Brbm9yYS9jb3JlJztcblxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDU2NjEwMTAvZHluYW1pYy1uZXN0ZWQtcmVhY3RpdmUtZm9ybS1leHByZXNzaW9uY2hhbmdlZGFmdGVyaXRoYXNiZWVuY2hlY2tlZGVycm9yXG5jb25zdCByZXNvbHZlZFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGlzdC12YWx1ZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpc3QtdmFsdWUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2xpc3QtdmFsdWUuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBMaXN0VmFsdWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgUHJvcGVydHlWYWx1ZSB7XG5cbiAgICAvLyBwYXJlbnQgRm9ybUdyb3VwXG4gICAgQElucHV0KCkgZm9ybUdyb3VwPzogRm9ybUdyb3VwO1xuXG4gICAgdHlwZSA9IENvbnN0YW50cy5MaXN0VmFsdWU7XG5cbiAgICBmb3JtOiBGb3JtR3JvdXA7XG5cbiAgICBASW5wdXQoKSBwcm9wZXJ0eT86IFByb3BlcnR5O1xuXG4gICAgbGlzdFJvb3ROb2RlOiBMaXN0Tm9kZVYyO1xuXG4gICAgLy8gYWN0aXZlTm9kZTtcblxuICAgIHNlbGVjdGVkTm9kZTogTGlzdE5vZGVWMjtcblxuICAgIEBWaWV3Q2hpbGQoTWF0TWVudVRyaWdnZXIsIHsgc3RhdGljOiBmYWxzZSB9KSBtZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChLbm9yYUFwaUNvbm5lY3Rpb25Ub2tlbikgcHJpdmF0ZSBrbm9yYUFwaUNvbm5lY3Rpb246IEtub3JhQXBpQ29ubmVjdGlvbixcbiAgICAgICAgQEluamVjdChGb3JtQnVpbGRlcikgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXJcbiAgICApIHtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJvb3ROb2RlSXJpKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGd1aUF0dHIgPSB0aGlzLnByb3BlcnR5Lmd1aUF0dHJpYnV0ZTtcblxuICAgICAgICBpZiAoZ3VpQXR0ci5sZW5ndGggPT09IDEgJiYgZ3VpQXR0clswXS5zdGFydHNXaXRoKCdobGlzdD0nKSkge1xuICAgICAgICAgICAgY29uc3QgbGlzdE5vZGVJcmkgPSBndWlBdHRyWzBdLnN1YnN0cig3LCBndWlBdHRyWzBdLmxlbmd0aCAtICgxICsgNykpOyAvLyBobGlzdD08PiwgZ2V0IGFsc28gcmlkIG9mIDw+XG4gICAgICAgICAgICByZXR1cm4gbGlzdE5vZGVJcmk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnTm8gcm9vdCBub2RlIElyaSBnaXZlbiBmb3IgcHJvcGVydHknKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuXG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgbGlzdFZhbHVlOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzb2x2ZWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gYWRkIGZvcm0gdG8gdGhlIHBhcmVudCBmb3JtIGdyb3VwXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKCdwcm9wVmFsdWUnLCB0aGlzLmZvcm0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByb290Tm9kZUlyaSA9IHRoaXMuZ2V0Um9vdE5vZGVJcmkoKTtcblxuICAgICAgICB0aGlzLmtub3JhQXBpQ29ubmVjdGlvbi52Mi5saXN0Tm9kZUNhY2hlLmdldE5vZGUocm9vdE5vZGVJcmkpLnN1YnNjcmliZShcbiAgICAgICAgICAgIChyZXNwb25zZTogTGlzdE5vZGVWMikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdFJvb3ROb2RlID0gcmVzcG9uc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycm9yOiBBcGlSZXNwb25zZUVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gdGhpcy5fbGlzdENhY2hlU2VydmljZS5nZXRMaXN0KHJvb3ROb2RlSXJpKS5zdWJzY3JpYmUoXG4gICAgICAgIC8vICAgICAobGlzdDogTGlzdE5vZGVWMikgPT4ge1xuICAgICAgICAvLyAgICAgICAgIHRoaXMubGlzdFJvb3ROb2RlID0gbGlzdDtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gKTtcblxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuXG4gICAgICAgIC8vIHJlbW92ZSBmb3JtIGZyb20gdGhlIHBhcmVudCBmb3JtIGdyb3VwXG4gICAgICAgIHJlc29sdmVkUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ3Byb3BWYWx1ZScpO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIGdldFZhbHVlKCk6IFZhbHVlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJUkkodGhpcy5mb3JtLnZhbHVlLmxpc3RWYWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWROb2RlKGl0ZW06IExpc3ROb2RlVjIpIHtcbiAgICAgICAgdGhpcy5tZW51VHJpZ2dlci5jbG9zZU1lbnUoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBpdGVtO1xuXG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1snbGlzdFZhbHVlJ10uc2V0VmFsdWUoaXRlbS5pZCk7XG4gICAgfVxuXG59XG4iXX0=