@knora/search
Version:
Knora ui module: search
91 lines • 12.9 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
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==