@knora/search
Version:
Knora ui module: search
88 lines • 12.5 kB
JavaScript
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=