UNPKG

@knora/search

Version:
91 lines 12.9 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 var resolvedPromise = Promise.resolve(null); var ListValueComponent = /** @class */ (function () { function ListValueComponent(knoraApiConnection, fb) { this.knoraApiConnection = knoraApiConnection; this.fb = fb; this.type = Constants.ListValue; } ListValueComponent.prototype.getRootNodeIri = function () { var guiAttr = this.property.guiAttribute; if (guiAttr.length === 1 && guiAttr[0].startsWith('hlist=')) { var 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'); } }; ListValueComponent.prototype.ngOnInit = function () { var _this = this; this.form = this.fb.group({ listValue: [null, Validators.required] }); resolvedPromise.then(function () { // add form to the parent form group _this.formGroup.addControl('propValue', _this.form); }); var rootNodeIri = this.getRootNodeIri(); this.knoraApiConnection.v2.listNodeCache.getNode(rootNodeIri).subscribe(function (response) { _this.listRootNode = response; }, function (error) { console.error(error); }); // this._listCacheService.getList(rootNodeIri).subscribe( // (list: ListNodeV2) => { // this.listRootNode = list; // } // ); }; ListValueComponent.prototype.ngOnDestroy = function () { var _this = this; // remove form from the parent form group resolvedPromise.then(function () { _this.formGroup.removeControl('propValue'); }); }; ListValueComponent.prototype.getValue = function () { return new IRI(this.form.value.listValue); }; ListValueComponent.prototype.getSelectedNode = function (item) { this.menuTrigger.closeMenu(); this.selectedNode = item; this.form.controls['listValue'].setValue(item.id); }; ListValueComponent.ctorParameters = function () { return [ { 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); return ListValueComponent; }()); export { ListValueComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12YWx1ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aa25vcmEvc2VhcmNoLyIsInNvdXJjZXMiOlsibGliL2V4dGVuZGVkLXNlYXJjaC9zZWxlY3QtcHJvcGVydHkvc3BlY2lmeS1wcm9wZXJ0eS12YWx1ZS9saXN0LXZhbHVlL2xpc3QtdmFsdWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekYsT0FBTyxFQUFFLEdBQUcsRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQXdCLE1BQU0sYUFBYSxDQUFDO0FBRTNGLHdIQUF3SDtBQUN4SCxJQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBTzlDO0lBbUJJLDRCQUM2QyxrQkFBc0MsRUFDbEQsRUFBZTtRQURILHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDbEQsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQWhCaEQsU0FBSSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7SUFrQjNCLENBQUM7SUFFTywyQ0FBYyxHQUF0QjtRQUNJLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBRTNDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtZ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bmVudCwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBBcGlSZXNwb25zZUVycm9yLCBDb25zdGFudHMsIEtub3JhQXBpQ29ubmVjdGlvbiwgTGlzdE5vZGVWMiB9IGZyb20gJ0Brbm9yYS9hcGknO1xuaW1wb3J0IHsgSVJJLCBLbm9yYUFwaUNvbm5lY3Rpb25Ub2tlbiwgUHJvcGVydHksIFByb3BlcnR5VmFsdWUsIFZhbHVlIH0gZnJvbSAnQGtub3JhL2NvcmUnO1xuXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80NTY2MTAxMC9keW5hbWljLW5lc3RlZC1yZWFjdGl2ZS1mb3JtLWV4cHJlc3Npb25jaGFuZ2VkYWZ0ZXJpdGhhc2JlZW5jaGVja2VkZXJyb3JcbmNvbnN0IHJlc29sdmVkUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShudWxsKTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaXN0LXZhbHVlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGlzdC12YWx1ZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbGlzdC12YWx1ZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIExpc3RWYWx1ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBQcm9wZXJ0eVZhbHVlIHtcblxuICAgIC8vIHBhcmVudCBGb3JtR3JvdXBcbiAgICBASW5wdXQoKSBmb3JtR3JvdXA/OiBGb3JtR3JvdXA7XG5cbiAgICB0eXBlID0gQ29uc3RhbnRzLkxpc3RWYWx1ZTtcblxuICAgIGZvcm06IEZvcm1Hcm91cDtcblxuICAgIEBJbnB1dCgpIHByb3BlcnR5PzogUHJvcGVydHk7XG5cbiAgICBsaXN0Um9vdE5vZGU6IExpc3ROb2RlVjI7XG5cbiAgICAvLyBhY3RpdmVOb2RlO1xuXG4gICAgc2VsZWN0ZWROb2RlOiBMaXN0Tm9kZVYyO1xuXG4gICAgQFZpZXdDaGlsZChNYXRNZW51VHJpZ2dlciwgeyBzdGF0aWM6IGZhbHNlIH0pIG1lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KEtub3JhQXBpQ29ubmVjdGlvblRva2VuKSBwcml2YXRlIGtub3JhQXBpQ29ubmVjdGlvbjogS25vcmFBcGlDb25uZWN0aW9uLFxuICAgICAgICBASW5qZWN0KEZvcm1CdWlsZGVyKSBwcml2YXRlIGZiOiBGb3JtQnVpbGRlclxuICAgICkge1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Um9vdE5vZGVJcmkoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZ3VpQXR0ciA9IHRoaXMucHJvcGVydHkuZ3VpQXR0cmlidXRlO1xuXG4gICAgICAgIGlmIChndWlBdHRyLmxlbmd0aCA9PT0gMSAmJiBndWlBdHRyWzBdLnN0YXJ0c1dpdGgoJ2hsaXN0PScpKSB7XG4gICAgICAgICAgICBjb25zdCBsaXN0Tm9kZUlyaSA9IGd1aUF0dHJbMF0uc3Vic3RyKDcsIGd1aUF0dHJbMF0ubGVuZ3RoIC0gKDEgKyA3KSk7IC8vIGhsaXN0PTw+LCBnZXQgYWxzbyByaWQgb2YgPD5cbiAgICAgICAgICAgIHJldHVybiBsaXN0Tm9kZUlyaTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdObyByb290IG5vZGUgSXJpIGdpdmVuIGZvciBwcm9wZXJ0eScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG5cbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBsaXN0VmFsdWU6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgICB9KTtcblxuICAgICAgICByZXNvbHZlZFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAvLyBhZGQgZm9ybSB0byB0aGUgcGFyZW50IGZvcm0gZ3JvdXBcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woJ3Byb3BWYWx1ZScsIHRoaXMuZm9ybSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJvb3ROb2RlSXJpID0gdGhpcy5nZXRSb290Tm9kZUlyaSgpO1xuXG4gICAgICAgIHRoaXMua25vcmFBcGlDb25uZWN0aW9uLnYyLmxpc3ROb2RlQ2FjaGUuZ2V0Tm9kZShyb290Tm9kZUlyaSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKHJlc3BvbnNlOiBMaXN0Tm9kZVYyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0Um9vdE5vZGUgPSByZXNwb25zZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyb3I6IEFwaVJlc3BvbnNlRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyB0aGlzLl9saXN0Q2FjaGVTZXJ2aWNlLmdldExpc3Qocm9vdE5vZGVJcmkpLnN1YnNjcmliZShcbiAgICAgICAgLy8gICAgIChsaXN0OiBMaXN0Tm9kZVYyKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5saXN0Um9vdE5vZGUgPSBsaXN0O1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyApO1xuXG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG5cbiAgICAgICAgLy8gcmVtb3ZlIGZvcm0gZnJvbSB0aGUgcGFyZW50IGZvcm0gZ3JvdXBcbiAgICAgICAgcmVzb2x2ZWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgncHJvcFZhbHVlJyk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgZ2V0VmFsdWUoKTogVmFsdWUge1xuICAgICAgICByZXR1cm4gbmV3IElSSSh0aGlzLmZvcm0udmFsdWUubGlzdFZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZE5vZGUoaXRlbTogTGlzdE5vZGVWMikge1xuICAgICAgICB0aGlzLm1lbnVUcmlnZ2VyLmNsb3NlTWVudSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IGl0ZW07XG5cbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydsaXN0VmFsdWUnXS5zZXRWYWx1ZShpdGVtLmlkKTtcbiAgICB9XG5cbn1cbiJdfQ==