@nakedobjects/gemini
Version:
Single Page Application client for a Naked Objects application.
50 lines • 8.88 kB
JavaScript
import { Component, ViewChild, ViewContainerRef } from '@angular/core';
import * as Ro from '@nakedobjects/restful-objects';
import { ViewType } from '@nakedobjects/services';
import { PaneComponent } from '../pane/pane';
import * as i0 from "@angular/core";
import * as i1 from "@angular/router";
import * as i2 from "@nakedobjects/services";
import * as i3 from "../custom-component.service";
import * as i4 from "@angular/common";
export class DynamicObjectComponent extends PaneComponent {
componentFactoryResolver;
customComponentService;
configService;
parent;
constructor(activatedRoute, urlManager, context, componentFactoryResolver, customComponentService, configService) {
super(activatedRoute, urlManager, context);
this.componentFactoryResolver = componentFactoryResolver;
this.customComponentService = customComponentService;
this.configService = configService;
}
lastOid;
setup(routeData) {
if (!routeData.objectId) {
return;
}
const oid = Ro.ObjectIdWrapper.fromObjectId(routeData.objectId, this.configService.config.keySeparator);
if (oid.domainType !== this.lastOid) {
this.lastOid = oid.domainType;
this.parent?.clear();
this.customComponentService.getCustomComponent(this.lastOid, ViewType.Object).then(c => {
const childComponent = this.componentFactoryResolver.resolveComponentFactory(c);
this.parent?.createComponent(childComponent);
});
}
}
ngOnDestroy() {
super.ngOnDestroy();
this.parent?.clear();
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DynamicObjectComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.UrlManagerService }, { token: i2.ContextService }, { token: i0.ComponentFactoryResolver }, { token: i3.CustomComponentService }, { token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DynamicObjectComponent, selector: "nof-dynamic-object", viewQueries: [{ propertyName: "parent", first: true, predicate: ["parent"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: "<div [attr.id]=\"paneIdName\" [ngClass]=\"paneType\">\n <div #parent></div>\n</div>\n<router-outlet (activate)=\"onChild()\" (deactivate)=\"onChildless()\"></router-outlet>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DynamicObjectComponent, decorators: [{
type: Component,
args: [{ selector: 'nof-dynamic-object', template: "<div [attr.id]=\"paneIdName\" [ngClass]=\"paneType\">\n <div #parent></div>\n</div>\n<router-outlet (activate)=\"onChild()\" (deactivate)=\"onChildless()\"></router-outlet>\n" }]
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.UrlManagerService }, { type: i2.ContextService }, { type: i0.ComponentFactoryResolver }, { type: i3.CustomComponentService }, { type: i2.ConfigService }], propDecorators: { parent: [{
type: ViewChild,
args: ['parent', { read: ViewContainerRef, static: true }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1vYmplY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZ2VtaW5pL3NyYy9keW5hbWljLW9iamVjdC9keW5hbWljLW9iamVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9nZW1pbmkvc3JjL2R5bmFtaWMtb2JqZWN0L2R5bmFtaWMtb2JqZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXVDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc1RyxPQUFPLEtBQUssRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BELE9BQU8sRUFBbUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7O0FBTzdDLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxhQUFhO0lBU2hDO0lBQ0E7SUFDQTtJQVJyQixNQUFNLENBQW9CO0lBRTFCLFlBQ0ksY0FBOEIsRUFDOUIsVUFBNkIsRUFDN0IsT0FBdUIsRUFDTix3QkFBa0QsRUFDbEQsc0JBQThDLEVBQzlDLGFBQTRCO1FBQzdDLEtBQUssQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBSDFCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUVqRCxDQUFDO0lBRU8sT0FBTyxDQUFVO0lBRWYsS0FBSyxDQUFDLFNBQXdCO1FBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEIsT0FBTztRQUNYLENBQUM7UUFDRCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXhHLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQzlCLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFFckIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbkYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLHVCQUF1QixDQUFDLENBQWtCLENBQUMsQ0FBQztnQkFDakcsSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQztJQUVRLFdBQVc7UUFDaEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQzt1R0FyQ1Esc0JBQXNCOzJGQUF0QixzQkFBc0IsdUlBRUYsZ0JBQWdCLGtFQ2ZqRCxtTEFJQTs7MkZEU2Esc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNJLG9CQUFvQjt3UEFPOUIsTUFBTTtzQkFETCxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUcsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgKiBhcyBSbyBmcm9tICdAbmFrZWRvYmplY3RzL3Jlc3RmdWwtb2JqZWN0cyc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlLCBDb250ZXh0U2VydmljZSwgUGFuZVJvdXRlRGF0YSwgVXJsTWFuYWdlclNlcnZpY2UsIFZpZXdUeXBlIH0gZnJvbSAnQG5ha2Vkb2JqZWN0cy9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBDdXN0b21Db21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vY3VzdG9tLWNvbXBvbmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFBhbmVDb21wb25lbnQgfSBmcm9tICcuLi9wYW5lL3BhbmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25vZi1keW5hbWljLW9iamVjdCcsXG4gICAgdGVtcGxhdGVVcmw6ICdkeW5hbWljLW9iamVjdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ2R5bmFtaWMtb2JqZWN0LmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljT2JqZWN0Q29tcG9uZW50IGV4dGVuZHMgUGFuZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgICBAVmlld0NoaWxkKCdwYXJlbnQnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYyA6IHRydWUgfSlcbiAgICBwYXJlbnQ/OiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgdXJsTWFuYWdlcjogVXJsTWFuYWdlclNlcnZpY2UsXG4gICAgICAgIGNvbnRleHQ6IENvbnRleHRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGN1c3RvbUNvbXBvbmVudFNlcnZpY2U6IEN1c3RvbUNvbXBvbmVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSkge1xuICAgICAgICBzdXBlcihhY3RpdmF0ZWRSb3V0ZSwgdXJsTWFuYWdlciwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsYXN0T2lkPzogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIHNldHVwKHJvdXRlRGF0YTogUGFuZVJvdXRlRGF0YSkge1xuICAgICAgICBpZiAoIXJvdXRlRGF0YS5vYmplY3RJZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9pZCA9IFJvLk9iamVjdElkV3JhcHBlci5mcm9tT2JqZWN0SWQocm91dGVEYXRhLm9iamVjdElkLCB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLmtleVNlcGFyYXRvcik7XG5cbiAgICAgICAgaWYgKG9pZC5kb21haW5UeXBlICE9PSB0aGlzLmxhc3RPaWQpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdE9pZCA9IG9pZC5kb21haW5UeXBlO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQ/LmNsZWFyKCk7XG5cbiAgICAgICAgICAgIHRoaXMuY3VzdG9tQ29tcG9uZW50U2VydmljZS5nZXRDdXN0b21Db21wb25lbnQodGhpcy5sYXN0T2lkLCBWaWV3VHlwZS5PYmplY3QpLnRoZW4oYyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRDb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjIGFzIFR5cGU8dW5rbm93bj4pO1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Py5jcmVhdGVDb21wb25lbnQoY2hpbGRDb21wb25lbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5wYXJlbnQ/LmNsZWFyKCk7XG4gICAgfVxufVxuIiwiPGRpdiBbYXR0ci5pZF09XCJwYW5lSWROYW1lXCIgW25nQ2xhc3NdPVwicGFuZVR5cGVcIj5cbiAgICA8ZGl2ICNwYXJlbnQ+PC9kaXY+XG48L2Rpdj5cbjxyb3V0ZXItb3V0bGV0IChhY3RpdmF0ZSk9XCJvbkNoaWxkKClcIiAoZGVhY3RpdmF0ZSk9XCJvbkNoaWxkbGVzcygpXCI+PC9yb3V0ZXItb3V0bGV0PlxuIl19