UNPKG

@knora/search

Version:
141 lines 15.9 kB
import * as tslib_1 from "tslib"; import { Component, Inject, Input } from '@angular/core'; import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; import { Constants, KnoraApiConnection, ReadResource } from '@knora/api'; import { IRI, KnoraApiConnectionToken, OntologyCacheService, PropertyValue, Value } from '@knora/core'; var jsonld = require('jsonld'); // https://stackoverflow.com/questions/45661010/dynamic-nested-reactive-form-expressionchangedafterithasbeencheckederror var resolvedPromise = Promise.resolve(null); var LinkValueComponent = /** @class */ (function () { function LinkValueComponent(knoraApiConnection, fb, _cacheService) { this.knoraApiConnection = knoraApiConnection; this.fb = fb; this._cacheService = _cacheService; this.type = Constants.LinkValue; } Object.defineProperty(LinkValueComponent.prototype, "restrictResourceClass", { get: function () { return this._restrictToResourceClass; }, set: function (value) { this._restrictToResourceClass = value; }, enumerable: true, configurable: true }); /** * Displays a selected resource using its label. * * @param resource the resource to be displayed (or no selection yet). * @returns */ LinkValueComponent.prototype.displayResource = function (resource) { // null is the initial value (no selection yet) if (resource !== null) { return resource.label; } }; /** * Search for resources whose labels contain the given search term, restricting to to the given properties object constraint. * * @param searchTerm */ LinkValueComponent.prototype.searchByLabel = function (searchTerm) { var _this = this; // at least 3 characters are required if (searchTerm.length >= 3) { /* TODO: replace with knora-api-js-lib this._searchService.searchByLabelReadResourceSequence(searchTerm, 0, { limitToResourceClass: this._restrictToResourceClass }).subscribe( (result: ReadResourcesSequence) => { this.resources = result.resources; }, function (err) { console.log('JSONLD of full resource request could not be expanded:' + err); } ); */ this.knoraApiConnection.v2.search.doSearchByLabel(searchTerm, 0, { limitToResourceClass: this._restrictToResourceClass }).subscribe(function (response) { _this.resources = response; }); } else { // clear selection this.resources = undefined; } }; /** * Checks that the selection is a [[ReadResource]]. * * Surprisingly, [null] has to be returned if the value is valid: https://angular.io/guide/form-validation#custom-validators * * @param the form element whose value has to be checked. * @returns */ LinkValueComponent.prototype.validateResource = function (c) { var isValidResource = (c.value instanceof ReadResource); if (isValidResource) { return null; } else { return { noResource: { value: c.value } }; } }; LinkValueComponent.prototype.ngOnInit = function () { var _this = this; this.form = this.fb.group({ resource: [null, Validators.compose([ Validators.required, this.validateResource ])] }); this.form.valueChanges.subscribe(function (data) { _this.searchByLabel(data.resource); }); resolvedPromise.then(function () { // add form to the parent form group _this.formGroup.addControl('propValue', _this.form); }); }; LinkValueComponent.prototype.ngOnDestroy = function () { var _this = this; // remove form from the parent form group resolvedPromise.then(function () { _this.formGroup.removeControl('propValue'); }); }; LinkValueComponent.prototype.getValue = function () { return new IRI(this.form.value.resource.id); }; LinkValueComponent.ctorParameters = function () { return [ { type: KnoraApiConnection, decorators: [{ type: Inject, args: [KnoraApiConnectionToken,] }] }, { type: FormBuilder, decorators: [{ type: Inject, args: [FormBuilder,] }] }, { type: OntologyCacheService } ]; }; tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", FormGroup) ], LinkValueComponent.prototype, "formGroup", void 0); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", String), tslib_1.__metadata("design:paramtypes", [String]) ], LinkValueComponent.prototype, "restrictResourceClass", null); LinkValueComponent = tslib_1.__decorate([ Component({ selector: 'link-value', template: "<mat-form-field class=\"large-field\">\n <input matInput placeholder=\"resource\" aria-label=\"resource\" [matAutocomplete]=\"auto\"\n [formControl]=\"form.controls['resource']\">\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayResource\">\n <mat-option *ngFor=\"let res of resources\" [value]=\"res\">\n {{res?.label}}\n </mat-option>\n </mat-autocomplete>\n</mat-form-field>\n", styles: [""] }), tslib_1.__param(0, Inject(KnoraApiConnectionToken)), tslib_1.__param(1, Inject(FormBuilder)), tslib_1.__metadata("design:paramtypes", [KnoraApiConnection, FormBuilder, OntologyCacheService]) ], LinkValueComponent); return LinkValueComponent; }()); export { LinkValueComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay12YWx1ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aa25vcmEvc2VhcmNoLyIsInNvdXJjZXMiOlsibGliL2V4dGVuZGVkLXNlYXJjaC9zZWxlY3QtcHJvcGVydHkvc3BlY2lmeS1wcm9wZXJ0eS12YWx1ZS9saW5rLXZhbHVlL2xpbmstdmFsdWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6RSxPQUFPLEVBQUUsR0FBRyxFQUFFLHVCQUF1QixFQUFFLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHdkcsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRWpDLHdIQUF3SDtBQUN4SCxJQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBTzlDO0lBc0JJLDRCQUM2QyxrQkFBc0MsRUFDbEQsRUFBZSxFQUNwQyxhQUFtQztRQUZGLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDbEQsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNwQyxrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUFwQi9DLFNBQUksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBc0IzQixDQUFDO0lBYkQsc0JBQUkscURBQXFCO2FBSXpCO1lBQ0ksT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUM7UUFDekMsQ0FBQzthQU5ELFVBQTBCLEtBQWE7WUFDbkMsSUFBSSxDQUFDLHdCQUF3QixH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LHVCQUF1QixDQUFDLENBQUE7UUFDL0IsbUJBQUEsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO2lEQUR5QyxrQkFBa0I7WUFDOUMsV0FBVztZQUNyQixvQkFBb0I7T0F6QnRDLGtCQUFrQixDQWlJOUI7SUFBRCx5QkFBQztDQUFBLEFBaklELElBaUlDO1NBaklZLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29uc3RhbnRzLCBLbm9yYUFwaUNvbm5lY3Rpb24sIFJlYWRSZXNvdXJjZSB9IGZyb20gJ0Brbm9yYS9hcGknO1xuaW1wb3J0IHsgSVJJLCBLbm9yYUFwaUNvbm5lY3Rpb25Ub2tlbiwgT250b2xvZ3lDYWNoZVNlcnZpY2UsIFByb3BlcnR5VmFsdWUsIFZhbHVlIH0gZnJvbSAnQGtub3JhL2NvcmUnO1xuXG5kZWNsYXJlIGxldCByZXF1aXJlOiBhbnk7IC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ3MzAwMTAvYW5ndWxhcjItNS1taW51dGUtaW5zdGFsbC1idWctcmVxdWlyZS1pcy1ub3QtZGVmaW5lZFxuY29uc3QganNvbmxkID0gcmVxdWlyZSgnanNvbmxkJyk7XG5cbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ1NjYxMDEwL2R5bmFtaWMtbmVzdGVkLXJlYWN0aXZlLWZvcm0tZXhwcmVzc2lvbmNoYW5nZWRhZnRlcml0aGFzYmVlbmNoZWNrZWRlcnJvclxuY29uc3QgcmVzb2x2ZWRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpbmstdmFsdWUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9saW5rLXZhbHVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9saW5rLXZhbHVlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTGlua1ZhbHVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIFByb3BlcnR5VmFsdWUge1xuXG4gICAgLy8gcGFyZW50IEZvcm1Hcm91cFxuICAgIEBJbnB1dCgpIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gICAgdHlwZSA9IENvbnN0YW50cy5MaW5rVmFsdWU7XG5cbiAgICBmb3JtOiBGb3JtR3JvdXA7XG5cbiAgICByZXNvdXJjZXM6IFJlYWRSZXNvdXJjZVtdO1xuXG4gICAgcHJpdmF0ZSBfcmVzdHJpY3RUb1Jlc291cmNlQ2xhc3M6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IHJlc3RyaWN0UmVzb3VyY2VDbGFzcyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3Jlc3RyaWN0VG9SZXNvdXJjZUNsYXNzID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IHJlc3RyaWN0UmVzb3VyY2VDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3RyaWN0VG9SZXNvdXJjZUNsYXNzO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KEtub3JhQXBpQ29ubmVjdGlvblRva2VuKSBwcml2YXRlIGtub3JhQXBpQ29ubmVjdGlvbjogS25vcmFBcGlDb25uZWN0aW9uLFxuICAgICAgICBASW5qZWN0KEZvcm1CdWlsZGVyKSBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBfY2FjaGVTZXJ2aWNlOiBPbnRvbG9neUNhY2hlU2VydmljZSkge1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBzZWxlY3RlZCByZXNvdXJjZSB1c2luZyBpdHMgbGFiZWwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgdGhlIHJlc291cmNlIHRvIGJlIGRpc3BsYXllZCAob3Igbm8gc2VsZWN0aW9uIHlldCkuXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBkaXNwbGF5UmVzb3VyY2UocmVzb3VyY2U6IFJlYWRSZXNvdXJjZSB8IG51bGwpIHtcblxuICAgICAgICAvLyBudWxsIGlzIHRoZSBpbml0aWFsIHZhbHVlIChubyBzZWxlY3Rpb24geWV0KVxuICAgICAgICBpZiAocmVzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvdXJjZS5sYWJlbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBmb3IgcmVzb3VyY2VzIHdob3NlIGxhYmVscyBjb250YWluIHRoZSBnaXZlbiBzZWFyY2ggdGVybSwgcmVzdHJpY3RpbmcgdG8gdG8gdGhlIGdpdmVuIHByb3BlcnRpZXMgb2JqZWN0IGNvbnN0cmFpbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2VhcmNoVGVybVxuICAgICAqL1xuICAgIHNlYXJjaEJ5TGFiZWwoc2VhcmNoVGVybTogc3RyaW5nKSB7XG5cbiAgICAgICAgLy8gYXQgbGVhc3QgMyBjaGFyYWN0ZXJzIGFyZSByZXF1aXJlZFxuICAgICAgICBpZiAoc2VhcmNoVGVybS5sZW5ndGggPj0gMykge1xuXG4gICAgICAgICAgICAvKiBUT0RPOiByZXBsYWNlIHdpdGgga25vcmEtYXBpLWpzLWxpYlxuICAgICAgICAgICAgdGhpcy5fc2VhcmNoU2VydmljZS5zZWFyY2hCeUxhYmVsUmVhZFJlc291cmNlU2VxdWVuY2Uoc2VhcmNoVGVybSwgMCwgeyBsaW1pdFRvUmVzb3VyY2VDbGFzczogdGhpcy5fcmVzdHJpY3RUb1Jlc291cmNlQ2xhc3MgfSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChyZXN1bHQ6IFJlYWRSZXNvdXJjZXNTZXF1ZW5jZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlcyA9IHJlc3VsdC5yZXNvdXJjZXM7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnSlNPTkxEIG9mIGZ1bGwgcmVzb3VyY2UgcmVxdWVzdCBjb3VsZCBub3QgYmUgZXhwYW5kZWQ6JyArIGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmtub3JhQXBpQ29ubmVjdGlvbi52Mi5zZWFyY2guZG9TZWFyY2hCeUxhYmVsKHNlYXJjaFRlcm0sIDAsIHsgbGltaXRUb1Jlc291cmNlQ2xhc3M6IHRoaXMuX3Jlc3RyaWN0VG9SZXNvdXJjZUNsYXNzIH0pLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAocmVzcG9uc2U6IFJlYWRSZXNvdXJjZVtdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2VzID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjbGVhciBzZWxlY3Rpb25cbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VzID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgdGhhdCB0aGUgc2VsZWN0aW9uIGlzIGEgW1tSZWFkUmVzb3VyY2VdXS5cbiAgICAgKlxuICAgICAqIFN1cnByaXNpbmdseSwgW251bGxdIGhhcyB0byBiZSByZXR1cm5lZCBpZiB0aGUgdmFsdWUgaXMgdmFsaWQ6IGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9mb3JtLXZhbGlkYXRpb24jY3VzdG9tLXZhbGlkYXRvcnNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aGUgZm9ybSBlbGVtZW50IHdob3NlIHZhbHVlIGhhcyB0byBiZSBjaGVja2VkLlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgdmFsaWRhdGVSZXNvdXJjZShjOiBGb3JtQ29udHJvbCkge1xuXG4gICAgICAgIGNvbnN0IGlzVmFsaWRSZXNvdXJjZSA9IChjLnZhbHVlIGluc3RhbmNlb2YgUmVhZFJlc291cmNlKTtcblxuICAgICAgICBpZiAoaXNWYWxpZFJlc291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbm9SZXNvdXJjZToge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYy52YWx1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgIHJlc291cmNlOiBbbnVsbCwgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVSZXNvdXJjZVxuICAgICAgICAgICAgXSldXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaEJ5TGFiZWwoZGF0YS5yZXNvdXJjZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlc29sdmVkUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIGFkZCBmb3JtIHRvIHRoZSBwYXJlbnQgZm9ybSBncm91cFxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuYWRkQ29udHJvbCgncHJvcFZhbHVlJywgdGhpcy5mb3JtKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG5cbiAgICAgICAgLy8gcmVtb3ZlIGZvcm0gZnJvbSB0aGUgcGFyZW50IGZvcm0gZ3JvdXBcbiAgICAgICAgcmVzb2x2ZWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgncHJvcFZhbHVlJyk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgZ2V0VmFsdWUoKTogVmFsdWUge1xuXG4gICAgICAgIHJldHVybiBuZXcgSVJJKHRoaXMuZm9ybS52YWx1ZS5yZXNvdXJjZS5pZCk7XG4gICAgfVxuXG59XG4iXX0=