@yuuvis/client-framework 2.17.0 → 2.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/yuuvis-client-framework-object-details.mjs +2 -2
- package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-relationship.mjs +1 -1
- package/fesm2022/yuuvis-client-framework-object-relationship.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -668,7 +668,7 @@ class ObjectMetadataComponent {
|
|
|
668
668
|
this.#formSubscriptions.forEach((s) => s.unsubscribe());
|
|
669
669
|
}
|
|
670
670
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: ObjectMetadataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
671
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: ObjectMetadataComponent, isStandalone: true, selector: "yuv-object-metadata", inputs: { disableControls: { classPropertyName: "disableControls", publicName: "disableControls", isSignal: true, isRequired: false, transformFunction: null }, disableBasicMetadata: { classPropertyName: "disableBasicMetadata", publicName: "disableBasicMetadata", isSignal: true, isRequired: false, transformFunction: null }, elementExtensions: { classPropertyName: "elementExtensions", publicName: "elementExtensions", isSignal: true, isRequired: false, transformFunction: null }, situation: { classPropertyName: "situation", publicName: "situation", isSignal: true, isRequired: false, transformFunction: null }, dmsObject: { classPropertyName: "dmsObject", publicName: "dmsObject", isSignal: true, isRequired: false, transformFunction: null }, flavoredDmsObject: { classPropertyName: "flavoredDmsObject", publicName: "flavoredDmsObject", isSignal: true, isRequired: false, transformFunction: null }, flavors: { classPropertyName: "flavors", publicName: "flavors", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { indexDataSaved: "indexDataSaved", statusChanged: "statusChanged" }, host: { properties: { "class.empty": "empty()", "class.loading": "busyLoading()" } }, viewQueries: [{ propertyName: "objectForms", predicate: ObjectFormComponent, descendants: true, isSignal: true }, { propertyName: "objectMetadataSectionForms", predicate: ObjectMetadataSectionComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<main [yuvBusyOverlay]=\"busySaving() || busyLoading() || mainFormOptionsIsLoading()\">\n @if (empty()) {\n <p>{{ 'yuv.object-metadata.empty.message' | translate }}</p>\n }\n @if (!mainFormOptions()) {\n <yuv-object-form\n [readonly]=\"!hasWritePermission()\"\n [formOptions]=\"mainFormOptions()\"\n [elementExtensions]=\"elementExtensions()\"\n (statusChanged)=\"onFormStatusChanged('main', $event)\"\n ></yuv-object-form>\n }\n @for (fo of flavorFormOptions(); track $index) {\n <yuv-object-metadata-section\n [readonly]=\"!hasWritePermission()\"\n [section]=\"fo\"\n [elementExtensions]=\"elementExtensions()\"\n [expanded]=\"$index === 0\"\n (statusChanged)=\"onFormStatusChanged(fo.id, $event)\"\n ></yuv-object-metadata-section>\n }\n\n <!-- base data -->\n @let object = dmsObject() ?? _dmsObject();\n @if (object && !disableBasicMetadata()) {\n <yuv-object-summary-data [dmsObject]=\"object\"></yuv-object-summary-data>\n }\n</main>\n\n<footer [attr.inert]=\"disableControls() || !controlsVisible() || null\">\n <div class=\"container\">\n <button\n ymtButton=\"secondary\"\n button-size=\"small\"\n [disabled]=\"busySaving() || busyLoading()\"\n (click)=\"resetForm()\"\n [hidden]=\"!combinedFormState?.dirty\"\n [disabled]=\"!combinedFormState?.dirty\"\n >\n {{ 'yuv.object-metadata.button.reset' | translate }}\n </button>\n <button\n ymtButton=\"primary\"\n button-size=\"small\"\n (click)=\"save()\"\n [disabled]=\"!combinedFormState?.dirty || combinedFormState?.invalid || busySaving() || busyLoading()\"\n >\n {{ 'yuv.object-metadata.button.save' | translate }}\n </button>\n </div>\n</footer>\n", styles: [":host{--_object-metadata-panel-background: var(--object-metadata-panel-background, var(--ymt-surface-container-low));--_object-metadata-section-background: var(--object-metadata-section-background, var(--ymt-surface));--_object-metadata-section-corner: var(--object-metadata-section-corner, var(--ymt-corner-m));--_object-metadata-footer-background: var(--object-metadata-footer-background, var(--ymt-surface-container));--_object-metadata-footer-height: 4rem;display:grid;grid-template-rows:1fr auto;grid-template-columns:1fr;height:100%;overflow:hidden;position:relative;background-color:var(--_object-metadata-panel-background)}:host.empty main{justify-content:center;align-items:center}:host.loading main>*{opacity:0}:host main{grid-row:1/span 3;grid-column:1;overflow-y:auto;width:100%;display:flex;flex-flow:column;padding:var(--ymt-spacing-3xl) var(--ymt-spacing-l) var(--_object-metadata-footer-height) var(--ymt-spacing-l)}:host footer{grid-row:-1;grid-column:1;padding:var(--
|
|
671
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: ObjectMetadataComponent, isStandalone: true, selector: "yuv-object-metadata", inputs: { disableControls: { classPropertyName: "disableControls", publicName: "disableControls", isSignal: true, isRequired: false, transformFunction: null }, disableBasicMetadata: { classPropertyName: "disableBasicMetadata", publicName: "disableBasicMetadata", isSignal: true, isRequired: false, transformFunction: null }, elementExtensions: { classPropertyName: "elementExtensions", publicName: "elementExtensions", isSignal: true, isRequired: false, transformFunction: null }, situation: { classPropertyName: "situation", publicName: "situation", isSignal: true, isRequired: false, transformFunction: null }, dmsObject: { classPropertyName: "dmsObject", publicName: "dmsObject", isSignal: true, isRequired: false, transformFunction: null }, flavoredDmsObject: { classPropertyName: "flavoredDmsObject", publicName: "flavoredDmsObject", isSignal: true, isRequired: false, transformFunction: null }, flavors: { classPropertyName: "flavors", publicName: "flavors", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { indexDataSaved: "indexDataSaved", statusChanged: "statusChanged" }, host: { properties: { "class.empty": "empty()", "class.loading": "busyLoading()" } }, viewQueries: [{ propertyName: "objectForms", predicate: ObjectFormComponent, descendants: true, isSignal: true }, { propertyName: "objectMetadataSectionForms", predicate: ObjectMetadataSectionComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<main [yuvBusyOverlay]=\"busySaving() || busyLoading() || mainFormOptionsIsLoading()\">\n @if (empty()) {\n <p>{{ 'yuv.object-metadata.empty.message' | translate }}</p>\n }\n @if (!mainFormOptions()) {\n <yuv-object-form\n [readonly]=\"!hasWritePermission()\"\n [formOptions]=\"mainFormOptions()\"\n [elementExtensions]=\"elementExtensions()\"\n (statusChanged)=\"onFormStatusChanged('main', $event)\"\n ></yuv-object-form>\n }\n @for (fo of flavorFormOptions(); track $index) {\n <yuv-object-metadata-section\n [readonly]=\"!hasWritePermission()\"\n [section]=\"fo\"\n [elementExtensions]=\"elementExtensions()\"\n [expanded]=\"$index === 0\"\n (statusChanged)=\"onFormStatusChanged(fo.id, $event)\"\n ></yuv-object-metadata-section>\n }\n\n <!-- base data -->\n @let object = dmsObject() ?? _dmsObject();\n @if (object && !disableBasicMetadata()) {\n <yuv-object-summary-data [dmsObject]=\"object\"></yuv-object-summary-data>\n }\n</main>\n\n<footer [attr.inert]=\"disableControls() || !controlsVisible() || null\">\n <div class=\"container\">\n <button\n ymtButton=\"secondary\"\n button-size=\"small\"\n [disabled]=\"busySaving() || busyLoading()\"\n (click)=\"resetForm()\"\n [hidden]=\"!combinedFormState?.dirty\"\n [disabled]=\"!combinedFormState?.dirty\"\n >\n {{ 'yuv.object-metadata.button.reset' | translate }}\n </button>\n <button\n ymtButton=\"primary\"\n button-size=\"small\"\n (click)=\"save()\"\n [disabled]=\"!combinedFormState?.dirty || combinedFormState?.invalid || busySaving() || busyLoading()\"\n >\n {{ 'yuv.object-metadata.button.save' | translate }}\n </button>\n </div>\n</footer>\n", styles: [":host{--_object-metadata-panel-background: var(--object-metadata-panel-background, var(--ymt-surface-container-low));--_object-metadata-section-background: var(--object-metadata-section-background, var(--ymt-surface));--_object-metadata-section-corner: var(--object-metadata-section-corner, var(--ymt-corner-m));--_object-metadata-footer-background: var(--object-metadata-footer-background, var(--ymt-surface-container));--_object-metadata-footer-border: 1px solid var(--object-metadata-footer-border, var(--ymt-outline-variant));--_object-metadata-footer-indent: var(--object-metadata-footer-indent, var(--ymt-spacing-xs));--_object-metadata-footer-height: 4rem;--_object-metadata-footer-corner: var(--object-metadata-footer-corner, var(--ymt-corner-s));display:grid;grid-template-rows:1fr auto;grid-template-columns:1fr;height:100%;overflow:hidden;position:relative;background-color:var(--_object-metadata-panel-background)}:host.empty main{justify-content:center;align-items:center}:host.loading main>*{opacity:0}:host main{grid-row:1/span 3;grid-column:1;overflow-y:auto;width:100%;display:flex;flex-flow:column;padding:var(--ymt-spacing-3xl) var(--ymt-spacing-l) var(--_object-metadata-footer-height) var(--ymt-spacing-l)}:host footer{grid-row:-1;grid-column:1;padding:var(--_object-metadata-footer-indent);opacity:0;z-index:101}:host footer .container{background:var(--_object-metadata-footer-background);padding:var(--ymt-spacing-s);display:flex;align-items:center;justify-content:end;gap:var(--ymt-spacing-s);border-radius:var(--_object-metadata-footer-corner);border:var(--_object-metadata-footer-border)}:host footer:not([inert]){animation:controlsAppear .2s ease-in-out forwards}:host main yuv-object-metadata-section{margin-block-end:var(--ymt-spacing-m)}:host main yuv-object-summary-data{background-color:var(--_object-metadata-section-background);border:1px solid var(--ymt-outline-variant);border-radius:var(--_object-metadata-section-corner);padding:var(--ymt-spacing-m)}@keyframes controlsAppear{0%{opacity:0;translate:0 var(--ymt-spacing-m)}to{opacity:1;translate:0 0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ObjectFormComponent, selector: "yuv-object-form", inputs: ["formOptions", "inert", "readonly", "elementExtensions", "isInnerTableForm"], outputs: ["statusChanged", "onFormReady"] }, { kind: "component", type: ObjectSummaryDataComponent, selector: "yuv-object-summary-data", inputs: ["dmsObject", "flavors", "showAppliedFlavors"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig", "yuvBusyError"], outputs: ["yuvBusyErrorDismiss"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: ObjectMetadataSectionComponent, selector: "yuv-object-metadata-section", inputs: ["section", "expanded", "elementExtensions", "readonly"], outputs: ["statusChanged"] }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }] }); }
|
|
672
672
|
}
|
|
673
673
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: ObjectMetadataComponent, decorators: [{
|
|
674
674
|
type: Component,
|
|
@@ -686,7 +686,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
|
|
|
686
686
|
], host: {
|
|
687
687
|
'[class.empty]': 'empty()',
|
|
688
688
|
'[class.loading]': 'busyLoading()'
|
|
689
|
-
}, template: "<main [yuvBusyOverlay]=\"busySaving() || busyLoading() || mainFormOptionsIsLoading()\">\n @if (empty()) {\n <p>{{ 'yuv.object-metadata.empty.message' | translate }}</p>\n }\n @if (!mainFormOptions()) {\n <yuv-object-form\n [readonly]=\"!hasWritePermission()\"\n [formOptions]=\"mainFormOptions()\"\n [elementExtensions]=\"elementExtensions()\"\n (statusChanged)=\"onFormStatusChanged('main', $event)\"\n ></yuv-object-form>\n }\n @for (fo of flavorFormOptions(); track $index) {\n <yuv-object-metadata-section\n [readonly]=\"!hasWritePermission()\"\n [section]=\"fo\"\n [elementExtensions]=\"elementExtensions()\"\n [expanded]=\"$index === 0\"\n (statusChanged)=\"onFormStatusChanged(fo.id, $event)\"\n ></yuv-object-metadata-section>\n }\n\n <!-- base data -->\n @let object = dmsObject() ?? _dmsObject();\n @if (object && !disableBasicMetadata()) {\n <yuv-object-summary-data [dmsObject]=\"object\"></yuv-object-summary-data>\n }\n</main>\n\n<footer [attr.inert]=\"disableControls() || !controlsVisible() || null\">\n <div class=\"container\">\n <button\n ymtButton=\"secondary\"\n button-size=\"small\"\n [disabled]=\"busySaving() || busyLoading()\"\n (click)=\"resetForm()\"\n [hidden]=\"!combinedFormState?.dirty\"\n [disabled]=\"!combinedFormState?.dirty\"\n >\n {{ 'yuv.object-metadata.button.reset' | translate }}\n </button>\n <button\n ymtButton=\"primary\"\n button-size=\"small\"\n (click)=\"save()\"\n [disabled]=\"!combinedFormState?.dirty || combinedFormState?.invalid || busySaving() || busyLoading()\"\n >\n {{ 'yuv.object-metadata.button.save' | translate }}\n </button>\n </div>\n</footer>\n", styles: [":host{--_object-metadata-panel-background: var(--object-metadata-panel-background, var(--ymt-surface-container-low));--_object-metadata-section-background: var(--object-metadata-section-background, var(--ymt-surface));--_object-metadata-section-corner: var(--object-metadata-section-corner, var(--ymt-corner-m));--_object-metadata-footer-background: var(--object-metadata-footer-background, var(--ymt-surface-container));--_object-metadata-footer-height: 4rem;display:grid;grid-template-rows:1fr auto;grid-template-columns:1fr;height:100%;overflow:hidden;position:relative;background-color:var(--_object-metadata-panel-background)}:host.empty main{justify-content:center;align-items:center}:host.loading main>*{opacity:0}:host main{grid-row:1/span 3;grid-column:1;overflow-y:auto;width:100%;display:flex;flex-flow:column;padding:var(--ymt-spacing-3xl) var(--ymt-spacing-l) var(--_object-metadata-footer-height) var(--ymt-spacing-l)}:host footer{grid-row:-1;grid-column:1;padding:var(--
|
|
689
|
+
}, template: "<main [yuvBusyOverlay]=\"busySaving() || busyLoading() || mainFormOptionsIsLoading()\">\n @if (empty()) {\n <p>{{ 'yuv.object-metadata.empty.message' | translate }}</p>\n }\n @if (!mainFormOptions()) {\n <yuv-object-form\n [readonly]=\"!hasWritePermission()\"\n [formOptions]=\"mainFormOptions()\"\n [elementExtensions]=\"elementExtensions()\"\n (statusChanged)=\"onFormStatusChanged('main', $event)\"\n ></yuv-object-form>\n }\n @for (fo of flavorFormOptions(); track $index) {\n <yuv-object-metadata-section\n [readonly]=\"!hasWritePermission()\"\n [section]=\"fo\"\n [elementExtensions]=\"elementExtensions()\"\n [expanded]=\"$index === 0\"\n (statusChanged)=\"onFormStatusChanged(fo.id, $event)\"\n ></yuv-object-metadata-section>\n }\n\n <!-- base data -->\n @let object = dmsObject() ?? _dmsObject();\n @if (object && !disableBasicMetadata()) {\n <yuv-object-summary-data [dmsObject]=\"object\"></yuv-object-summary-data>\n }\n</main>\n\n<footer [attr.inert]=\"disableControls() || !controlsVisible() || null\">\n <div class=\"container\">\n <button\n ymtButton=\"secondary\"\n button-size=\"small\"\n [disabled]=\"busySaving() || busyLoading()\"\n (click)=\"resetForm()\"\n [hidden]=\"!combinedFormState?.dirty\"\n [disabled]=\"!combinedFormState?.dirty\"\n >\n {{ 'yuv.object-metadata.button.reset' | translate }}\n </button>\n <button\n ymtButton=\"primary\"\n button-size=\"small\"\n (click)=\"save()\"\n [disabled]=\"!combinedFormState?.dirty || combinedFormState?.invalid || busySaving() || busyLoading()\"\n >\n {{ 'yuv.object-metadata.button.save' | translate }}\n </button>\n </div>\n</footer>\n", styles: [":host{--_object-metadata-panel-background: var(--object-metadata-panel-background, var(--ymt-surface-container-low));--_object-metadata-section-background: var(--object-metadata-section-background, var(--ymt-surface));--_object-metadata-section-corner: var(--object-metadata-section-corner, var(--ymt-corner-m));--_object-metadata-footer-background: var(--object-metadata-footer-background, var(--ymt-surface-container));--_object-metadata-footer-border: 1px solid var(--object-metadata-footer-border, var(--ymt-outline-variant));--_object-metadata-footer-indent: var(--object-metadata-footer-indent, var(--ymt-spacing-xs));--_object-metadata-footer-height: 4rem;--_object-metadata-footer-corner: var(--object-metadata-footer-corner, var(--ymt-corner-s));display:grid;grid-template-rows:1fr auto;grid-template-columns:1fr;height:100%;overflow:hidden;position:relative;background-color:var(--_object-metadata-panel-background)}:host.empty main{justify-content:center;align-items:center}:host.loading main>*{opacity:0}:host main{grid-row:1/span 3;grid-column:1;overflow-y:auto;width:100%;display:flex;flex-flow:column;padding:var(--ymt-spacing-3xl) var(--ymt-spacing-l) var(--_object-metadata-footer-height) var(--ymt-spacing-l)}:host footer{grid-row:-1;grid-column:1;padding:var(--_object-metadata-footer-indent);opacity:0;z-index:101}:host footer .container{background:var(--_object-metadata-footer-background);padding:var(--ymt-spacing-s);display:flex;align-items:center;justify-content:end;gap:var(--ymt-spacing-s);border-radius:var(--_object-metadata-footer-corner);border:var(--_object-metadata-footer-border)}:host footer:not([inert]){animation:controlsAppear .2s ease-in-out forwards}:host main yuv-object-metadata-section{margin-block-end:var(--ymt-spacing-m)}:host main yuv-object-summary-data{background-color:var(--_object-metadata-section-background);border:1px solid var(--ymt-outline-variant);border-radius:var(--_object-metadata-section-corner);padding:var(--ymt-spacing-m)}@keyframes controlsAppear{0%{opacity:0;translate:0 var(--ymt-spacing-m)}to{opacity:1;translate:0 0}}\n"] }]
|
|
690
690
|
}] });
|
|
691
691
|
|
|
692
692
|
class ObjectDetailsComponent {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-framework-object-details.mjs","sources":["../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-details-header/object-details-header.component.ts","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-details-header/object-details-header.component.html","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-details-shell/object-details-shell.service.ts","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-details-shell/object-details-shell.component.ts","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-details-shell/object-details-shell.component.html","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-audit/object-audit.component.ts","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-audit/object-audit.component.html","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-metadata/object-metadata-section/object-metadata-section.component.ts","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-metadata/object-metadata-section/object-metadata-section.component.html","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-metadata/object-metadata.component.ts","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-metadata/object-metadata.component.html","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-details.component.ts","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-details.component.html","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-details.module.ts","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-metadata/form-section-group.pipe.ts","../../../../../libs/yuuvis/client-framework/object-details/src/yuuvis-client-framework-object-details.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, computed, contentChild, effect, inject, input, TemplateRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DmsObject, EventService, ObjectConfigService, VirtualObjectType, YuvEvent, YuvEventType } from '@yuuvis/client-core';\nimport { RendererDirective, RendererDirectiveInput } from '@yuuvis/client-framework/renderer';\nimport { YmtPanesModule } from '@yuuvis/material/panes';\n\ninterface HeaderData {\n title: RendererDirectiveInput;\n description?: RendererDirectiveInput;\n icon: string;\n}\n\n/**\n * Component showing header data for a dms object. These will be\n * generated from the object config for the given object.\n *\n * You could inject a set of actions into the headers actions slot\n * by adding them to the components body:\n *\n * ```html\n * <yuv-object-details-header [dmsObject]=\"obj\">\n * <ng-template #yuvHeaderActions>...</ng-template>\n * </yuv-object-details-header>\n * ```\n */\n@Component({\n selector: 'yuv-object-details-header',\n imports: [\n CommonModule,\n MatIconModule,\n YmtPanesModule,\n RendererDirective\n // RetentionBadgeComponent\n ],\n templateUrl: './object-details-header.component.html',\n styleUrl: './object-details-header.component.scss'\n})\nexport class ObjectDetailsHeaderComponent {\n #objectConfig = inject(ObjectConfigService);\n readonly #eventService = inject(EventService);\n\n dmsObject = input<DmsObject | undefined>(undefined);\n\n /**\n * Virtual object type to use for retrieving header data\n */\n type = input.required<VirtualObjectType>();\n /**\n * Bucket of the object config to retrieve header data from\n */\n bucket = input<string | undefined>(undefined);\n\n actions = input<TemplateRef<any> | undefined>(undefined);\n\n headerData = computed<HeaderData | undefined>(() => {\n const o = this.dmsObject();\n const t = this.type();\n\n return o && t ? this.#setHeaderData() : undefined;\n });\n\n constructor() {\n this.#eventService\n .on(YuvEventType.DMS_OBJECT_UPDATED)\n .pipe(takeUntilDestroyed())\n .subscribe((e: YuvEvent) => this.#setHeaderData());\n }\n\n #setHeaderData() {\n const o = this.dmsObject();\n if (!o) {\n return undefined;\n } else {\n const roc = this.#objectConfig.getResolvedObjectConfig(o.data, this.type(), this.bucket());\n return {\n title: roc.title,\n description: roc.description,\n icon: roc.icon?.value\n };\n }\n }\n}\n","@let dmsObj = dmsObject();\n@let headerD = headerData();\n@if (dmsObj && headerD) {\n <ymt-pane-header [icon]=\"headerD.icon\" [actions]=\"actions()\">\n <ng-template #yuvPaneHeaderTitle>\n <ng-container *yuvRenderer=\"headerD.title\"></ng-container>\n </ng-template>\n <ng-template #yuvPaneHeaderSubtitle>\n <ng-container *yuvRenderer=\"headerD.description\"></ng-container>\n </ng-template>\n </ymt-pane-header>\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { DmsObject, DmsService, TranslateService, Utils } from '@yuuvis/client-core';\nimport { finalize } from 'rxjs';\n\n@Injectable()\nexport class ObjectDetailsShellService {\n id = Utils.uuid();\n #dmsService = inject(DmsService);\n readonly translate = inject(TranslateService);\n\n #dmsObject = signal<DmsObject | undefined>(undefined);\n dmsObject = this.#dmsObject.asReadonly();\n\n contextError = signal<string | undefined>(undefined);\n busy = signal<boolean>(false);\n\n setDmsObject(dmsObject: DmsObject | undefined) {\n this.#dmsObject.set(dmsObject);\n this.contextError.set(undefined);\n }\n\n fetchDmsObject(id: string): void {\n this.busy.set(true);\n this.#dmsService\n .getDmsObject(id)\n .pipe(finalize(() => this.busy.set(false)))\n .subscribe({\n next: (dmsObject) => this.#dmsObject.set(dmsObject),\n error: () => {\n this.#dmsObject.set(undefined);\n this.contextError.set(this.translate.instant('yuv.object-metadata.context.load.error'));\n }\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, signal, TemplateRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { DmsObject, EventService, RetentionState, VirtualObjectType, YuvEvent, YuvEventType } from '@yuuvis/client-core';\nimport { BusyOverlayDirective } from '@yuuvis/client-framework/common';\nimport { ObjectDetailsHeaderComponent } from '../object-details-header/object-details-header.component';\nimport { ObjectDetailsShellService } from './object-details-shell.service';\n\n/**\n * Wrapper component for details of a dms object. This component\n * provides a header based on the object configuration for the given object.\n * It will also take care of loading the object if you only provide the objects ID.\n */\n@Component({\n selector: 'yuv-object-details-shell',\n standalone: true,\n imports: [CommonModule, ObjectDetailsHeaderComponent, MatTooltipModule, BusyOverlayDirective],\n\n templateUrl: './object-details-shell.component.html',\n styleUrls: ['./object-details-shell.component.scss']\n})\nexport class ObjectDetailsShellComponent {\n #eventService = inject(EventService);\n #odShellService = inject(ObjectDetailsShellService);\n\n retentionState = signal<RetentionState | undefined>(undefined);\n contextError = this.#odShellService.contextError;\n dmsObject = this.#odShellService.dmsObject;\n busy = this.#odShellService.busy;\n\n actions = input<TemplateRef<any> | undefined>(undefined);\n /**\n * Virtual object type to use for retrieving header data\n */\n type = input.required<VirtualObjectType>();\n /**\n * Bucket of the object config to retrieve header data from\n */\n bucket = input<string | undefined>(undefined);\n /**\n * Whether to hide the header\n */\n hideHeader = input<boolean>(false);\n\n constructor() {\n this.#eventService\n .on(YuvEventType.DMS_OBJECT_UPDATED, YuvEventType.DMS_OBJECT_DELETED)\n .pipe(takeUntilDestroyed())\n .subscribe((e: YuvEvent) => {\n switch (e.type) {\n case YuvEventType.DMS_OBJECT_UPDATED: {\n const o = e.data as DmsObject;\n const dmsObj = this.dmsObject();\n if (dmsObj && dmsObj.id === o.id) this.#odShellService.setDmsObject(o);\n break;\n }\n case YuvEventType.DMS_OBJECT_DELETED: {\n if (e.data?.id === this.dmsObject()?.id) {\n this.#odShellService.setDmsObject(undefined);\n }\n }\n }\n });\n }\n}\n","@let dmsObj = dmsObject();\n@if (dmsObj) {\n @if (!hideHeader()) {\n <yuv-object-details-header [dmsObject]=\"dmsObj\" [type]=\"type()\" [bucket]=\"bucket()\" [actions]=\"actions()\"></yuv-object-details-header>\n }\n <div class=\"content\" [yuvBusyOverlay]=\"busy()\">\n <ng-content></ng-content>\n </div>\n} @else {\n <div class=\"empty\">\n @if (contextError()) {\n <div class=\"error\">{{ contextError() }}</div>\n } @else {\n <!-- EMPTY -->\n }\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, input, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport {\n AuditEntry,\n AuditQueryResult,\n AuditService,\n DmsObject,\n EventService,\n LocaleDatePipe,\n SystemService,\n TranslateModule,\n TranslateService,\n YuvEvent,\n YuvEventType\n} from '@yuuvis/client-core';\nimport { BusyOverlayDirective } from '@yuuvis/client-framework/common';\nimport { YUV_ICONS } from '@yuuvis/client-framework/icons';\nimport { finalize } from 'rxjs';\nimport { MatIconModule } from '@angular/material/icon';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\n\n@Component({\n selector: 'yuv-object-audit',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, LocaleDatePipe, BusyOverlayDirective, TranslateModule, MatIconModule, YmtIconButtonDirective],\n templateUrl: './object-audit.component.html',\n styleUrl: './object-audit.component.scss'\n})\nexport class ObjectAuditComponent {\n private FILTER_CACHE_KEY = 'yuv.audit.filters';\n\n private _objectID?: string;\n private _objectTypeID?: string;\n\n icons = {\n filter: YUV_ICONS.filter,\n arrowNext: YUV_ICONS.arrowNext\n };\n\n auditsRes = signal<AuditQueryResult | undefined>(undefined);\n resolvedItems = signal<ResolvedAuditEntry[]>([]);\n error = signal(false);\n busy = signal(false);\n searchActions: { label: string; actions: string[] }[] = [];\n auditLabels: any = {};\n\n dmsObject = input<DmsObject | undefined>(undefined);\n\n #dmsObjectEffect = effect(() => {\n const o = this.dmsObject();\n if (!o) {\n this._objectID = undefined;\n this._objectTypeID = undefined;\n this.auditsRes.set(undefined);\n } else if (!this._objectID || this._objectID !== o.id) {\n this._objectID = o.id;\n this._objectTypeID = o.objectTypeId;\n this.query();\n } else {\n this.query();\n }\n });\n\n /**\n * A list of audits that should not be shown. Use the audit codes (like 100, 301, etc.).\n * This will also disable the corresponding filters.\n */\n skipActions = input<number[]>([]);\n\n /**\n * Whether or not to ignore admin and user separation of audit entries\n */\n allActions = input(false);\n\n get objectID() {\n return this._objectID;\n }\n\n constructor(\n private auditService: AuditService,\n private eventService: EventService,\n private system: SystemService,\n private translate: TranslateService\n ) {\n this.auditLabels = {\n a100: this.translate.instant('yuv.audit.label.create.metadata'),\n a101: this.translate.instant('yuv.audit.label.create.metadata.withcontent'),\n a110: this.translate.instant('yuv.audit.label.create.tag'),\n\n a200: this.translate.instant('yuv.audit.label.delete'),\n a201: this.translate.instant('yuv.audit.label.delete.content'), // #v\n a202: this.translate.instant('yuv.audit.label.delete.marked'),\n a210: this.translate.instant('yuv.audit.label.delete.tag'), // #v\n a220: this.translate.instant('yuv.audit.label.delete.version'), // #v\n\n a300: this.translate.instant('yuv.audit.label.update.metadata'),\n a301: this.translate.instant('yuv.audit.label.update.content'),\n a302: this.translate.instant('yuv.audit.label.update.metadata.withcontent'),\n a303: this.translate.instant('yuv.audit.label.update.move.content'),\n a310: this.translate.instant('yuv.audit.label.update.tag'),\n a325: this.translate.instant('yuv.audit.label.update.restore'),\n a340: this.translate.instant('yuv.audit.label.update.move'),\n\n a400: this.translate.instant('yuv.audit.label.get.content'),\n a401: this.translate.instant('yuv.audit.label.get.metadata'),\n a402: this.translate.instant('yuv.audit.label.get.rendition.text'),\n a403: this.translate.instant('yuv.audit.label.get.rendition.pdf'),\n a404: this.translate.instant('yuv.audit.label.get.rendition.thumbnail'),\n\n a10000: this.translate.instant('yuv.audit.label.get.custom')\n };\n\n this.eventService\n .on(YuvEventType.DMS_OBJECT_UPDATED)\n .pipe(takeUntilDestroyed())\n .subscribe((e: YuvEvent) => {\n const dmsObject = e.data as DmsObject;\n // reload audit entries when update belongs to the current dms object\n if (dmsObject.id === this.objectID) {\n this.query();\n }\n });\n }\n\n #fetchAuditEntries() {\n if (!this._objectID || !this._objectTypeID) return;\n this.error.set(false);\n this.busy.set(true);\n\n this.auditService.getAuditEntries(this._objectID, { skipActions: this.skipActions() }).subscribe({\n next: (res: AuditQueryResult) => {\n this.busy.set(false);\n this.auditsRes.set(res);\n this.resolvedItems.set(this.#mapResult(res));\n },\n error: () => {\n this.busy.set(false);\n this.onError();\n }\n });\n }\n\n #mapResult(res: AuditQueryResult): ResolvedAuditEntry[] {\n return (\n res.items\n // TODO: Remove this filter once the system:ren:text audit lifecycle planning is complete and the tag's purpose is fully defined.\n // https://help.optimal-systems.com/yuuvis/Momentum/latest/index.html#_content_renditions_asynchronous_full_text_indexing.html\n .filter((i) => !i.detail.includes('[system:ren:text, 1]'))\n .map((i) => {\n const r: ResolvedAuditEntry = { ...i, label: this.auditLabels['a' + i.action] };\n // tag related audits\n if ([110, 210, 310].includes(i.action)) {\n const params = this.#getAuditEntryParams(i);\n if (params) {\n const localizedLabel = `${params[0]}:${params[1]}`;\n r.more = `${this.system.getLocalizedLabel(params[0]) ?? params[0]}: ${this.system.getLocalizedLabel(localizedLabel) ?? localizedLabel}`;\n }\n }\n // restore audit\n else if (i.action === 325) {\n const params = this.#getAuditEntryParams(i);\n r.more = this.translate.instant('yuv.audit.label.update.restore.more', { version: params[0] || '[?]' });\n }\n // custom audits\n else if (i.action === 10000) {\n r.label = this.system.getLocalizedLabel(`audit:custom:${i.subaction}`) || `${i.subaction}`;\n }\n return r;\n })\n );\n }\n\n #getAuditEntryParams(auditItem: AuditEntry): string[] {\n const m = auditItem.detail.match(/\\[(.*?)\\]/);\n return m && m[1] ? m[1].split(',').map((i) => i.trim()) : [];\n }\n\n /**\n * Execute a query from the search panel.\n */\n query() {\n this.#fetchAuditEntries();\n }\n\n goToPage(page: number) {\n const currentAuditsRes = this.auditsRes();\n if (currentAuditsRes) {\n this.busy.set(true);\n this.auditService\n .getPage(currentAuditsRes, page)\n .pipe(finalize(() => this.busy.set(false)))\n .subscribe({\n next: (res: AuditQueryResult) => {\n this.auditsRes.set(res);\n this.resolvedItems.set(this.#mapResult(res));\n },\n error: () => {\n this.onError();\n }\n });\n }\n }\n\n private onError() {\n this.auditsRes.set(undefined);\n this.error.set(true);\n }\n}\n\ninterface ResolvedAuditEntry extends AuditEntry {\n label: string;\n}\n","@let auditsResult = auditsRes();\n\n<div class=\"yuv-audit\" [ngClass]=\"{ singleEntry: auditsResult?.items?.length === 1, onPage: auditsResult && auditsResult.page > 1 }\" [yuvBusyOverlay]=\"busy()\">\n @if (error()) {\n <div class=\"error\">\n <div translate>yuv.audit.fetch.error</div>\n </div>\n }\n\n @if (auditsResult) {\n <!-- list of audits -->\n @let resItems = resolvedItems();\n @if (resItems.length) {\n <ul class=\"timeline\" [attr.aria-label]=\"'yuv.audit.timeline' | translate\">\n @for (item of resItems; track $index) {\n <li class=\"audit\" attr.aria-labelledby=\"'title-{{ $index }} creator-{{ $index }} date-{{ $index }}'\">\n <time [attr.datetime]=\"item.creationDate\" class=\"date\">{{ item.creationDate | localeDate }}</time>\n <div class=\"node\">\n <div class=\"label\">\n <span class=\"title\" id=\"title-{{ $index }}\">{{ item.label }}</span>\n </div>\n <div class=\"more meta\">{{ item.more }}</div>\n <div class=\"creator meta\" id=\"creator-{{ $index }}\">{{ item.createdBy.title }}</div>\n </div>\n </li>\n }\n </ul>\n } @else {\n <div class=\"empty\" translate>yuv.audit.result.empty</div>\n }\n\n <!-- controls -->\n @if (auditsResult.hasMoreItems || auditsResult.page > 1) {\n <div class=\"footer\" yuvOfflineDisabled>\n <div class=\"paging\">\n <button\n ymtIconButton\n [attr.aria-label]=\"'yuv.audit.label.paging.prev' | translate\"\n [disabled]=\"auditsResult.page === 1\"\n (click)=\"goToPage(auditsResult.page - 1)\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n <div class=\"page\">\n {{ auditsResult.page }}\n </div>\n <button\n ymtIconButton\n [attr.aria-label]=\"'yuv.audit.label.paging.next' | translate\"\n [disabled]=\"!auditsResult.hasMoreItems\"\n (click)=\"goToPage(auditsResult.page + 1)\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n </div>\n }\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, inject, input, linkedSignal, output, signal, untracked, viewChild } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { Situation, SystemService } from '@yuuvis/client-core';\nimport {\n FormStatusChangedEvent,\n IObjectFormElementExtension,\n ObjectFormComponent,\n ObjectFormOptions\n} from '@yuuvis/client-framework/object-form';\nimport { ObjectMetadataSectionInput } from './object-metadata-section.interface';\n\n@Component({\n selector: 'yuv-object-metadata-section',\n imports: [CommonModule, MatIconModule, MatProgressSpinnerModule, ObjectFormComponent],\n templateUrl: './object-metadata-section.component.html',\n styleUrl: './object-metadata-section.component.scss',\n host: {\n '[class.invalid]': 'objectForm()?.form?.invalid',\n '[class.dirty]': 'objectForm()?.form?.dirty'\n }\n})\nexport class ObjectMetadataSectionComponent {\n #system = inject(SystemService);\n\n objectForm = viewChild<ObjectFormComponent>(ObjectFormComponent);\n section = input.required<ObjectMetadataSectionInput>();\n expandedInput = input<boolean>(false, { alias: 'expanded' });\n elementExtensions = input<IObjectFormElementExtension[]>([]);\n readonly = input<boolean>();\n expanded = linkedSignal(this.expandedInput);\n\n busy = signal(false);\n\n // linkedSignal instead of plain signal so that formOptions resets to undefined whenever\n // the section input changes (e.g. a different object is loaded). This ensures the form\n // is reloaded with fresh data for the new section while still allowing .set() mutations\n // (user edits) to persist across collapse/expand cycles within the same section.\n formOptions = linkedSignal<ObjectMetadataSectionInput, ObjectFormOptions | undefined>({\n source: this.section,\n computation: () => undefined\n });\n #formOptionsEffect = effect(() => {\n // Load the object form when the section is first expanded.\n // Don't use rxResource here because it messes with the state of the formOptions.\n const section = this.section();\n const expanded = this.expanded();\n\n // untracked() reads formOptions without adding it as a reactive dependency of this\n // effect (which would cause an infinite loop). The guard ensures we only fetch once\n // per section: subsequent expand cycles reuse the existing formOptions so that any\n // user-edited values are not overwritten with the original section.data.\n if (expanded && !untracked(() => this.formOptions())) {\n this.busy.set(true);\n this.#system.getObjectTypeForm(section.id, section.situation || Situation.EDIT).subscribe({\n next: (formModel) => {\n this.formOptions.set({ formModel, data: section.data || {} });\n this.busy.set(false);\n },\n error: (err) => {\n console.error('Error loading form options', err);\n this.formOptions.set(undefined);\n this.busy.set(false);\n }\n });\n }\n });\n\n statusChanged = output<FormStatusChangedEvent>();\n\n resetForm() {\n this.objectForm()?.resetForm();\n }\n\n setFormPristine() {\n this.objectForm()?.setFormPristine();\n }\n}\n","@let _section = section();\n@let fo = formOptions();\n\n<h3>\n <button\n type=\"button\"\n [attr.aria-expanded]=\"expanded()\"\n class=\"accordion-trigger\"\n [attr.aria-controls]=\"'sect_' + _section.id\"\n [id]=\"'accordion_' + _section.id\"\n (click)=\"expanded.set(!expanded())\"\n [attr.aria-busy]=\"busy()\"\n >\n @if (_section.icon) {\n @if (_section.svgIcon) {\n <mat-icon [svgIcon]=\"_section.icon\"></mat-icon>\n } @else {\n <mat-icon>{{ _section.icon }}</mat-icon>\n }\n }\n <span >{{ _section.label }}</span>\n @if (busy()) {\n <mat-spinner diameter=\"24\"></mat-spinner>\n }\n <mat-icon class=\"arr\">keyboard_arrow_down</mat-icon>\n </button>\n</h3>\n<div [id]=\"'sect_' + _section.id\" role=\"region\" [attr.aria-labelledby]=\"'accordion_' + _section.id\" class=\"accordion-panel\">\n @if (fo) {\n <yuv-object-form\n #objectForm\n [hidden]=\"!expanded()\"\n [readonly]=\"readonly()\"\n [formOptions]=\"fo\"\n [elementExtensions]=\"elementExtensions()\"\n (statusChanged)=\"statusChanged.emit($event)\"\n ></yuv-object-form>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, effect, inject, input, linkedSignal, OnDestroy, output, signal, viewChildren } from '@angular/core';\nimport { rxResource, toSignal } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n DmsObject,\n DmsService,\n FlavoredDmsObject,\n NotificationService,\n ObjectTypeFlavor,\n PendingChangesService,\n Situation,\n SystemService,\n TranslateModule,\n TranslateService,\n UserService\n} from '@yuuvis/client-core';\nimport { BusyOverlayDirective } from '@yuuvis/client-framework/common';\nimport { FormStatusChangedEvent, IObjectFormElementExtension, ObjectFormComponent, ObjectFormOptions } from '@yuuvis/client-framework/object-form';\nimport { ObjectSummaryDataComponent } from '@yuuvis/client-framework/object-summary';\nimport { RendererDirectiveInput } from '@yuuvis/client-framework/renderer';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { map, of, Subscription } from 'rxjs';\nimport { ObjectMetadataSectionComponent } from './object-metadata-section/object-metadata-section.component';\n\n@Component({\n selector: 'yuv-object-metadata',\n standalone: true,\n imports: [\n CommonModule,\n ObjectFormComponent,\n ObjectSummaryDataComponent,\n BusyOverlayDirective,\n TranslateModule,\n MatButtonModule,\n MatIconModule,\n ReactiveFormsModule,\n ObjectMetadataSectionComponent,\n YmtButtonDirective\n ],\n templateUrl: './object-metadata.component.html',\n styleUrl: './object-metadata.component.scss',\n host: {\n '[class.empty]': 'empty()',\n '[class.loading]': 'busyLoading()'\n }\n})\nexport class ObjectMetadataComponent implements OnDestroy {\n #pendingChanges = inject(PendingChangesService);\n #notificationService = inject(NotificationService);\n translate = inject(TranslateService);\n #system = inject(SystemService);\n #dmsService = inject(DmsService);\n #userService = inject(UserService);\n\n user = toSignal(this.#userService.user$);\n hasWritePermission = computed(() => {\n const flavoredDmsObject = this.flavoredDmsObject();\n const object = this._dmsObject();\n const o = flavoredDmsObject ? flavoredDmsObject.object : object;\n return o?.permissions?.writeIndexData || false;\n });\n\n objectForms = viewChildren<ObjectFormComponent>(ObjectFormComponent);\n objectMetadataSectionForms = viewChildren<ObjectMetadataSectionComponent>(ObjectMetadataSectionComponent);\n\n #pendingTaskId?: string;\n\n #formSubscriptions: Subscription[] = [];\n\n busySaving = signal<boolean>(false);\n busyLoading = signal<boolean>(false);\n disableControls = input<boolean>(false);\n /**\n * Set to 'true' to disable the basic metadata form. This will hide\n * the basic metadata section that shows common object proeperties like\n * creation date, creator, version, etc.\n */\n disableBasicMetadata = input<boolean>(false);\n elementExtensions = input<IObjectFormElementExtension[]>([]);\n controlsVisible = signal<boolean>(false);\n empty = computed(() => !this.mainFormOptions() && this.flavorFormOptions().length === 0 && this.disableBasicMetadata());\n\n // state of all individual forms\n #formStates: Map<string, FormStatusChangedEvent> = new Map<string, FormStatusChangedEvent>();\n\n baseData: {\n label: string;\n value: RendererDirectiveInput;\n }[] = [];\n\n /**\n * Form situation, if not set default will be 'EDIT'\n */\n situation = input<Situation>(Situation.EDIT);\n /**\n * Set to 'true' to prevent all metadata from being edited\n */\n formDisabled = signal<boolean>(false);\n\n dmsObject = input<DmsObject | undefined>();\n _dmsObject = linkedSignal(this.dmsObject);\n\n /**\n * @deprecated This input will be removed in the future.\n * Please migrate to using `dmsObject` and `flavors` inputs instead.\n */\n flavoredDmsObject = input<FlavoredDmsObject | undefined>();\n #flavoredDmsObjectEffect = effect(() => {\n const flavoredDmsObject = this.flavoredDmsObject();\n flavoredDmsObject && this.#init(flavoredDmsObject?.object, flavoredDmsObject?.flavors);\n });\n combinedFormState?: FormStatusChangedEvent;\n\n /**\n * Emits the updated `DmsObject` when metadata have been saved.\n */\n indexDataSaved = output<DmsObject>();\n /**\n * Emits the current state of the metadata form.\n */\n statusChanged = output<FormStatusChangedEvent>();\n\n /**\n * @deprecated once input flavoredDmsObject will be removed in the future.\n * this is not used anymore\n *\n */\n #legacyFlavors = signal<ObjectTypeFlavor[] | undefined>(undefined);\n /**\n * @deprecated once input flavoredDmsObject will be removed in the future.\n * this is not used anymore\n *\n */\n #init(object?: DmsObject, flavors?: ObjectTypeFlavor[]) {\n const o = this._dmsObject();\n if (object && (!o || o !== object)) {\n this.#legacyFlavors.set(flavors);\n this.#objectToForm(object);\n }\n if (object) this._dmsObject.set(object);\n }\n\n #mainFormOptionsResource = rxResource<ObjectFormOptions | undefined, DmsObject | undefined>({\n request: this._dmsObject,\n loader: ({ request }) => {\n if (!request) return of(undefined);\n return this.#system.getObjectTypeForms([request.objectTypeId], this.situation()).pipe(\n map((res) =>\n res[request.objectTypeId]\n ? {\n formModel: res[request.objectTypeId],\n data: request.data,\n disabled: this.formDisabled() || !request.permissions?.writeIndexData\n }\n : undefined\n )\n );\n }\n });\n // form of the dms object itself\n mainFormOptions = this.#mainFormOptionsResource.value;\n mainFormOptionsIsLoading = this.#mainFormOptionsResource.isLoading;\n\n flavors = input<ObjectTypeFlavor[] | undefined>(undefined);\n // forms of applied flavors\n flavorFormOptions = computed(() => {\n const object = this._dmsObject();\n const flavors = this.flavors() ?? this.#legacyFlavors();\n const mappedFlavors: Record<string, ObjectTypeFlavor> = (flavors || []).reduce((acc, curr) => ({ ...acc, [curr.sot]: curr }), {});\n if (!object) return [];\n return (flavors || [])\n .map((f) => f.sot)\n .map((id) => ({\n id,\n label: this.#system.getLocalizedLabel(id),\n icon: mappedFlavors[id]?.icon,\n svgIcon: mappedFlavors[id]?.svgIcon,\n data: object.data\n }));\n });\n\n /**\n * @deprecated once input flavoredDmsObject will be removed in the future.\n * this is not used anymore\n *\n */\n #objectToForm(object?: DmsObject) {\n if (object) {\n this.busyLoading.set(true);\n\n this.#system.getObjectTypeForms([object.objectTypeId], this.situation()).subscribe({\n next: (res) => {\n this.mainFormOptions.set(\n res[object.objectTypeId]\n ? {\n formModel: res[object.objectTypeId],\n data: object.data,\n disabled: this.formDisabled() || !object.permissions?.writeIndexData\n }\n : undefined\n );\n this.busyLoading.set(false);\n },\n error: () => {\n this.busyLoading.set(false);\n }\n });\n }\n }\n\n onFormStatusChanged(formId: string, evt: FormStatusChangedEvent) {\n this.#formStates.set(formId, evt);\n this.#getCombinedFormState();\n if (this.combinedFormState?.dirty) this.#startPending();\n else this.#finishPending();\n this.controlsVisible.set(!!this.combinedFormState?.dirty);\n if (this.combinedFormState) this.statusChanged.emit(this.combinedFormState);\n }\n\n #getCombinedFormState(): FormStatusChangedEvent {\n const combinedFormState = {\n dirty: false,\n indexdataChanged: false,\n invalid: false,\n data: {}\n };\n this.#formStates.forEach((s) => {\n if (s.dirty) {\n combinedFormState.dirty = s.dirty;\n }\n if (s.indexdataChanged) {\n combinedFormState.indexdataChanged = s.indexdataChanged;\n }\n if (s.invalid) {\n combinedFormState.invalid = s.invalid;\n }\n combinedFormState.data = { ...combinedFormState.data, ...s.data };\n });\n this.combinedFormState = combinedFormState;\n return this.combinedFormState;\n }\n\n save() {\n // TODO: this._dmsObject should be this.dmsObject() once this.#init() is removed\n const object = this._dmsObject();\n if (object && this.combinedFormState) {\n this.busySaving.set(true);\n this.#dmsService.updateDmsObject(object.id, this.combinedFormState.data).subscribe({\n next: (updatedObject: DmsObject) => {\n this._dmsObject.set(updatedObject);\n this.setFormPristine();\n this.indexDataSaved.emit(updatedObject);\n this.#finishPending();\n this.controlsVisible.set(false);\n this.busySaving.set(false);\n },\n error: (err) => {\n this.#notificationService.error(\n '',\n // this._dmsObject?.title || '',\n err.status === 404 ? this.translate.instant('yuv.object-metadata.context.load.error') : this.translate.instant('yuv.object-metadata.save.error')\n );\n this.controlsVisible.set(false);\n this.busySaving.set(false);\n }\n });\n }\n }\n /**\n * Reset te form to its initial state\n */\n resetForm() {\n if (this.objectForms()?.length) {\n this.objectForms().forEach((f) => f.resetForm());\n }\n\n if (this.objectMetadataSectionForms()?.length) {\n this.objectMetadataSectionForms().forEach((s) => s.resetForm());\n }\n (this.objectForms()?.length || this.objectMetadataSectionForms()?.length) && this.#formStates.clear();\n }\n\n updateFormValue(data: Record<string, unknown>) {\n if (this.objectForms()?.length) {\n this.objectForms().forEach((f) => f.setFormData(data));\n }\n }\n\n setFormPristine() {\n if (this.objectForms()?.length) {\n this.objectForms().forEach((f) => f.setFormPristine());\n }\n if (this.objectMetadataSectionForms()?.length) {\n this.objectMetadataSectionForms().forEach((s) => s.setFormPristine());\n }\n (this.objectForms()?.length || this.objectMetadataSectionForms()?.length) && this.#formStates.clear();\n }\n\n #startPending() {\n // because this method will be called every time the form status changes,\n // pending task will only be started once until it was finished\n if (!this.#pendingChanges.hasPendingTask(this.#pendingTaskId || ' ')) {\n this.#pendingTaskId = this.#pendingChanges.startTask(this.translate.instant('yuv.object-metadata.pending-changes.alert'));\n }\n }\n\n #finishPending() {\n if (this.#pendingTaskId) this.#pendingChanges.finishTask(this.#pendingTaskId);\n }\n\n ngOnDestroy(): void {\n this.#formSubscriptions.forEach((s) => s.unsubscribe());\n }\n}\n","<main [yuvBusyOverlay]=\"busySaving() || busyLoading() || mainFormOptionsIsLoading()\">\n @if (empty()) {\n <p>{{ 'yuv.object-metadata.empty.message' | translate }}</p>\n }\n @if (!mainFormOptions()) {\n <yuv-object-form\n [readonly]=\"!hasWritePermission()\"\n [formOptions]=\"mainFormOptions()\"\n [elementExtensions]=\"elementExtensions()\"\n (statusChanged)=\"onFormStatusChanged('main', $event)\"\n ></yuv-object-form>\n }\n @for (fo of flavorFormOptions(); track $index) {\n <yuv-object-metadata-section\n [readonly]=\"!hasWritePermission()\"\n [section]=\"fo\"\n [elementExtensions]=\"elementExtensions()\"\n [expanded]=\"$index === 0\"\n (statusChanged)=\"onFormStatusChanged(fo.id, $event)\"\n ></yuv-object-metadata-section>\n }\n\n <!-- base data -->\n @let object = dmsObject() ?? _dmsObject();\n @if (object && !disableBasicMetadata()) {\n <yuv-object-summary-data [dmsObject]=\"object\"></yuv-object-summary-data>\n }\n</main>\n\n<footer [attr.inert]=\"disableControls() || !controlsVisible() || null\">\n <div class=\"container\">\n <button\n ymtButton=\"secondary\"\n button-size=\"small\"\n [disabled]=\"busySaving() || busyLoading()\"\n (click)=\"resetForm()\"\n [hidden]=\"!combinedFormState?.dirty\"\n [disabled]=\"!combinedFormState?.dirty\"\n >\n {{ 'yuv.object-metadata.button.reset' | translate }}\n </button>\n <button\n ymtButton=\"primary\"\n button-size=\"small\"\n (click)=\"save()\"\n [disabled]=\"!combinedFormState?.dirty || combinedFormState?.invalid || busySaving() || busyLoading()\"\n >\n {{ 'yuv.object-metadata.button.save' | translate }}\n </button>\n </div>\n</footer>\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, inject, input, signal, TemplateRef, untracked } from '@angular/core';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { DmsObject, ObjectTypeFlavor, TabGuardDirective, TranslateModule, UserService, VirtualObjectType } from '@yuuvis/client-core';\nimport { ObjectPreviewComponent } from '@yuuvis/client-framework/object-preview';\nimport { ObjectAuditComponent } from './object-audit/object-audit.component';\nimport { ObjectDetailsShellComponent } from './object-details-shell/object-details-shell.component';\nimport { ObjectDetailsShellService } from './object-details-shell/object-details-shell.service';\nimport { ObjectMetadataComponent } from './object-metadata/object-metadata.component';\n\n@Component({\n selector: 'yuv-object-details',\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n MatTabsModule,\n TabGuardDirective,\n ObjectDetailsShellComponent,\n ObjectPreviewComponent,\n ObjectMetadataComponent,\n ObjectAuditComponent\n ],\n providers: [ObjectDetailsShellService],\n templateUrl: './object-details.component.html',\n styleUrls: ['./object-details.component.scss']\n})\nexport class ObjectDetailsComponent {\n readonly #userService = inject(UserService);\n #odShellService = inject(ObjectDetailsShellService);\n\n isAdvancedUser = this.#userService.isAdvancedUser;\n\n currentUser = signal(this.#userService.getCurrentUser());\n\n /**\n * ID to store the components layout state (splitted tabs, gutter position)\n */\n layoutSettingsID = signal<string | undefined>(undefined);\n\n /**\n * DmsObject to show the details for.\n */\n dmsObjectInput = input<DmsObject | undefined>(undefined, { alias: 'dmsObject' });\n dmsObjectInputEffect = effect(() => {\n const o = this.dmsObjectInput();\n if (o) untracked(() => this.#odShellService.setDmsObject(o));\n });\n\n dmsObject = this.#odShellService.dmsObject;\n\n /**\n * Flavors to take into account. These flavors define for example the metadata\n * of an object.\n */\n flavors = input<ObjectTypeFlavor[]>([]);\n\n /**\n * Virtual object type to use for retrieving header data\n */\n type = input.required<VirtualObjectType>();\n\n /**\n * If the object config for the given type has been stored in a certain bucket, this\n * bucket can be provided here. If no bucket is set, the config will be retrieved\n * from the main object config\n */\n objectConfigBucket = input<string | undefined>(undefined);\n /**\n * ID of a DmsObject. The object will be fetched from the backend upfront.\n */\n objectId = input<string | undefined>(undefined);\n #objectIdEffect = effect(() => {\n const oid = this.objectId();\n if (oid) this.#odShellService.fetchDmsObject(oid);\n });\n /**\n * Whether to hide the header\n */\n hideHeader = input<boolean>(false);\n\n actions = input<TemplateRef<any> | undefined>(undefined);\n\n onIndexdataSaved(updatedObject: DmsObject) {\n this.#odShellService.setDmsObject(updatedObject);\n }\n\n // versionSelected(version: number) {\n // const nav = ['../..', 'version'];\n // this.#router.navigate([...nav, this.dmsObject?.version], { queryParams: { version }, relativeTo: this.#route });\n // }\n}\n","<yuv-object-details-shell [type]=\"type()\" [hideHeader]=\"hideHeader()\" [bucket]=\"objectConfigBucket()\" [actions]=\"actions()\">\n @let dmsObj = dmsObject();\n <mat-tab-group yuvTabGuardDisable>\n <!-- content -->\n @if (dmsObj && dmsObj.content) {\n <mat-tab [label]=\"'yuv.object-details.tabs.content.title' | translate\">\n <ng-template matTabContent>\n <yuv-object-preview [dmsObject]=\"dmsObj\"></yuv-object-preview>\n </ng-template>\n </mat-tab>\n }\n\n <!-- indexdata -->\n <mat-tab [label]=\"'yuv.object-metadata.tabs.indexdata.title' | translate\">\n <ng-template matTabContent>\n <yuv-object-metadata [dmsObject]=\"dmsObject()\" [flavors]=\"flavors()\" (indexDataSaved)=\"onIndexdataSaved($event)\"> </yuv-object-metadata>\n </ng-template>\n </mat-tab>\n <!-- history -->\n <mat-tab [label]=\"'yuv.object-metadata.tabs.history.title' | translate\">\n <ng-template matTabContent> <yuv-object-audit [dmsObject]=\"dmsObj\"></yuv-object-audit> </ng-template\n ></mat-tab>\n </mat-tab-group>\n</yuv-object-details-shell>\n","import { NgModule } from '@angular/core';\nimport { ObjectDetailsHeaderComponent } from './object-details-header/object-details-header.component';\nimport { ObjectDetailsShellComponent } from './object-details-shell/object-details-shell.component';\nimport { ObjectDetailsComponent } from './object-details.component';\nimport { ObjectMetadataComponent } from './object-metadata/object-metadata.component';\nimport { ObjectAuditComponent } from './object-audit/object-audit.component';\nimport { RetentionBadgeComponent } from '@yuuvis/client-framework/common';\n\nconst cmp = [\n ObjectDetailsComponent,\n ObjectDetailsHeaderComponent,\n ObjectDetailsShellComponent,\n ObjectMetadataComponent,\n ObjectAuditComponent,\n RetentionBadgeComponent\n]\n\n@NgModule({\n imports: cmp,\n exports: cmp\n})\nexport class YuvObjectDetailsModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Pipe({\n name: 'formSectionGroup',\n standalone: true \n})\nexport class FormSectionGroupPipe implements PipeTransform {\n transform(form: FormGroup, id: string): FormGroup {\n return form.get(id) as FormGroup;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-client-framework-object-details.mjs","sources":["../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-details-header/object-details-header.component.ts","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-details-header/object-details-header.component.html","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-details-shell/object-details-shell.service.ts","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-details-shell/object-details-shell.component.ts","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-details-shell/object-details-shell.component.html","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-audit/object-audit.component.ts","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-audit/object-audit.component.html","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-metadata/object-metadata-section/object-metadata-section.component.ts","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-metadata/object-metadata-section/object-metadata-section.component.html","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-metadata/object-metadata.component.ts","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-metadata/object-metadata.component.html","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-details.component.ts","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-details.component.html","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-details.module.ts","../../../../../libs/yuuvis/client-framework/object-details/src/lib/object-metadata/form-section-group.pipe.ts","../../../../../libs/yuuvis/client-framework/object-details/src/yuuvis-client-framework-object-details.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, computed, contentChild, effect, inject, input, TemplateRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DmsObject, EventService, ObjectConfigService, VirtualObjectType, YuvEvent, YuvEventType } from '@yuuvis/client-core';\nimport { RendererDirective, RendererDirectiveInput } from '@yuuvis/client-framework/renderer';\nimport { YmtPanesModule } from '@yuuvis/material/panes';\n\ninterface HeaderData {\n title: RendererDirectiveInput;\n description?: RendererDirectiveInput;\n icon: string;\n}\n\n/**\n * Component showing header data for a dms object. These will be\n * generated from the object config for the given object.\n *\n * You could inject a set of actions into the headers actions slot\n * by adding them to the components body:\n *\n * ```html\n * <yuv-object-details-header [dmsObject]=\"obj\">\n * <ng-template #yuvHeaderActions>...</ng-template>\n * </yuv-object-details-header>\n * ```\n */\n@Component({\n selector: 'yuv-object-details-header',\n imports: [\n CommonModule,\n MatIconModule,\n YmtPanesModule,\n RendererDirective\n // RetentionBadgeComponent\n ],\n templateUrl: './object-details-header.component.html',\n styleUrl: './object-details-header.component.scss'\n})\nexport class ObjectDetailsHeaderComponent {\n #objectConfig = inject(ObjectConfigService);\n readonly #eventService = inject(EventService);\n\n dmsObject = input<DmsObject | undefined>(undefined);\n\n /**\n * Virtual object type to use for retrieving header data\n */\n type = input.required<VirtualObjectType>();\n /**\n * Bucket of the object config to retrieve header data from\n */\n bucket = input<string | undefined>(undefined);\n\n actions = input<TemplateRef<any> | undefined>(undefined);\n\n headerData = computed<HeaderData | undefined>(() => {\n const o = this.dmsObject();\n const t = this.type();\n\n return o && t ? this.#setHeaderData() : undefined;\n });\n\n constructor() {\n this.#eventService\n .on(YuvEventType.DMS_OBJECT_UPDATED)\n .pipe(takeUntilDestroyed())\n .subscribe((e: YuvEvent) => this.#setHeaderData());\n }\n\n #setHeaderData() {\n const o = this.dmsObject();\n if (!o) {\n return undefined;\n } else {\n const roc = this.#objectConfig.getResolvedObjectConfig(o.data, this.type(), this.bucket());\n return {\n title: roc.title,\n description: roc.description,\n icon: roc.icon?.value\n };\n }\n }\n}\n","@let dmsObj = dmsObject();\n@let headerD = headerData();\n@if (dmsObj && headerD) {\n <ymt-pane-header [icon]=\"headerD.icon\" [actions]=\"actions()\">\n <ng-template #yuvPaneHeaderTitle>\n <ng-container *yuvRenderer=\"headerD.title\"></ng-container>\n </ng-template>\n <ng-template #yuvPaneHeaderSubtitle>\n <ng-container *yuvRenderer=\"headerD.description\"></ng-container>\n </ng-template>\n </ymt-pane-header>\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { DmsObject, DmsService, TranslateService, Utils } from '@yuuvis/client-core';\nimport { finalize } from 'rxjs';\n\n@Injectable()\nexport class ObjectDetailsShellService {\n id = Utils.uuid();\n #dmsService = inject(DmsService);\n readonly translate = inject(TranslateService);\n\n #dmsObject = signal<DmsObject | undefined>(undefined);\n dmsObject = this.#dmsObject.asReadonly();\n\n contextError = signal<string | undefined>(undefined);\n busy = signal<boolean>(false);\n\n setDmsObject(dmsObject: DmsObject | undefined) {\n this.#dmsObject.set(dmsObject);\n this.contextError.set(undefined);\n }\n\n fetchDmsObject(id: string): void {\n this.busy.set(true);\n this.#dmsService\n .getDmsObject(id)\n .pipe(finalize(() => this.busy.set(false)))\n .subscribe({\n next: (dmsObject) => this.#dmsObject.set(dmsObject),\n error: () => {\n this.#dmsObject.set(undefined);\n this.contextError.set(this.translate.instant('yuv.object-metadata.context.load.error'));\n }\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, signal, TemplateRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { DmsObject, EventService, RetentionState, VirtualObjectType, YuvEvent, YuvEventType } from '@yuuvis/client-core';\nimport { BusyOverlayDirective } from '@yuuvis/client-framework/common';\nimport { ObjectDetailsHeaderComponent } from '../object-details-header/object-details-header.component';\nimport { ObjectDetailsShellService } from './object-details-shell.service';\n\n/**\n * Wrapper component for details of a dms object. This component\n * provides a header based on the object configuration for the given object.\n * It will also take care of loading the object if you only provide the objects ID.\n */\n@Component({\n selector: 'yuv-object-details-shell',\n standalone: true,\n imports: [CommonModule, ObjectDetailsHeaderComponent, MatTooltipModule, BusyOverlayDirective],\n\n templateUrl: './object-details-shell.component.html',\n styleUrls: ['./object-details-shell.component.scss']\n})\nexport class ObjectDetailsShellComponent {\n #eventService = inject(EventService);\n #odShellService = inject(ObjectDetailsShellService);\n\n retentionState = signal<RetentionState | undefined>(undefined);\n contextError = this.#odShellService.contextError;\n dmsObject = this.#odShellService.dmsObject;\n busy = this.#odShellService.busy;\n\n actions = input<TemplateRef<any> | undefined>(undefined);\n /**\n * Virtual object type to use for retrieving header data\n */\n type = input.required<VirtualObjectType>();\n /**\n * Bucket of the object config to retrieve header data from\n */\n bucket = input<string | undefined>(undefined);\n /**\n * Whether to hide the header\n */\n hideHeader = input<boolean>(false);\n\n constructor() {\n this.#eventService\n .on(YuvEventType.DMS_OBJECT_UPDATED, YuvEventType.DMS_OBJECT_DELETED)\n .pipe(takeUntilDestroyed())\n .subscribe((e: YuvEvent) => {\n switch (e.type) {\n case YuvEventType.DMS_OBJECT_UPDATED: {\n const o = e.data as DmsObject;\n const dmsObj = this.dmsObject();\n if (dmsObj && dmsObj.id === o.id) this.#odShellService.setDmsObject(o);\n break;\n }\n case YuvEventType.DMS_OBJECT_DELETED: {\n if (e.data?.id === this.dmsObject()?.id) {\n this.#odShellService.setDmsObject(undefined);\n }\n }\n }\n });\n }\n}\n","@let dmsObj = dmsObject();\n@if (dmsObj) {\n @if (!hideHeader()) {\n <yuv-object-details-header [dmsObject]=\"dmsObj\" [type]=\"type()\" [bucket]=\"bucket()\" [actions]=\"actions()\"></yuv-object-details-header>\n }\n <div class=\"content\" [yuvBusyOverlay]=\"busy()\">\n <ng-content></ng-content>\n </div>\n} @else {\n <div class=\"empty\">\n @if (contextError()) {\n <div class=\"error\">{{ contextError() }}</div>\n } @else {\n <!-- EMPTY -->\n }\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, input, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport {\n AuditEntry,\n AuditQueryResult,\n AuditService,\n DmsObject,\n EventService,\n LocaleDatePipe,\n SystemService,\n TranslateModule,\n TranslateService,\n YuvEvent,\n YuvEventType\n} from '@yuuvis/client-core';\nimport { BusyOverlayDirective } from '@yuuvis/client-framework/common';\nimport { YUV_ICONS } from '@yuuvis/client-framework/icons';\nimport { finalize } from 'rxjs';\nimport { MatIconModule } from '@angular/material/icon';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\n\n@Component({\n selector: 'yuv-object-audit',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, LocaleDatePipe, BusyOverlayDirective, TranslateModule, MatIconModule, YmtIconButtonDirective],\n templateUrl: './object-audit.component.html',\n styleUrl: './object-audit.component.scss'\n})\nexport class ObjectAuditComponent {\n private FILTER_CACHE_KEY = 'yuv.audit.filters';\n\n private _objectID?: string;\n private _objectTypeID?: string;\n\n icons = {\n filter: YUV_ICONS.filter,\n arrowNext: YUV_ICONS.arrowNext\n };\n\n auditsRes = signal<AuditQueryResult | undefined>(undefined);\n resolvedItems = signal<ResolvedAuditEntry[]>([]);\n error = signal(false);\n busy = signal(false);\n searchActions: { label: string; actions: string[] }[] = [];\n auditLabels: any = {};\n\n dmsObject = input<DmsObject | undefined>(undefined);\n\n #dmsObjectEffect = effect(() => {\n const o = this.dmsObject();\n if (!o) {\n this._objectID = undefined;\n this._objectTypeID = undefined;\n this.auditsRes.set(undefined);\n } else if (!this._objectID || this._objectID !== o.id) {\n this._objectID = o.id;\n this._objectTypeID = o.objectTypeId;\n this.query();\n } else {\n this.query();\n }\n });\n\n /**\n * A list of audits that should not be shown. Use the audit codes (like 100, 301, etc.).\n * This will also disable the corresponding filters.\n */\n skipActions = input<number[]>([]);\n\n /**\n * Whether or not to ignore admin and user separation of audit entries\n */\n allActions = input(false);\n\n get objectID() {\n return this._objectID;\n }\n\n constructor(\n private auditService: AuditService,\n private eventService: EventService,\n private system: SystemService,\n private translate: TranslateService\n ) {\n this.auditLabels = {\n a100: this.translate.instant('yuv.audit.label.create.metadata'),\n a101: this.translate.instant('yuv.audit.label.create.metadata.withcontent'),\n a110: this.translate.instant('yuv.audit.label.create.tag'),\n\n a200: this.translate.instant('yuv.audit.label.delete'),\n a201: this.translate.instant('yuv.audit.label.delete.content'), // #v\n a202: this.translate.instant('yuv.audit.label.delete.marked'),\n a210: this.translate.instant('yuv.audit.label.delete.tag'), // #v\n a220: this.translate.instant('yuv.audit.label.delete.version'), // #v\n\n a300: this.translate.instant('yuv.audit.label.update.metadata'),\n a301: this.translate.instant('yuv.audit.label.update.content'),\n a302: this.translate.instant('yuv.audit.label.update.metadata.withcontent'),\n a303: this.translate.instant('yuv.audit.label.update.move.content'),\n a310: this.translate.instant('yuv.audit.label.update.tag'),\n a325: this.translate.instant('yuv.audit.label.update.restore'),\n a340: this.translate.instant('yuv.audit.label.update.move'),\n\n a400: this.translate.instant('yuv.audit.label.get.content'),\n a401: this.translate.instant('yuv.audit.label.get.metadata'),\n a402: this.translate.instant('yuv.audit.label.get.rendition.text'),\n a403: this.translate.instant('yuv.audit.label.get.rendition.pdf'),\n a404: this.translate.instant('yuv.audit.label.get.rendition.thumbnail'),\n\n a10000: this.translate.instant('yuv.audit.label.get.custom')\n };\n\n this.eventService\n .on(YuvEventType.DMS_OBJECT_UPDATED)\n .pipe(takeUntilDestroyed())\n .subscribe((e: YuvEvent) => {\n const dmsObject = e.data as DmsObject;\n // reload audit entries when update belongs to the current dms object\n if (dmsObject.id === this.objectID) {\n this.query();\n }\n });\n }\n\n #fetchAuditEntries() {\n if (!this._objectID || !this._objectTypeID) return;\n this.error.set(false);\n this.busy.set(true);\n\n this.auditService.getAuditEntries(this._objectID, { skipActions: this.skipActions() }).subscribe({\n next: (res: AuditQueryResult) => {\n this.busy.set(false);\n this.auditsRes.set(res);\n this.resolvedItems.set(this.#mapResult(res));\n },\n error: () => {\n this.busy.set(false);\n this.onError();\n }\n });\n }\n\n #mapResult(res: AuditQueryResult): ResolvedAuditEntry[] {\n return (\n res.items\n // TODO: Remove this filter once the system:ren:text audit lifecycle planning is complete and the tag's purpose is fully defined.\n // https://help.optimal-systems.com/yuuvis/Momentum/latest/index.html#_content_renditions_asynchronous_full_text_indexing.html\n .filter((i) => !i.detail.includes('[system:ren:text, 1]'))\n .map((i) => {\n const r: ResolvedAuditEntry = { ...i, label: this.auditLabels['a' + i.action] };\n // tag related audits\n if ([110, 210, 310].includes(i.action)) {\n const params = this.#getAuditEntryParams(i);\n if (params) {\n const localizedLabel = `${params[0]}:${params[1]}`;\n r.more = `${this.system.getLocalizedLabel(params[0]) ?? params[0]}: ${this.system.getLocalizedLabel(localizedLabel) ?? localizedLabel}`;\n }\n }\n // restore audit\n else if (i.action === 325) {\n const params = this.#getAuditEntryParams(i);\n r.more = this.translate.instant('yuv.audit.label.update.restore.more', { version: params[0] || '[?]' });\n }\n // custom audits\n else if (i.action === 10000) {\n r.label = this.system.getLocalizedLabel(`audit:custom:${i.subaction}`) || `${i.subaction}`;\n }\n return r;\n })\n );\n }\n\n #getAuditEntryParams(auditItem: AuditEntry): string[] {\n const m = auditItem.detail.match(/\\[(.*?)\\]/);\n return m && m[1] ? m[1].split(',').map((i) => i.trim()) : [];\n }\n\n /**\n * Execute a query from the search panel.\n */\n query() {\n this.#fetchAuditEntries();\n }\n\n goToPage(page: number) {\n const currentAuditsRes = this.auditsRes();\n if (currentAuditsRes) {\n this.busy.set(true);\n this.auditService\n .getPage(currentAuditsRes, page)\n .pipe(finalize(() => this.busy.set(false)))\n .subscribe({\n next: (res: AuditQueryResult) => {\n this.auditsRes.set(res);\n this.resolvedItems.set(this.#mapResult(res));\n },\n error: () => {\n this.onError();\n }\n });\n }\n }\n\n private onError() {\n this.auditsRes.set(undefined);\n this.error.set(true);\n }\n}\n\ninterface ResolvedAuditEntry extends AuditEntry {\n label: string;\n}\n","@let auditsResult = auditsRes();\n\n<div class=\"yuv-audit\" [ngClass]=\"{ singleEntry: auditsResult?.items?.length === 1, onPage: auditsResult && auditsResult.page > 1 }\" [yuvBusyOverlay]=\"busy()\">\n @if (error()) {\n <div class=\"error\">\n <div translate>yuv.audit.fetch.error</div>\n </div>\n }\n\n @if (auditsResult) {\n <!-- list of audits -->\n @let resItems = resolvedItems();\n @if (resItems.length) {\n <ul class=\"timeline\" [attr.aria-label]=\"'yuv.audit.timeline' | translate\">\n @for (item of resItems; track $index) {\n <li class=\"audit\" attr.aria-labelledby=\"'title-{{ $index }} creator-{{ $index }} date-{{ $index }}'\">\n <time [attr.datetime]=\"item.creationDate\" class=\"date\">{{ item.creationDate | localeDate }}</time>\n <div class=\"node\">\n <div class=\"label\">\n <span class=\"title\" id=\"title-{{ $index }}\">{{ item.label }}</span>\n </div>\n <div class=\"more meta\">{{ item.more }}</div>\n <div class=\"creator meta\" id=\"creator-{{ $index }}\">{{ item.createdBy.title }}</div>\n </div>\n </li>\n }\n </ul>\n } @else {\n <div class=\"empty\" translate>yuv.audit.result.empty</div>\n }\n\n <!-- controls -->\n @if (auditsResult.hasMoreItems || auditsResult.page > 1) {\n <div class=\"footer\" yuvOfflineDisabled>\n <div class=\"paging\">\n <button\n ymtIconButton\n [attr.aria-label]=\"'yuv.audit.label.paging.prev' | translate\"\n [disabled]=\"auditsResult.page === 1\"\n (click)=\"goToPage(auditsResult.page - 1)\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n <div class=\"page\">\n {{ auditsResult.page }}\n </div>\n <button\n ymtIconButton\n [attr.aria-label]=\"'yuv.audit.label.paging.next' | translate\"\n [disabled]=\"!auditsResult.hasMoreItems\"\n (click)=\"goToPage(auditsResult.page + 1)\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n </div>\n }\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, inject, input, linkedSignal, output, signal, untracked, viewChild } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { Situation, SystemService } from '@yuuvis/client-core';\nimport {\n FormStatusChangedEvent,\n IObjectFormElementExtension,\n ObjectFormComponent,\n ObjectFormOptions\n} from '@yuuvis/client-framework/object-form';\nimport { ObjectMetadataSectionInput } from './object-metadata-section.interface';\n\n@Component({\n selector: 'yuv-object-metadata-section',\n imports: [CommonModule, MatIconModule, MatProgressSpinnerModule, ObjectFormComponent],\n templateUrl: './object-metadata-section.component.html',\n styleUrl: './object-metadata-section.component.scss',\n host: {\n '[class.invalid]': 'objectForm()?.form?.invalid',\n '[class.dirty]': 'objectForm()?.form?.dirty'\n }\n})\nexport class ObjectMetadataSectionComponent {\n #system = inject(SystemService);\n\n objectForm = viewChild<ObjectFormComponent>(ObjectFormComponent);\n section = input.required<ObjectMetadataSectionInput>();\n expandedInput = input<boolean>(false, { alias: 'expanded' });\n elementExtensions = input<IObjectFormElementExtension[]>([]);\n readonly = input<boolean>();\n expanded = linkedSignal(this.expandedInput);\n\n busy = signal(false);\n\n // linkedSignal instead of plain signal so that formOptions resets to undefined whenever\n // the section input changes (e.g. a different object is loaded). This ensures the form\n // is reloaded with fresh data for the new section while still allowing .set() mutations\n // (user edits) to persist across collapse/expand cycles within the same section.\n formOptions = linkedSignal<ObjectMetadataSectionInput, ObjectFormOptions | undefined>({\n source: this.section,\n computation: () => undefined\n });\n #formOptionsEffect = effect(() => {\n // Load the object form when the section is first expanded.\n // Don't use rxResource here because it messes with the state of the formOptions.\n const section = this.section();\n const expanded = this.expanded();\n\n // untracked() reads formOptions without adding it as a reactive dependency of this\n // effect (which would cause an infinite loop). The guard ensures we only fetch once\n // per section: subsequent expand cycles reuse the existing formOptions so that any\n // user-edited values are not overwritten with the original section.data.\n if (expanded && !untracked(() => this.formOptions())) {\n this.busy.set(true);\n this.#system.getObjectTypeForm(section.id, section.situation || Situation.EDIT).subscribe({\n next: (formModel) => {\n this.formOptions.set({ formModel, data: section.data || {} });\n this.busy.set(false);\n },\n error: (err) => {\n console.error('Error loading form options', err);\n this.formOptions.set(undefined);\n this.busy.set(false);\n }\n });\n }\n });\n\n statusChanged = output<FormStatusChangedEvent>();\n\n resetForm() {\n this.objectForm()?.resetForm();\n }\n\n setFormPristine() {\n this.objectForm()?.setFormPristine();\n }\n}\n","@let _section = section();\n@let fo = formOptions();\n\n<h3>\n <button\n type=\"button\"\n [attr.aria-expanded]=\"expanded()\"\n class=\"accordion-trigger\"\n [attr.aria-controls]=\"'sect_' + _section.id\"\n [id]=\"'accordion_' + _section.id\"\n (click)=\"expanded.set(!expanded())\"\n [attr.aria-busy]=\"busy()\"\n >\n @if (_section.icon) {\n @if (_section.svgIcon) {\n <mat-icon [svgIcon]=\"_section.icon\"></mat-icon>\n } @else {\n <mat-icon>{{ _section.icon }}</mat-icon>\n }\n }\n <span >{{ _section.label }}</span>\n @if (busy()) {\n <mat-spinner diameter=\"24\"></mat-spinner>\n }\n <mat-icon class=\"arr\">keyboard_arrow_down</mat-icon>\n </button>\n</h3>\n<div [id]=\"'sect_' + _section.id\" role=\"region\" [attr.aria-labelledby]=\"'accordion_' + _section.id\" class=\"accordion-panel\">\n @if (fo) {\n <yuv-object-form\n #objectForm\n [hidden]=\"!expanded()\"\n [readonly]=\"readonly()\"\n [formOptions]=\"fo\"\n [elementExtensions]=\"elementExtensions()\"\n (statusChanged)=\"statusChanged.emit($event)\"\n ></yuv-object-form>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, effect, inject, input, linkedSignal, OnDestroy, output, signal, viewChildren } from '@angular/core';\nimport { rxResource, toSignal } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n DmsObject,\n DmsService,\n FlavoredDmsObject,\n NotificationService,\n ObjectTypeFlavor,\n PendingChangesService,\n Situation,\n SystemService,\n TranslateModule,\n TranslateService,\n UserService\n} from '@yuuvis/client-core';\nimport { BusyOverlayDirective } from '@yuuvis/client-framework/common';\nimport { FormStatusChangedEvent, IObjectFormElementExtension, ObjectFormComponent, ObjectFormOptions } from '@yuuvis/client-framework/object-form';\nimport { ObjectSummaryDataComponent } from '@yuuvis/client-framework/object-summary';\nimport { RendererDirectiveInput } from '@yuuvis/client-framework/renderer';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { map, of, Subscription } from 'rxjs';\nimport { ObjectMetadataSectionComponent } from './object-metadata-section/object-metadata-section.component';\n\n@Component({\n selector: 'yuv-object-metadata',\n standalone: true,\n imports: [\n CommonModule,\n ObjectFormComponent,\n ObjectSummaryDataComponent,\n BusyOverlayDirective,\n TranslateModule,\n MatButtonModule,\n MatIconModule,\n ReactiveFormsModule,\n ObjectMetadataSectionComponent,\n YmtButtonDirective\n ],\n templateUrl: './object-metadata.component.html',\n styleUrl: './object-metadata.component.scss',\n host: {\n '[class.empty]': 'empty()',\n '[class.loading]': 'busyLoading()'\n }\n})\nexport class ObjectMetadataComponent implements OnDestroy {\n #pendingChanges = inject(PendingChangesService);\n #notificationService = inject(NotificationService);\n translate = inject(TranslateService);\n #system = inject(SystemService);\n #dmsService = inject(DmsService);\n #userService = inject(UserService);\n\n user = toSignal(this.#userService.user$);\n hasWritePermission = computed(() => {\n const flavoredDmsObject = this.flavoredDmsObject();\n const object = this._dmsObject();\n const o = flavoredDmsObject ? flavoredDmsObject.object : object;\n return o?.permissions?.writeIndexData || false;\n });\n\n objectForms = viewChildren<ObjectFormComponent>(ObjectFormComponent);\n objectMetadataSectionForms = viewChildren<ObjectMetadataSectionComponent>(ObjectMetadataSectionComponent);\n\n #pendingTaskId?: string;\n\n #formSubscriptions: Subscription[] = [];\n\n busySaving = signal<boolean>(false);\n busyLoading = signal<boolean>(false);\n disableControls = input<boolean>(false);\n /**\n * Set to 'true' to disable the basic metadata form. This will hide\n * the basic metadata section that shows common object proeperties like\n * creation date, creator, version, etc.\n */\n disableBasicMetadata = input<boolean>(false);\n elementExtensions = input<IObjectFormElementExtension[]>([]);\n controlsVisible = signal<boolean>(false);\n empty = computed(() => !this.mainFormOptions() && this.flavorFormOptions().length === 0 && this.disableBasicMetadata());\n\n // state of all individual forms\n #formStates: Map<string, FormStatusChangedEvent> = new Map<string, FormStatusChangedEvent>();\n\n baseData: {\n label: string;\n value: RendererDirectiveInput;\n }[] = [];\n\n /**\n * Form situation, if not set default will be 'EDIT'\n */\n situation = input<Situation>(Situation.EDIT);\n /**\n * Set to 'true' to prevent all metadata from being edited\n */\n formDisabled = signal<boolean>(false);\n\n dmsObject = input<DmsObject | undefined>();\n _dmsObject = linkedSignal(this.dmsObject);\n\n /**\n * @deprecated This input will be removed in the future.\n * Please migrate to using `dmsObject` and `flavors` inputs instead.\n */\n flavoredDmsObject = input<FlavoredDmsObject | undefined>();\n #flavoredDmsObjectEffect = effect(() => {\n const flavoredDmsObject = this.flavoredDmsObject();\n flavoredDmsObject && this.#init(flavoredDmsObject?.object, flavoredDmsObject?.flavors);\n });\n combinedFormState?: FormStatusChangedEvent;\n\n /**\n * Emits the updated `DmsObject` when metadata have been saved.\n */\n indexDataSaved = output<DmsObject>();\n /**\n * Emits the current state of the metadata form.\n */\n statusChanged = output<FormStatusChangedEvent>();\n\n /**\n * @deprecated once input flavoredDmsObject will be removed in the future.\n * this is not used anymore\n *\n */\n #legacyFlavors = signal<ObjectTypeFlavor[] | undefined>(undefined);\n /**\n * @deprecated once input flavoredDmsObject will be removed in the future.\n * this is not used anymore\n *\n */\n #init(object?: DmsObject, flavors?: ObjectTypeFlavor[]) {\n const o = this._dmsObject();\n if (object && (!o || o !== object)) {\n this.#legacyFlavors.set(flavors);\n this.#objectToForm(object);\n }\n if (object) this._dmsObject.set(object);\n }\n\n #mainFormOptionsResource = rxResource<ObjectFormOptions | undefined, DmsObject | undefined>({\n request: this._dmsObject,\n loader: ({ request }) => {\n if (!request) return of(undefined);\n return this.#system.getObjectTypeForms([request.objectTypeId], this.situation()).pipe(\n map((res) =>\n res[request.objectTypeId]\n ? {\n formModel: res[request.objectTypeId],\n data: request.data,\n disabled: this.formDisabled() || !request.permissions?.writeIndexData\n }\n : undefined\n )\n );\n }\n });\n // form of the dms object itself\n mainFormOptions = this.#mainFormOptionsResource.value;\n mainFormOptionsIsLoading = this.#mainFormOptionsResource.isLoading;\n\n flavors = input<ObjectTypeFlavor[] | undefined>(undefined);\n // forms of applied flavors\n flavorFormOptions = computed(() => {\n const object = this._dmsObject();\n const flavors = this.flavors() ?? this.#legacyFlavors();\n const mappedFlavors: Record<string, ObjectTypeFlavor> = (flavors || []).reduce((acc, curr) => ({ ...acc, [curr.sot]: curr }), {});\n if (!object) return [];\n return (flavors || [])\n .map((f) => f.sot)\n .map((id) => ({\n id,\n label: this.#system.getLocalizedLabel(id),\n icon: mappedFlavors[id]?.icon,\n svgIcon: mappedFlavors[id]?.svgIcon,\n data: object.data\n }));\n });\n\n /**\n * @deprecated once input flavoredDmsObject will be removed in the future.\n * this is not used anymore\n *\n */\n #objectToForm(object?: DmsObject) {\n if (object) {\n this.busyLoading.set(true);\n\n this.#system.getObjectTypeForms([object.objectTypeId], this.situation()).subscribe({\n next: (res) => {\n this.mainFormOptions.set(\n res[object.objectTypeId]\n ? {\n formModel: res[object.objectTypeId],\n data: object.data,\n disabled: this.formDisabled() || !object.permissions?.writeIndexData\n }\n : undefined\n );\n this.busyLoading.set(false);\n },\n error: () => {\n this.busyLoading.set(false);\n }\n });\n }\n }\n\n onFormStatusChanged(formId: string, evt: FormStatusChangedEvent) {\n this.#formStates.set(formId, evt);\n this.#getCombinedFormState();\n if (this.combinedFormState?.dirty) this.#startPending();\n else this.#finishPending();\n this.controlsVisible.set(!!this.combinedFormState?.dirty);\n if (this.combinedFormState) this.statusChanged.emit(this.combinedFormState);\n }\n\n #getCombinedFormState(): FormStatusChangedEvent {\n const combinedFormState = {\n dirty: false,\n indexdataChanged: false,\n invalid: false,\n data: {}\n };\n this.#formStates.forEach((s) => {\n if (s.dirty) {\n combinedFormState.dirty = s.dirty;\n }\n if (s.indexdataChanged) {\n combinedFormState.indexdataChanged = s.indexdataChanged;\n }\n if (s.invalid) {\n combinedFormState.invalid = s.invalid;\n }\n combinedFormState.data = { ...combinedFormState.data, ...s.data };\n });\n this.combinedFormState = combinedFormState;\n return this.combinedFormState;\n }\n\n save() {\n // TODO: this._dmsObject should be this.dmsObject() once this.#init() is removed\n const object = this._dmsObject();\n if (object && this.combinedFormState) {\n this.busySaving.set(true);\n this.#dmsService.updateDmsObject(object.id, this.combinedFormState.data).subscribe({\n next: (updatedObject: DmsObject) => {\n this._dmsObject.set(updatedObject);\n this.setFormPristine();\n this.indexDataSaved.emit(updatedObject);\n this.#finishPending();\n this.controlsVisible.set(false);\n this.busySaving.set(false);\n },\n error: (err) => {\n this.#notificationService.error(\n '',\n // this._dmsObject?.title || '',\n err.status === 404 ? this.translate.instant('yuv.object-metadata.context.load.error') : this.translate.instant('yuv.object-metadata.save.error')\n );\n this.controlsVisible.set(false);\n this.busySaving.set(false);\n }\n });\n }\n }\n /**\n * Reset te form to its initial state\n */\n resetForm() {\n if (this.objectForms()?.length) {\n this.objectForms().forEach((f) => f.resetForm());\n }\n\n if (this.objectMetadataSectionForms()?.length) {\n this.objectMetadataSectionForms().forEach((s) => s.resetForm());\n }\n (this.objectForms()?.length || this.objectMetadataSectionForms()?.length) && this.#formStates.clear();\n }\n\n updateFormValue(data: Record<string, unknown>) {\n if (this.objectForms()?.length) {\n this.objectForms().forEach((f) => f.setFormData(data));\n }\n }\n\n setFormPristine() {\n if (this.objectForms()?.length) {\n this.objectForms().forEach((f) => f.setFormPristine());\n }\n if (this.objectMetadataSectionForms()?.length) {\n this.objectMetadataSectionForms().forEach((s) => s.setFormPristine());\n }\n (this.objectForms()?.length || this.objectMetadataSectionForms()?.length) && this.#formStates.clear();\n }\n\n #startPending() {\n // because this method will be called every time the form status changes,\n // pending task will only be started once until it was finished\n if (!this.#pendingChanges.hasPendingTask(this.#pendingTaskId || ' ')) {\n this.#pendingTaskId = this.#pendingChanges.startTask(this.translate.instant('yuv.object-metadata.pending-changes.alert'));\n }\n }\n\n #finishPending() {\n if (this.#pendingTaskId) this.#pendingChanges.finishTask(this.#pendingTaskId);\n }\n\n ngOnDestroy(): void {\n this.#formSubscriptions.forEach((s) => s.unsubscribe());\n }\n}\n","<main [yuvBusyOverlay]=\"busySaving() || busyLoading() || mainFormOptionsIsLoading()\">\n @if (empty()) {\n <p>{{ 'yuv.object-metadata.empty.message' | translate }}</p>\n }\n @if (!mainFormOptions()) {\n <yuv-object-form\n [readonly]=\"!hasWritePermission()\"\n [formOptions]=\"mainFormOptions()\"\n [elementExtensions]=\"elementExtensions()\"\n (statusChanged)=\"onFormStatusChanged('main', $event)\"\n ></yuv-object-form>\n }\n @for (fo of flavorFormOptions(); track $index) {\n <yuv-object-metadata-section\n [readonly]=\"!hasWritePermission()\"\n [section]=\"fo\"\n [elementExtensions]=\"elementExtensions()\"\n [expanded]=\"$index === 0\"\n (statusChanged)=\"onFormStatusChanged(fo.id, $event)\"\n ></yuv-object-metadata-section>\n }\n\n <!-- base data -->\n @let object = dmsObject() ?? _dmsObject();\n @if (object && !disableBasicMetadata()) {\n <yuv-object-summary-data [dmsObject]=\"object\"></yuv-object-summary-data>\n }\n</main>\n\n<footer [attr.inert]=\"disableControls() || !controlsVisible() || null\">\n <div class=\"container\">\n <button\n ymtButton=\"secondary\"\n button-size=\"small\"\n [disabled]=\"busySaving() || busyLoading()\"\n (click)=\"resetForm()\"\n [hidden]=\"!combinedFormState?.dirty\"\n [disabled]=\"!combinedFormState?.dirty\"\n >\n {{ 'yuv.object-metadata.button.reset' | translate }}\n </button>\n <button\n ymtButton=\"primary\"\n button-size=\"small\"\n (click)=\"save()\"\n [disabled]=\"!combinedFormState?.dirty || combinedFormState?.invalid || busySaving() || busyLoading()\"\n >\n {{ 'yuv.object-metadata.button.save' | translate }}\n </button>\n </div>\n</footer>\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, inject, input, signal, TemplateRef, untracked } from '@angular/core';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { DmsObject, ObjectTypeFlavor, TabGuardDirective, TranslateModule, UserService, VirtualObjectType } from '@yuuvis/client-core';\nimport { ObjectPreviewComponent } from '@yuuvis/client-framework/object-preview';\nimport { ObjectAuditComponent } from './object-audit/object-audit.component';\nimport { ObjectDetailsShellComponent } from './object-details-shell/object-details-shell.component';\nimport { ObjectDetailsShellService } from './object-details-shell/object-details-shell.service';\nimport { ObjectMetadataComponent } from './object-metadata/object-metadata.component';\n\n@Component({\n selector: 'yuv-object-details',\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n MatTabsModule,\n TabGuardDirective,\n ObjectDetailsShellComponent,\n ObjectPreviewComponent,\n ObjectMetadataComponent,\n ObjectAuditComponent\n ],\n providers: [ObjectDetailsShellService],\n templateUrl: './object-details.component.html',\n styleUrls: ['./object-details.component.scss']\n})\nexport class ObjectDetailsComponent {\n readonly #userService = inject(UserService);\n #odShellService = inject(ObjectDetailsShellService);\n\n isAdvancedUser = this.#userService.isAdvancedUser;\n\n currentUser = signal(this.#userService.getCurrentUser());\n\n /**\n * ID to store the components layout state (splitted tabs, gutter position)\n */\n layoutSettingsID = signal<string | undefined>(undefined);\n\n /**\n * DmsObject to show the details for.\n */\n dmsObjectInput = input<DmsObject | undefined>(undefined, { alias: 'dmsObject' });\n dmsObjectInputEffect = effect(() => {\n const o = this.dmsObjectInput();\n if (o) untracked(() => this.#odShellService.setDmsObject(o));\n });\n\n dmsObject = this.#odShellService.dmsObject;\n\n /**\n * Flavors to take into account. These flavors define for example the metadata\n * of an object.\n */\n flavors = input<ObjectTypeFlavor[]>([]);\n\n /**\n * Virtual object type to use for retrieving header data\n */\n type = input.required<VirtualObjectType>();\n\n /**\n * If the object config for the given type has been stored in a certain bucket, this\n * bucket can be provided here. If no bucket is set, the config will be retrieved\n * from the main object config\n */\n objectConfigBucket = input<string | undefined>(undefined);\n /**\n * ID of a DmsObject. The object will be fetched from the backend upfront.\n */\n objectId = input<string | undefined>(undefined);\n #objectIdEffect = effect(() => {\n const oid = this.objectId();\n if (oid) this.#odShellService.fetchDmsObject(oid);\n });\n /**\n * Whether to hide the header\n */\n hideHeader = input<boolean>(false);\n\n actions = input<TemplateRef<any> | undefined>(undefined);\n\n onIndexdataSaved(updatedObject: DmsObject) {\n this.#odShellService.setDmsObject(updatedObject);\n }\n\n // versionSelected(version: number) {\n // const nav = ['../..', 'version'];\n // this.#router.navigate([...nav, this.dmsObject?.version], { queryParams: { version }, relativeTo: this.#route });\n // }\n}\n","<yuv-object-details-shell [type]=\"type()\" [hideHeader]=\"hideHeader()\" [bucket]=\"objectConfigBucket()\" [actions]=\"actions()\">\n @let dmsObj = dmsObject();\n <mat-tab-group yuvTabGuardDisable>\n <!-- content -->\n @if (dmsObj && dmsObj.content) {\n <mat-tab [label]=\"'yuv.object-details.tabs.content.title' | translate\">\n <ng-template matTabContent>\n <yuv-object-preview [dmsObject]=\"dmsObj\"></yuv-object-preview>\n </ng-template>\n </mat-tab>\n }\n\n <!-- indexdata -->\n <mat-tab [label]=\"'yuv.object-metadata.tabs.indexdata.title' | translate\">\n <ng-template matTabContent>\n <yuv-object-metadata [dmsObject]=\"dmsObject()\" [flavors]=\"flavors()\" (indexDataSaved)=\"onIndexdataSaved($event)\"> </yuv-object-metadata>\n </ng-template>\n </mat-tab>\n <!-- history -->\n <mat-tab [label]=\"'yuv.object-metadata.tabs.history.title' | translate\">\n <ng-template matTabContent> <yuv-object-audit [dmsObject]=\"dmsObj\"></yuv-object-audit> </ng-template\n ></mat-tab>\n </mat-tab-group>\n</yuv-object-details-shell>\n","import { NgModule } from '@angular/core';\nimport { ObjectDetailsHeaderComponent } from './object-details-header/object-details-header.component';\nimport { ObjectDetailsShellComponent } from './object-details-shell/object-details-shell.component';\nimport { ObjectDetailsComponent } from './object-details.component';\nimport { ObjectMetadataComponent } from './object-metadata/object-metadata.component';\nimport { ObjectAuditComponent } from './object-audit/object-audit.component';\nimport { RetentionBadgeComponent } from '@yuuvis/client-framework/common';\n\nconst cmp = [\n ObjectDetailsComponent,\n ObjectDetailsHeaderComponent,\n ObjectDetailsShellComponent,\n ObjectMetadataComponent,\n ObjectAuditComponent,\n RetentionBadgeComponent\n]\n\n@NgModule({\n imports: cmp,\n exports: cmp\n})\nexport class YuvObjectDetailsModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Pipe({\n name: 'formSectionGroup',\n standalone: true \n})\nexport class FormSectionGroupPipe implements PipeTransform {\n transform(form: FormGroup, id: string): FormGroup {\n return form.get(id) as FormGroup;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|
|
@@ -1054,7 +1054,7 @@ class ObjectRelationshipComponent {
|
|
|
1054
1054
|
});
|
|
1055
1055
|
}
|
|
1056
1056
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: ObjectRelationshipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1057
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: ObjectRelationshipComponent, isStandalone: true, selector: "yuv-object-relationship", inputs: { objectId: { classPropertyName: "objectId", publicName: "objectId", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, relationActions: { classPropertyName: "relationActions", publicName: "relationActions", isSignal: true, isRequired: false, transformFunction: null } }, providers: [ObjectRelationshipService], ngImport: i0, template: "<ymt-pane [plain]=\"true\" [topBarActions]=\"topBarActions\">\n <ymt-pane-body [yuvBusyOverlay]=\"busy()\">\n @if (empty()) {\n <div class=\"no-relations\" inert>\n <mat-icon>link_off</mat-icon>\n <p>{{ 'yuv.object-relationship.no-relations' | translate }}</p>\n </div>\n } @else {\n @switch (mode()) {\n @case ('graph') {\n <yuv-object-relationship-graph [config]=\"config()\"></yuv-object-relationship-graph>\n }\n @case ('list') {\n <yuv-object-relationship-list [config]=\"config()\"> </yuv-object-relationship-list>\n }\n }\n }\n </ymt-pane-body>\n</ymt-pane>\n\n<ng-template #topBarActions>\n @if (supportedRelationships().length > 0) {\n <button ymt-icon-button icon-button-size=\"small\" [matTooltip]=\"'yuv.object-relationship.add.tooltip' | translate\" (click)=\"addRelationship()\">\n <mat-icon>add</mat-icon>\n </button>\n }\n <button\n ymt-icon-button\n icon-button-size=\"small\"\n [matTooltip]=\"mode() === 'list' ? ('yuv.object-relationship.mode.graph.tooltip' | translate) : ('yuv.object-relationship.mode.list.tooltip' | translate)\"\n (click)=\"toggleMode()\"\n >\n <mat-icon>{{ mode() === 'list' ? 'graph_3' : 'list' }}</mat-icon>\n </button>\n</ng-template>\n", styles: [":host{display:block;position:relative;height:100%;background-color:var(--ymt-surface)}:host .toggle{position:absolute;inset-block-start:var(--ymt-spacing-s);inset-inline-end:var(--ymt-spacing-s);z-index:10;background-color:var(--ymt-surface);padding:var(--ymt-spacing-xs);border-radius:var(--ymt-corner-full)}:host yuv-object-relationship-list,:host yuv-object-relationship-graph{height:100%}:host .no-relations{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;padding:var(--ymt-spacing-l);gap:var(--ymt-spacing-m);overflow:hidden}:host .no-relations mat-icon{scale:4;color:var(--ymt-text-color-subtle);opacity:.5;transform:translateY(-.5em)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "ngmodule", type: YmtPanesModule }, { kind: "component", type: i4.YmtPaneComponent, selector: "ymt-pane", inputs: ["topBarActions", "plain"] }, { kind: "component", type: i4.YmtPaneBodyComponent, selector: "ymt-pane-body" }, { kind: "directive", type: YmtIconButtonDirective, selector: "button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]", inputs: ["disabled", "disableRipple", "aria-disabled", "disabledInteractive", "icon-button-size"] }, { kind: "component", type: ObjectRelationshipGraphComponent, selector: "yuv-object-relationship-graph", inputs: ["config"], outputs: ["objectSelected", "relationSelected"] }, { kind: "component", type: ObjectRelationshipListComponent, selector: "yuv-object-relationship-list", inputs: ["config"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig", "yuvBusyError"], outputs: ["yuvBusyErrorDismiss"] }] }); }
|
|
1057
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: ObjectRelationshipComponent, isStandalone: true, selector: "yuv-object-relationship", inputs: { objectId: { classPropertyName: "objectId", publicName: "objectId", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, relationActions: { classPropertyName: "relationActions", publicName: "relationActions", isSignal: true, isRequired: false, transformFunction: null } }, providers: [ObjectRelationshipService], ngImport: i0, template: "<ymt-pane [plain]=\"true\" [topBarActions]=\"topBarActions\">\n <ymt-pane-body [yuvBusyOverlay]=\"busy()\">\n @if (empty()) {\n <div class=\"no-relations\" inert>\n <mat-icon>link_off</mat-icon>\n <p>{{ 'yuv.object-relationship.no-relations' | translate }}</p>\n </div>\n } @else {\n @switch (mode()) {\n @case ('graph') {\n <yuv-object-relationship-graph [config]=\"config()\"></yuv-object-relationship-graph>\n }\n @case ('list') {\n <yuv-object-relationship-list [config]=\"config()\"> </yuv-object-relationship-list>\n }\n }\n }\n </ymt-pane-body>\n</ymt-pane>\n\n<ng-template #topBarActions>\n @if (supportedRelationships().length > 0) {\n <button ymt-icon-button icon-button-size=\"small\" [matTooltip]=\"'yuv.object-relationship.add.tooltip' | translate\" (click)=\"addRelationship()\">\n <mat-icon>add</mat-icon>\n </button>\n }\n <button\n ymt-icon-button\n icon-button-size=\"small\"\n [matTooltip]=\"mode() === 'list' ? ('yuv.object-relationship.mode.graph.tooltip' | translate) : ('yuv.object-relationship.mode.list.tooltip' | translate)\"\n (click)=\"toggleMode()\"\n >\n <mat-icon>{{ mode() === 'list' ? 'graph_3' : 'list' }}</mat-icon>\n </button>\n</ng-template>\n", styles: [":host{display:block;position:relative;height:100%;background-color:var(--ymt-surface)}:host .toggle{position:absolute;inset-block-start:var(--ymt-spacing-s);inset-inline-end:var(--ymt-spacing-s);z-index:10;background-color:var(--ymt-surface);padding:var(--ymt-spacing-xs);border-radius:var(--ymt-corner-full)}:host yuv-object-relationship-list,:host yuv-object-relationship-graph{height:100%}:host .no-relations{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;padding:var(--ymt-spacing-l);gap:var(--ymt-spacing-m);overflow:hidden}:host .no-relations mat-icon{scale:4;color:var(--ymt-text-color-subtle);opacity:.5;transform:translateY(-.5em)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "ngmodule", type: YmtPanesModule }, { kind: "component", type: i4.YmtPaneComponent, selector: "ymt-pane", inputs: ["topBarActions", "busy", "noAnimation", "plain"] }, { kind: "component", type: i4.YmtPaneBodyComponent, selector: "ymt-pane-body" }, { kind: "directive", type: YmtIconButtonDirective, selector: "button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]", inputs: ["disabled", "disableRipple", "aria-disabled", "disabledInteractive", "icon-button-size"] }, { kind: "component", type: ObjectRelationshipGraphComponent, selector: "yuv-object-relationship-graph", inputs: ["config"], outputs: ["objectSelected", "relationSelected"] }, { kind: "component", type: ObjectRelationshipListComponent, selector: "yuv-object-relationship-list", inputs: ["config"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig", "yuvBusyError"], outputs: ["yuvBusyErrorDismiss"] }] }); }
|
|
1058
1058
|
}
|
|
1059
1059
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: ObjectRelationshipComponent, decorators: [{
|
|
1060
1060
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-framework-object-relationship.mjs","sources":["../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/actions/relationship-target-search/relationship-target-search.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/actions/relationship-target-search/relationship-target-search.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/actions/add-relationship/add-relationship.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/actions/add-relationship/add-relationship.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship.const.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship.service.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/node-summary/node-summary.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/node-summary/node-summary.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship-graph/object-relationship-graph.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship-graph/object-relationship-graph.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship-list/object-relationship-list-item/object-relationship-list-item.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship-list/object-relationship-list-item/object-relationship-list-item.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship-list/object-relationship-list.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship-list/object-relationship-list.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship.module.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/yuuvis-client-framework-object-relationship.ts"],"sourcesContent":["import { Component, computed, effect, forwardRef, inject, input, signal } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { BaseObjectTypeField, Operator, Relationship, SearchQuery, SearchResult, SearchResultItem, SearchService, TranslateModule } from '@yuuvis/client-core';\nimport { AutocompleteItem, YuvAutocompleteModule } from '@yuuvis/client-framework/autocomplete';\nimport { RelationshipComponentConfig, RelationshipComponentConfigNode } from '../../object-relationship.interface';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatIconModule } from '@angular/material/icon';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\n\ninterface AutocompleteItemValue {\n description?: string;\n data: Record<string, unknown>;\n}\n\n@Component({\n selector: 'yuv-relationship-target-search',\n imports: [YuvAutocompleteModule, ReactiveFormsModule, MatIconModule, YmtIconButtonDirective, TranslateModule, MatFormFieldModule],\n templateUrl: './relationship-target-search.component.html',\n styleUrl: './relationship-target-search.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RelationshipTargetSearchComponent),\n multi: true\n }\n ],\n host: {\n '[class.has-value]': '!!mappedValue()'\n }\n})\nexport class RelationshipTargetSearchComponent implements ControlValueAccessor {\n #searchService = inject(SearchService);\n\n supportedRelationships = input.required<Relationship[]>();\n // ID of the source object\n sourceNode = input.required<string>();\n targetTypes = input<string[]>([]);\n #availableTargetTypesEffect = effect(() => {\n const att = this.targetTypes();\n if (att.length === 0) this.acFormControl.disable();\n else this.acFormControl.enable();\n });\n config = input.required<RelationshipComponentConfig>();\n #configQA = computed(() => {\n const qa: Record<string, RelationshipComponentConfigNode> = {};\n this.config().nodes.forEach((c) => {\n qa[c.objectType] = c;\n });\n return qa;\n });\n\n autocompleteRes: AutocompleteItem<AutocompleteItemValue>[] = [];\n innerValue = signal<AutocompleteItem<AutocompleteItemValue> | undefined>(undefined);\n mappedValue = computed<\n | {\n title: string;\n description?: string;\n icon?: string;\n }\n | undefined\n >(() => {\n const v = this.innerValue();\n if (!v || !v.value) return undefined;\n // map value to RelationshipComponentConfig\n const configNode: RelationshipComponentConfigNode | undefined = this.config().nodes.find((n) => {\n const objectTypeId = v.value.data[BaseObjectTypeField.OBJECT_TYPE_ID] as string;\n const sots = v.value.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[] | undefined;\n return n.objectType === objectTypeId || (sots && sots.includes(n.objectType));\n });\n\n if (!configNode)\n return {\n title: v.label\n };\n return {\n title: (v.value.data[configNode.labelField] as string) || v.label,\n description: configNode.descriptionField ? (v.value.data[configNode.descriptionField] as string) : undefined,\n icon: configNode.icon\n };\n });\n busy = signal<boolean>(false);\n acFormControl = new FormControl<AutocompleteItem<AutocompleteItemValue> | null>(null, Validators.required);\n\n constructor() {\n this.acFormControl.valueChanges.pipe(takeUntilDestroyed()).subscribe((val) => {\n this.innerValue.set(val ? (val as AutocompleteItem<AutocompleteItemValue>) : undefined);\n this.propagateChange(this.innerValue()?.value?.data);\n });\n }\n\n autocompleteFn(term: string) {\n if (term.length >= 2) {\n this.busy.set(true);\n this.#searchService.search(this.#termToQuery(term)).subscribe({\n next: (res: SearchResult) => {\n this.busy.set(false);\n this.autocompleteRes = res.items.map((item) => {\n const { label, description } = this.#getLabelAndDescription(item)!;\n return {\n label,\n value: {\n description,\n data: this.#searchResultItemToRecord(item)\n }\n };\n });\n },\n error: () => {\n this.busy.set(false);\n this.autocompleteRes = [];\n }\n });\n } else {\n this.autocompleteRes = [];\n }\n }\n\n reset() {\n this.innerValue.set(undefined);\n this.acFormControl.setValue(null);\n this.autocompleteRes = [];\n }\n\n #getConfig(sri: SearchResultItem): RelationshipComponentConfigNode | undefined {\n const configType = this.targetTypes().find((tt) => {\n const objectType = sri.fields.get(BaseObjectTypeField.OBJECT_TYPE_ID) as string;\n const sots = sri.fields.get(BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS) as string[] | undefined;\n return tt === objectType || (sots && sots.includes(tt));\n });\n return configType ? this.#configQA()[configType] : undefined;\n }\n\n #getLabelAndDescription(sri: SearchResultItem):\n | {\n label: string;\n description?: string;\n }\n | undefined {\n const config = this.#getConfig(sri);\n return config\n ? {\n label: (sri.fields.get(config.labelField) as string) || (sri.fields.get(BaseObjectTypeField.OBJECT_ID) as string),\n description: config.descriptionField ? (sri.fields.get(config.descriptionField) as string) : undefined\n }\n : undefined;\n }\n\n #searchResultItemToRecord(item: SearchResultItem): Record<string, unknown> {\n return Array.from(item.fields.entries()).reduce(\n (obj, [key, value]) => {\n obj[key] = value;\n return obj;\n },\n {} as Record<string, unknown>\n );\n }\n\n #termToQuery(term: string): SearchQuery {\n return {\n term,\n // exclude the source object from the search results\n // as it doesn't make sense to relate an object to itself\n filters: [\n {\n f: BaseObjectTypeField.OBJECT_ID,\n o: Operator.EQUAL,\n v1: this.sourceNode(),\n useNot: true\n }\n ],\n types: this.targetTypes()\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n writeValue(value: any): void {\n this.innerValue.set(value);\n this.acFormControl.setValue(value);\n this.autocompleteRes = [];\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerOnTouched(fn: any): void {}\n\n setDisabledState?(isDisabled: boolean) {\n if (isDisabled) {\n this.acFormControl.disable();\n } else {\n this.acFormControl.enable();\n }\n }\n}\n","<mat-form-field>\n <mat-label>{{ 'yuv.object-relationship.add-relationship.target-search.label' | translate }}</mat-label>\n\n <yuv-autocomplete\n [required]=\"true\"\n [busy]=\"busy()\"\n [formControl]=\"acFormControl\"\n [autocompleteValues]=\"autocompleteRes\"\n [forceSelection]=\"true\"\n (autocompleteFnc)=\"autocompleteFn($event)\"\n [multiple]=\"false\"\n >\n <!-- template for option -->\n <ng-template #optionTemplate let-item>\n <div class=\"label\">{{ item.label }}</div>\n <div class=\"meta\" style=\"font: var(--ymt-font-body-subtle); color: var(--ymt-text-color-subtle)\">{{ item.value.description }}</div>\n </ng-template>\n </yuv-autocomplete>\n\n @let v = mappedValue();\n @if (v) {\n <div class=\"value-node\" aria-live=\"polite\">\n @if (v.icon) {\n <div class=\"icon\" aria-hidden=\"true\">\n <mat-icon>{{ v.icon }}</mat-icon>\n </div>\n }\n <strong class=\"label\">{{ v.title }}</strong>\n <div class=\"description\">{{ v.description }}</div>\n\n <button\n type=\"button\"\n ymtIconButton\n icon-button-size=\"small\"\n [attr.aria-label]=\"'yuv.object-relationship.add-relationship.target-search.clear' | translate\"\n (click)=\"reset()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </div>\n }\n</mat-form-field>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AbstractControl, FormControl, FormGroup, ReactiveFormsModule, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatError, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport {\n BaseObjectTypeField,\n DmsObject,\n DmsService,\n EventService,\n Relationship,\n RelationshipTypeField,\n SystemService,\n TranslateModule,\n TranslateService,\n YuvEventType\n} from '@yuuvis/client-core';\nimport { BusyOverlayDirective, DialogComponent } from '@yuuvis/client-framework/common';\nimport { YuvListModule } from '@yuuvis/client-framework/list';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { tap } from 'rxjs';\nimport { RelationshipComponentConfig } from '../../object-relationship.interface';\nimport { RelationshipTargetSearchComponent } from '../relationship-target-search/relationship-target-search.component';\n\n@Component({\n selector: 'yuv-add-relationship',\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n DialogComponent,\n MatSelectModule,\n MatIconModule,\n MatFormFieldModule,\n MatError,\n MatButtonToggleModule,\n YmtButtonDirective,\n RelationshipTargetSearchComponent,\n BusyOverlayDirective,\n YuvListModule,\n MatChipsModule\n ],\n\n templateUrl: './add-relationship.component.html',\n styleUrl: './add-relationship.component.scss'\n})\nexport class AddRelationshipComponent {\n #system = inject(SystemService);\n #dialogData = inject<{\n config: RelationshipComponentConfig;\n object: DmsObject;\n }>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<AddRelationshipComponent>);\n #dmsService = inject(DmsService);\n #eventService = inject(EventService);\n readonly translate = inject(TranslateService);\n\n targetTypeLabels: Record<string, string> = {};\n targetTypeFilterControl = new FormControl<string[]>([]);\n targetTypeFilterValue = toSignal(this.targetTypeFilterControl.valueChanges, { initialValue: this.targetTypeFilterControl.value || null });\n\n object = input<DmsObject>(this.#dialogData.object);\n config = input<RelationshipComponentConfig>(this.#dialogData.config);\n\n supportedRelationships = computed<Relationship[]>(() => {\n const obj = this.object();\n return obj ? this.#system.getSupportedRelationships(obj, true) : [];\n });\n\n filteredRelationships = computed<Relationship[]>(() => {\n // filter the supported relationships of the object by the allowed target types\n // if target types are selected\n const tt = this.targetTypeFilterValue();\n return this.supportedRelationships().filter((r) => {\n return !tt || r.allowedTargetTypes.some((t) => tt.includes(t));\n });\n });\n\n // get the target types from the relationships\n availableTargetTypes = computed<string[]>(() => {\n const rel = this.supportedRelationships();\n const types = Array.from(new Set(rel.map((r) => r.allowedTargetTypes).flat()));\n this.targetTypeLabels = types.reduce(\n (acc, type) => {\n acc[type] = this.#system.getLocalizedLabel(type) || type;\n return acc;\n },\n {} as Record<string, string>\n );\n this.targetTypeFilterControl.patchValue(types);\n return types;\n });\n labeledTargetTypes = computed<{ id: string; label: string }[]>(() =>\n this.availableTargetTypes().map((t) => ({ id: t, label: this.targetTypeLabels[t] || t }))\n );\n\n sourceNode = computed(() => {\n const obj = this.object();\n const config = this.config();\n return {\n title: obj.data[config.rootNode.labelField] as string,\n description: obj.data[config.rootNode.descriptionField || ''] as string | undefined,\n icon: config.rootNode.icon\n };\n });\n\n #relationMatchesTargetObjectValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const targetObject = control.get('targetObject')?.value as Record<string, unknown> | null;\n const relation = control.get('relation')?.value as Relationship | null;\n let valid = true;\n if (relation && targetObject) {\n // the allowed target types of the relation should be included in the selected objects\n // SOTs or the selected object's type should include one of the allowed target types\n const targetTypes = relation.allowedTargetTypes || [];\n const objectType = targetObject[BaseObjectTypeField.OBJECT_TYPE_ID] as string;\n const sots = targetObject[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[] | undefined;\n valid = targetTypes.includes(objectType) || targetTypes.some((t) => sots?.includes(t));\n }\n return valid ? null : { invalidRelationTargetCombination: true };\n };\n\n form = new FormGroup(\n {\n relation: new FormControl<Relationship | null>(null, { nonNullable: true, validators: [Validators.required] }),\n targetObject: new FormControl<Record<string, unknown> | null>(null, { nonNullable: true, validators: [Validators.required] })\n },\n { validators: this.#relationMatchesTargetObjectValidator }\n );\n\n busy = signal<boolean>(false);\n error = signal<string | null>(null);\n\n optionCompareWith(o1: Relationship | undefined, o2: Relationship | undefined): boolean {\n return o1?.id === o2?.id;\n }\n\n onRelationSelect(idx: number[]) {\n this.form.patchValue({ relation: this.filteredRelationships()[idx[0]] });\n }\n\n submit() {\n this.error.set(null);\n this.busy.set(true);\n this.#addRelationship(this.form.value.relation!.id, this.form.value.targetObject!).subscribe({\n next: () => {\n this.busy.set(false);\n this.close();\n },\n error: () => {\n this.error.set(this.translate.instant('yuv.object-relationship.add-relation.error-message'));\n this.busy.set(false);\n }\n });\n }\n\n #addRelationship(relationId: string, target: Record<string, unknown>) {\n const data = {\n [RelationshipTypeField.SOURCE_ID]: this.object().id,\n [RelationshipTypeField.TARGET_ID]: target[BaseObjectTypeField.OBJECT_ID]\n };\n return this.#dmsService\n .createDmsObject(relationId, data, [])\n .pipe(tap(() => this.#eventService.trigger(YuvEventType.RELATIONSHIP_CREATED, { sourceObjectId: this.object().id })));\n }\n\n close() {\n this.#dialogRef.close();\n }\n}\n","<yuv-dialog class=\"not-separated\" [headertitle]=\"'yuv.object-relationship.add-relationship.headline' | translate\">\n <main [yuvBusyOverlay]=\"busy()\">\n @let sn = sourceNode();\n <form id=\"addRelationshipForm\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <section class=\"source\">\n @if (sn) {\n <div class=\"source-node ymt-panel\">\n @if (sn.icon) {\n <div class=\"icon\">\n <mat-icon>{{ sn.icon }}</mat-icon>\n </div>\n }\n <strong class=\"label\">{{ sn.title }}</strong>\n <div class=\"description\">{{ sn.description }}</div>\n </div>\n }\n </section>\n\n <section class=\"connect\" aria-hidden=\"true\">\n <div class=\"link\"></div>\n <div class=\"dot\"></div>\n <div class=\"link\"></div>\n </section>\n\n <!-- available relationships -->\n <section class=\"relationships ymt-panel\">\n <h3>{{ 'yuv.object-relationship.action.add-link.search.relation.label' | translate }}</h3>\n\n @let tt = labeledTargetTypes();\n @if (tt.length > 1) {\n <div class=\"target-filter\">\n <span>{{ 'yuv.object-relationship.add-relationship.target-type.filter.label' | translate }}</span>\n\n <mat-chip-listbox\n [multiple]=\"true\"\n [formControl]=\"targetTypeFilterControl\"\n [attr.aria-label]=\"'yuv.object-relationship.add-relationship.target-type.filter.label' | translate\"\n >\n @for (t of tt; track t) {\n <mat-chip-option [value]=\"t.id\">{{ t.label }}</mat-chip-option>\n }\n </mat-chip-listbox>\n </div>\n }\n <!-- list of filtered relationships -->\n <yuv-list (itemSelect)=\"onRelationSelect($event)\">\n @for (r of filteredRelationships(); track r.id) {\n <div class=\"relationship\" yuvListItem>\n {{ r.label }}\n\n <div class=\"targets\">\n @for (t of r.allowedTargetTypes; track t) {\n <span>{{ targetTypeLabels[t] }}</span>\n }\n </div>\n </div>\n }\n </yuv-list>\n </section>\n\n <!-- relationship target select -->\n <section class=\"target\">\n <yuv-relationship-target-search\n class=\"ymt-panel\"\n formControlName=\"targetObject\"\n [sourceNode]=\"object().id\"\n [config]=\"config()\"\n [targetTypes]=\"form.get('relation')!.value?.allowedTargetTypes || []\"\n [supportedRelationships]=\"supportedRelationships()\"\n ></yuv-relationship-target-search>\n </section>\n\n <section class=\"error\">\n @if (form.hasError('invalidRelationTargetCombination') && (form.touched || form.dirty)) {\n <mat-error class=\"error\">{{ 'yuv.object-relationship.add-relationship.error.invalidRelationTargetCombination' | translate }}</mat-error>\n }\n @if (error()) {\n <mat-error class=\"error\">{{ error() }}</mat-error>\n }\n </section>\n </form>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" type=\"button\" (click)=\"close()\" [disabled]=\"busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" type=\"submit\" form=\"addRelationshipForm\" [disabled]=\"form.invalid || busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.submit' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { Edge, Font, Node } from 'vis-network/standalone';\n\nexport const ROOT_NODE_SETTINGS: Partial<Node> = {\n size: 30,\n borderWidth: 4,\n borderWidthSelected: 6\n};\nexport const ROOT_NODE_FONT_SETTINGS: Font = {\n size: 14\n};\nexport const NODE_SETTINGS: Partial<Node> = {\n borderWidthSelected: 2\n};\nexport const NODE_FONT_SETTINGS: Font = {\n size: 12\n};\n\nexport const EDGE_SETTINGS: Partial<Edge> = {};\nexport const EDGE_FONT_SETTINGS: Font = {\n size: 10\n};\n\n// add relationship dialog settings\nexport const ADD_RELATIONSHIP_DIALOG_OPTIONS = {\n maxWidth: '90vw'\n};\n","import { inject, Injectable, signal } from '@angular/core';\nimport { rxResource, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n BaseObjectTypeField,\n DmsObject,\n DmsService,\n EventService,\n RelationshipTypeField,\n SearchResult,\n SearchService,\n SystemType,\n TranslateService,\n YuvEvent,\n YuvEventType\n} from '@yuuvis/client-core';\nimport { ConfirmService } from '@yuuvis/client-framework/common';\nimport { catchError, map, Observable, of, switchMap, tap } from 'rxjs';\nimport { RelationshipComponentInput } from './object-relationship.interface';\n\n@Injectable()\nexport class ObjectRelationshipService {\n #search = inject(SearchService);\n #dmsService = inject(DmsService);\n #eventService = inject(EventService);\n #confirm = inject(ConfirmService);\n private translate = inject(TranslateService);\n\n #relationQA: Record<string, DmsObject> = {};\n\n objectId = signal<string | undefined>(undefined);\n #relationsResource = rxResource<RelationshipComponentInput, string | undefined>({\n request: this.objectId,\n loader: ({ request }) => this.fetchRelations(request)\n });\n relations = this.#relationsResource.value;\n busy = signal<boolean>(false);\n // the DmsObject representing the originId\n object = signal<DmsObject | null>(null);\n\n constructor() {\n this.#eventService\n .on(YuvEventType.RELATIONSHIP_CREATED, YuvEventType.RELATIONSHIP_DELETED)\n .pipe(takeUntilDestroyed())\n .subscribe({\n next: (e: YuvEvent) => {\n if (e.data?.sourceObjectId === this.objectId()) {\n this.#relationsResource.reload();\n }\n }\n });\n }\n\n fetchRelations(originId: string): Observable<{ originId: string; relations: SearchResult; objects: SearchResult }> {\n this.busy.set(true);\n // search for relations that have this object as source or target\n const query = `SELECT * FROM ${SystemType.RELATIONSHIP} WHERE ${RelationshipTypeField.SOURCE_ID} = '${originId}' OR ${RelationshipTypeField.TARGET_ID} = '${originId}'`;\n // TODO: What about multi-page results?\n\n return this.#search\n .searchCmis(query)\n .pipe(\n switchMap((resRelations: SearchResult) => {\n // collect source and target ids and ensure uniqueness\n const o: Record<string, null> = {};\n resRelations.items.forEach((i) => {\n this.#relationQA[i.fields.get(BaseObjectTypeField.OBJECT_ID)] = new DmsObject(i);\n o[i.fields.get(RelationshipTypeField.SOURCE_ID)] = null;\n o[i.fields.get(RelationshipTypeField.TARGET_ID)] = null;\n });\n // get the data for these object ids\n const ids = Object.keys(o)\n .map((id) => `'${id}'`)\n .join(',');\n // having no relations would end up in an empty IN () statement which is invalid\n // but as we need to fetch the origin objects anyway we can add it manually\n const q = `SELECT * FROM system:object WHERE ${BaseObjectTypeField.OBJECT_ID} IN (${ids.length > 0 ? ids : `'${originId}'`})`;\n return this.#search.searchCmis(q).pipe(\n map((resObjects: SearchResult) => ({\n relations: resRelations,\n objects: resObjects\n }))\n );\n })\n )\n .pipe(\n // catchError\n map((res: { relations: SearchResult; objects: SearchResult }) => {\n this.busy.set(false);\n return { originId, relations: res.relations, objects: res.objects };\n })\n );\n }\n\n /**\n * Deletes a relationship by its ID. Will ask for confirmation before deletion.\n * @param relationId ID of the relationship to delete\n * @param reloadResource Whether to reload the resource after deletion\n */\n deleteRelationship(relationId: string, reloadResource: boolean): Observable<boolean> {\n return this.#confirm\n .confirm({\n message: this.translate.instant('yuv.object-relationship.delete-relation.confirm-message')\n })\n .pipe(switchMap((confirmed) => (confirmed ? this.#deleteRelationship(relationId, reloadResource) : of(false))));\n }\n\n #deleteRelationship(relationId: string, reloadResource: boolean): Observable<boolean> {\n this.busy.set(true);\n return this.#dmsService.deleteDmsObject(relationId).pipe(\n catchError(() => of(false)),\n map((err) => (err === false ? false : true)),\n tap((success) => {\n this.busy.set(false);\n if (success) {\n this.#eventService.trigger(YuvEventType.RELATIONSHIP_DELETED, { relationId });\n // TODO: trigger the event will reload the resource anyway (see constructor)\n\n if (reloadResource) {\n this.#relationsResource.reload();\n }\n }\n })\n );\n }\n}\n","import { Component, computed, inject, input, TemplateRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DmsObject, SchemaResponseFieldDefinition, SystemService, TranslateModule } from '@yuuvis/client-core';\nimport { RelationshipComponentConfigNode } from '../object-relationship.interface';\nimport { RendererDirective, RendererDirectiveInput } from '@yuuvis/client-framework/renderer';\nimport { Router } from '@angular/router';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\n/**\n * Component to display a summary of a node's object properties.\n */\n@Component({\n selector: 'yuv-node-summary',\n imports: [CommonModule, RendererDirective, TranslateModule, YmtButtonDirective],\n templateUrl: './node-summary.component.html',\n styleUrl: './node-summary.component.scss'\n})\nexport class NodeSummaryComponent {\n #system = inject(SystemService);\n #router = inject(Router);\n\n object = input<DmsObject>();\n nodeConfig = input<RelationshipComponentConfigNode>();\n\n actions = input<TemplateRef<any> | null>(null);\n\n nodeSummary = computed(() => {\n const obj = this.object();\n const config = this.nodeConfig();\n return obj && config\n ? {\n title: obj.data[config.labelField] as string,\n description: config.descriptionField ? (obj.data[config.descriptionField] as string) : undefined,\n properties: (config.summaryFields || []).map((field) => this.#propertyToRendererInput(field, obj)).filter((p) => !!p),\n link: config.objectLink ? config.objectLink.replace('{{id}}', obj.id) : undefined\n }\n : null;\n });\n\n openObject(link: string) {\n this.#router.navigateByUrl(link);\n }\n\n #propertyToRendererInput(propertyName: string, object: DmsObject): { label: string; rendererInput: RendererDirectiveInput } | undefined {\n const metaKeys = Object.keys(object.data).filter((key) => {\n return key.startsWith(`${propertyName}_`);\n });\n\n const sr: SchemaResponseFieldDefinition | undefined = this.#system.system?.allFields[propertyName];\n if (!sr) return undefined;\n\n return {\n label: this.#system.getLocalizedLabel(propertyName.replace('_title', '')) || propertyName,\n rendererInput: {\n propertyName,\n value: object.data[propertyName],\n rendererType: this.#system.getInternalFormElementType(propertyName, sr.classifications || []),\n meta: metaKeys.reduce(\n (metaObj, key) => {\n metaObj[key] = object.data[key];\n return metaObj;\n },\n {} as Record<string, any>\n )\n }\n };\n }\n}\n","@let ns = nodeSummary();\n@if (ns) {\n <header>\n <h2>{{ ns?.title }}</h2>\n <p class=\"desc\">{{ ns?.description }}</p>\n </header>\n <main>\n <div class=\"properties\">\n @for (p of ns?.properties; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ p.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"p.rendererInput\"></ng-container>\n </div>\n </div>\n }\n </div>\n </main>\n <footer>\n <div class=\"actions\">\n <ng-container *ngTemplateOutlet=\"actions()\"></ng-container>\n </div>\n\n @if (ns.link) {\n <button ymtButton=\"primary\" (click)=\"openObject(ns.link)\">\n {{ 'yuv.object-relationship.node-summary.open-object.button' | translate }}\n </button>\n }\n </footer>\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, computed, effect, ElementRef, inject, input, OnDestroy, output, signal, TemplateRef, viewChild } from '@angular/core';\nimport {\n BaseObjectTypeField,\n DmsObject,\n RelationshipTypeField,\n SearchResult,\n SearchResultItem,\n SearchService,\n SystemService,\n SystemType,\n TranslateModule,\n TranslateService\n} from '@yuuvis/client-core';\nimport { BusyOverlayDirective, ConfirmService, LayoutSettingsService } from '@yuuvis/client-framework/common';\nimport { map, of, switchMap } from 'rxjs';\nimport { Color, DataSet, Edge, Font, Network, Options } from 'vis-network/standalone';\nimport {\n ADD_RELATIONSHIP_DIALOG_OPTIONS,\n EDGE_FONT_SETTINGS,\n EDGE_SETTINGS,\n NODE_FONT_SETTINGS,\n NODE_SETTINGS,\n ROOT_NODE_FONT_SETTINGS,\n ROOT_NODE_SETTINGS\n} from './../object-relationship.const';\nimport { RelationshipComponentConfig, RelationshipComponentConfigNode, RelationshipComponentInput, RelationshipNode } from './../object-relationship.interface';\nimport { MatIconModule } from '@angular/material/icon';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ObjectRelationshipService } from '../object-relationship.service';\nimport { NodeSummaryComponent } from '../node-summary/node-summary.component';\nimport { AddRelationshipComponent } from '../actions/add-relationship/add-relationship.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { SnackBarService } from '@yuuvis/client-framework';\n\n@Component({\n selector: 'yuv-object-relationship-graph',\n imports: [CommonModule, NodeSummaryComponent, BusyOverlayDirective, MatIconModule, MatTooltipModule, TranslateModule, YmtIconButtonDirective],\n templateUrl: './object-relationship-graph.component.html',\n styleUrl: './object-relationship-graph.component.scss'\n})\nexport class ObjectRelationshipGraphComponent implements AfterViewInit, OnDestroy {\n #dialog = inject(MatDialog);\n #system = inject(SystemService);\n #layoutSettings = inject(LayoutSettingsService);\n #objectRelationshipService = inject(ObjectRelationshipService);\n #snack = inject(SnackBarService);\n private translate = inject(TranslateService);\n container = viewChild.required<ElementRef<HTMLDivElement>>('graphContainer');\n #mode = computed(() => {\n const m = this.#layoutSettings.mode();\n switch (m) {\n case 'dark': {\n return 'dark';\n }\n case 'system': {\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n default: {\n return 'light';\n }\n }\n });\n\n #relations = this.#objectRelationshipService.relations;\n #relationsEffect = effect(() => {\n const rel = this.#relations();\n if (!rel) return;\n this.#_updateGraph(rel.originId, rel.relations, rel.objects);\n });\n\n /**\n * Configuration for the relations component.\n */\n config = input.required<RelationshipComponentConfig>();\n\n objectSelected = output<DmsObject | null>();\n relationSelected = output<DmsObject | null>();\n\n #network: Network | null = null;\n #objectQA: Record<string, DmsObject> = {};\n #relationQA: Record<string, DmsObject> = {};\n #nodes = new DataSet<RelationshipNode>([]);\n #edges = new DataSet<Edge>([]);\n\n busy = signal(false);\n selectedRelation = signal<DmsObject | null>(null);\n #selectedRelationEffect = effect(() => {\n this.relationSelected.emit(this.selectedRelation());\n });\n\n selectedObject = signal<DmsObject | null>(null);\n #selectedObjectEffect = effect(() => {\n const so = this.selectedObject();\n if (so) this.selectedRelation.set(null);\n this.objectSelected.emit(so);\n });\n detailsNode = computed(() => {\n const object = this.selectedObject();\n const config = this.#getNodeConfig(object!);\n return object && config ? { object, config } : null;\n });\n\n download() {\n const canvas = this.container().nativeElement.querySelector('canvas')!;\n const image = canvas.toDataURL('image/png');\n const link = document.createElement('a');\n link.href = image;\n link.download = 'canvas-image.png';\n link.click();\n link.remove();\n }\n\n addRelationship() {\n this.#dialog\n .open(AddRelationshipComponent, {\n ...ADD_RELATIONSHIP_DIALOG_OPTIONS,\n data: {\n object: this.selectedObject(),\n config: this.config()\n }\n })\n .afterClosed()\n .subscribe((result) => {\n this.expandSelected();\n });\n }\n\n deleteRelationship() {\n this.#objectRelationshipService.deleteRelationship(this.selectedRelation()!.id, false).subscribe((success) => {\n if (success) {\n const deletedEdge = this.#edges.get(this.selectedRelation()!.id);\n if (!deletedEdge) return;\n const sourceNodeId = deletedEdge.from;\n const targetNodeId = deletedEdge.to;\n\n this.#edges.remove(this.selectedRelation()!.id);\n // check if the source/target node of the deleted edge has other connections to another node in the current graph\n const otherEdgesForSource = this.#edges.get().filter((edge: any) => edge.from === sourceNodeId || edge.to === sourceNodeId);\n const otherEdgesForTarget = this.#edges.get().filter((edge: any) => edge.from === targetNodeId || edge.to === targetNodeId);\n\n if (sourceNodeId && otherEdgesForSource.length === 0) {\n this.#nodes.remove(sourceNodeId);\n }\n if (targetNodeId && otherEdgesForTarget.length === 0) {\n this.#nodes.remove(targetNodeId);\n }\n } else {\n this.#snack.danger(this.translate.instant('yuv.object-relationship.delete-relation.error-message'));\n }\n });\n }\n\n expandSelected() {\n const selected = this.selectedObject();\n if (selected) {\n this.#expand(selected.id);\n }\n }\n\n #expand(nodeId: string) {\n if (nodeId) {\n this.busy.set(true);\n this.#objectRelationshipService.fetchRelations(nodeId).subscribe({\n next: (res) => {\n this.#_updateGraph(nodeId, res.relations, res.objects);\n this.busy.set(false);\n },\n error: (err) => {\n console.error('Error fetching relations for node:', err);\n this.busy.set(false);\n }\n });\n }\n }\n\n #_updateGraph(originId: string, relations: SearchResult, objects: SearchResult) {\n objects.items.forEach((item) => {\n const id = item.fields.get(BaseObjectTypeField.OBJECT_ID) as string;\n this.#objectQA[id] = new DmsObject(item);\n });\n relations.items.forEach((item) => {\n const id = item.fields.get(BaseObjectTypeField.OBJECT_ID) as string;\n this.#relationQA[id] = new DmsObject(item);\n });\n\n // group by incoming and outgoing relations\n const incoming = relations.items.filter((item) => item.fields.get(RelationshipTypeField.TARGET_ID) === originId);\n const outgoing = relations.items.filter((item) => item.fields.get(RelationshipTypeField.SOURCE_ID) === originId);\n\n const rootNode = this.#toNode(originId);\n const _nodes: RelationshipNode[] =\n originId === this.#relations()?.originId && this.#nodes.get([originId]).length === 0\n ? [\n {\n ...rootNode!,\n ...ROOT_NODE_SETTINGS,\n font: {\n ...ROOT_NODE_FONT_SETTINGS,\n ...this.#getNodeFont()\n }\n }\n ]\n : [];\n const _edges: Edge[] = [];\n\n // add nodes and edges from search result\n outgoing.forEach((item) => {\n const relatedObjectId = item.fields.get(RelationshipTypeField.TARGET_ID) as string;\n const n = this.#toNode(relatedObjectId);\n const e = this.#toEdge(item, originId, relatedObjectId, 'to');\n if (n) {\n // check if the node is already in the rendered graph\n const nodeExists: boolean = _nodes.some((node) => node.id === n.id) || this.#nodes.get([n.id!]).length > 0;\n if (!nodeExists) _nodes.push(n);\n // check if edge already exists\n const edgeExists: boolean = _edges.some((edge) => edge.id === e.id) || this.#edges.get([e.id!]).length > 0;\n if (!edgeExists) _edges.push(e);\n }\n });\n\n incoming.forEach((item) => {\n const relatedObjectId = item.fields.get(RelationshipTypeField.SOURCE_ID) as string;\n const n = this.#toNode(relatedObjectId);\n const e = this.#toEdge(item, relatedObjectId, originId, 'from');\n if (n) {\n // check if the node is already in the rendered graph\n const nodeExists: boolean = _nodes.some((node) => node.id === n.id) || this.#nodes.get([n.id!]).length > 0;\n if (!nodeExists) _nodes.push(n);\n // check if edge already exists\n const edgeExists: boolean = _edges.some((edge) => edge.id === e.id) || this.#edges.get([e.id!]).length > 0;\n if (!edgeExists) _edges.push(e);\n }\n });\n this.#nodes.add(_nodes);\n this.#edges.add(_edges);\n }\n\n #getNodeConfig(o?: DmsObject): RelationshipComponentConfigNode | undefined {\n const cfg = this.config();\n if (!o) return undefined;\n const objectTypeIds = [...o.sots, o.objectTypeId];\n return [cfg.rootNode, ...cfg.nodes].find((n) => objectTypeIds.includes(n.objectType));\n }\n\n // convert search result item to vis node\n // will return NULL if the item object type is not configured in the component config\n #toNode(objectId: string): RelationshipNode | null {\n const cfg = this.config();\n const o = this.#objectQA[objectId];\n if (!o) return null;\n const cfgNode = this.#getNodeConfig(o);\n if (!cfgNode) return null;\n return {\n ...NODE_SETTINGS,\n objectType: cfgNode.objectType,\n color: this.#getNodeColor(),\n id: objectId,\n label: this.#maxLength(o.data[cfgNode.labelField] as string, 30),\n icon: {\n face: 'Material Symbols Sharp',\n code: cfgNode.icon,\n color: this.#getNodeColor().border\n },\n font: {\n ...NODE_FONT_SETTINGS,\n ...this.#getNodeFont()\n }\n };\n }\n\n #toEdge(item: SearchResultItem, from: string, to: string, direction: 'from' | 'to'): Edge {\n const label =\n this.#system.getLocalizedLabel(item.fields.get(BaseObjectTypeField.OBJECT_TYPE_ID) as string) || item.fields.get(BaseObjectTypeField.OBJECT_TYPE_ID);\n return {\n ...EDGE_SETTINGS,\n id: item.fields.get(BaseObjectTypeField.OBJECT_ID) as string,\n label: this.#maxLength(label, 30),\n color: this.#getEdgeColor(),\n font: {\n ...EDGE_FONT_SETTINGS,\n ...this.#getEdgeFont()\n },\n arrows: direction,\n from,\n to\n };\n }\n\n #maxLength(s: string, max: number): string {\n if (s.length > max) {\n return s.substring(0, max - 3) + '...';\n }\n return s;\n }\n\n #getNodeColor(): Color {\n const computedStyle = this.#getComputedStyle();\n return {\n background: this.#resolveLightDark(computedStyle.getPropertyValue('--_node-background-color').trim()),\n border: this.#resolveLightDark(computedStyle.getPropertyValue('--_node-border-color').trim()),\n highlight: {\n background: this.#resolveLightDark(computedStyle.getPropertyValue('--_node-background-color-highlight').trim()),\n border: this.#resolveLightDark(computedStyle.getPropertyValue('--_node-color-highlight').trim())\n }\n };\n }\n #getNodeFont(): Font {\n const computedStyle = this.#getComputedStyle();\n return {\n color: this.#resolveLightDark(computedStyle.getPropertyValue('--_node-font-color').trim()),\n strokeWidth: 4,\n strokeColor: this.#resolveLightDark(computedStyle.getPropertyValue('--_container-background-color').trim())\n };\n }\n\n #getEdgeColor() {\n const computedStyle = this.#getComputedStyle();\n return {\n color: this.#resolveLightDark(computedStyle.getPropertyValue('--_edge-color').trim()),\n highlight: this.#resolveLightDark(computedStyle.getPropertyValue('--_edge-color-highlight').trim()),\n hover: this.#resolveLightDark(computedStyle.getPropertyValue('--_edge-color-hover').trim())\n };\n }\n #getEdgeFont(): Font {\n const computedStyle = this.#getComputedStyle();\n return {\n strokeWidth: 4,\n strokeColor: this.#resolveLightDark(computedStyle.getPropertyValue('--_container-background-color').trim()),\n color: this.#resolveLightDark(computedStyle.getPropertyValue('--_edge-font-color').trim())\n };\n }\n\n #getComputedStyle() {\n const container = this.container().nativeElement;\n return getComputedStyle(container);\n }\n\n // grab color values for light-dark(...,...) notation\n #resolveLightDark(s: string) {\n if (s.startsWith('light-dark(')) {\n const regex = /light-dark\\(\\s*(#[0-9a-fA-F]{6})\\s*,\\s*(#[0-9a-fA-F]{6})\\s*\\)/;\n const match = s.match(regex);\n if (match) {\n const lightColor = match[1];\n const darkColor = match[2];\n return this.#mode() === 'dark' ? darkColor : lightColor;\n } else return s;\n } else return s;\n }\n\n ngAfterViewInit() {\n const options: Options = {\n physics: {\n enabled: true,\n solver: 'forceAtlas2Based',\n forceAtlas2Based: {\n // gravitationalConstant: -50,\n // centralGravity: 0.01,\n springLength: 200\n }\n },\n nodes: {\n shape: 'dot',\n size: 20,\n font: { size: 12 }\n }\n };\n this.#network = new Network(\n this.container().nativeElement,\n {\n nodes: this.#nodes,\n edges: this.#edges\n },\n options\n );\n this.#network.on('selectNode', (params: { nodes: string[]; edges: string[] }) => this.#setSelection(params));\n this.#network.on('deselectNode', (params: { nodes: string[]; edges: string[] }) => this.#setSelection(params));\n this.#network.on('dragEnd', (params: { nodes: string[]; edges: string[] }) => this.#setSelection(params));\n this.#network.on('selectEdge', (params: { nodes: string[]; edges: string[] }) => this.#setSelection(params));\n this.#network.on('deselectEdge', (params: { nodes: string[]; edges: string[] }) => this.#setSelection(params));\n this.#network.on('click', (params: { nodes: string[]; edges: string[] }) => this.#setSelection(params));\n this.#network.on('doubleClick', (params: { nodes: string[]; edges: string[] }) => {\n this.#expand(params.nodes[0]);\n });\n }\n\n #setSelection(params: { nodes: string[]; edges: string[] }) {\n this.selectedObject.set(params.nodes.length === 1 ? this.#objectQA[params.nodes[0]] : null);\n this.selectedRelation.set(params.edges.length === 1 && params.nodes.length === 0 ? this.#relationQA[params.edges[0]] : null);\n }\n\n ngOnDestroy() {\n if (this.#network) {\n this.#network.destroy();\n }\n }\n}\n","<div class=\"relations\" [yuvBusyOverlay]=\"busy()\">\n <div class=\"toolbar\">\n <button ymtIconButton (click)=\"download()\" [matTooltip]=\"'yuv.object-relationship.download.tooltip' | translate\">\n <mat-icon>download</mat-icon>\n </button>\n @if (selectedRelation()) {\n <button ymtIconButton (click)=\"deleteRelationship()\" [matTooltip]=\"'yuv.object-relationship.delete-relation.tooltip' | translate\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n </div>\n <div class=\"graph-container\" #graphContainer></div>\n\n @let dn = detailsNode();\n @if (dn) {\n <div class=\"selected\">\n <yuv-node-summary [object]=\"dn.object\" [nodeConfig]=\"dn.config\" [actions]=\"additionalSummaryActions\"></yuv-node-summary>\n </div>\n }\n</div>\n\n<ng-template #additionalSummaryActions>\n <button\n ymt-icon-button\n icon-button-size=\"small\"\n [matTooltip]=\"'yuv.object-relationship.selected.add-relationship.tooltip' | translate\"\n (click)=\"addRelationship()\"\n >\n <mat-icon>add</mat-icon>\n </button>\n <button ymt-icon-button icon-button-size=\"small\" [matTooltip]=\"'yuv.object-relationship.selected.expand.tooltip' | translate\" (click)=\"expandSelected()\">\n <mat-icon>open_with</mat-icon>\n </button>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, TemplateRef } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Router } from '@angular/router';\nimport { ObjectLink } from '../../object-relationship.interface';\nimport { ObjectRelationshipService } from '../../object-relationship.service';\nimport { SnackBarService } from '@yuuvis/client-framework';\nimport { TranslateService } from '@yuuvis/client-core';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\n\n@Component({\n selector: 'yuv-object-relationship-list-item',\n imports: [CommonModule, MatIconModule, YmtIconButtonDirective],\n templateUrl: './object-relationship-list-item.component.html',\n styleUrl: './object-relationship-list-item.component.scss'\n})\nexport class ObjectRelationshipListItemComponent {\n #router = inject(Router);\n #snack = inject(SnackBarService);\n #objectRelationshipService = inject(ObjectRelationshipService);\n private translate = inject(TranslateService);\n\n link = input.required<ObjectLink>();\n direction = input.required<'in' | 'out'>();\n\n enableSourceLink = input<boolean>(false);\n enableTargetLink = input<boolean>(false);\n\n deleteRelationship() {\n this.#objectRelationshipService.deleteRelationship(this.link().id, true).subscribe((success) => {\n if (!success) {\n this.#snack.danger(this.translate.instant('yuv.object-relationship.delete-relation.error-message'));\n }\n });\n }\n\n open(link: string | undefined, skip: boolean) {\n if (link && !skip) this.#router.navigateByUrl(link);\n }\n}\n","@let lnk = link();\n\n<button\n class=\"node source\"\n (click)=\"open(lnk.source.objectLink, !enableSourceLink())\"\n [attr.aria-readonly]=\"!enableSourceLink() || !lnk.source.objectLink\"\n [class.self]=\"direction() === 'out'\"\n>\n @if (lnk.source.icon) {\n <mat-icon>{{ lnk.source.icon }}</mat-icon>\n }\n <span class=\"title\">{{ lnk.source.label }}</span>\n <span class=\"description\">{{ lnk.source.description }}</span>\n</button>\n\n<div class=\"line\" [class.arr]=\"direction() === 'in'\"></div>\n<div class=\"relation\">{{ lnk.type.label }}</div>\n<div class=\"line\" [class.arr]=\"direction() === 'out'\"></div>\n\n<button\n class=\"node target\"\n (click)=\"open(lnk.target.objectLink, !enableTargetLink())\"\n [attr.aria-readonly]=\"!enableTargetLink() || !lnk.target.objectLink\"\n [class.self]=\"direction() === 'in'\"\n>\n @if (lnk.target.icon) {\n <mat-icon>{{ lnk.target.icon }}</mat-icon>\n }\n <span class=\"title\">{{ lnk.target.label }}</span>\n <span class=\"description\">{{ lnk.target.description }}</span>\n</button>\n\n<div class=\"actions\"> \n <button ymtIconButton icon-button-size=\"small\" (click)=\"deleteRelationship()\"><mat-icon>delete</mat-icon></button>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, inject, input, output, signal, TemplateRef } from '@angular/core';\nimport {\n BaseObjectTypeField,\n DmsObject,\n RelationshipTypeField,\n SearchResult,\n SearchResultItem,\n SearchService,\n SystemService,\n TranslateModule\n} from '@yuuvis/client-core';\nimport { ObjectLink, RelationshipComponentConfig, RelationshipComponentConfigNode } from '../object-relationship.interface';\nimport { ObjectRelationshipService } from '../object-relationship.service';\nimport { ObjectRelationshipListItemComponent } from './object-relationship-list-item/object-relationship-list-item.component';\n\n@Component({\n selector: 'yuv-object-relationship-list',\n imports: [CommonModule, ObjectRelationshipListItemComponent, TranslateModule],\n templateUrl: './object-relationship-list.component.html',\n styleUrl: './object-relationship-list.component.scss'\n})\nexport class ObjectRelationshipListComponent {\n #search = inject(SearchService);\n #system = inject(SystemService);\n #objectRelationshipService = inject(ObjectRelationshipService);\n\n /**\n * Configuration for the relations component.\n */\n config = input.required<RelationshipComponentConfig>();\n\n incomingLinks = signal<ObjectLink[]>([]);\n outgoingLinks = signal<ObjectLink[]>([]);\n\n #relations = this.#objectRelationshipService.relations;\n #relationsEffect = effect(() => {\n const rel = this.#relations();\n if (!rel) return;\n this.#createLists(rel.originId, rel.relations, rel.objects);\n });\n\n #objectQA: Record<string, DmsObject> = {};\n\n #createLists(objectId: string, relations: SearchResult, objects?: SearchResult) {\n const incoming = relations.items.filter((item) => item.fields.get(RelationshipTypeField.TARGET_ID) === objectId);\n const outgoing = relations.items.filter((item) => item.fields.get(RelationshipTypeField.SOURCE_ID) === objectId);\n\n objects?.items.forEach((item) => {\n const id = item.fields.get(BaseObjectTypeField.OBJECT_ID) as string;\n this.#objectQA[id] = new DmsObject(item);\n });\n\n this.incomingLinks.set(incoming.map((rel) => this.#map(rel)).filter((l) => l !== undefined) as ObjectLink[]);\n this.outgoingLinks.set(outgoing.map((rel) => this.#map(rel)).filter((l) => l !== undefined) as ObjectLink[]);\n }\n\n #map(relation: SearchResultItem): ObjectLink | undefined {\n const sourceObject: DmsObject = this.#objectQA[relation.fields.get(RelationshipTypeField.SOURCE_ID)];\n const targetObject: DmsObject = this.#objectQA[relation.fields.get(RelationshipTypeField.TARGET_ID)];\n\n const relID = relation.fields.get(BaseObjectTypeField.OBJECT_ID) as string;\n const relObjectTypeID = relation.fields.get(BaseObjectTypeField.OBJECT_TYPE_ID) as string;\n\n const sourceCfg = this.#getConfigNode(sourceObject);\n const targetCfg = this.#getConfigNode(targetObject);\n\n // if no config found, this means that the relation is not configured to be shown\n // Only nodes provided with the config are mapped to links\n if (!sourceCfg || !targetCfg) return undefined;\n\n const sourceLabel = sourceObject.data[sourceCfg?.labelField || ''] as string;\n const sourceDescription = sourceObject.data[sourceCfg?.descriptionField || ''] as string;\n const sourceIcon = sourceCfg?.icon;\n\n const targetLabel = targetObject.data[targetCfg?.labelField || ''] as string;\n const targetDescription = targetObject.data[targetCfg?.descriptionField || ''] as string;\n const targetIcon = targetCfg?.icon;\n\n return {\n id: relID,\n type: {\n id: relObjectTypeID,\n label: this.#system.getLocalizedLabel(relObjectTypeID) || relObjectTypeID\n },\n source: {\n id: relation.fields.get(RelationshipTypeField.SOURCE_ID) as string,\n label: sourceLabel,\n description: sourceDescription,\n icon: sourceIcon,\n objectLink: sourceCfg.objectLink ? sourceCfg.objectLink.replace('{{id}}', sourceObject.id) : undefined\n },\n target: {\n id: relation.fields.get(RelationshipTypeField.TARGET_ID) as string,\n label: targetLabel,\n description: targetDescription,\n icon: targetIcon,\n objectLink: targetCfg.objectLink ? targetCfg.objectLink.replace('{{id}}', targetObject.id) : undefined\n }\n };\n }\n\n #getConfigNode(object: DmsObject): RelationshipComponentConfigNode | undefined {\n const cfg = this.config();\n if (!object) return undefined;\n return cfg.nodes.find((n) => (object.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[]).includes(n.objectType));\n }\n}\n","@let incoming = incomingLinks();\n@let outgoing = outgoingLinks();\n\n@if (incoming.length > 0) {\n <h3>{{ 'yuv.object-relationship.list.incoming' | translate }}</h3>\n @for (n of incoming; track n.id) {\n <yuv-object-relationship-list-item\n [enableSourceLink]=\"true\"\n [enableTargetLink]=\"false\"\n [link]=\"n\"\n direction=\"in\"\n ></yuv-object-relationship-list-item>\n }\n}\n@if (outgoing.length > 0) {\n <h3>{{ 'yuv.object-relationship.list.outgoing' | translate }}</h3>\n @for (n of outgoing; track n.id) {\n <yuv-object-relationship-list-item\n [enableSourceLink]=\"false\"\n [enableTargetLink]=\"true\"\n [link]=\"n\"\n direction=\"out\"\n ></yuv-object-relationship-list-item>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, effect, inject, input, signal, TemplateRef } from '@angular/core';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { BaseObjectTypeField, DmsObject, Relationship, SystemService, TranslateModule } from '@yuuvis/client-core';\nimport { BusyOverlayDirective } from \"@yuuvis/client-framework/common\";\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { YmtPanesModule } from '@yuuvis/material/panes';\nimport { AddRelationshipComponent } from './actions/add-relationship/add-relationship.component';\nimport { ObjectRelationshipGraphComponent } from './object-relationship-graph/object-relationship-graph.component';\nimport { ObjectRelationshipListComponent } from './object-relationship-list/object-relationship-list.component';\nimport { ADD_RELATIONSHIP_DIALOG_OPTIONS } from './object-relationship.const';\nimport { RelationshipComponentConfig } from './object-relationship.interface';\nimport { ObjectRelationshipService } from './object-relationship.service';\n\n@Component({\n selector: 'yuv-object-relationship',\n imports: [\n CommonModule,\n MatIconModule,\n MatTooltipModule,\n TranslateModule,\n MatButtonToggleModule,\n YmtPanesModule,\n YmtIconButtonDirective,\n ObjectRelationshipGraphComponent,\n ObjectRelationshipListComponent,\n YmtIconButtonDirective,\n BusyOverlayDirective\n],\n templateUrl: './object-relationship.component.html',\n styleUrl: './object-relationship.component.scss',\n providers: [ObjectRelationshipService]\n})\nexport class ObjectRelationshipComponent {\n #objectRelationshipService = inject(ObjectRelationshipService);\n #system = inject(SystemService);\n #dialog = inject(MatDialog);\n\n #DEFAULT_MODE: 'list' | 'graph' = 'graph';\n mode = signal<'list' | 'graph'>(this.#DEFAULT_MODE);\n empty = computed(() => {\n const rel = this.#relations();\n return rel && rel.relations.totalNumItems === 0;\n });\n /**\n * ID of the object to display relations for.\n */\n objectId = input.required<string>();\n #objectIdEffect = effect(() => {\n const oid = this.objectId();\n this.#objectRelationshipService.objectId.set(oid);\n });\n /**\n * Configuration for the relations component.\n */\n config = input.required<RelationshipComponentConfig>();\n\n // the DmsObject representing the originId\n originObject = signal<DmsObject | null>(null);\n supportedRelationships = computed<Relationship[]>(() => {\n const obj = this.originObject();\n return obj ? this.#system.getSupportedRelationships(obj) : [];\n });\n\n busy = this.#objectRelationshipService.busy;\n\n #relations = this.#objectRelationshipService.relations;\n #relationsEffect = effect(() => {\n const rel = this.#relations();\n if (!rel) {\n this.originObject.set(null);\n return;\n }\n const originId = rel.originId;\n const originItem = rel.objects?.items.find((item) => item.fields.get(BaseObjectTypeField.OBJECT_ID) === originId);\n // TODO: use linked signal instead\n this.originObject.set(originItem ? new DmsObject(originItem) : null);\n });\n relationActions = input<TemplateRef<any> | null>(null);\n\n toggleMode() {\n const newMode = this.mode() === 'list' ? 'graph' : 'list';\n this.mode.set(newMode);\n }\n\n addRelationship() {\n this.#dialog.open(AddRelationshipComponent, {\n ...ADD_RELATIONSHIP_DIALOG_OPTIONS,\n data: {\n object: this.originObject(),\n config: this.config()\n }\n });\n }\n}\n","<ymt-pane [plain]=\"true\" [topBarActions]=\"topBarActions\">\n <ymt-pane-body [yuvBusyOverlay]=\"busy()\">\n @if (empty()) {\n <div class=\"no-relations\" inert>\n <mat-icon>link_off</mat-icon>\n <p>{{ 'yuv.object-relationship.no-relations' | translate }}</p>\n </div>\n } @else {\n @switch (mode()) {\n @case ('graph') {\n <yuv-object-relationship-graph [config]=\"config()\"></yuv-object-relationship-graph>\n }\n @case ('list') {\n <yuv-object-relationship-list [config]=\"config()\"> </yuv-object-relationship-list>\n }\n }\n }\n </ymt-pane-body>\n</ymt-pane>\n\n<ng-template #topBarActions>\n @if (supportedRelationships().length > 0) {\n <button ymt-icon-button icon-button-size=\"small\" [matTooltip]=\"'yuv.object-relationship.add.tooltip' | translate\" (click)=\"addRelationship()\">\n <mat-icon>add</mat-icon>\n </button>\n }\n <button\n ymt-icon-button\n icon-button-size=\"small\"\n [matTooltip]=\"mode() === 'list' ? ('yuv.object-relationship.mode.graph.tooltip' | translate) : ('yuv.object-relationship.mode.list.tooltip' | translate)\"\n (click)=\"toggleMode()\"\n >\n <mat-icon>{{ mode() === 'list' ? 'graph_3' : 'list' }}</mat-icon>\n </button>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { ObjectRelationshipComponent } from './object-relationship.component';\n\nconst cmp = [ObjectRelationshipComponent];\n@NgModule({\n imports: [...cmp],\n exports: [...cmp]\n})\nexport class YuvObjectRelationshipModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i3","i4","i1","i5"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-client-framework-object-relationship.mjs","sources":["../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/actions/relationship-target-search/relationship-target-search.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/actions/relationship-target-search/relationship-target-search.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/actions/add-relationship/add-relationship.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/actions/add-relationship/add-relationship.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship.const.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship.service.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/node-summary/node-summary.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/node-summary/node-summary.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship-graph/object-relationship-graph.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship-graph/object-relationship-graph.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship-list/object-relationship-list-item/object-relationship-list-item.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship-list/object-relationship-list-item/object-relationship-list-item.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship-list/object-relationship-list.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship-list/object-relationship-list.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship.module.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/yuuvis-client-framework-object-relationship.ts"],"sourcesContent":["import { Component, computed, effect, forwardRef, inject, input, signal } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { BaseObjectTypeField, Operator, Relationship, SearchQuery, SearchResult, SearchResultItem, SearchService, TranslateModule } from '@yuuvis/client-core';\nimport { AutocompleteItem, YuvAutocompleteModule } from '@yuuvis/client-framework/autocomplete';\nimport { RelationshipComponentConfig, RelationshipComponentConfigNode } from '../../object-relationship.interface';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatIconModule } from '@angular/material/icon';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\n\ninterface AutocompleteItemValue {\n description?: string;\n data: Record<string, unknown>;\n}\n\n@Component({\n selector: 'yuv-relationship-target-search',\n imports: [YuvAutocompleteModule, ReactiveFormsModule, MatIconModule, YmtIconButtonDirective, TranslateModule, MatFormFieldModule],\n templateUrl: './relationship-target-search.component.html',\n styleUrl: './relationship-target-search.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RelationshipTargetSearchComponent),\n multi: true\n }\n ],\n host: {\n '[class.has-value]': '!!mappedValue()'\n }\n})\nexport class RelationshipTargetSearchComponent implements ControlValueAccessor {\n #searchService = inject(SearchService);\n\n supportedRelationships = input.required<Relationship[]>();\n // ID of the source object\n sourceNode = input.required<string>();\n targetTypes = input<string[]>([]);\n #availableTargetTypesEffect = effect(() => {\n const att = this.targetTypes();\n if (att.length === 0) this.acFormControl.disable();\n else this.acFormControl.enable();\n });\n config = input.required<RelationshipComponentConfig>();\n #configQA = computed(() => {\n const qa: Record<string, RelationshipComponentConfigNode> = {};\n this.config().nodes.forEach((c) => {\n qa[c.objectType] = c;\n });\n return qa;\n });\n\n autocompleteRes: AutocompleteItem<AutocompleteItemValue>[] = [];\n innerValue = signal<AutocompleteItem<AutocompleteItemValue> | undefined>(undefined);\n mappedValue = computed<\n | {\n title: string;\n description?: string;\n icon?: string;\n }\n | undefined\n >(() => {\n const v = this.innerValue();\n if (!v || !v.value) return undefined;\n // map value to RelationshipComponentConfig\n const configNode: RelationshipComponentConfigNode | undefined = this.config().nodes.find((n) => {\n const objectTypeId = v.value.data[BaseObjectTypeField.OBJECT_TYPE_ID] as string;\n const sots = v.value.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[] | undefined;\n return n.objectType === objectTypeId || (sots && sots.includes(n.objectType));\n });\n\n if (!configNode)\n return {\n title: v.label\n };\n return {\n title: (v.value.data[configNode.labelField] as string) || v.label,\n description: configNode.descriptionField ? (v.value.data[configNode.descriptionField] as string) : undefined,\n icon: configNode.icon\n };\n });\n busy = signal<boolean>(false);\n acFormControl = new FormControl<AutocompleteItem<AutocompleteItemValue> | null>(null, Validators.required);\n\n constructor() {\n this.acFormControl.valueChanges.pipe(takeUntilDestroyed()).subscribe((val) => {\n this.innerValue.set(val ? (val as AutocompleteItem<AutocompleteItemValue>) : undefined);\n this.propagateChange(this.innerValue()?.value?.data);\n });\n }\n\n autocompleteFn(term: string) {\n if (term.length >= 2) {\n this.busy.set(true);\n this.#searchService.search(this.#termToQuery(term)).subscribe({\n next: (res: SearchResult) => {\n this.busy.set(false);\n this.autocompleteRes = res.items.map((item) => {\n const { label, description } = this.#getLabelAndDescription(item)!;\n return {\n label,\n value: {\n description,\n data: this.#searchResultItemToRecord(item)\n }\n };\n });\n },\n error: () => {\n this.busy.set(false);\n this.autocompleteRes = [];\n }\n });\n } else {\n this.autocompleteRes = [];\n }\n }\n\n reset() {\n this.innerValue.set(undefined);\n this.acFormControl.setValue(null);\n this.autocompleteRes = [];\n }\n\n #getConfig(sri: SearchResultItem): RelationshipComponentConfigNode | undefined {\n const configType = this.targetTypes().find((tt) => {\n const objectType = sri.fields.get(BaseObjectTypeField.OBJECT_TYPE_ID) as string;\n const sots = sri.fields.get(BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS) as string[] | undefined;\n return tt === objectType || (sots && sots.includes(tt));\n });\n return configType ? this.#configQA()[configType] : undefined;\n }\n\n #getLabelAndDescription(sri: SearchResultItem):\n | {\n label: string;\n description?: string;\n }\n | undefined {\n const config = this.#getConfig(sri);\n return config\n ? {\n label: (sri.fields.get(config.labelField) as string) || (sri.fields.get(BaseObjectTypeField.OBJECT_ID) as string),\n description: config.descriptionField ? (sri.fields.get(config.descriptionField) as string) : undefined\n }\n : undefined;\n }\n\n #searchResultItemToRecord(item: SearchResultItem): Record<string, unknown> {\n return Array.from(item.fields.entries()).reduce(\n (obj, [key, value]) => {\n obj[key] = value;\n return obj;\n },\n {} as Record<string, unknown>\n );\n }\n\n #termToQuery(term: string): SearchQuery {\n return {\n term,\n // exclude the source object from the search results\n // as it doesn't make sense to relate an object to itself\n filters: [\n {\n f: BaseObjectTypeField.OBJECT_ID,\n o: Operator.EQUAL,\n v1: this.sourceNode(),\n useNot: true\n }\n ],\n types: this.targetTypes()\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n writeValue(value: any): void {\n this.innerValue.set(value);\n this.acFormControl.setValue(value);\n this.autocompleteRes = [];\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerOnTouched(fn: any): void {}\n\n setDisabledState?(isDisabled: boolean) {\n if (isDisabled) {\n this.acFormControl.disable();\n } else {\n this.acFormControl.enable();\n }\n }\n}\n","<mat-form-field>\n <mat-label>{{ 'yuv.object-relationship.add-relationship.target-search.label' | translate }}</mat-label>\n\n <yuv-autocomplete\n [required]=\"true\"\n [busy]=\"busy()\"\n [formControl]=\"acFormControl\"\n [autocompleteValues]=\"autocompleteRes\"\n [forceSelection]=\"true\"\n (autocompleteFnc)=\"autocompleteFn($event)\"\n [multiple]=\"false\"\n >\n <!-- template for option -->\n <ng-template #optionTemplate let-item>\n <div class=\"label\">{{ item.label }}</div>\n <div class=\"meta\" style=\"font: var(--ymt-font-body-subtle); color: var(--ymt-text-color-subtle)\">{{ item.value.description }}</div>\n </ng-template>\n </yuv-autocomplete>\n\n @let v = mappedValue();\n @if (v) {\n <div class=\"value-node\" aria-live=\"polite\">\n @if (v.icon) {\n <div class=\"icon\" aria-hidden=\"true\">\n <mat-icon>{{ v.icon }}</mat-icon>\n </div>\n }\n <strong class=\"label\">{{ v.title }}</strong>\n <div class=\"description\">{{ v.description }}</div>\n\n <button\n type=\"button\"\n ymtIconButton\n icon-button-size=\"small\"\n [attr.aria-label]=\"'yuv.object-relationship.add-relationship.target-search.clear' | translate\"\n (click)=\"reset()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </div>\n }\n</mat-form-field>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AbstractControl, FormControl, FormGroup, ReactiveFormsModule, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatError, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport {\n BaseObjectTypeField,\n DmsObject,\n DmsService,\n EventService,\n Relationship,\n RelationshipTypeField,\n SystemService,\n TranslateModule,\n TranslateService,\n YuvEventType\n} from '@yuuvis/client-core';\nimport { BusyOverlayDirective, DialogComponent } from '@yuuvis/client-framework/common';\nimport { YuvListModule } from '@yuuvis/client-framework/list';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { tap } from 'rxjs';\nimport { RelationshipComponentConfig } from '../../object-relationship.interface';\nimport { RelationshipTargetSearchComponent } from '../relationship-target-search/relationship-target-search.component';\n\n@Component({\n selector: 'yuv-add-relationship',\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n DialogComponent,\n MatSelectModule,\n MatIconModule,\n MatFormFieldModule,\n MatError,\n MatButtonToggleModule,\n YmtButtonDirective,\n RelationshipTargetSearchComponent,\n BusyOverlayDirective,\n YuvListModule,\n MatChipsModule\n ],\n\n templateUrl: './add-relationship.component.html',\n styleUrl: './add-relationship.component.scss'\n})\nexport class AddRelationshipComponent {\n #system = inject(SystemService);\n #dialogData = inject<{\n config: RelationshipComponentConfig;\n object: DmsObject;\n }>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<AddRelationshipComponent>);\n #dmsService = inject(DmsService);\n #eventService = inject(EventService);\n readonly translate = inject(TranslateService);\n\n targetTypeLabels: Record<string, string> = {};\n targetTypeFilterControl = new FormControl<string[]>([]);\n targetTypeFilterValue = toSignal(this.targetTypeFilterControl.valueChanges, { initialValue: this.targetTypeFilterControl.value || null });\n\n object = input<DmsObject>(this.#dialogData.object);\n config = input<RelationshipComponentConfig>(this.#dialogData.config);\n\n supportedRelationships = computed<Relationship[]>(() => {\n const obj = this.object();\n return obj ? this.#system.getSupportedRelationships(obj, true) : [];\n });\n\n filteredRelationships = computed<Relationship[]>(() => {\n // filter the supported relationships of the object by the allowed target types\n // if target types are selected\n const tt = this.targetTypeFilterValue();\n return this.supportedRelationships().filter((r) => {\n return !tt || r.allowedTargetTypes.some((t) => tt.includes(t));\n });\n });\n\n // get the target types from the relationships\n availableTargetTypes = computed<string[]>(() => {\n const rel = this.supportedRelationships();\n const types = Array.from(new Set(rel.map((r) => r.allowedTargetTypes).flat()));\n this.targetTypeLabels = types.reduce(\n (acc, type) => {\n acc[type] = this.#system.getLocalizedLabel(type) || type;\n return acc;\n },\n {} as Record<string, string>\n );\n this.targetTypeFilterControl.patchValue(types);\n return types;\n });\n labeledTargetTypes = computed<{ id: string; label: string }[]>(() =>\n this.availableTargetTypes().map((t) => ({ id: t, label: this.targetTypeLabels[t] || t }))\n );\n\n sourceNode = computed(() => {\n const obj = this.object();\n const config = this.config();\n return {\n title: obj.data[config.rootNode.labelField] as string,\n description: obj.data[config.rootNode.descriptionField || ''] as string | undefined,\n icon: config.rootNode.icon\n };\n });\n\n #relationMatchesTargetObjectValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const targetObject = control.get('targetObject')?.value as Record<string, unknown> | null;\n const relation = control.get('relation')?.value as Relationship | null;\n let valid = true;\n if (relation && targetObject) {\n // the allowed target types of the relation should be included in the selected objects\n // SOTs or the selected object's type should include one of the allowed target types\n const targetTypes = relation.allowedTargetTypes || [];\n const objectType = targetObject[BaseObjectTypeField.OBJECT_TYPE_ID] as string;\n const sots = targetObject[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[] | undefined;\n valid = targetTypes.includes(objectType) || targetTypes.some((t) => sots?.includes(t));\n }\n return valid ? null : { invalidRelationTargetCombination: true };\n };\n\n form = new FormGroup(\n {\n relation: new FormControl<Relationship | null>(null, { nonNullable: true, validators: [Validators.required] }),\n targetObject: new FormControl<Record<string, unknown> | null>(null, { nonNullable: true, validators: [Validators.required] })\n },\n { validators: this.#relationMatchesTargetObjectValidator }\n );\n\n busy = signal<boolean>(false);\n error = signal<string | null>(null);\n\n optionCompareWith(o1: Relationship | undefined, o2: Relationship | undefined): boolean {\n return o1?.id === o2?.id;\n }\n\n onRelationSelect(idx: number[]) {\n this.form.patchValue({ relation: this.filteredRelationships()[idx[0]] });\n }\n\n submit() {\n this.error.set(null);\n this.busy.set(true);\n this.#addRelationship(this.form.value.relation!.id, this.form.value.targetObject!).subscribe({\n next: () => {\n this.busy.set(false);\n this.close();\n },\n error: () => {\n this.error.set(this.translate.instant('yuv.object-relationship.add-relation.error-message'));\n this.busy.set(false);\n }\n });\n }\n\n #addRelationship(relationId: string, target: Record<string, unknown>) {\n const data = {\n [RelationshipTypeField.SOURCE_ID]: this.object().id,\n [RelationshipTypeField.TARGET_ID]: target[BaseObjectTypeField.OBJECT_ID]\n };\n return this.#dmsService\n .createDmsObject(relationId, data, [])\n .pipe(tap(() => this.#eventService.trigger(YuvEventType.RELATIONSHIP_CREATED, { sourceObjectId: this.object().id })));\n }\n\n close() {\n this.#dialogRef.close();\n }\n}\n","<yuv-dialog class=\"not-separated\" [headertitle]=\"'yuv.object-relationship.add-relationship.headline' | translate\">\n <main [yuvBusyOverlay]=\"busy()\">\n @let sn = sourceNode();\n <form id=\"addRelationshipForm\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <section class=\"source\">\n @if (sn) {\n <div class=\"source-node ymt-panel\">\n @if (sn.icon) {\n <div class=\"icon\">\n <mat-icon>{{ sn.icon }}</mat-icon>\n </div>\n }\n <strong class=\"label\">{{ sn.title }}</strong>\n <div class=\"description\">{{ sn.description }}</div>\n </div>\n }\n </section>\n\n <section class=\"connect\" aria-hidden=\"true\">\n <div class=\"link\"></div>\n <div class=\"dot\"></div>\n <div class=\"link\"></div>\n </section>\n\n <!-- available relationships -->\n <section class=\"relationships ymt-panel\">\n <h3>{{ 'yuv.object-relationship.action.add-link.search.relation.label' | translate }}</h3>\n\n @let tt = labeledTargetTypes();\n @if (tt.length > 1) {\n <div class=\"target-filter\">\n <span>{{ 'yuv.object-relationship.add-relationship.target-type.filter.label' | translate }}</span>\n\n <mat-chip-listbox\n [multiple]=\"true\"\n [formControl]=\"targetTypeFilterControl\"\n [attr.aria-label]=\"'yuv.object-relationship.add-relationship.target-type.filter.label' | translate\"\n >\n @for (t of tt; track t) {\n <mat-chip-option [value]=\"t.id\">{{ t.label }}</mat-chip-option>\n }\n </mat-chip-listbox>\n </div>\n }\n <!-- list of filtered relationships -->\n <yuv-list (itemSelect)=\"onRelationSelect($event)\">\n @for (r of filteredRelationships(); track r.id) {\n <div class=\"relationship\" yuvListItem>\n {{ r.label }}\n\n <div class=\"targets\">\n @for (t of r.allowedTargetTypes; track t) {\n <span>{{ targetTypeLabels[t] }}</span>\n }\n </div>\n </div>\n }\n </yuv-list>\n </section>\n\n <!-- relationship target select -->\n <section class=\"target\">\n <yuv-relationship-target-search\n class=\"ymt-panel\"\n formControlName=\"targetObject\"\n [sourceNode]=\"object().id\"\n [config]=\"config()\"\n [targetTypes]=\"form.get('relation')!.value?.allowedTargetTypes || []\"\n [supportedRelationships]=\"supportedRelationships()\"\n ></yuv-relationship-target-search>\n </section>\n\n <section class=\"error\">\n @if (form.hasError('invalidRelationTargetCombination') && (form.touched || form.dirty)) {\n <mat-error class=\"error\">{{ 'yuv.object-relationship.add-relationship.error.invalidRelationTargetCombination' | translate }}</mat-error>\n }\n @if (error()) {\n <mat-error class=\"error\">{{ error() }}</mat-error>\n }\n </section>\n </form>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" type=\"button\" (click)=\"close()\" [disabled]=\"busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" type=\"submit\" form=\"addRelationshipForm\" [disabled]=\"form.invalid || busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.submit' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { Edge, Font, Node } from 'vis-network/standalone';\n\nexport const ROOT_NODE_SETTINGS: Partial<Node> = {\n size: 30,\n borderWidth: 4,\n borderWidthSelected: 6\n};\nexport const ROOT_NODE_FONT_SETTINGS: Font = {\n size: 14\n};\nexport const NODE_SETTINGS: Partial<Node> = {\n borderWidthSelected: 2\n};\nexport const NODE_FONT_SETTINGS: Font = {\n size: 12\n};\n\nexport const EDGE_SETTINGS: Partial<Edge> = {};\nexport const EDGE_FONT_SETTINGS: Font = {\n size: 10\n};\n\n// add relationship dialog settings\nexport const ADD_RELATIONSHIP_DIALOG_OPTIONS = {\n maxWidth: '90vw'\n};\n","import { inject, Injectable, signal } from '@angular/core';\nimport { rxResource, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n BaseObjectTypeField,\n DmsObject,\n DmsService,\n EventService,\n RelationshipTypeField,\n SearchResult,\n SearchService,\n SystemType,\n TranslateService,\n YuvEvent,\n YuvEventType\n} from '@yuuvis/client-core';\nimport { ConfirmService } from '@yuuvis/client-framework/common';\nimport { catchError, map, Observable, of, switchMap, tap } from 'rxjs';\nimport { RelationshipComponentInput } from './object-relationship.interface';\n\n@Injectable()\nexport class ObjectRelationshipService {\n #search = inject(SearchService);\n #dmsService = inject(DmsService);\n #eventService = inject(EventService);\n #confirm = inject(ConfirmService);\n private translate = inject(TranslateService);\n\n #relationQA: Record<string, DmsObject> = {};\n\n objectId = signal<string | undefined>(undefined);\n #relationsResource = rxResource<RelationshipComponentInput, string | undefined>({\n request: this.objectId,\n loader: ({ request }) => this.fetchRelations(request)\n });\n relations = this.#relationsResource.value;\n busy = signal<boolean>(false);\n // the DmsObject representing the originId\n object = signal<DmsObject | null>(null);\n\n constructor() {\n this.#eventService\n .on(YuvEventType.RELATIONSHIP_CREATED, YuvEventType.RELATIONSHIP_DELETED)\n .pipe(takeUntilDestroyed())\n .subscribe({\n next: (e: YuvEvent) => {\n if (e.data?.sourceObjectId === this.objectId()) {\n this.#relationsResource.reload();\n }\n }\n });\n }\n\n fetchRelations(originId: string): Observable<{ originId: string; relations: SearchResult; objects: SearchResult }> {\n this.busy.set(true);\n // search for relations that have this object as source or target\n const query = `SELECT * FROM ${SystemType.RELATIONSHIP} WHERE ${RelationshipTypeField.SOURCE_ID} = '${originId}' OR ${RelationshipTypeField.TARGET_ID} = '${originId}'`;\n // TODO: What about multi-page results?\n\n return this.#search\n .searchCmis(query)\n .pipe(\n switchMap((resRelations: SearchResult) => {\n // collect source and target ids and ensure uniqueness\n const o: Record<string, null> = {};\n resRelations.items.forEach((i) => {\n this.#relationQA[i.fields.get(BaseObjectTypeField.OBJECT_ID)] = new DmsObject(i);\n o[i.fields.get(RelationshipTypeField.SOURCE_ID)] = null;\n o[i.fields.get(RelationshipTypeField.TARGET_ID)] = null;\n });\n // get the data for these object ids\n const ids = Object.keys(o)\n .map((id) => `'${id}'`)\n .join(',');\n // having no relations would end up in an empty IN () statement which is invalid\n // but as we need to fetch the origin objects anyway we can add it manually\n const q = `SELECT * FROM system:object WHERE ${BaseObjectTypeField.OBJECT_ID} IN (${ids.length > 0 ? ids : `'${originId}'`})`;\n return this.#search.searchCmis(q).pipe(\n map((resObjects: SearchResult) => ({\n relations: resRelations,\n objects: resObjects\n }))\n );\n })\n )\n .pipe(\n // catchError\n map((res: { relations: SearchResult; objects: SearchResult }) => {\n this.busy.set(false);\n return { originId, relations: res.relations, objects: res.objects };\n })\n );\n }\n\n /**\n * Deletes a relationship by its ID. Will ask for confirmation before deletion.\n * @param relationId ID of the relationship to delete\n * @param reloadResource Whether to reload the resource after deletion\n */\n deleteRelationship(relationId: string, reloadResource: boolean): Observable<boolean> {\n return this.#confirm\n .confirm({\n message: this.translate.instant('yuv.object-relationship.delete-relation.confirm-message')\n })\n .pipe(switchMap((confirmed) => (confirmed ? this.#deleteRelationship(relationId, reloadResource) : of(false))));\n }\n\n #deleteRelationship(relationId: string, reloadResource: boolean): Observable<boolean> {\n this.busy.set(true);\n return this.#dmsService.deleteDmsObject(relationId).pipe(\n catchError(() => of(false)),\n map((err) => (err === false ? false : true)),\n tap((success) => {\n this.busy.set(false);\n if (success) {\n this.#eventService.trigger(YuvEventType.RELATIONSHIP_DELETED, { relationId });\n // TODO: trigger the event will reload the resource anyway (see constructor)\n\n if (reloadResource) {\n this.#relationsResource.reload();\n }\n }\n })\n );\n }\n}\n","import { Component, computed, inject, input, TemplateRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DmsObject, SchemaResponseFieldDefinition, SystemService, TranslateModule } from '@yuuvis/client-core';\nimport { RelationshipComponentConfigNode } from '../object-relationship.interface';\nimport { RendererDirective, RendererDirectiveInput } from '@yuuvis/client-framework/renderer';\nimport { Router } from '@angular/router';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\n/**\n * Component to display a summary of a node's object properties.\n */\n@Component({\n selector: 'yuv-node-summary',\n imports: [CommonModule, RendererDirective, TranslateModule, YmtButtonDirective],\n templateUrl: './node-summary.component.html',\n styleUrl: './node-summary.component.scss'\n})\nexport class NodeSummaryComponent {\n #system = inject(SystemService);\n #router = inject(Router);\n\n object = input<DmsObject>();\n nodeConfig = input<RelationshipComponentConfigNode>();\n\n actions = input<TemplateRef<any> | null>(null);\n\n nodeSummary = computed(() => {\n const obj = this.object();\n const config = this.nodeConfig();\n return obj && config\n ? {\n title: obj.data[config.labelField] as string,\n description: config.descriptionField ? (obj.data[config.descriptionField] as string) : undefined,\n properties: (config.summaryFields || []).map((field) => this.#propertyToRendererInput(field, obj)).filter((p) => !!p),\n link: config.objectLink ? config.objectLink.replace('{{id}}', obj.id) : undefined\n }\n : null;\n });\n\n openObject(link: string) {\n this.#router.navigateByUrl(link);\n }\n\n #propertyToRendererInput(propertyName: string, object: DmsObject): { label: string; rendererInput: RendererDirectiveInput } | undefined {\n const metaKeys = Object.keys(object.data).filter((key) => {\n return key.startsWith(`${propertyName}_`);\n });\n\n const sr: SchemaResponseFieldDefinition | undefined = this.#system.system?.allFields[propertyName];\n if (!sr) return undefined;\n\n return {\n label: this.#system.getLocalizedLabel(propertyName.replace('_title', '')) || propertyName,\n rendererInput: {\n propertyName,\n value: object.data[propertyName],\n rendererType: this.#system.getInternalFormElementType(propertyName, sr.classifications || []),\n meta: metaKeys.reduce(\n (metaObj, key) => {\n metaObj[key] = object.data[key];\n return metaObj;\n },\n {} as Record<string, any>\n )\n }\n };\n }\n}\n","@let ns = nodeSummary();\n@if (ns) {\n <header>\n <h2>{{ ns?.title }}</h2>\n <p class=\"desc\">{{ ns?.description }}</p>\n </header>\n <main>\n <div class=\"properties\">\n @for (p of ns?.properties; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ p.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"p.rendererInput\"></ng-container>\n </div>\n </div>\n }\n </div>\n </main>\n <footer>\n <div class=\"actions\">\n <ng-container *ngTemplateOutlet=\"actions()\"></ng-container>\n </div>\n\n @if (ns.link) {\n <button ymtButton=\"primary\" (click)=\"openObject(ns.link)\">\n {{ 'yuv.object-relationship.node-summary.open-object.button' | translate }}\n </button>\n }\n </footer>\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, computed, effect, ElementRef, inject, input, OnDestroy, output, signal, TemplateRef, viewChild } from '@angular/core';\nimport {\n BaseObjectTypeField,\n DmsObject,\n RelationshipTypeField,\n SearchResult,\n SearchResultItem,\n SearchService,\n SystemService,\n SystemType,\n TranslateModule,\n TranslateService\n} from '@yuuvis/client-core';\nimport { BusyOverlayDirective, ConfirmService, LayoutSettingsService } from '@yuuvis/client-framework/common';\nimport { map, of, switchMap } from 'rxjs';\nimport { Color, DataSet, Edge, Font, Network, Options } from 'vis-network/standalone';\nimport {\n ADD_RELATIONSHIP_DIALOG_OPTIONS,\n EDGE_FONT_SETTINGS,\n EDGE_SETTINGS,\n NODE_FONT_SETTINGS,\n NODE_SETTINGS,\n ROOT_NODE_FONT_SETTINGS,\n ROOT_NODE_SETTINGS\n} from './../object-relationship.const';\nimport { RelationshipComponentConfig, RelationshipComponentConfigNode, RelationshipComponentInput, RelationshipNode } from './../object-relationship.interface';\nimport { MatIconModule } from '@angular/material/icon';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ObjectRelationshipService } from '../object-relationship.service';\nimport { NodeSummaryComponent } from '../node-summary/node-summary.component';\nimport { AddRelationshipComponent } from '../actions/add-relationship/add-relationship.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { SnackBarService } from '@yuuvis/client-framework';\n\n@Component({\n selector: 'yuv-object-relationship-graph',\n imports: [CommonModule, NodeSummaryComponent, BusyOverlayDirective, MatIconModule, MatTooltipModule, TranslateModule, YmtIconButtonDirective],\n templateUrl: './object-relationship-graph.component.html',\n styleUrl: './object-relationship-graph.component.scss'\n})\nexport class ObjectRelationshipGraphComponent implements AfterViewInit, OnDestroy {\n #dialog = inject(MatDialog);\n #system = inject(SystemService);\n #layoutSettings = inject(LayoutSettingsService);\n #objectRelationshipService = inject(ObjectRelationshipService);\n #snack = inject(SnackBarService);\n private translate = inject(TranslateService);\n container = viewChild.required<ElementRef<HTMLDivElement>>('graphContainer');\n #mode = computed(() => {\n const m = this.#layoutSettings.mode();\n switch (m) {\n case 'dark': {\n return 'dark';\n }\n case 'system': {\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n default: {\n return 'light';\n }\n }\n });\n\n #relations = this.#objectRelationshipService.relations;\n #relationsEffect = effect(() => {\n const rel = this.#relations();\n if (!rel) return;\n this.#_updateGraph(rel.originId, rel.relations, rel.objects);\n });\n\n /**\n * Configuration for the relations component.\n */\n config = input.required<RelationshipComponentConfig>();\n\n objectSelected = output<DmsObject | null>();\n relationSelected = output<DmsObject | null>();\n\n #network: Network | null = null;\n #objectQA: Record<string, DmsObject> = {};\n #relationQA: Record<string, DmsObject> = {};\n #nodes = new DataSet<RelationshipNode>([]);\n #edges = new DataSet<Edge>([]);\n\n busy = signal(false);\n selectedRelation = signal<DmsObject | null>(null);\n #selectedRelationEffect = effect(() => {\n this.relationSelected.emit(this.selectedRelation());\n });\n\n selectedObject = signal<DmsObject | null>(null);\n #selectedObjectEffect = effect(() => {\n const so = this.selectedObject();\n if (so) this.selectedRelation.set(null);\n this.objectSelected.emit(so);\n });\n detailsNode = computed(() => {\n const object = this.selectedObject();\n const config = this.#getNodeConfig(object!);\n return object && config ? { object, config } : null;\n });\n\n download() {\n const canvas = this.container().nativeElement.querySelector('canvas')!;\n const image = canvas.toDataURL('image/png');\n const link = document.createElement('a');\n link.href = image;\n link.download = 'canvas-image.png';\n link.click();\n link.remove();\n }\n\n addRelationship() {\n this.#dialog\n .open(AddRelationshipComponent, {\n ...ADD_RELATIONSHIP_DIALOG_OPTIONS,\n data: {\n object: this.selectedObject(),\n config: this.config()\n }\n })\n .afterClosed()\n .subscribe((result) => {\n this.expandSelected();\n });\n }\n\n deleteRelationship() {\n this.#objectRelationshipService.deleteRelationship(this.selectedRelation()!.id, false).subscribe((success) => {\n if (success) {\n const deletedEdge = this.#edges.get(this.selectedRelation()!.id);\n if (!deletedEdge) return;\n const sourceNodeId = deletedEdge.from;\n const targetNodeId = deletedEdge.to;\n\n this.#edges.remove(this.selectedRelation()!.id);\n // check if the source/target node of the deleted edge has other connections to another node in the current graph\n const otherEdgesForSource = this.#edges.get().filter((edge: any) => edge.from === sourceNodeId || edge.to === sourceNodeId);\n const otherEdgesForTarget = this.#edges.get().filter((edge: any) => edge.from === targetNodeId || edge.to === targetNodeId);\n\n if (sourceNodeId && otherEdgesForSource.length === 0) {\n this.#nodes.remove(sourceNodeId);\n }\n if (targetNodeId && otherEdgesForTarget.length === 0) {\n this.#nodes.remove(targetNodeId);\n }\n } else {\n this.#snack.danger(this.translate.instant('yuv.object-relationship.delete-relation.error-message'));\n }\n });\n }\n\n expandSelected() {\n const selected = this.selectedObject();\n if (selected) {\n this.#expand(selected.id);\n }\n }\n\n #expand(nodeId: string) {\n if (nodeId) {\n this.busy.set(true);\n this.#objectRelationshipService.fetchRelations(nodeId).subscribe({\n next: (res) => {\n this.#_updateGraph(nodeId, res.relations, res.objects);\n this.busy.set(false);\n },\n error: (err) => {\n console.error('Error fetching relations for node:', err);\n this.busy.set(false);\n }\n });\n }\n }\n\n #_updateGraph(originId: string, relations: SearchResult, objects: SearchResult) {\n objects.items.forEach((item) => {\n const id = item.fields.get(BaseObjectTypeField.OBJECT_ID) as string;\n this.#objectQA[id] = new DmsObject(item);\n });\n relations.items.forEach((item) => {\n const id = item.fields.get(BaseObjectTypeField.OBJECT_ID) as string;\n this.#relationQA[id] = new DmsObject(item);\n });\n\n // group by incoming and outgoing relations\n const incoming = relations.items.filter((item) => item.fields.get(RelationshipTypeField.TARGET_ID) === originId);\n const outgoing = relations.items.filter((item) => item.fields.get(RelationshipTypeField.SOURCE_ID) === originId);\n\n const rootNode = this.#toNode(originId);\n const _nodes: RelationshipNode[] =\n originId === this.#relations()?.originId && this.#nodes.get([originId]).length === 0\n ? [\n {\n ...rootNode!,\n ...ROOT_NODE_SETTINGS,\n font: {\n ...ROOT_NODE_FONT_SETTINGS,\n ...this.#getNodeFont()\n }\n }\n ]\n : [];\n const _edges: Edge[] = [];\n\n // add nodes and edges from search result\n outgoing.forEach((item) => {\n const relatedObjectId = item.fields.get(RelationshipTypeField.TARGET_ID) as string;\n const n = this.#toNode(relatedObjectId);\n const e = this.#toEdge(item, originId, relatedObjectId, 'to');\n if (n) {\n // check if the node is already in the rendered graph\n const nodeExists: boolean = _nodes.some((node) => node.id === n.id) || this.#nodes.get([n.id!]).length > 0;\n if (!nodeExists) _nodes.push(n);\n // check if edge already exists\n const edgeExists: boolean = _edges.some((edge) => edge.id === e.id) || this.#edges.get([e.id!]).length > 0;\n if (!edgeExists) _edges.push(e);\n }\n });\n\n incoming.forEach((item) => {\n const relatedObjectId = item.fields.get(RelationshipTypeField.SOURCE_ID) as string;\n const n = this.#toNode(relatedObjectId);\n const e = this.#toEdge(item, relatedObjectId, originId, 'from');\n if (n) {\n // check if the node is already in the rendered graph\n const nodeExists: boolean = _nodes.some((node) => node.id === n.id) || this.#nodes.get([n.id!]).length > 0;\n if (!nodeExists) _nodes.push(n);\n // check if edge already exists\n const edgeExists: boolean = _edges.some((edge) => edge.id === e.id) || this.#edges.get([e.id!]).length > 0;\n if (!edgeExists) _edges.push(e);\n }\n });\n this.#nodes.add(_nodes);\n this.#edges.add(_edges);\n }\n\n #getNodeConfig(o?: DmsObject): RelationshipComponentConfigNode | undefined {\n const cfg = this.config();\n if (!o) return undefined;\n const objectTypeIds = [...o.sots, o.objectTypeId];\n return [cfg.rootNode, ...cfg.nodes].find((n) => objectTypeIds.includes(n.objectType));\n }\n\n // convert search result item to vis node\n // will return NULL if the item object type is not configured in the component config\n #toNode(objectId: string): RelationshipNode | null {\n const cfg = this.config();\n const o = this.#objectQA[objectId];\n if (!o) return null;\n const cfgNode = this.#getNodeConfig(o);\n if (!cfgNode) return null;\n return {\n ...NODE_SETTINGS,\n objectType: cfgNode.objectType,\n color: this.#getNodeColor(),\n id: objectId,\n label: this.#maxLength(o.data[cfgNode.labelField] as string, 30),\n icon: {\n face: 'Material Symbols Sharp',\n code: cfgNode.icon,\n color: this.#getNodeColor().border\n },\n font: {\n ...NODE_FONT_SETTINGS,\n ...this.#getNodeFont()\n }\n };\n }\n\n #toEdge(item: SearchResultItem, from: string, to: string, direction: 'from' | 'to'): Edge {\n const label =\n this.#system.getLocalizedLabel(item.fields.get(BaseObjectTypeField.OBJECT_TYPE_ID) as string) || item.fields.get(BaseObjectTypeField.OBJECT_TYPE_ID);\n return {\n ...EDGE_SETTINGS,\n id: item.fields.get(BaseObjectTypeField.OBJECT_ID) as string,\n label: this.#maxLength(label, 30),\n color: this.#getEdgeColor(),\n font: {\n ...EDGE_FONT_SETTINGS,\n ...this.#getEdgeFont()\n },\n arrows: direction,\n from,\n to\n };\n }\n\n #maxLength(s: string, max: number): string {\n if (s.length > max) {\n return s.substring(0, max - 3) + '...';\n }\n return s;\n }\n\n #getNodeColor(): Color {\n const computedStyle = this.#getComputedStyle();\n return {\n background: this.#resolveLightDark(computedStyle.getPropertyValue('--_node-background-color').trim()),\n border: this.#resolveLightDark(computedStyle.getPropertyValue('--_node-border-color').trim()),\n highlight: {\n background: this.#resolveLightDark(computedStyle.getPropertyValue('--_node-background-color-highlight').trim()),\n border: this.#resolveLightDark(computedStyle.getPropertyValue('--_node-color-highlight').trim())\n }\n };\n }\n #getNodeFont(): Font {\n const computedStyle = this.#getComputedStyle();\n return {\n color: this.#resolveLightDark(computedStyle.getPropertyValue('--_node-font-color').trim()),\n strokeWidth: 4,\n strokeColor: this.#resolveLightDark(computedStyle.getPropertyValue('--_container-background-color').trim())\n };\n }\n\n #getEdgeColor() {\n const computedStyle = this.#getComputedStyle();\n return {\n color: this.#resolveLightDark(computedStyle.getPropertyValue('--_edge-color').trim()),\n highlight: this.#resolveLightDark(computedStyle.getPropertyValue('--_edge-color-highlight').trim()),\n hover: this.#resolveLightDark(computedStyle.getPropertyValue('--_edge-color-hover').trim())\n };\n }\n #getEdgeFont(): Font {\n const computedStyle = this.#getComputedStyle();\n return {\n strokeWidth: 4,\n strokeColor: this.#resolveLightDark(computedStyle.getPropertyValue('--_container-background-color').trim()),\n color: this.#resolveLightDark(computedStyle.getPropertyValue('--_edge-font-color').trim())\n };\n }\n\n #getComputedStyle() {\n const container = this.container().nativeElement;\n return getComputedStyle(container);\n }\n\n // grab color values for light-dark(...,...) notation\n #resolveLightDark(s: string) {\n if (s.startsWith('light-dark(')) {\n const regex = /light-dark\\(\\s*(#[0-9a-fA-F]{6})\\s*,\\s*(#[0-9a-fA-F]{6})\\s*\\)/;\n const match = s.match(regex);\n if (match) {\n const lightColor = match[1];\n const darkColor = match[2];\n return this.#mode() === 'dark' ? darkColor : lightColor;\n } else return s;\n } else return s;\n }\n\n ngAfterViewInit() {\n const options: Options = {\n physics: {\n enabled: true,\n solver: 'forceAtlas2Based',\n forceAtlas2Based: {\n // gravitationalConstant: -50,\n // centralGravity: 0.01,\n springLength: 200\n }\n },\n nodes: {\n shape: 'dot',\n size: 20,\n font: { size: 12 }\n }\n };\n this.#network = new Network(\n this.container().nativeElement,\n {\n nodes: this.#nodes,\n edges: this.#edges\n },\n options\n );\n this.#network.on('selectNode', (params: { nodes: string[]; edges: string[] }) => this.#setSelection(params));\n this.#network.on('deselectNode', (params: { nodes: string[]; edges: string[] }) => this.#setSelection(params));\n this.#network.on('dragEnd', (params: { nodes: string[]; edges: string[] }) => this.#setSelection(params));\n this.#network.on('selectEdge', (params: { nodes: string[]; edges: string[] }) => this.#setSelection(params));\n this.#network.on('deselectEdge', (params: { nodes: string[]; edges: string[] }) => this.#setSelection(params));\n this.#network.on('click', (params: { nodes: string[]; edges: string[] }) => this.#setSelection(params));\n this.#network.on('doubleClick', (params: { nodes: string[]; edges: string[] }) => {\n this.#expand(params.nodes[0]);\n });\n }\n\n #setSelection(params: { nodes: string[]; edges: string[] }) {\n this.selectedObject.set(params.nodes.length === 1 ? this.#objectQA[params.nodes[0]] : null);\n this.selectedRelation.set(params.edges.length === 1 && params.nodes.length === 0 ? this.#relationQA[params.edges[0]] : null);\n }\n\n ngOnDestroy() {\n if (this.#network) {\n this.#network.destroy();\n }\n }\n}\n","<div class=\"relations\" [yuvBusyOverlay]=\"busy()\">\n <div class=\"toolbar\">\n <button ymtIconButton (click)=\"download()\" [matTooltip]=\"'yuv.object-relationship.download.tooltip' | translate\">\n <mat-icon>download</mat-icon>\n </button>\n @if (selectedRelation()) {\n <button ymtIconButton (click)=\"deleteRelationship()\" [matTooltip]=\"'yuv.object-relationship.delete-relation.tooltip' | translate\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n </div>\n <div class=\"graph-container\" #graphContainer></div>\n\n @let dn = detailsNode();\n @if (dn) {\n <div class=\"selected\">\n <yuv-node-summary [object]=\"dn.object\" [nodeConfig]=\"dn.config\" [actions]=\"additionalSummaryActions\"></yuv-node-summary>\n </div>\n }\n</div>\n\n<ng-template #additionalSummaryActions>\n <button\n ymt-icon-button\n icon-button-size=\"small\"\n [matTooltip]=\"'yuv.object-relationship.selected.add-relationship.tooltip' | translate\"\n (click)=\"addRelationship()\"\n >\n <mat-icon>add</mat-icon>\n </button>\n <button ymt-icon-button icon-button-size=\"small\" [matTooltip]=\"'yuv.object-relationship.selected.expand.tooltip' | translate\" (click)=\"expandSelected()\">\n <mat-icon>open_with</mat-icon>\n </button>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, TemplateRef } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Router } from '@angular/router';\nimport { ObjectLink } from '../../object-relationship.interface';\nimport { ObjectRelationshipService } from '../../object-relationship.service';\nimport { SnackBarService } from '@yuuvis/client-framework';\nimport { TranslateService } from '@yuuvis/client-core';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\n\n@Component({\n selector: 'yuv-object-relationship-list-item',\n imports: [CommonModule, MatIconModule, YmtIconButtonDirective],\n templateUrl: './object-relationship-list-item.component.html',\n styleUrl: './object-relationship-list-item.component.scss'\n})\nexport class ObjectRelationshipListItemComponent {\n #router = inject(Router);\n #snack = inject(SnackBarService);\n #objectRelationshipService = inject(ObjectRelationshipService);\n private translate = inject(TranslateService);\n\n link = input.required<ObjectLink>();\n direction = input.required<'in' | 'out'>();\n\n enableSourceLink = input<boolean>(false);\n enableTargetLink = input<boolean>(false);\n\n deleteRelationship() {\n this.#objectRelationshipService.deleteRelationship(this.link().id, true).subscribe((success) => {\n if (!success) {\n this.#snack.danger(this.translate.instant('yuv.object-relationship.delete-relation.error-message'));\n }\n });\n }\n\n open(link: string | undefined, skip: boolean) {\n if (link && !skip) this.#router.navigateByUrl(link);\n }\n}\n","@let lnk = link();\n\n<button\n class=\"node source\"\n (click)=\"open(lnk.source.objectLink, !enableSourceLink())\"\n [attr.aria-readonly]=\"!enableSourceLink() || !lnk.source.objectLink\"\n [class.self]=\"direction() === 'out'\"\n>\n @if (lnk.source.icon) {\n <mat-icon>{{ lnk.source.icon }}</mat-icon>\n }\n <span class=\"title\">{{ lnk.source.label }}</span>\n <span class=\"description\">{{ lnk.source.description }}</span>\n</button>\n\n<div class=\"line\" [class.arr]=\"direction() === 'in'\"></div>\n<div class=\"relation\">{{ lnk.type.label }}</div>\n<div class=\"line\" [class.arr]=\"direction() === 'out'\"></div>\n\n<button\n class=\"node target\"\n (click)=\"open(lnk.target.objectLink, !enableTargetLink())\"\n [attr.aria-readonly]=\"!enableTargetLink() || !lnk.target.objectLink\"\n [class.self]=\"direction() === 'in'\"\n>\n @if (lnk.target.icon) {\n <mat-icon>{{ lnk.target.icon }}</mat-icon>\n }\n <span class=\"title\">{{ lnk.target.label }}</span>\n <span class=\"description\">{{ lnk.target.description }}</span>\n</button>\n\n<div class=\"actions\"> \n <button ymtIconButton icon-button-size=\"small\" (click)=\"deleteRelationship()\"><mat-icon>delete</mat-icon></button>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, inject, input, output, signal, TemplateRef } from '@angular/core';\nimport {\n BaseObjectTypeField,\n DmsObject,\n RelationshipTypeField,\n SearchResult,\n SearchResultItem,\n SearchService,\n SystemService,\n TranslateModule\n} from '@yuuvis/client-core';\nimport { ObjectLink, RelationshipComponentConfig, RelationshipComponentConfigNode } from '../object-relationship.interface';\nimport { ObjectRelationshipService } from '../object-relationship.service';\nimport { ObjectRelationshipListItemComponent } from './object-relationship-list-item/object-relationship-list-item.component';\n\n@Component({\n selector: 'yuv-object-relationship-list',\n imports: [CommonModule, ObjectRelationshipListItemComponent, TranslateModule],\n templateUrl: './object-relationship-list.component.html',\n styleUrl: './object-relationship-list.component.scss'\n})\nexport class ObjectRelationshipListComponent {\n #search = inject(SearchService);\n #system = inject(SystemService);\n #objectRelationshipService = inject(ObjectRelationshipService);\n\n /**\n * Configuration for the relations component.\n */\n config = input.required<RelationshipComponentConfig>();\n\n incomingLinks = signal<ObjectLink[]>([]);\n outgoingLinks = signal<ObjectLink[]>([]);\n\n #relations = this.#objectRelationshipService.relations;\n #relationsEffect = effect(() => {\n const rel = this.#relations();\n if (!rel) return;\n this.#createLists(rel.originId, rel.relations, rel.objects);\n });\n\n #objectQA: Record<string, DmsObject> = {};\n\n #createLists(objectId: string, relations: SearchResult, objects?: SearchResult) {\n const incoming = relations.items.filter((item) => item.fields.get(RelationshipTypeField.TARGET_ID) === objectId);\n const outgoing = relations.items.filter((item) => item.fields.get(RelationshipTypeField.SOURCE_ID) === objectId);\n\n objects?.items.forEach((item) => {\n const id = item.fields.get(BaseObjectTypeField.OBJECT_ID) as string;\n this.#objectQA[id] = new DmsObject(item);\n });\n\n this.incomingLinks.set(incoming.map((rel) => this.#map(rel)).filter((l) => l !== undefined) as ObjectLink[]);\n this.outgoingLinks.set(outgoing.map((rel) => this.#map(rel)).filter((l) => l !== undefined) as ObjectLink[]);\n }\n\n #map(relation: SearchResultItem): ObjectLink | undefined {\n const sourceObject: DmsObject = this.#objectQA[relation.fields.get(RelationshipTypeField.SOURCE_ID)];\n const targetObject: DmsObject = this.#objectQA[relation.fields.get(RelationshipTypeField.TARGET_ID)];\n\n const relID = relation.fields.get(BaseObjectTypeField.OBJECT_ID) as string;\n const relObjectTypeID = relation.fields.get(BaseObjectTypeField.OBJECT_TYPE_ID) as string;\n\n const sourceCfg = this.#getConfigNode(sourceObject);\n const targetCfg = this.#getConfigNode(targetObject);\n\n // if no config found, this means that the relation is not configured to be shown\n // Only nodes provided with the config are mapped to links\n if (!sourceCfg || !targetCfg) return undefined;\n\n const sourceLabel = sourceObject.data[sourceCfg?.labelField || ''] as string;\n const sourceDescription = sourceObject.data[sourceCfg?.descriptionField || ''] as string;\n const sourceIcon = sourceCfg?.icon;\n\n const targetLabel = targetObject.data[targetCfg?.labelField || ''] as string;\n const targetDescription = targetObject.data[targetCfg?.descriptionField || ''] as string;\n const targetIcon = targetCfg?.icon;\n\n return {\n id: relID,\n type: {\n id: relObjectTypeID,\n label: this.#system.getLocalizedLabel(relObjectTypeID) || relObjectTypeID\n },\n source: {\n id: relation.fields.get(RelationshipTypeField.SOURCE_ID) as string,\n label: sourceLabel,\n description: sourceDescription,\n icon: sourceIcon,\n objectLink: sourceCfg.objectLink ? sourceCfg.objectLink.replace('{{id}}', sourceObject.id) : undefined\n },\n target: {\n id: relation.fields.get(RelationshipTypeField.TARGET_ID) as string,\n label: targetLabel,\n description: targetDescription,\n icon: targetIcon,\n objectLink: targetCfg.objectLink ? targetCfg.objectLink.replace('{{id}}', targetObject.id) : undefined\n }\n };\n }\n\n #getConfigNode(object: DmsObject): RelationshipComponentConfigNode | undefined {\n const cfg = this.config();\n if (!object) return undefined;\n return cfg.nodes.find((n) => (object.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[]).includes(n.objectType));\n }\n}\n","@let incoming = incomingLinks();\n@let outgoing = outgoingLinks();\n\n@if (incoming.length > 0) {\n <h3>{{ 'yuv.object-relationship.list.incoming' | translate }}</h3>\n @for (n of incoming; track n.id) {\n <yuv-object-relationship-list-item\n [enableSourceLink]=\"true\"\n [enableTargetLink]=\"false\"\n [link]=\"n\"\n direction=\"in\"\n ></yuv-object-relationship-list-item>\n }\n}\n@if (outgoing.length > 0) {\n <h3>{{ 'yuv.object-relationship.list.outgoing' | translate }}</h3>\n @for (n of outgoing; track n.id) {\n <yuv-object-relationship-list-item\n [enableSourceLink]=\"false\"\n [enableTargetLink]=\"true\"\n [link]=\"n\"\n direction=\"out\"\n ></yuv-object-relationship-list-item>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, effect, inject, input, signal, TemplateRef } from '@angular/core';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { BaseObjectTypeField, DmsObject, Relationship, SystemService, TranslateModule } from '@yuuvis/client-core';\nimport { BusyOverlayDirective } from \"@yuuvis/client-framework/common\";\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { YmtPanesModule } from '@yuuvis/material/panes';\nimport { AddRelationshipComponent } from './actions/add-relationship/add-relationship.component';\nimport { ObjectRelationshipGraphComponent } from './object-relationship-graph/object-relationship-graph.component';\nimport { ObjectRelationshipListComponent } from './object-relationship-list/object-relationship-list.component';\nimport { ADD_RELATIONSHIP_DIALOG_OPTIONS } from './object-relationship.const';\nimport { RelationshipComponentConfig } from './object-relationship.interface';\nimport { ObjectRelationshipService } from './object-relationship.service';\n\n@Component({\n selector: 'yuv-object-relationship',\n imports: [\n CommonModule,\n MatIconModule,\n MatTooltipModule,\n TranslateModule,\n MatButtonToggleModule,\n YmtPanesModule,\n YmtIconButtonDirective,\n ObjectRelationshipGraphComponent,\n ObjectRelationshipListComponent,\n YmtIconButtonDirective,\n BusyOverlayDirective\n],\n templateUrl: './object-relationship.component.html',\n styleUrl: './object-relationship.component.scss',\n providers: [ObjectRelationshipService]\n})\nexport class ObjectRelationshipComponent {\n #objectRelationshipService = inject(ObjectRelationshipService);\n #system = inject(SystemService);\n #dialog = inject(MatDialog);\n\n #DEFAULT_MODE: 'list' | 'graph' = 'graph';\n mode = signal<'list' | 'graph'>(this.#DEFAULT_MODE);\n empty = computed(() => {\n const rel = this.#relations();\n return rel && rel.relations.totalNumItems === 0;\n });\n /**\n * ID of the object to display relations for.\n */\n objectId = input.required<string>();\n #objectIdEffect = effect(() => {\n const oid = this.objectId();\n this.#objectRelationshipService.objectId.set(oid);\n });\n /**\n * Configuration for the relations component.\n */\n config = input.required<RelationshipComponentConfig>();\n\n // the DmsObject representing the originId\n originObject = signal<DmsObject | null>(null);\n supportedRelationships = computed<Relationship[]>(() => {\n const obj = this.originObject();\n return obj ? this.#system.getSupportedRelationships(obj) : [];\n });\n\n busy = this.#objectRelationshipService.busy;\n\n #relations = this.#objectRelationshipService.relations;\n #relationsEffect = effect(() => {\n const rel = this.#relations();\n if (!rel) {\n this.originObject.set(null);\n return;\n }\n const originId = rel.originId;\n const originItem = rel.objects?.items.find((item) => item.fields.get(BaseObjectTypeField.OBJECT_ID) === originId);\n // TODO: use linked signal instead\n this.originObject.set(originItem ? new DmsObject(originItem) : null);\n });\n relationActions = input<TemplateRef<any> | null>(null);\n\n toggleMode() {\n const newMode = this.mode() === 'list' ? 'graph' : 'list';\n this.mode.set(newMode);\n }\n\n addRelationship() {\n this.#dialog.open(AddRelationshipComponent, {\n ...ADD_RELATIONSHIP_DIALOG_OPTIONS,\n data: {\n object: this.originObject(),\n config: this.config()\n }\n });\n }\n}\n","<ymt-pane [plain]=\"true\" [topBarActions]=\"topBarActions\">\n <ymt-pane-body [yuvBusyOverlay]=\"busy()\">\n @if (empty()) {\n <div class=\"no-relations\" inert>\n <mat-icon>link_off</mat-icon>\n <p>{{ 'yuv.object-relationship.no-relations' | translate }}</p>\n </div>\n } @else {\n @switch (mode()) {\n @case ('graph') {\n <yuv-object-relationship-graph [config]=\"config()\"></yuv-object-relationship-graph>\n }\n @case ('list') {\n <yuv-object-relationship-list [config]=\"config()\"> </yuv-object-relationship-list>\n }\n }\n }\n </ymt-pane-body>\n</ymt-pane>\n\n<ng-template #topBarActions>\n @if (supportedRelationships().length > 0) {\n <button ymt-icon-button icon-button-size=\"small\" [matTooltip]=\"'yuv.object-relationship.add.tooltip' | translate\" (click)=\"addRelationship()\">\n <mat-icon>add</mat-icon>\n </button>\n }\n <button\n ymt-icon-button\n icon-button-size=\"small\"\n [matTooltip]=\"mode() === 'list' ? ('yuv.object-relationship.mode.graph.tooltip' | translate) : ('yuv.object-relationship.mode.list.tooltip' | translate)\"\n (click)=\"toggleMode()\"\n >\n <mat-icon>{{ mode() === 'list' ? 'graph_3' : 'list' }}</mat-icon>\n </button>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { ObjectRelationshipComponent } from './object-relationship.component';\n\nconst cmp = [ObjectRelationshipComponent];\n@NgModule({\n imports: [...cmp],\n exports: [...cmp]\n})\nexport class YuvObjectRelationshipModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i3","i4","i1","i5"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuuvis/client-framework",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.18.0",
|
|
4
4
|
"author": "OPTIMAL SYSTEMS GmbH <npm@optimal-systems.de>",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"peerDependencies": {
|
|
@@ -8,15 +8,15 @@
|
|
|
8
8
|
"@angular/common": "^19.2.1",
|
|
9
9
|
"@angular/core": "^19.2.1",
|
|
10
10
|
"angular-gridster2": "^19.0.0",
|
|
11
|
-
"@yuuvis/client-core": "^2.
|
|
12
|
-
"@yuuvis/client-shell-core": "^2.
|
|
11
|
+
"@yuuvis/client-core": "^2.18.0",
|
|
12
|
+
"@yuuvis/client-shell-core": "^2.18.0",
|
|
13
13
|
"ng-dynamic-component": "^10.8.2",
|
|
14
14
|
"modern-normalize": "^3.0.1"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"@angular/material": "^19.2.15",
|
|
18
18
|
"@ngrx/signals": "^19.2.0",
|
|
19
|
-
"@yuuvis/material": "2.
|
|
19
|
+
"@yuuvis/material": "2.18.0",
|
|
20
20
|
"@yuuvis/media-viewer": "^2.2.0",
|
|
21
21
|
"angular-split": "^19.0.0",
|
|
22
22
|
"vis-network": "^10.0.2",
|