@yuuvis/client-framework 3.18.0 → 3.20.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-forms.mjs +4 -2
- package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-details.mjs +2 -1
- package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-flavor.mjs +2 -1
- package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-form.mjs +3 -1
- package/fesm2022/yuuvis-client-framework-object-form.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-preview.mjs +25 -13
- package/fesm2022/yuuvis-client-framework-object-preview.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-relationship.mjs +9 -3
- package/fesm2022/yuuvis-client-framework-object-relationship.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-summary.mjs +4 -1
- package/fesm2022/yuuvis-client-framework-object-summary.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-renderer.mjs +100 -16
- package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-smart-search.mjs +433 -69
- package/fesm2022/yuuvis-client-framework-smart-search.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-tile-list.mjs +2 -2
- package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
- package/package.json +5 -5
- package/smart-search/README.md +57 -7
- package/types/yuuvis-client-framework-object-form.d.ts +6 -0
- package/types/yuuvis-client-framework-object-preview.d.ts +14 -1
- package/types/yuuvis-client-framework-renderer.d.ts +40 -6
- package/types/yuuvis-client-framework-smart-search.d.ts +171 -22
- package/types/yuuvis-client-framework-tile-list.d.ts +5 -0
|
@@ -133,7 +133,10 @@ class ObjectSummaryDataComponent {
|
|
|
133
133
|
value: {
|
|
134
134
|
propertyName: f.id,
|
|
135
135
|
value: this.#getValue(f, dmsObject.data),
|
|
136
|
-
propertyType: f.propertyType
|
|
136
|
+
propertyType: f.propertyType,
|
|
137
|
+
// these are the SOT's own fields, so the SOT is the context its schema
|
|
138
|
+
// overrides (e.g. a SOT specific dynamic catalog) have to be resolved in
|
|
139
|
+
objectTypeId: sot.id
|
|
137
140
|
}
|
|
138
141
|
}))
|
|
139
142
|
: [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-framework-object-summary.mjs","sources":["../../../../../libs/yuuvis/client-framework/object-summary/src/lib/multi-object-summary/multi-object-summary.component.ts","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary-data/object-summary-data.component.ts","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary-data/object-summary-data.component.html","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary/object-summary.component.ts","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary/object-summary.component.html","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary.module.ts","../../../../../libs/yuuvis/client-framework/object-summary/src/yuuvis-client-framework-object-summary.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input, signal } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\n\n@Component({\n selector: 'yuv-multi-object-summary',\n standalone: true,\n imports: [MatIcon],\n template: `\n <section class=\"slide\">\n <mat-icon class=\"ymt-icon--size-6xl\">{{ icon() }}</mat-icon>\n </section>\n\n <section class=\"title\">\n <h1>{{ headline() }}</h1>\n </section>\n `,\n styleUrl: './multi-object-summary.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MultiObjectSummaryComponent {\n icon = signal('home_storage');\n\n headline = input<string>('this could be your headline');\n}\n","import { ChangeDetectionStrategy, Component, effect, inject, input, signal, untracked } from '@angular/core';\nimport {\n BaseObjectTypeField,\n ContentStreamField,\n DmsObject,\n ObjectTypeField,\n SystemService,\n TranslatePipe,\n TranslateService\n} from '@yuuvis/client-core';\nimport { RendererDirective, RendererDirectiveInput } from '@yuuvis/client-framework/renderer';\nimport { ObjectFlavor, ShellService } from '@yuuvis/client-shell-core';\n\n@Component({\n selector: 'yuv-object-summary-data',\n standalone: true,\n imports: [RendererDirective, TranslatePipe],\n templateUrl: './object-summary-data.component.html',\n styleUrl: './object-summary-data.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ObjectSummaryDataComponent {\n readonly #shell = inject(ShellService);\n readonly #systemService = inject(SystemService);\n readonly translate = inject(TranslateService);\n\n dmsObject = input.required<DmsObject>();\n\n baseData = signal<any[]>([]);\n flavorData = signal<\n {\n label: string;\n properties: {\n label: string;\n value: RendererDirectiveInput;\n propertyType?: string;\n }[];\n }[]\n >([]);\n\n /**\n * IDs of flavors to show. If `showAppliedFlavors` is true, all the applied flavors will be shown.\n */\n flavors = input<ObjectFlavor[]>();\n #flavorDataEffect = effect(() => {\n this.flavorData.set(this.#getFlavorData(this.dmsObject(), this.flavors() || []));\n });\n\n /**\n * Whether to identify and show all applied flavors of the object.\n */\n showAppliedFlavors = input<boolean>();\n #showAppliedFlavorsEffect = effect(() => {\n const o = this.dmsObject();\n if (this.showAppliedFlavors()) {\n this.flavorData.set(this.#getFlavorData(o, this.#shell.getAppliedObjectFlavors(o).applied));\n }\n });\n\n #dmsObjectEffect = effect(() => {\n const dmsObject = this.dmsObject();\n if (dmsObject) {\n untracked(() => {\n this.#getBaseData();\n });\n }\n });\n\n #getBaseData() {\n this.baseData.set([]);\n\n const fields = [\n BaseObjectTypeField.CREATION_DATE,\n `${BaseObjectTypeField.CREATED_BY}_title`,\n BaseObjectTypeField.MODIFICATION_DATE,\n `${BaseObjectTypeField.MODIFIED_BY}_title`\n ];\n const contentFields = [ContentStreamField.FILENAME, ContentStreamField.LENGTH, ContentStreamField.MIME_TYPE];\n const dmsObject = this.dmsObject();\n if (dmsObject) {\n (dmsObject.content ? [...fields, ...contentFields] : fields).forEach((f) => {\n this.baseData.update((data) => [\n ...data,\n {\n label: this.#systemService.getLocalizedLabel(f.replace('_title', '')) || f,\n value: {\n propertyName: f,\n value: dmsObject.data[f]\n }\n }\n ]);\n });\n }\n }\n\n #getValue(f: ObjectTypeField, data: Record<string, unknown>): any {\n if (f.propertyType === 'table') {\n return (\n (data[f.id] as any)?.map((row: any) => {\n return Object.entries(row).map(([key, value]) => {\n const columnDef = (f as any).columnDefinitions.find((col: any) => col.id === key);\n return {\n propertyName: key,\n value,\n propertyType: columnDef?.propertyType || 'string'\n };\n });\n }) ?? []\n );\n }\n\n return data[f.id];\n }\n\n #getFlavorData(\n dmsObject: DmsObject,\n flavors: ObjectFlavor[]\n ): {\n label: string;\n properties: {\n label: string;\n value: RendererDirectiveInput;\n }[];\n }[] {\n const sots = (dmsObject.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[]) || [];\n return flavors\n .filter((f) => sots.includes(f.sot))\n .map((f) => {\n const sot = this.#systemService.getSecondaryObjectType(f.sot, true);\n const properties = sot\n ? sot.fields.map((f) => ({\n label: this.#systemService.getLocalizedLabel(f.id) || f.id,\n value: {\n propertyName: f.id,\n value: this.#getValue(f, dmsObject.data),\n propertyType: f.propertyType\n }\n }))\n : [];\n return {\n label: this.#systemService.getLocalizedLabel(f.id) || this.translate.instant(f.id),\n properties\n };\n });\n }\n}\n","@let flavors = flavorData();\n\n<div class=\"content\">\n @if (flavors.length > 0) {\n <section class=\"flavor properties\">\n @for (flavor of flavors; track $index) {\n <div class=\"flavour-groups\">\n <h3 class=\"object-summary__title\">{{ flavor.label }}</h3>\n @for (property of flavor.properties; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ property.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"property.value\" />\n </div>\n </div>\n }\n </div>\n }\n </section>\n }\n\n @let base = baseData();\n @if (base) {\n <section class=\"base properties\">\n <h3 class=\"object-summary__title\">{{ 'yuv.object-summary-data.base.headline' | translate }}</h3>\n @for (p of base; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ p.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"p.value\" />\n </div>\n </div>\n }\n </section>\n }\n</div>\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectorRef, Component, effect, inject, input, signal, untracked, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n BaseObjectTypeField,\n ConfigTypeOption,\n ContentStreamField,\n DmsObject,\n DmsService,\n EventService,\n ObjectConfigRecord,\n ObjectConfigService,\n Operator,\n ResolvedObjectConfig,\n SearchQuery,\n SearchService,\n TranslateService,\n VirtualObjectType,\n YuvEvent,\n YuvEventType\n} from '@yuuvis/client-core';\nimport { BusyOverlayDirective, RetentionBadgeComponent } from '@yuuvis/client-framework/common';\nimport { YUV_ICONS } from '@yuuvis/client-framework/icons';\nimport { ObjectFlavorComponent } from '@yuuvis/client-framework/object-flavor';\nimport { OverflowMenuComponent, OverflowMenuItem } from '@yuuvis/client-framework/overflow-menu';\nimport { RendererDirectiveInput } from '@yuuvis/client-framework/renderer';\nimport { ObjectFlavor } from '@yuuvis/client-shell-core';\nimport { ObjectSummaryDataComponent } from '../object-summary-data/object-summary-data.component';\n\n/**\n * Component showing a summary of the given dms object.\n */\n@Component({\n selector: 'yuv-object-summary',\n standalone: true,\n imports: [\n NgClass,\n BusyOverlayDirective,\n RetentionBadgeComponent,\n ObjectFlavorComponent,\n OverflowMenuComponent,\n MatIconModule,\n ObjectSummaryDataComponent\n ],\n templateUrl: './object-summary.component.html',\n styleUrls: ['./object-summary.component.scss'],\n hostDirectives: [\n {\n directive: BusyOverlayDirective,\n inputs: ['yuvBusyOverlay: busy']\n }\n ],\n host: {\n style: 'position: relative;'\n }\n})\nexport class ObjectSummaryComponent {\n readonly #eventService = inject(EventService);\n readonly #dmsService = inject(DmsService);\n private readonly translate = inject(TranslateService);\n readonly #objectConfigService = inject(ObjectConfigService);\n readonly #searchService = inject(SearchService);\n readonly #cd = inject(ChangeDetectorRef);\n\n flavorCmp = viewChild(ObjectFlavorComponent);\n\n #oc?: ObjectConfigRecord;\n\n slide = signal<{\n icon?: {\n name?: string;\n title?: string;\n };\n uri?: string;\n loading: boolean;\n orientation?: 'portrait' | 'landscape';\n }>({\n loading: false\n });\n busy = true;\n\n contextError?: string;\n headerData = signal<\n | {\n icon?: {\n name?: string;\n title?: string;\n };\n title?: string;\n description?: string;\n }\n | undefined\n >(undefined);\n\n baseData: {\n label: string;\n value: RendererDirectiveInput;\n }[] = [];\n\n flavors: ObjectFlavor[] = [];\n\n icons = {\n folder: YUV_ICONS.folder\n };\n\n actions = input<OverflowMenuItem[]>([]);\n\n folderInfo?: {\n size: number;\n entries: {\n key: string;\n count: number;\n }[];\n };\n\n /**\n * DmsObject to show the details for.\n */\n\n dmsObject = signal<DmsObject | undefined>(undefined);\n\n dmsObjectInput = input<DmsObject | undefined>(undefined, { alias: 'dmsObject' });\n #dmsObjectInputEffect = effect(() => {\n const dmsObject = this.dmsObjectInput();\n const contentChanged = this.dmsObject()?.content?.contentStreamId !== dmsObject?.content?.contentStreamId;\n\n untracked(() => {\n this.dmsObject.set(dmsObject);\n contentChanged &&\n this.slide.update((slide) => ({ ...slide, uri: undefined, icon: undefined, iconSvg: undefined }));\n if (dmsObject) {\n this.#getHeaderData();\n (contentChanged || dmsObject.isFolder) && this.#setupSlide();\n this.folderInfo = undefined;\n\n if (dmsObject.isFolder) this.#fetchFolderInfo(dmsObject.id);\n\n // TODO: if a flavor has been selected and a new object comes in, we'll check if\n // the new object has the same flavor and update the flavor data\n // if (this.flavorData && dmsObject.sots.includes(this.flavorData.flavor.sot)) {\n // this.#getFlavorData(this.flavorData.flavor);\n // } else this.flavorData = undefined;\n }\n });\n });\n\n /**\n * ID of a DmsObject. The object will be fetched from the backend upfront.\n */\n objectId = input<string | undefined | null>(null);\n #objectIdEffect = effect(() => {\n const id = this.objectId();\n untracked(() => {\n id && this.#getDmsObject(id);\n });\n });\n\n // virtual object type to be used for header data\n configType = input<ConfigTypeOption>();\n\n constructor() {\n this.#objectConfigService\n .getObjectConfigs$(undefined, true)\n .pipe(takeUntilDestroyed())\n .subscribe((res: ObjectConfigRecord) => {\n this.#oc = res;\n const dmsObject = this.dmsObject();\n if (dmsObject) this.#getHeaderData();\n });\n this.#eventService\n .on(YuvEventType.DMS_OBJECT_UPDATED)\n .pipe(takeUntilDestroyed())\n .subscribe((e: YuvEvent) => {\n const o = e.data as DmsObject;\n const dmsObject = this.dmsObject();\n this.#setupSlide();\n if (dmsObject?.id === o.id) {\n this.dmsObject.set(o);\n }\n });\n }\n\n #setupSlide() {\n const dmsObject = this.dmsObject();\n if (dmsObject) {\n if (dmsObject.content) {\n const slideUri = this.#dmsService.getSlideURI(dmsObject.id, dmsObject.content?.mimeType);\n if (slideUri) {\n this.slide.update((slide) => ({ ...slide, loading: true }));\n const img = new Image();\n img.onload = () => {\n this.slide.update((slide) => ({\n ...slide,\n orientation: img.width > img.height ? 'landscape' : 'portrait',\n uri: `${slideUri}?${new Date().getTime()}`, // add Timestamp to force image reload\n loading: false\n }));\n this.#cd.markForCheck();\n };\n img.onerror = () => {\n const headerData = this.headerData();\n this.slide.update((slide) => ({ ...slide, icon: headerData?.icon, loading: false }));\n this.#cd.markForCheck();\n };\n img.src = slideUri;\n }\n } else {\n const headerData = this.headerData();\n this.slide.update((slide) => ({ ...slide, icon: headerData?.icon }));\n }\n }\n }\n\n onFlavorSelect(flavor: ObjectFlavor | undefined) {\n this.flavors = flavor ? [flavor] : [];\n }\n\n #fetchFolderInfo(id: string) {\n const q: SearchQuery = {\n fields: [`SUM(${ContentStreamField.LENGTH})`],\n aggs: [BaseObjectTypeField.BASE_TYPE_ID],\n filters: [\n {\n f: BaseObjectTypeField.PARENT_ID,\n o: Operator.EQUAL,\n v1: id\n }\n ]\n };\n this.#searchService.aggregate(q, [BaseObjectTypeField.BASE_TYPE_ID]).subscribe((res) => {\n const entries = res.aggregations[0].entries;\n this.folderInfo = {\n size: entries.reduce((s, v) => s + v.count, 0),\n entries\n };\n });\n }\n\n #getDmsObject(id: string) {\n this.busy = true;\n this.#dmsService.getDmsObject(id).subscribe({\n next: (dmsObject) => this.dmsObject.set(dmsObject),\n error: () => {\n this.dmsObject.set(undefined);\n this.contextError = this.translate.instant('yuv.object-summary.load.error');\n },\n complete: () => {\n this.busy = false;\n }\n });\n }\n\n #getObjectConfig(type?: VirtualObjectType, bucket?: string): ResolvedObjectConfig | undefined {\n const dmsObject = this.dmsObject();\n return dmsObject\n ? this.#objectConfigService.getResolvedObjectConfig(\n dmsObject.data,\n type || {\n id: dmsObject.objectTypeId,\n objectType: dmsObject.objectTypeId\n },\n bucket,\n true\n )\n : undefined;\n }\n\n #getHeaderData() {\n const oc = this.#getObjectConfig(this.configType()?.type, this.configType()?.bucket);\n const dmsObject = this.dmsObject();\n if (oc && dmsObject) {\n this.headerData.update((data) => ({\n ...data,\n title: oc.title.value,\n description: oc.description?.value,\n icon: {\n title: oc.title.value,\n ...(oc.icon ? { name: oc.icon.value } : undefined)\n }\n }));\n } else this.headerData.set(undefined);\n }\n}\n","@let imageSlide = slide();\n<section class=\"slide\" [yuvBusyOverlay]=\"imageSlide.loading\">\n @if (imageSlide.uri || imageSlide.loading) {\n <img draggable=\"false\" [ngClass]=\"{ loading: imageSlide.loading }\" [attr.data-orientation]=\"imageSlide.orientation\" [src]=\"imageSlide.uri\" />\n } @else if (imageSlide.icon && imageSlide.icon.name) {\n <mat-icon draggable=\"false\" class=\"ymt-icon--size-6xl\">{{ imageSlide.icon.name }}</mat-icon>\n }\n @if (folderInfo) {\n <div class=\"badge\">\n {{ folderInfo.size }}\n </div>\n }\n</section>\n\n@let o = dmsObject();\n@if (o) {\n <section class=\"object-flavors\">\n <yuv-object-flavor [dmsObject]=\"o\" (flavorSelect)=\"onFlavorSelect($event)\"></yuv-object-flavor>\n </section>\n}\n\n<div class=\"content\">\n @let header = headerData();\n <section class=\"title\">\n <h2>{{ header?.title }}</h2>\n\n <div class=\"actions\">\n <yuv-overflow-menu [menuItems]=\"actions()\"></yuv-overflow-menu>\n </div>\n </section>\n\n @if (o) {\n <section class=\"badges\">\n <yuv-retention-badge [dmsObject]=\"o\"></yuv-retention-badge>\n </section>\n\n <yuv-object-summary-data [dmsObject]=\"o\" [flavors]=\"flavors\"></yuv-object-summary-data>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { MultiObjectSummaryComponent } from './multi-object-summary/multi-object-summary.component';\nimport { ObjectSummaryDataComponent } from './object-summary-data/object-summary-data.component';\nimport { ObjectSummaryComponent } from './object-summary/object-summary.component';\n\nconst cmp = [ObjectSummaryComponent, MultiObjectSummaryComponent, ObjectSummaryDataComponent];\n@NgModule({\n imports: cmp,\n exports: cmp\n})\nexport class YuvObjectSummaryModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-client-framework-object-summary.mjs","sources":["../../../../../libs/yuuvis/client-framework/object-summary/src/lib/multi-object-summary/multi-object-summary.component.ts","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary-data/object-summary-data.component.ts","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary-data/object-summary-data.component.html","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary/object-summary.component.ts","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary/object-summary.component.html","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary.module.ts","../../../../../libs/yuuvis/client-framework/object-summary/src/yuuvis-client-framework-object-summary.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input, signal } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\n\n@Component({\n selector: 'yuv-multi-object-summary',\n standalone: true,\n imports: [MatIcon],\n template: `\n <section class=\"slide\">\n <mat-icon class=\"ymt-icon--size-6xl\">{{ icon() }}</mat-icon>\n </section>\n\n <section class=\"title\">\n <h1>{{ headline() }}</h1>\n </section>\n `,\n styleUrl: './multi-object-summary.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MultiObjectSummaryComponent {\n icon = signal('home_storage');\n\n headline = input<string>('this could be your headline');\n}\n","import { ChangeDetectionStrategy, Component, effect, inject, input, signal, untracked } from '@angular/core';\nimport {\n BaseObjectTypeField,\n ContentStreamField,\n DmsObject,\n ObjectTypeField,\n SystemService,\n TranslatePipe,\n TranslateService\n} from '@yuuvis/client-core';\nimport { RendererDirective, RendererDirectiveInput } from '@yuuvis/client-framework/renderer';\nimport { ObjectFlavor, ShellService } from '@yuuvis/client-shell-core';\n\n@Component({\n selector: 'yuv-object-summary-data',\n standalone: true,\n imports: [RendererDirective, TranslatePipe],\n templateUrl: './object-summary-data.component.html',\n styleUrl: './object-summary-data.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ObjectSummaryDataComponent {\n readonly #shell = inject(ShellService);\n readonly #systemService = inject(SystemService);\n readonly translate = inject(TranslateService);\n\n dmsObject = input.required<DmsObject>();\n\n baseData = signal<any[]>([]);\n flavorData = signal<\n {\n label: string;\n properties: {\n label: string;\n value: RendererDirectiveInput;\n propertyType?: string;\n }[];\n }[]\n >([]);\n\n /**\n * IDs of flavors to show. If `showAppliedFlavors` is true, all the applied flavors will be shown.\n */\n flavors = input<ObjectFlavor[]>();\n #flavorDataEffect = effect(() => {\n this.flavorData.set(this.#getFlavorData(this.dmsObject(), this.flavors() || []));\n });\n\n /**\n * Whether to identify and show all applied flavors of the object.\n */\n showAppliedFlavors = input<boolean>();\n #showAppliedFlavorsEffect = effect(() => {\n const o = this.dmsObject();\n if (this.showAppliedFlavors()) {\n this.flavorData.set(this.#getFlavorData(o, this.#shell.getAppliedObjectFlavors(o).applied));\n }\n });\n\n #dmsObjectEffect = effect(() => {\n const dmsObject = this.dmsObject();\n if (dmsObject) {\n untracked(() => {\n this.#getBaseData();\n });\n }\n });\n\n #getBaseData() {\n this.baseData.set([]);\n\n const fields = [\n BaseObjectTypeField.CREATION_DATE,\n `${BaseObjectTypeField.CREATED_BY}_title`,\n BaseObjectTypeField.MODIFICATION_DATE,\n `${BaseObjectTypeField.MODIFIED_BY}_title`\n ];\n const contentFields = [ContentStreamField.FILENAME, ContentStreamField.LENGTH, ContentStreamField.MIME_TYPE];\n const dmsObject = this.dmsObject();\n if (dmsObject) {\n (dmsObject.content ? [...fields, ...contentFields] : fields).forEach((f) => {\n this.baseData.update((data) => [\n ...data,\n {\n label: this.#systemService.getLocalizedLabel(f.replace('_title', '')) || f,\n value: {\n propertyName: f,\n value: dmsObject.data[f]\n }\n }\n ]);\n });\n }\n }\n\n #getValue(f: ObjectTypeField, data: Record<string, unknown>): any {\n if (f.propertyType === 'table') {\n return (\n (data[f.id] as any)?.map((row: any) => {\n return Object.entries(row).map(([key, value]) => {\n const columnDef = (f as any).columnDefinitions.find((col: any) => col.id === key);\n return {\n propertyName: key,\n value,\n propertyType: columnDef?.propertyType || 'string'\n };\n });\n }) ?? []\n );\n }\n\n return data[f.id];\n }\n\n #getFlavorData(\n dmsObject: DmsObject,\n flavors: ObjectFlavor[]\n ): {\n label: string;\n properties: {\n label: string;\n value: RendererDirectiveInput;\n }[];\n }[] {\n const sots = (dmsObject.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[]) || [];\n return flavors\n .filter((f) => sots.includes(f.sot))\n .map((f) => {\n const sot = this.#systemService.getSecondaryObjectType(f.sot, true);\n const properties = sot\n ? sot.fields.map((f) => ({\n label: this.#systemService.getLocalizedLabel(f.id) || f.id,\n value: {\n propertyName: f.id,\n value: this.#getValue(f, dmsObject.data),\n propertyType: f.propertyType,\n // these are the SOT's own fields, so the SOT is the context its schema\n // overrides (e.g. a SOT specific dynamic catalog) have to be resolved in\n objectTypeId: sot.id\n }\n }))\n : [];\n return {\n label: this.#systemService.getLocalizedLabel(f.id) || this.translate.instant(f.id),\n properties\n };\n });\n }\n}\n","@let flavors = flavorData();\n\n<div class=\"content\">\n @if (flavors.length > 0) {\n <section class=\"flavor properties\">\n @for (flavor of flavors; track $index) {\n <div class=\"flavour-groups\">\n <h3 class=\"object-summary__title\">{{ flavor.label }}</h3>\n @for (property of flavor.properties; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ property.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"property.value\" />\n </div>\n </div>\n }\n </div>\n }\n </section>\n }\n\n @let base = baseData();\n @if (base) {\n <section class=\"base properties\">\n <h3 class=\"object-summary__title\">{{ 'yuv.object-summary-data.base.headline' | translate }}</h3>\n @for (p of base; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ p.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"p.value\" />\n </div>\n </div>\n }\n </section>\n }\n</div>\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectorRef, Component, effect, inject, input, signal, untracked, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n BaseObjectTypeField,\n ConfigTypeOption,\n ContentStreamField,\n DmsObject,\n DmsService,\n EventService,\n ObjectConfigRecord,\n ObjectConfigService,\n Operator,\n ResolvedObjectConfig,\n SearchQuery,\n SearchService,\n TranslateService,\n VirtualObjectType,\n YuvEvent,\n YuvEventType\n} from '@yuuvis/client-core';\nimport { BusyOverlayDirective, RetentionBadgeComponent } from '@yuuvis/client-framework/common';\nimport { YUV_ICONS } from '@yuuvis/client-framework/icons';\nimport { ObjectFlavorComponent } from '@yuuvis/client-framework/object-flavor';\nimport { OverflowMenuComponent, OverflowMenuItem } from '@yuuvis/client-framework/overflow-menu';\nimport { RendererDirectiveInput } from '@yuuvis/client-framework/renderer';\nimport { ObjectFlavor } from '@yuuvis/client-shell-core';\nimport { ObjectSummaryDataComponent } from '../object-summary-data/object-summary-data.component';\n\n/**\n * Component showing a summary of the given dms object.\n */\n@Component({\n selector: 'yuv-object-summary',\n standalone: true,\n imports: [\n NgClass,\n BusyOverlayDirective,\n RetentionBadgeComponent,\n ObjectFlavorComponent,\n OverflowMenuComponent,\n MatIconModule,\n ObjectSummaryDataComponent\n ],\n templateUrl: './object-summary.component.html',\n styleUrls: ['./object-summary.component.scss'],\n hostDirectives: [\n {\n directive: BusyOverlayDirective,\n inputs: ['yuvBusyOverlay: busy']\n }\n ],\n host: {\n style: 'position: relative;'\n }\n})\nexport class ObjectSummaryComponent {\n readonly #eventService = inject(EventService);\n readonly #dmsService = inject(DmsService);\n private readonly translate = inject(TranslateService);\n readonly #objectConfigService = inject(ObjectConfigService);\n readonly #searchService = inject(SearchService);\n readonly #cd = inject(ChangeDetectorRef);\n\n flavorCmp = viewChild(ObjectFlavorComponent);\n\n #oc?: ObjectConfigRecord;\n\n slide = signal<{\n icon?: {\n name?: string;\n title?: string;\n };\n uri?: string;\n loading: boolean;\n orientation?: 'portrait' | 'landscape';\n }>({\n loading: false\n });\n busy = true;\n\n contextError?: string;\n headerData = signal<\n | {\n icon?: {\n name?: string;\n title?: string;\n };\n title?: string;\n description?: string;\n }\n | undefined\n >(undefined);\n\n baseData: {\n label: string;\n value: RendererDirectiveInput;\n }[] = [];\n\n flavors: ObjectFlavor[] = [];\n\n icons = {\n folder: YUV_ICONS.folder\n };\n\n actions = input<OverflowMenuItem[]>([]);\n\n folderInfo?: {\n size: number;\n entries: {\n key: string;\n count: number;\n }[];\n };\n\n /**\n * DmsObject to show the details for.\n */\n\n dmsObject = signal<DmsObject | undefined>(undefined);\n\n dmsObjectInput = input<DmsObject | undefined>(undefined, { alias: 'dmsObject' });\n #dmsObjectInputEffect = effect(() => {\n const dmsObject = this.dmsObjectInput();\n const contentChanged = this.dmsObject()?.content?.contentStreamId !== dmsObject?.content?.contentStreamId;\n\n untracked(() => {\n this.dmsObject.set(dmsObject);\n contentChanged &&\n this.slide.update((slide) => ({ ...slide, uri: undefined, icon: undefined, iconSvg: undefined }));\n if (dmsObject) {\n this.#getHeaderData();\n (contentChanged || dmsObject.isFolder) && this.#setupSlide();\n this.folderInfo = undefined;\n\n if (dmsObject.isFolder) this.#fetchFolderInfo(dmsObject.id);\n\n // TODO: if a flavor has been selected and a new object comes in, we'll check if\n // the new object has the same flavor and update the flavor data\n // if (this.flavorData && dmsObject.sots.includes(this.flavorData.flavor.sot)) {\n // this.#getFlavorData(this.flavorData.flavor);\n // } else this.flavorData = undefined;\n }\n });\n });\n\n /**\n * ID of a DmsObject. The object will be fetched from the backend upfront.\n */\n objectId = input<string | undefined | null>(null);\n #objectIdEffect = effect(() => {\n const id = this.objectId();\n untracked(() => {\n id && this.#getDmsObject(id);\n });\n });\n\n // virtual object type to be used for header data\n configType = input<ConfigTypeOption>();\n\n constructor() {\n this.#objectConfigService\n .getObjectConfigs$(undefined, true)\n .pipe(takeUntilDestroyed())\n .subscribe((res: ObjectConfigRecord) => {\n this.#oc = res;\n const dmsObject = this.dmsObject();\n if (dmsObject) this.#getHeaderData();\n });\n this.#eventService\n .on(YuvEventType.DMS_OBJECT_UPDATED)\n .pipe(takeUntilDestroyed())\n .subscribe((e: YuvEvent) => {\n const o = e.data as DmsObject;\n const dmsObject = this.dmsObject();\n this.#setupSlide();\n if (dmsObject?.id === o.id) {\n this.dmsObject.set(o);\n }\n });\n }\n\n #setupSlide() {\n const dmsObject = this.dmsObject();\n if (dmsObject) {\n if (dmsObject.content) {\n const slideUri = this.#dmsService.getSlideURI(dmsObject.id, dmsObject.content?.mimeType);\n if (slideUri) {\n this.slide.update((slide) => ({ ...slide, loading: true }));\n const img = new Image();\n img.onload = () => {\n this.slide.update((slide) => ({\n ...slide,\n orientation: img.width > img.height ? 'landscape' : 'portrait',\n uri: `${slideUri}?${new Date().getTime()}`, // add Timestamp to force image reload\n loading: false\n }));\n this.#cd.markForCheck();\n };\n img.onerror = () => {\n const headerData = this.headerData();\n this.slide.update((slide) => ({ ...slide, icon: headerData?.icon, loading: false }));\n this.#cd.markForCheck();\n };\n img.src = slideUri;\n }\n } else {\n const headerData = this.headerData();\n this.slide.update((slide) => ({ ...slide, icon: headerData?.icon }));\n }\n }\n }\n\n onFlavorSelect(flavor: ObjectFlavor | undefined) {\n this.flavors = flavor ? [flavor] : [];\n }\n\n #fetchFolderInfo(id: string) {\n const q: SearchQuery = {\n fields: [`SUM(${ContentStreamField.LENGTH})`],\n aggs: [BaseObjectTypeField.BASE_TYPE_ID],\n filters: [\n {\n f: BaseObjectTypeField.PARENT_ID,\n o: Operator.EQUAL,\n v1: id\n }\n ]\n };\n this.#searchService.aggregate(q, [BaseObjectTypeField.BASE_TYPE_ID]).subscribe((res) => {\n const entries = res.aggregations[0].entries;\n this.folderInfo = {\n size: entries.reduce((s, v) => s + v.count, 0),\n entries\n };\n });\n }\n\n #getDmsObject(id: string) {\n this.busy = true;\n this.#dmsService.getDmsObject(id).subscribe({\n next: (dmsObject) => this.dmsObject.set(dmsObject),\n error: () => {\n this.dmsObject.set(undefined);\n this.contextError = this.translate.instant('yuv.object-summary.load.error');\n },\n complete: () => {\n this.busy = false;\n }\n });\n }\n\n #getObjectConfig(type?: VirtualObjectType, bucket?: string): ResolvedObjectConfig | undefined {\n const dmsObject = this.dmsObject();\n return dmsObject\n ? this.#objectConfigService.getResolvedObjectConfig(\n dmsObject.data,\n type || {\n id: dmsObject.objectTypeId,\n objectType: dmsObject.objectTypeId\n },\n bucket,\n true\n )\n : undefined;\n }\n\n #getHeaderData() {\n const oc = this.#getObjectConfig(this.configType()?.type, this.configType()?.bucket);\n const dmsObject = this.dmsObject();\n if (oc && dmsObject) {\n this.headerData.update((data) => ({\n ...data,\n title: oc.title.value,\n description: oc.description?.value,\n icon: {\n title: oc.title.value,\n ...(oc.icon ? { name: oc.icon.value } : undefined)\n }\n }));\n } else this.headerData.set(undefined);\n }\n}\n","@let imageSlide = slide();\n<section class=\"slide\" [yuvBusyOverlay]=\"imageSlide.loading\">\n @if (imageSlide.uri || imageSlide.loading) {\n <img draggable=\"false\" [ngClass]=\"{ loading: imageSlide.loading }\" [attr.data-orientation]=\"imageSlide.orientation\" [src]=\"imageSlide.uri\" />\n } @else if (imageSlide.icon && imageSlide.icon.name) {\n <mat-icon draggable=\"false\" class=\"ymt-icon--size-6xl\">{{ imageSlide.icon.name }}</mat-icon>\n }\n @if (folderInfo) {\n <div class=\"badge\">\n {{ folderInfo.size }}\n </div>\n }\n</section>\n\n@let o = dmsObject();\n@if (o) {\n <section class=\"object-flavors\">\n <yuv-object-flavor [dmsObject]=\"o\" (flavorSelect)=\"onFlavorSelect($event)\"></yuv-object-flavor>\n </section>\n}\n\n<div class=\"content\">\n @let header = headerData();\n <section class=\"title\">\n <h2>{{ header?.title }}</h2>\n\n <div class=\"actions\">\n <yuv-overflow-menu [menuItems]=\"actions()\"></yuv-overflow-menu>\n </div>\n </section>\n\n @if (o) {\n <section class=\"badges\">\n <yuv-retention-badge [dmsObject]=\"o\"></yuv-retention-badge>\n </section>\n\n <yuv-object-summary-data [dmsObject]=\"o\" [flavors]=\"flavors\"></yuv-object-summary-data>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { MultiObjectSummaryComponent } from './multi-object-summary/multi-object-summary.component';\nimport { ObjectSummaryDataComponent } from './object-summary-data/object-summary-data.component';\nimport { ObjectSummaryComponent } from './object-summary/object-summary.component';\n\nconst cmp = [ObjectSummaryComponent, MultiObjectSummaryComponent, ObjectSummaryDataComponent];\n@NgModule({\n imports: cmp,\n exports: cmp\n})\nexport class YuvObjectSummaryModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { input, Component, inject, computed, ChangeDetectionStrategy, signal, Injectable, effect, ViewContainerRef, Directive } from '@angular/core';
|
|
3
|
-
import { TranslateService, LocalizationService, SystemService, LocaleDatePipe, FileSizePipe, IdmService, AppCacheService, FREE_TEXT_OPTION, STORAGE_ROLES_KEY, USER_ID_REGEX, STORAGE_USERS_KEY, TranslatePipe, InternalFieldType, ContentStreamField } from '@yuuvis/client-core';
|
|
3
|
+
import { TranslateService, LocalizationService, SystemService, LocaleDatePipe, CatalogLabelService, FileSizePipe, IdmService, AppCacheService, FREE_TEXT_OPTION, STORAGE_ROLES_KEY, USER_ID_REGEX, STORAGE_USERS_KEY, TranslatePipe, InternalFieldType, ContentStreamField } from '@yuuvis/client-core';
|
|
4
4
|
import { MatIcon, MatIconRegistry } from '@angular/material/icon';
|
|
5
5
|
import { takeUntilDestroyed, rxResource } from '@angular/core/rxjs-interop';
|
|
6
6
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
@@ -178,13 +178,19 @@ class AbstractRendererComponent {
|
|
|
178
178
|
this.propertyName = input.required(...(ngDevMode ? [{ debugName: "propertyName" }] : /* istanbul ignore next */ []));
|
|
179
179
|
this.value = input.required(...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
180
180
|
this.meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : /* istanbul ignore next */ []));
|
|
181
|
+
/**
|
|
182
|
+
* ID of the object type (or secondary object type) the property is rendered for, when known.
|
|
183
|
+
* Some schema attributes — most notably the dynamic `catalog` a property is bound to — may be
|
|
184
|
+
* overridden per type, and can only be resolved with that context.
|
|
185
|
+
*/
|
|
186
|
+
this.objectTypeId = input(undefined, ...(ngDevMode ? [{ debugName: "objectTypeId" }] : /* istanbul ignore next */ []));
|
|
181
187
|
}
|
|
182
188
|
#system;
|
|
183
189
|
getProperty() {
|
|
184
190
|
return this.#system.system?.allFields[this.propertyName()];
|
|
185
191
|
}
|
|
186
192
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: AbstractRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
187
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.20", type: AbstractRendererComponent, isStandalone: true, selector: "yuv-abstract-renderer", inputs: { propertyName: { classPropertyName: "propertyName", publicName: "propertyName", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true }); }
|
|
193
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.20", type: AbstractRendererComponent, isStandalone: true, selector: "yuv-abstract-renderer", inputs: { propertyName: { classPropertyName: "propertyName", publicName: "propertyName", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null }, objectTypeId: { classPropertyName: "objectTypeId", publicName: "objectTypeId", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true }); }
|
|
188
194
|
}
|
|
189
195
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: AbstractRendererComponent, decorators: [{
|
|
190
196
|
type: Component,
|
|
@@ -192,7 +198,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
192
198
|
selector: 'yuv-abstract-renderer',
|
|
193
199
|
template: ''
|
|
194
200
|
}]
|
|
195
|
-
}], propDecorators: { propertyName: [{ type: i0.Input, args: [{ isSignal: true, alias: "propertyName", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], meta: [{ type: i0.Input, args: [{ isSignal: true, alias: "meta", required: false }] }] } });
|
|
201
|
+
}], propDecorators: { propertyName: [{ type: i0.Input, args: [{ isSignal: true, alias: "propertyName", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], meta: [{ type: i0.Input, args: [{ isSignal: true, alias: "meta", required: false }] }], objectTypeId: [{ type: i0.Input, args: [{ isSignal: true, alias: "objectTypeId", required: false }] }] } });
|
|
196
202
|
|
|
197
203
|
class BooleanRendererComponent extends AbstractRendererComponent {
|
|
198
204
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: BooleanRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
@@ -204,12 +210,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
204
210
|
}] });
|
|
205
211
|
|
|
206
212
|
class DateTimeRendererComponent extends AbstractRendererComponent {
|
|
213
|
+
constructor() {
|
|
214
|
+
super(...arguments);
|
|
215
|
+
/**
|
|
216
|
+
* Fields declared with `resolution: 'date'` hold a calendar day, so rendering them with the
|
|
217
|
+
* default `short` format would invent a time that is not stored anywhere.
|
|
218
|
+
*/
|
|
219
|
+
this.dateOnly = computed(() => this.getProperty()?.resolution === 'date', ...(ngDevMode ? [{ debugName: "dateOnly" }] : /* istanbul ignore next */ []));
|
|
220
|
+
}
|
|
207
221
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: DateTimeRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
208
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.20", type: DateTimeRendererComponent, isStandalone: true, selector: "yuv-datetime-renderer", usesInheritance: true, ngImport: i0, template:
|
|
222
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.20", type: DateTimeRendererComponent, isStandalone: true, selector: "yuv-datetime-renderer", usesInheritance: true, ngImport: i0, template: `{{ (value() || undefined) | localeDate: (dateOnly() ? 'shortDate' : 'short') }}`, isInline: true, styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"], dependencies: [{ kind: "pipe", type: LocaleDatePipe, name: "localeDate" }] }); }
|
|
209
223
|
}
|
|
210
224
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: DateTimeRendererComponent, decorators: [{
|
|
211
225
|
type: Component,
|
|
212
|
-
args: [{ selector: 'yuv-datetime-renderer', imports: [LocaleDatePipe], template:
|
|
226
|
+
args: [{ selector: 'yuv-datetime-renderer', imports: [LocaleDatePipe], template: `{{ (value() || undefined) | localeDate: (dateOnly() ? 'shortDate' : 'short') }}`, styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"] }]
|
|
213
227
|
}] });
|
|
214
228
|
|
|
215
229
|
class DecimalRendererComponent extends AbstractRendererComponent {
|
|
@@ -221,6 +235,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
221
235
|
args: [{ selector: 'yuv-decimal-renderer', template: '{{value()}}', styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"] }]
|
|
222
236
|
}] });
|
|
223
237
|
|
|
238
|
+
/**
|
|
239
|
+
* Renders the value(s) of a dynamic catalog field (schema field carrying a `catalog` reference).
|
|
240
|
+
*
|
|
241
|
+
* Those fields store the technical entry name, so the label has to be resolved from the catalog
|
|
242
|
+
* entry's localizations — the same resolution `yuv-dynamic-catalog` does for the form element.
|
|
243
|
+
* The entries are fetched and cached by `CatalogLabelService` (once per catalog, not once per
|
|
244
|
+
* renderer instance — a summary or tile list mounts many rows of the same catalog).
|
|
245
|
+
* Values without a matching entry fall back to the technical value.
|
|
246
|
+
*/
|
|
247
|
+
class DynamicCatalogRendererComponent extends AbstractRendererComponent {
|
|
248
|
+
constructor() {
|
|
249
|
+
super(...arguments);
|
|
250
|
+
this.#catalogLabels = inject(CatalogLabelService);
|
|
251
|
+
// The catalog is read from the schema field — it is not necessarily named like the property,
|
|
252
|
+
// and the type it is rendered for may override it, hence the objectTypeId.
|
|
253
|
+
this.#catalogName = computed(() => this.#catalogLabels.getCatalogName(this.propertyName(), this.objectTypeId()), ...(ngDevMode ? [{ debugName: "#catalogName" }] : /* istanbul ignore next */ []));
|
|
254
|
+
// Component effects run before the view is refreshed, so the entries are already being
|
|
255
|
+
// fetched by the time `label` is first evaluated.
|
|
256
|
+
this.#loadEntries = effect(() => {
|
|
257
|
+
const catalogName = this.#catalogName();
|
|
258
|
+
if (catalogName)
|
|
259
|
+
this.#catalogLabels.load(catalogName);
|
|
260
|
+
}, ...(ngDevMode ? [{ debugName: "#loadEntries" }] : /* istanbul ignore next */ []));
|
|
261
|
+
this.label = computed(() => {
|
|
262
|
+
const value = this.value();
|
|
263
|
+
if (value === null || value === undefined)
|
|
264
|
+
return '';
|
|
265
|
+
// Catalog fields may be multi-select, in which case the value is an array of technical values.
|
|
266
|
+
const values = Array.isArray(value) ? value : [value];
|
|
267
|
+
const catalogName = this.#catalogName();
|
|
268
|
+
// Not catalog backed after all — nothing to resolve against.
|
|
269
|
+
if (!catalogName)
|
|
270
|
+
return values.join(', ');
|
|
271
|
+
// Don't flash the technical value while the entries are on their way.
|
|
272
|
+
if (this.#catalogLabels.isLoading(catalogName))
|
|
273
|
+
return '';
|
|
274
|
+
return values.map((val) => this.#catalogLabels.getLabel(catalogName, val) ?? val).join(', ');
|
|
275
|
+
}, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
276
|
+
}
|
|
277
|
+
#catalogLabels;
|
|
278
|
+
// The catalog is read from the schema field — it is not necessarily named like the property,
|
|
279
|
+
// and the type it is rendered for may override it, hence the objectTypeId.
|
|
280
|
+
#catalogName;
|
|
281
|
+
// Component effects run before the view is refreshed, so the entries are already being
|
|
282
|
+
// fetched by the time `label` is first evaluated.
|
|
283
|
+
#loadEntries;
|
|
284
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: DynamicCatalogRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
285
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.20", type: DynamicCatalogRendererComponent, isStandalone: true, selector: "yuv-dynamic-catalog-renderer", usesInheritance: true, ngImport: i0, template: '{{ label() }}', isInline: true, styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
286
|
+
}
|
|
287
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: DynamicCatalogRendererComponent, decorators: [{
|
|
288
|
+
type: Component,
|
|
289
|
+
args: [{ selector: 'yuv-dynamic-catalog-renderer', template: '{{ label() }}', changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"] }]
|
|
290
|
+
}] });
|
|
291
|
+
|
|
224
292
|
class FileSizeRendererComponent extends AbstractRendererComponent {
|
|
225
293
|
constructor() {
|
|
226
294
|
super(...arguments);
|
|
@@ -523,7 +591,7 @@ class TableRendererComponent extends AbstractRendererComponent {
|
|
|
523
591
|
#cellValue(element) {
|
|
524
592
|
switch (element.propertyType) {
|
|
525
593
|
case 'datetime':
|
|
526
|
-
return this.#datePipe.transform(element.value, 'short', undefined, this.translate.getCurrentLang());
|
|
594
|
+
return this.#datePipe.transform(element.value, this.#isDateOnly(element.propertyName) ? 'shortDate' : 'short', undefined, this.translate.getCurrentLang());
|
|
527
595
|
case 'string':
|
|
528
596
|
return element.value;
|
|
529
597
|
case 'decimal':
|
|
@@ -532,6 +600,15 @@ class TableRendererComponent extends AbstractRendererComponent {
|
|
|
532
600
|
return element.value;
|
|
533
601
|
}
|
|
534
602
|
}
|
|
603
|
+
/**
|
|
604
|
+
* Whether the given table column holds a calendar day (`resolution: 'date'`) and therefore must
|
|
605
|
+
* be rendered without a time. The column definitions of the table field are authoritative; the
|
|
606
|
+
* global property definition is only a fallback for tables that are not part of the schema.
|
|
607
|
+
*/
|
|
608
|
+
#isDateOnly(propertyName) {
|
|
609
|
+
const column = this.getProperty()?.columnDefinitions?.find((c) => c.id === propertyName);
|
|
610
|
+
return (column ?? this.#system.system?.allFields[propertyName])?.resolution === 'date';
|
|
611
|
+
}
|
|
535
612
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: TableRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
536
613
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: TableRendererComponent, isStandalone: true, selector: "yuv-table-renderer", providers: [DecimalPipe, DatePipe], usesInheritance: true, ngImport: i0, template: "<div class=\"table-container\">\n <table>\n <thead>\n <tr>\n @for (header of tableHeaders(); track header.id) {\n <th>{{ header.label }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of tableData(); track $index) {\n <tr>\n @for (header of tableHeaders(); track header.id) {\n <td>{{ getCellValue(row, header.key) }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (reducedData()) {\n <p>{{ 'yuv.table.renderer.moreEntries' | translate: { count: value()?.length } }}</p>\n }\n</div>\n", styles: [":host{display:flex;padding:var(--tile-slot-padding);width:100%}.table-container{width:100%;overflow-x:auto;max-width:100%}table{width:100%;border-collapse:collapse;min-width:400px}th,td{padding:8px;text-align:left;border-bottom:1px solid var(--ymt-outline-variant);word-break:normal}th{background-color:var(--object-summary-section-background, var(--ymt-surface));font-weight:700}tr:hover{background-color:var(--ymt-hover-background)}\n"], dependencies: [{ kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
537
614
|
}
|
|
@@ -572,10 +649,14 @@ class RendererService {
|
|
|
572
649
|
};
|
|
573
650
|
initialRenderers[InternalFieldType.STRING_ORGANIZATION] = OrganizationRendererComponent;
|
|
574
651
|
initialRenderers[InternalFieldType.STRING_ORGANIZATION_SET] = OrganizationRendererComponent;
|
|
575
|
-
//
|
|
576
|
-
//
|
|
577
|
-
//
|
|
652
|
+
// i18n and dynamic catalogs store a technical value, so both need a renderer that resolves
|
|
653
|
+
// the label — from the localization resources for i18n catalogs, from the catalog entry's
|
|
654
|
+
// localizations for dynamic ones. Static catalogs (`catalog[...]`) store the literal label,
|
|
655
|
+
// so the plain string renderer is enough — but it has to be registered explicitly, otherwise
|
|
656
|
+
// the type falls through to `UnknownRendererComponent`.
|
|
578
657
|
initialRenderers[InternalFieldType.STRING_CATALOG_I18N] = I18nCatalogRendererComponent;
|
|
658
|
+
initialRenderers[InternalFieldType.STRING_DYNAMIC_CATALOG] = DynamicCatalogRendererComponent;
|
|
659
|
+
initialRenderers[InternalFieldType.STRING_CATALOG] = StringRendererComponent;
|
|
579
660
|
initialRenderers[ContentStreamField.LENGTH] = FileSizeRendererComponent;
|
|
580
661
|
this.#renderers.set(initialRenderers);
|
|
581
662
|
}
|
|
@@ -587,11 +668,12 @@ class RendererService {
|
|
|
587
668
|
// try to find a renderer based on property and object type
|
|
588
669
|
let r = this.#renderers()[this._getKey(propertyName, typeName)];
|
|
589
670
|
if (!r) {
|
|
590
|
-
//
|
|
591
|
-
//
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
671
|
+
// no special renderer found, so we'll try to get one for the internal type of the given
|
|
672
|
+
// property. Resolved for `typeName` when it is known: a type may bind a shared property to
|
|
673
|
+
// its own dynamic catalog, and only then does the field render as a catalog at all.
|
|
674
|
+
const field = this.system.getObjectTypeField(propertyName, typeName);
|
|
675
|
+
if (field) {
|
|
676
|
+
r = this.getRendererByType(field._internalType);
|
|
595
677
|
}
|
|
596
678
|
}
|
|
597
679
|
return r || UnknownRendererComponent;
|
|
@@ -683,11 +765,13 @@ class RendererDirective {
|
|
|
683
765
|
this.#containerRef.clear();
|
|
684
766
|
const cmp = i.rendererType
|
|
685
767
|
? this.#rendererService.getRendererByType(i.rendererType)
|
|
686
|
-
: this.#rendererService.getRenderer(i.propertyName);
|
|
768
|
+
: this.#rendererService.getRenderer(i.propertyName, i.objectTypeId);
|
|
687
769
|
this.component = this.#containerRef.createComponent(cmp);
|
|
688
770
|
// pass inputs to the renderer. As they are signals they need an injection context
|
|
689
771
|
this.component.setInput('propertyName', i.propertyName);
|
|
690
772
|
this.component.setInput('value', i.value);
|
|
773
|
+
if (i.objectTypeId)
|
|
774
|
+
this.component.setInput('objectTypeId', i.objectTypeId);
|
|
691
775
|
if (i.meta)
|
|
692
776
|
this.component.setInput('meta', i.meta);
|
|
693
777
|
}
|
|
@@ -719,5 +803,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
719
803
|
* Generated bundle index. Do not edit.
|
|
720
804
|
*/
|
|
721
805
|
|
|
722
|
-
export { AbstractAuditRendererComponent, AbstractRendererComponent, AuditRendererDirective, AuditRendererService, BooleanRendererComponent, DateTimeRendererComponent, DecimalRendererComponent, DefaultAuditRendererComponent, FileSizeRendererComponent, I18nCatalogRendererComponent, IconRendererComponent, IntegerRendererComponent, OrganizationRendererComponent, RendererDirective, RendererService, StringRendererComponent, TableRendererComponent, UnknownRendererComponent };
|
|
806
|
+
export { AbstractAuditRendererComponent, AbstractRendererComponent, AuditRendererDirective, AuditRendererService, BooleanRendererComponent, DateTimeRendererComponent, DecimalRendererComponent, DefaultAuditRendererComponent, DynamicCatalogRendererComponent, FileSizeRendererComponent, I18nCatalogRendererComponent, IconRendererComponent, IntegerRendererComponent, OrganizationRendererComponent, RendererDirective, RendererService, StringRendererComponent, TableRendererComponent, UnknownRendererComponent };
|
|
723
807
|
//# sourceMappingURL=yuuvis-client-framework-renderer.mjs.map
|