@yuuvis/client-framework 3.5.0 → 3.6.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 +13 -74
- package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-renderer.mjs +192 -3
- package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -1
- package/package.json +5 -5
- package/renderer/README.md +212 -2
- package/types/yuuvis-client-framework-object-details.d.ts +1 -9
- package/types/yuuvis-client-framework-renderer.d.ts +63 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-framework-renderer.mjs","sources":["../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/abstract.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/boolean.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/datetime.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/decimal.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/filesize.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/icon-renderer/icon.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/icon-renderer/icon.renderer.component.html","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/integer.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/organization-renderer/organization.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/organization-renderer/organization.renderer.component.html","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/string.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/table-renderer/table.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/table-renderer/table.renderer.component.html","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/unknown.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/services/renderer/renderer.service.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/directives/renderer.directive.ts","../../../../../libs/yuuvis/client-framework/renderer/src/yuuvis-client-framework-renderer.ts"],"sourcesContent":["import { Component, inject, input } from '@angular/core';\nimport { SchemaResponseFieldDefinition, SystemService } from '@yuuvis/client-core';\n\n/**\n * Abstract class to be extended by property renderers\n */\n@Component({\n selector: 'yuv-abstract-renderer',\n template: ''\n})\nexport abstract class AbstractRendererComponent<T = string, U = null> {\n #system = inject(SystemService);\n\n propertyName = input.required<string>();\n value = input.required<T | null>();\n meta = input<Record<string, unknown> | U>();\n\n protected getProperty(): SchemaResponseFieldDefinition | undefined {\n return this.#system.system?.allFields[this.propertyName()];\n }\n}\n","import { Component } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-boolean-renderer',\n imports: [MatIcon],\n template: ` <mat-icon>{{ value() ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>`,\n styles: [\n `\n :host {\n display: flex;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class BooleanRendererComponent extends AbstractRendererComponent {}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\nimport { LocaleDatePipe } from '@yuuvis/client-core';\n\n@Component({\n selector: 'yuv-datetime-renderer',\n imports: [LocaleDatePipe],\n template: '{{(value() || undefined) | localeDate}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class DateTimeRendererComponent extends AbstractRendererComponent<Date> {}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-decimal-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class DecimalRendererComponent extends AbstractRendererComponent<number> {\n // TODO: deal with precision and scale\n}\n","import { Component, computed } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\nimport { FileSizePipe } from '@yuuvis/client-core';\n\n@Component({\n selector: 'yuv-string-renderer',\n imports: [FileSizePipe],\n template: '{{parsedValue() | fileSize}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class FileSizeRendererComponent extends AbstractRendererComponent {\n parsedValue = computed<number>(() => {\n let n = 0;\n const v = this.value();\n if (v)\n try {\n n = parseInt(v);\n } catch (e) {\n console.error(e);\n }\n return n;\n });\n}\n","import { Component, effect, inject } from '@angular/core';\nimport { MatIcon, MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ObjectTypeIconComponent } from '@yuuvis/client-framework/icons';\nimport { AbstractRendererComponent } from '../abstract.renderer';\n\n@Component({\n selector: 'yuv-icon-renderer',\n imports: [ObjectTypeIconComponent, MatIcon],\n templateUrl: `./icon.renderer.component.html`,\n styleUrls: ['./icon.renderer.component.scss']\n})\nexport class IconRendererComponent extends AbstractRendererComponent {\n readonly #iconRegistry = inject(MatIconRegistry);\n\n readonly #sanitizer = inject(DomSanitizer);\n protected readonly customId = crypto.randomUUID();\n\n #registerIconsEffect = effect(async () => {\n const meta = this.meta();\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.propertyName() === 'custom' &&\n !meta?.['isFontIcon'] &&\n this.#iconRegistry.addSvgIconLiteral(\n this.customId,\n this.#sanitizer.bypassSecurityTrustHtml(this.value() as string)\n );\n });\n}\n","@let icon = value();\n@if (propertyName() !== 'custom') {\n <yuv-object-type-icon [objectTypeId]=\"icon || ''\"></yuv-object-type-icon>\n} @else if (icon !== null) {\n @let metaData = meta();\n @if (metaData && metaData['isFontIcon']) {\n <mat-icon>{{ icon }}</mat-icon>\n } @else {\n <mat-icon [svgIcon]=\"customId\"></mat-icon>\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-integer-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class IntegerRendererComponent extends AbstractRendererComponent<number> {}\n","import { Component, computed, inject } from '@angular/core';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport { AppCacheService, IdmService, YuvUser } from '@yuuvis/client-core';\nimport { catchError, forkJoin, map, of, switchMap } from 'rxjs';\nimport { AbstractRendererComponent } from '../abstract.renderer';\n\n@Component({\n selector: 'yuv-organization-renderer',\n templateUrl: './organization.renderer.component.html',\n styleUrls: ['./organization.renderer.component.scss']\n})\nexport class OrganizationRendererComponent extends AbstractRendererComponent {\n readonly #idmService = inject(IdmService);\n readonly #appCache = inject(AppCacheService);\n\n readonly #STORAGE_USER_KEY = 'yuv.core.users.storage';\n readonly #STORAGE_ROLES_KEY = 'yuv.core.roles.storage';\n\n // Input may be a single id/role-name or an array of them; normalize to string[] so the resolver\n // pipeline always works on a uniform shape.\n resolvedValue = computed<string[]>(() => {\n const value = this.value();\n return value === null ? [] : Array.isArray(value) ? value : [value];\n });\n\n #userRoleResolver = rxResource({\n params: this.resolvedValue,\n stream: ({ params }) => {\n // Nothing to resolve — short-circuit so we don't show the loading indicator or hit the\n // backend for an empty input.\n if (params.length === 0) {\n return of<{ type: string; label: string | undefined }[]>([]);\n }\n // Step 1 — load the role catalog (cached) and use it to partition the input into role\n // names vs. user IDs. Roles are a closed set; anything that doesn't match is treated as\n // a user ID and resolved in step 2.\n // TODO: Move get Roles to App init or somewhere else to avoid multiple calls\n return this.#appCache.getItem<{ name: string; description: string }[]>(this.#STORAGE_ROLES_KEY).pipe(\n switchMap((cachedRoles) =>\n (cachedRoles\n ? of(cachedRoles)\n : this.#idmService.getRoles().pipe(\n // Only persist the role list when the backend actually returned something —\n // caching an empty array would mask later successful fetches.\n switchMap((roles) =>\n roles.length ? this.#appCache.setItem(this.#STORAGE_ROLES_KEY, roles).pipe(map(() => roles)) : of([])\n )\n )\n ).pipe(\n map((roles) =>\n params.reduce(\n (acc: { roles: string[]; users: string[] }, value: string) => {\n const matchingRole = roles.find((role) => role.name === value);\n // Role-name match → roles bucket; everything else is assumed to be a user ID.\n if (matchingRole) {\n acc.roles.push(matchingRole.name);\n } else {\n acc.users.push(value);\n }\n return acc;\n },\n { roles: [], users: [] }\n )\n )\n )\n ),\n // Step 2a — pull the persisted user cache. Defensive filter against null entries that\n // may linger from earlier buggy writes (see commit 2f3ff694f).\n switchMap(({ roles, users }) =>\n this.#appCache\n .getItem<YuvUser[]>(this.#STORAGE_USER_KEY)\n .pipe(\n map((cache) =>\n cache ? { roles, users, cache: cache.filter((entry) => entry !== null) } : { roles, users, cache: null }\n )\n )\n ),\n // Step 2b — resolve users: serve from cache where possible, fetch the rest from IDM.\n switchMap(({ roles, users, cache }) => {\n let missingUsers: string[] = users;\n let filteredUsers: YuvUser[] = [];\n if (cache) {\n filteredUsers = cache.filter((entry) => entry && users.includes(entry.id));\n missingUsers = users.filter((uid: string) => !filteredUsers.some((user) => user.id === uid));\n }\n // Pair every request with its uid so we can tell which IDs came back unresolved.\n // catchError keeps a single failing lookup from killing the whole forkJoin.\n const userRequests = missingUsers.map((uid: string) =>\n this.#idmService.getUserById(uid).pipe(\n catchError(() => of(null)),\n map((user) => ({ uid, user }))\n )\n );\n\n if (userRequests.length > 0) {\n return forkJoin(userRequests).pipe(\n switchMap((results) => {\n // Resolved users are real YuvUsers — safe to cache and render.\n // Unresolved IDs render as a synthetic { id, title: id } so the user still\n // sees the raw ID, but they are NOT written to the cache (a 404 today might\n // resolve tomorrow, and caching it would block that).\n const resolved = results.filter((res) => res.user != null).map((res) => res.user as YuvUser);\n const unresolved = results\n .filter((res) => res.user == null)\n .map((res) => ({ id: res.uid, title: res.uid }) as YuvUser);\n return this.#appCache\n .setItem(this.#STORAGE_USER_KEY, [...(cache || []), ...resolved, ...filteredUsers])\n .pipe(map(() => [...resolved, ...unresolved]));\n }),\n map((users) => ({ roles, users: [...users, ...filteredUsers] }))\n );\n } else {\n // Every requested user was already in the cache — no network needed.\n return of({ roles, users: [...filteredUsers] });\n }\n }),\n // Step 3 — project to the flat render-model the template iterates over. data-type\n // drives the chip styling (user vs role).\n map(({ roles, users }) => {\n const userNodes = users.map((user: YuvUser & { displayName?: string }) => ({\n type: 'user',\n label: user.title || user.displayName\n }));\n const roleNodes = roles.map((role: string) => ({\n type: 'role',\n label: role\n }));\n return [...userNodes, ...roleNodes];\n })\n );\n },\n defaultValue: []\n });\n\n userAndRole = this.#userRoleResolver.value;\n userAndRoleLoading = this.#userRoleResolver.isLoading;\n}\n","@if (userAndRoleLoading()) {\n <span class=\"loading\"><i>.</i><i>.</i><i>.</i></span>\n} @else {\n @for (node of userAndRole(); track $index) {\n <span class=\"node\" [attr.data-type]=\"node.type\">{{ node.label }}</span>\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-string-renderer',\n template: `{{ value() }}`,\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class StringRendererComponent extends AbstractRendererComponent {}\n","import { DatePipe, DecimalPipe } from '@angular/common';\nimport { Component, computed, inject } from '@angular/core';\nimport { SystemService, TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { AbstractRendererComponent } from '../abstract.renderer';\n\n@Component({\n selector: 'yuv-table-renderer',\n standalone: true,\n imports: [TranslatePipe],\n templateUrl: `./table.renderer.component.html`,\n styleUrls: ['./table.renderer.component.scss'],\n providers: [DecimalPipe, DatePipe]\n})\nexport class TableRendererComponent extends AbstractRendererComponent<any[]> {\n readonly #system = inject(SystemService);\n readonly translate = inject(TranslateService);\n readonly #decimalPipe = inject(DecimalPipe);\n readonly #datePipe = inject(DatePipe);\n\n protected tableHeaders = computed(() => [\n ...new Set(\n (this.value() || []).flat().map((item) => ({\n id: `header-${crypto.randomUUID()}`,\n key: item.propertyName,\n label: this.#system.getLocalizedLabel(`${item.propertyName}`) || item.propertyName\n }))\n )\n ]);\n\n protected tableData = computed(() => {\n const data = this.value() || [];\n return (data.length > 10 ? data.slice(0, 10) : data).map((row, rowIndex) =>\n row.map((item: any) => ({\n id: `row-${rowIndex}-cell-${crypto.randomUUID()}`,\n ...item,\n value: this.#cellValue(item)\n }))\n );\n });\n\n protected reducedData = computed(() => {\n const data = this.value() || [];\n return data.length > 10;\n });\n\n protected getCellValue(row: any[], key: string): string {\n const item = (row || []).find((i) => i.propertyName === key);\n return item ? item.value : '';\n }\n\n #cellValue(element: { propertyType: string; value: string }): string | null {\n switch (element.propertyType) {\n case 'datetime':\n return this.#datePipe.transform(element.value, 'short', undefined, this.translate.getCurrentLang());\n case 'string':\n return element.value;\n case 'decimal':\n return this.#decimalPipe.transform(element.value, '1.2-4', this.translate.getCurrentLang());\n default:\n return element.value;\n }\n }\n}\n","<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","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-unknown-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class UnknownRendererComponent extends AbstractRendererComponent<any> {}\n","import { Injectable, Type, inject, signal } from '@angular/core';\nimport {\n ContentStreamField,\n InternalFieldType,\n RendererType,\n SchemaResponseFieldDefinition,\n SystemService\n} from '@yuuvis/client-core';\nimport {\n AbstractRendererComponent,\n BooleanRendererComponent,\n DateTimeRendererComponent,\n DecimalRendererComponent,\n FileSizeRendererComponent,\n IconRendererComponent,\n IntegerRendererComponent,\n OrganizationRendererComponent,\n StringRendererComponent,\n TableRendererComponent,\n UnknownRendererComponent\n} from '../../property-renderer';\nimport { RendererComponent } from './renderer.interface';\n\n/**\n * Service for managing property type renderers. Renderers are components that will render certain\n * property types.\n *\n * You are able to register your own renderer to overwrite an existing one or provide a custom\n * renderer for your context.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RendererService {\n private system = inject(SystemService);\n\n #renderers = signal<Record<string, Type<RendererComponent>>>({});\n\n constructor() {\n const initialRenderers: Record<string, Type<RendererComponent>> = {\n integer: IntegerRendererComponent,\n decimal: DecimalRendererComponent,\n datetime: DateTimeRendererComponent,\n icon: IconRendererComponent,\n string: StringRendererComponent,\n boolean: BooleanRendererComponent,\n table: TableRendererComponent\n };\n initialRenderers[InternalFieldType.STRING_ORGANIZATION] = OrganizationRendererComponent;\n initialRenderers[InternalFieldType.STRING_ORGANIZATION_SET] = OrganizationRendererComponent;\n initialRenderers[ContentStreamField.LENGTH] = FileSizeRendererComponent;\n this.#renderers.set(initialRenderers);\n }\n\n getRendererByType(type: RendererType): Type<RendererComponent> {\n const r = this.#renderers();\n return r[type] || UnknownRendererComponent;\n }\n\n getRenderer(propertyName: string, typeName?: string): Type<RendererComponent> {\n // try to find a renderer based on property and object type\n let r = this.#renderers()[this._getKey(propertyName, typeName)];\n if (!r) {\n // not special renderer found so we'll try to get one for the internal type\n // of the given property\n const srf: SchemaResponseFieldDefinition | undefined =\n this.system.system && this.system.system.allFields[propertyName];\n\n if (srf) {\n r = this.getRendererByType(\n this.system.getInternalFormElementType(srf.propertyType, srf.classifications, srf.catalog)\n );\n }\n }\n\n return r || UnknownRendererComponent;\n }\n\n /**\n * Register a renderer for a particular property. Providing `typeName` will register that renderer\n * for a certain context (use same inputs when calling `getRenderer()`).\n * @param cmp The component to actually render the property\n * @param propertyName property name (used for registering the renderer for a certain context)\n * @param typeName Optional type name (used for registering the renderer for a certain context)\n */\n registerRenderer(cmp: Type<AbstractRendererComponent>, propertyName: string, typeName?: string) {\n this.#renderers.update((curr) => ({ ...curr, ...{ [this._getKey(propertyName, typeName)]: cmp } }));\n }\n\n /**\n *\n * @param type The type of property this renderer is supposed to be used for\n */\n registerRendererByType(type: RendererType, cmp: Type<RendererComponent>) {\n this.#renderers.update((curr) => ({ ...curr, ...{ [type]: cmp } }));\n }\n\n // Generate the unique key for a renderer\n private _getKey(propertyName: string, typeName?: string): string {\n const k = [propertyName];\n typeName && k.push(typeName);\n return k.join('-');\n }\n}\n","import { ComponentRef, Directive, Type, ViewContainerRef, effect, inject, input } from '@angular/core';\nimport { RendererComponent, RendererDirectiveInput, RendererService } from '../services';\n/**\n * Structural directive for rendering an obect type property\n */\n@Directive({\n selector: '[yuvRenderer]',\n standalone: true\n})\nexport class RendererDirective {\n #rendererService = inject(RendererService);\n #containerRef = inject(ViewContainerRef);\n\n component!: ComponentRef<RendererComponent>;\n #rendererInput?: RendererDirectiveInput;\n yuvRenderer = input<RendererDirectiveInput | undefined>(undefined);\n\n #yuvRendererEffect = effect(() => {\n const i = this.yuvRenderer();\n if (i && !this.#alreadyRendered(i)) {\n this.#rendererInput = i;\n this.#containerRef.clear();\n const cmp: Type<RendererComponent> = i.rendererType\n ? this.#rendererService.getRendererByType(i.rendererType)\n : this.#rendererService.getRenderer(i.propertyName);\n\n this.component = this.#containerRef.createComponent(cmp);\n // pass inputs to the renderer. As they are signals they need an injection context\n this.component.setInput('propertyName', i.propertyName);\n this.component.setInput('value', i.value);\n if (i.meta) this.component.setInput('meta', i.meta);\n } else if (!i) {\n this.#containerRef.clear();\n this.#rendererInput = undefined;\n }\n });\n\n #alreadyRendered(i: RendererDirectiveInput): boolean {\n return !!this.#rendererInput && JSON.stringify(this.#rendererInput) === JSON.stringify(i);\n }\n}\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-renderer.mjs","sources":["../../../../../libs/yuuvis/client-framework/renderer/src/lib/audit-renderer/abstract-audit.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/audit-renderer/default-audit.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/services/audit-renderer/audit-renderer.service.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/abstract.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/boolean.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/datetime.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/decimal.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/filesize.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/icon-renderer/icon.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/icon-renderer/icon.renderer.component.html","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/integer.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/organization-renderer/organization.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/organization-renderer/organization.renderer.component.html","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/string.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/table-renderer/table.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/table-renderer/table.renderer.component.html","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/unknown.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/services/renderer/renderer.service.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/directives/audit-renderer.directive.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/directives/renderer.directive.ts","../../../../../libs/yuuvis/client-framework/renderer/src/yuuvis-client-framework-renderer.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\nimport { AuditEntry } from '@yuuvis/client-core';\n\n/**\n * Abstract class to be extended by audit-entry renderers. The renderer controls the\n * inner content of an audit timeline entry; the surrounding framing (date column,\n * timeline line, version badge, creator) stays with the host component.\n */\n@Component({\n selector: 'yuv-abstract-audit-renderer',\n template: ''\n})\nexport abstract class AbstractAuditRendererComponent {\n auditEntry = input.required<AuditEntry>();\n}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { AuditEntry, LocalizationService, TranslateService } from '@yuuvis/client-core';\nimport { AbstractAuditRendererComponent } from './abstract-audit.renderer';\n\ninterface ResolvedAuditLabel {\n label: string;\n more?: string;\n}\n\n@Component({\n selector: 'yuv-default-audit-renderer',\n standalone: true,\n template: `\n @let r = resolved();\n <span class=\"title\">{{ r.label }}</span>\n @if (r.more) {\n <div class=\"more meta\">{{ r.more }}</div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DefaultAuditRendererComponent extends AbstractAuditRendererComponent {\n readonly #translate = inject(TranslateService);\n readonly #localization = inject(LocalizationService);\n\n readonly #auditLabels: Record<string, string> = {\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'),\n a202: this.#translate.instant('yuv.audit.label.delete.marked'),\n a210: this.#translate.instant('yuv.audit.label.delete.tag'),\n a220: this.#translate.instant('yuv.audit.label.delete.version'),\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 protected resolved = computed<ResolvedAuditLabel>(() => this.#resolve(this.auditEntry()));\n\n #resolve(entry: AuditEntry): ResolvedAuditLabel {\n let label = this.#auditLabels[`a${entry.action}`];\n let more: string | undefined;\n\n if ([110, 210, 310].includes(entry.action)) {\n const params = this.#getParams(entry);\n if (params.length) {\n const localizedLabel = `${params[0]}:${params[1]}`;\n more = `${this.#localization.getLocalizedLabel(params[0]) ?? params[0]}: ${\n this.#localization.getLocalizedLabel(localizedLabel) ?? localizedLabel\n }`;\n }\n } else if (entry.action === 325) {\n const params = this.#getParams(entry);\n more = this.#translate.instant('yuv.audit.label.update.restore.more', {\n version: params[0] || '[?]'\n });\n } else if (entry.action === 10000) {\n label = this.#localization.getLocalizedLabel(`audit:custom:${entry.subaction}`) || `${entry.subaction}`;\n }\n\n return { label, more };\n }\n\n #getParams(entry: AuditEntry): string[] {\n const m = entry.detail.match(/\\[(.*?)\\]/);\n return m?.[1]?.split(',').map((i) => i.trim()) ?? [];\n }\n}\n","import { Injectable, Type, signal } from '@angular/core';\nimport {\n AbstractAuditRendererComponent,\n DefaultAuditRendererComponent\n} from '../../audit-renderer';\n\n/**\n * Service for managing audit-entry renderers. Renderers are components that render the\n * inner content of an audit entry in the timeline view of `ObjectAuditComponent`.\n *\n * Register a renderer for an `action` to override the default rendering of all audit\n * entries with that action, or for an `action` + `subaction` pair to override a specific\n * variant. Lookup prefers the subaction-specific renderer over the action-only renderer;\n * if neither is registered, `DefaultAuditRendererComponent` is used.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AuditRendererService {\n #renderers = signal<Record<string, Type<AbstractAuditRendererComponent>>>({});\n\n /**\n * Register a renderer for a specific audit `action`. Pass `subaction` to scope the\n * renderer to a particular (action, subaction) pair.\n */\n registerAuditRenderer(\n cmp: Type<AbstractAuditRendererComponent>,\n action: number,\n subaction?: number\n ): void {\n this.#renderers.update((curr) => ({ ...curr, [this.#getKey(action, subaction)]: cmp }));\n }\n\n /**\n * Resolve the renderer for an audit entry. Tries `(action, subaction)` first, falls\n * back to `(action)`, then to `DefaultAuditRendererComponent`.\n */\n getAuditRenderer(action: number, subaction?: number): Type<AbstractAuditRendererComponent> {\n const r = this.#renderers();\n if (subaction !== undefined) {\n const scoped = r[this.#getKey(action, subaction)];\n if (scoped) return scoped;\n }\n return r[this.#getKey(action)] || DefaultAuditRendererComponent;\n }\n\n #getKey(action: number, subaction?: number): string {\n const k = [String(action)];\n if (subaction !== undefined) k.push(String(subaction));\n return k.join('-');\n }\n}\n","import { Component, inject, input } from '@angular/core';\nimport { SchemaResponseFieldDefinition, SystemService } from '@yuuvis/client-core';\n\n/**\n * Abstract class to be extended by property renderers\n */\n@Component({\n selector: 'yuv-abstract-renderer',\n template: ''\n})\nexport abstract class AbstractRendererComponent<T = string, U = null> {\n #system = inject(SystemService);\n\n propertyName = input.required<string>();\n value = input.required<T | null>();\n meta = input<Record<string, unknown> | U>();\n\n protected getProperty(): SchemaResponseFieldDefinition | undefined {\n return this.#system.system?.allFields[this.propertyName()];\n }\n}\n","import { Component } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-boolean-renderer',\n imports: [MatIcon],\n template: ` <mat-icon>{{ value() ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>`,\n styles: [\n `\n :host {\n display: flex;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class BooleanRendererComponent extends AbstractRendererComponent {}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\nimport { LocaleDatePipe } from '@yuuvis/client-core';\n\n@Component({\n selector: 'yuv-datetime-renderer',\n imports: [LocaleDatePipe],\n template: '{{(value() || undefined) | localeDate}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class DateTimeRendererComponent extends AbstractRendererComponent<Date> {}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-decimal-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class DecimalRendererComponent extends AbstractRendererComponent<number> {\n // TODO: deal with precision and scale\n}\n","import { Component, computed } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\nimport { FileSizePipe } from '@yuuvis/client-core';\n\n@Component({\n selector: 'yuv-string-renderer',\n imports: [FileSizePipe],\n template: '{{parsedValue() | fileSize}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class FileSizeRendererComponent extends AbstractRendererComponent {\n parsedValue = computed<number>(() => {\n let n = 0;\n const v = this.value();\n if (v)\n try {\n n = parseInt(v);\n } catch (e) {\n console.error(e);\n }\n return n;\n });\n}\n","import { Component, effect, inject } from '@angular/core';\nimport { MatIcon, MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ObjectTypeIconComponent } from '@yuuvis/client-framework/icons';\nimport { AbstractRendererComponent } from '../abstract.renderer';\n\n@Component({\n selector: 'yuv-icon-renderer',\n imports: [ObjectTypeIconComponent, MatIcon],\n templateUrl: `./icon.renderer.component.html`,\n styleUrls: ['./icon.renderer.component.scss']\n})\nexport class IconRendererComponent extends AbstractRendererComponent {\n readonly #iconRegistry = inject(MatIconRegistry);\n\n readonly #sanitizer = inject(DomSanitizer);\n protected readonly customId = crypto.randomUUID();\n\n #registerIconsEffect = effect(async () => {\n const meta = this.meta();\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.propertyName() === 'custom' &&\n !meta?.['isFontIcon'] &&\n this.#iconRegistry.addSvgIconLiteral(\n this.customId,\n this.#sanitizer.bypassSecurityTrustHtml(this.value() as string)\n );\n });\n}\n","@let icon = value();\n@if (propertyName() !== 'custom') {\n <yuv-object-type-icon [objectTypeId]=\"icon || ''\"></yuv-object-type-icon>\n} @else if (icon !== null) {\n @let metaData = meta();\n @if (metaData && metaData['isFontIcon']) {\n <mat-icon>{{ icon }}</mat-icon>\n } @else {\n <mat-icon [svgIcon]=\"customId\"></mat-icon>\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-integer-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class IntegerRendererComponent extends AbstractRendererComponent<number> {}\n","import { Component, computed, inject } from '@angular/core';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport { AppCacheService, IdmService, YuvUser } from '@yuuvis/client-core';\nimport { catchError, forkJoin, map, of, switchMap } from 'rxjs';\nimport { AbstractRendererComponent } from '../abstract.renderer';\n\n@Component({\n selector: 'yuv-organization-renderer',\n templateUrl: './organization.renderer.component.html',\n styleUrls: ['./organization.renderer.component.scss']\n})\nexport class OrganizationRendererComponent extends AbstractRendererComponent {\n readonly #idmService = inject(IdmService);\n readonly #appCache = inject(AppCacheService);\n\n readonly #STORAGE_USER_KEY = 'yuv.core.users.storage';\n readonly #STORAGE_ROLES_KEY = 'yuv.core.roles.storage';\n\n // Input may be a single id/role-name or an array of them; normalize to string[] so the resolver\n // pipeline always works on a uniform shape.\n resolvedValue = computed<string[]>(() => {\n const value = this.value();\n return value === null ? [] : Array.isArray(value) ? value : [value];\n });\n\n #userRoleResolver = rxResource({\n params: this.resolvedValue,\n stream: ({ params }) => {\n // Nothing to resolve — short-circuit so we don't show the loading indicator or hit the\n // backend for an empty input.\n if (params.length === 0) {\n return of<{ type: string; label: string | undefined }[]>([]);\n }\n // Step 1 — load the role catalog (cached) and use it to partition the input into role\n // names vs. user IDs. Roles are a closed set; anything that doesn't match is treated as\n // a user ID and resolved in step 2.\n // TODO: Move get Roles to App init or somewhere else to avoid multiple calls\n return this.#appCache.getItem<{ name: string; description: string }[]>(this.#STORAGE_ROLES_KEY).pipe(\n switchMap((cachedRoles) =>\n (cachedRoles\n ? of(cachedRoles)\n : this.#idmService.getRoles().pipe(\n // Only persist the role list when the backend actually returned something —\n // caching an empty array would mask later successful fetches.\n switchMap((roles) =>\n roles.length ? this.#appCache.setItem(this.#STORAGE_ROLES_KEY, roles).pipe(map(() => roles)) : of([])\n )\n )\n ).pipe(\n map((roles) =>\n params.reduce(\n (acc: { roles: string[]; users: string[] }, value: string) => {\n const matchingRole = roles.find((role) => role.name === value);\n // Role-name match → roles bucket; everything else is assumed to be a user ID.\n if (matchingRole) {\n acc.roles.push(matchingRole.name);\n } else {\n acc.users.push(value);\n }\n return acc;\n },\n { roles: [], users: [] }\n )\n )\n )\n ),\n // Step 2a — pull the persisted user cache. Defensive filter against null entries that\n // may linger from earlier buggy writes (see commit 2f3ff694f).\n switchMap(({ roles, users }) =>\n this.#appCache\n .getItem<YuvUser[]>(this.#STORAGE_USER_KEY)\n .pipe(\n map((cache) =>\n cache ? { roles, users, cache: cache.filter((entry) => entry !== null) } : { roles, users, cache: null }\n )\n )\n ),\n // Step 2b — resolve users: serve from cache where possible, fetch the rest from IDM.\n switchMap(({ roles, users, cache }) => {\n let missingUsers: string[] = users;\n let filteredUsers: YuvUser[] = [];\n if (cache) {\n filteredUsers = cache.filter((entry) => entry && users.includes(entry.id));\n missingUsers = users.filter((uid: string) => !filteredUsers.some((user) => user.id === uid));\n }\n // Pair every request with its uid so we can tell which IDs came back unresolved.\n // catchError keeps a single failing lookup from killing the whole forkJoin.\n const userRequests = missingUsers.map((uid: string) =>\n this.#idmService.getUserById(uid).pipe(\n catchError(() => of(null)),\n map((user) => ({ uid, user }))\n )\n );\n\n if (userRequests.length > 0) {\n return forkJoin(userRequests).pipe(\n switchMap((results) => {\n // Resolved users are real YuvUsers — safe to cache and render.\n // Unresolved IDs render as a synthetic { id, title: id } so the user still\n // sees the raw ID, but they are NOT written to the cache (a 404 today might\n // resolve tomorrow, and caching it would block that).\n const resolved = results.filter((res) => res.user != null).map((res) => res.user as YuvUser);\n const unresolved = results\n .filter((res) => res.user == null)\n .map((res) => ({ id: res.uid, title: res.uid }) as YuvUser);\n return this.#appCache\n .setItem(this.#STORAGE_USER_KEY, [...(cache || []), ...resolved, ...filteredUsers])\n .pipe(map(() => [...resolved, ...unresolved]));\n }),\n map((users) => ({ roles, users: [...users, ...filteredUsers] }))\n );\n } else {\n // Every requested user was already in the cache — no network needed.\n return of({ roles, users: [...filteredUsers] });\n }\n }),\n // Step 3 — project to the flat render-model the template iterates over. data-type\n // drives the chip styling (user vs role).\n map(({ roles, users }) => {\n const userNodes = users.map((user: YuvUser & { displayName?: string }) => ({\n type: 'user',\n label: user.title || user.displayName\n }));\n const roleNodes = roles.map((role: string) => ({\n type: 'role',\n label: role\n }));\n return [...userNodes, ...roleNodes];\n })\n );\n },\n defaultValue: []\n });\n\n userAndRole = this.#userRoleResolver.value;\n userAndRoleLoading = this.#userRoleResolver.isLoading;\n}\n","@if (userAndRoleLoading()) {\n <span class=\"loading\"><i>.</i><i>.</i><i>.</i></span>\n} @else {\n @for (node of userAndRole(); track $index) {\n <span class=\"node\" [attr.data-type]=\"node.type\">{{ node.label }}</span>\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-string-renderer',\n template: `{{ value() }}`,\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class StringRendererComponent extends AbstractRendererComponent {}\n","import { DatePipe, DecimalPipe } from '@angular/common';\nimport { Component, computed, inject } from '@angular/core';\nimport { SystemService, TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { AbstractRendererComponent } from '../abstract.renderer';\n\n@Component({\n selector: 'yuv-table-renderer',\n standalone: true,\n imports: [TranslatePipe],\n templateUrl: `./table.renderer.component.html`,\n styleUrls: ['./table.renderer.component.scss'],\n providers: [DecimalPipe, DatePipe]\n})\nexport class TableRendererComponent extends AbstractRendererComponent<any[]> {\n readonly #system = inject(SystemService);\n readonly translate = inject(TranslateService);\n readonly #decimalPipe = inject(DecimalPipe);\n readonly #datePipe = inject(DatePipe);\n\n protected tableHeaders = computed(() => [\n ...new Set(\n (this.value() || []).flat().map((item) => ({\n id: `header-${crypto.randomUUID()}`,\n key: item.propertyName,\n label: this.#system.getLocalizedLabel(`${item.propertyName}`) || item.propertyName\n }))\n )\n ]);\n\n protected tableData = computed(() => {\n const data = this.value() || [];\n return (data.length > 10 ? data.slice(0, 10) : data).map((row, rowIndex) =>\n row.map((item: any) => ({\n id: `row-${rowIndex}-cell-${crypto.randomUUID()}`,\n ...item,\n value: this.#cellValue(item)\n }))\n );\n });\n\n protected reducedData = computed(() => {\n const data = this.value() || [];\n return data.length > 10;\n });\n\n protected getCellValue(row: any[], key: string): string {\n const item = (row || []).find((i) => i.propertyName === key);\n return item ? item.value : '';\n }\n\n #cellValue(element: { propertyType: string; value: string }): string | null {\n switch (element.propertyType) {\n case 'datetime':\n return this.#datePipe.transform(element.value, 'short', undefined, this.translate.getCurrentLang());\n case 'string':\n return element.value;\n case 'decimal':\n return this.#decimalPipe.transform(element.value, '1.2-4', this.translate.getCurrentLang());\n default:\n return element.value;\n }\n }\n}\n","<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","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-unknown-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class UnknownRendererComponent extends AbstractRendererComponent<any> {}\n","import { Injectable, Type, inject, signal } from '@angular/core';\nimport {\n ContentStreamField,\n InternalFieldType,\n RendererType,\n SchemaResponseFieldDefinition,\n SystemService\n} from '@yuuvis/client-core';\nimport {\n AbstractRendererComponent,\n BooleanRendererComponent,\n DateTimeRendererComponent,\n DecimalRendererComponent,\n FileSizeRendererComponent,\n IconRendererComponent,\n IntegerRendererComponent,\n OrganizationRendererComponent,\n StringRendererComponent,\n TableRendererComponent,\n UnknownRendererComponent\n} from '../../property-renderer';\nimport { RendererComponent } from './renderer.interface';\n\n/**\n * Service for managing property type renderers. Renderers are components that will render certain\n * property types.\n *\n * You are able to register your own renderer to overwrite an existing one or provide a custom\n * renderer for your context.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RendererService {\n private system = inject(SystemService);\n\n #renderers = signal<Record<string, Type<RendererComponent>>>({});\n\n constructor() {\n const initialRenderers: Record<string, Type<RendererComponent>> = {\n integer: IntegerRendererComponent,\n decimal: DecimalRendererComponent,\n datetime: DateTimeRendererComponent,\n icon: IconRendererComponent,\n string: StringRendererComponent,\n boolean: BooleanRendererComponent,\n table: TableRendererComponent\n };\n initialRenderers[InternalFieldType.STRING_ORGANIZATION] = OrganizationRendererComponent;\n initialRenderers[InternalFieldType.STRING_ORGANIZATION_SET] = OrganizationRendererComponent;\n initialRenderers[ContentStreamField.LENGTH] = FileSizeRendererComponent;\n this.#renderers.set(initialRenderers);\n }\n\n getRendererByType(type: RendererType): Type<RendererComponent> {\n const r = this.#renderers();\n return r[type] || UnknownRendererComponent;\n }\n\n getRenderer(propertyName: string, typeName?: string): Type<RendererComponent> {\n // try to find a renderer based on property and object type\n let r = this.#renderers()[this._getKey(propertyName, typeName)];\n if (!r) {\n // not special renderer found so we'll try to get one for the internal type\n // of the given property\n const srf: SchemaResponseFieldDefinition | undefined =\n this.system.system && this.system.system.allFields[propertyName];\n\n if (srf) {\n r = this.getRendererByType(\n this.system.getInternalFormElementType(srf.propertyType, srf.classifications, srf.catalog)\n );\n }\n }\n\n return r || UnknownRendererComponent;\n }\n\n /**\n * Register a renderer for a particular property. Providing `typeName` will register that renderer\n * for a certain context (use same inputs when calling `getRenderer()`).\n * @param cmp The component to actually render the property\n * @param propertyName property name (used for registering the renderer for a certain context)\n * @param typeName Optional type name (used for registering the renderer for a certain context)\n */\n registerRenderer(cmp: Type<AbstractRendererComponent>, propertyName: string, typeName?: string) {\n this.#renderers.update((curr) => ({ ...curr, ...{ [this._getKey(propertyName, typeName)]: cmp } }));\n }\n\n /**\n *\n * @param type The type of property this renderer is supposed to be used for\n */\n registerRendererByType(type: RendererType, cmp: Type<RendererComponent>) {\n this.#renderers.update((curr) => ({ ...curr, ...{ [type]: cmp } }));\n }\n\n // Generate the unique key for a renderer\n private _getKey(propertyName: string, typeName?: string): string {\n const k = [propertyName];\n typeName && k.push(typeName);\n return k.join('-');\n }\n}\n","import { ComponentRef, Directive, Type, ViewContainerRef, effect, inject, input } from '@angular/core';\nimport { AuditEntry } from '@yuuvis/client-core';\nimport { AbstractAuditRendererComponent } from '../audit-renderer';\nimport { AuditRendererService } from '../services';\n\n/**\n * Attribute directive that renders an `AuditEntry` using the component registered with\n * `AuditRendererService` for the entry's `action` (and optionally `subaction`). Falls\n * back to `DefaultAuditRendererComponent` when no override is registered.\n */\n@Directive({\n selector: '[yuvAuditRenderer]',\n standalone: true\n})\nexport class AuditRendererDirective {\n #service = inject(AuditRendererService);\n #containerRef = inject(ViewContainerRef);\n\n component!: ComponentRef<AbstractAuditRendererComponent>;\n #current?: AuditEntry;\n\n yuvAuditRenderer = input.required<AuditEntry>();\n\n #renderEffect = effect(() => {\n const entry = this.yuvAuditRenderer();\n if (this.#alreadyRendered(entry)) return;\n\n this.#current = entry;\n this.#containerRef.clear();\n const cmp: Type<AbstractAuditRendererComponent> = this.#service.getAuditRenderer(\n entry.action,\n entry.subaction\n );\n this.component = this.#containerRef.createComponent(cmp);\n this.component.setInput('auditEntry', entry);\n });\n\n #alreadyRendered(entry: AuditEntry): boolean {\n return !!this.#current && JSON.stringify(this.#current) === JSON.stringify(entry);\n }\n}\n","import { ComponentRef, Directive, Type, ViewContainerRef, effect, inject, input } from '@angular/core';\nimport { RendererComponent, RendererDirectiveInput, RendererService } from '../services';\n/**\n * Structural directive for rendering an obect type property\n */\n@Directive({\n selector: '[yuvRenderer]',\n standalone: true\n})\nexport class RendererDirective {\n #rendererService = inject(RendererService);\n #containerRef = inject(ViewContainerRef);\n\n component!: ComponentRef<RendererComponent>;\n #rendererInput?: RendererDirectiveInput;\n yuvRenderer = input<RendererDirectiveInput | undefined>(undefined);\n\n #yuvRendererEffect = effect(() => {\n const i = this.yuvRenderer();\n if (i && !this.#alreadyRendered(i)) {\n this.#rendererInput = i;\n this.#containerRef.clear();\n const cmp: Type<RendererComponent> = i.rendererType\n ? this.#rendererService.getRendererByType(i.rendererType)\n : this.#rendererService.getRenderer(i.propertyName);\n\n this.component = this.#containerRef.createComponent(cmp);\n // pass inputs to the renderer. As they are signals they need an injection context\n this.component.setInput('propertyName', i.propertyName);\n this.component.setInput('value', i.value);\n if (i.meta) this.component.setInput('meta', i.meta);\n } else if (!i) {\n this.#containerRef.clear();\n this.#rendererInput = undefined;\n }\n });\n\n #alreadyRendered(i: RendererDirectiveInput): boolean {\n return !!this.#rendererInput && JSON.stringify(this.#rendererInput) === JSON.stringify(i);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuuvis/client-framework",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.6.0",
|
|
4
4
|
"author": "OPTIMAL SYSTEMS GmbH <npm@optimal-systems.de>",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"peerDependencies": {
|
|
@@ -8,16 +8,16 @@
|
|
|
8
8
|
"@angular/common": "^21.2.9",
|
|
9
9
|
"@angular/core": "^21.2.9",
|
|
10
10
|
"angular-gridster2": "^21.0.1",
|
|
11
|
-
"@yuuvis/client-core": "^3.
|
|
12
|
-
"@yuuvis/client-shell-core": "^3.
|
|
13
|
-
"@yuuvis/client-components": "^3.
|
|
11
|
+
"@yuuvis/client-core": "^3.6.0",
|
|
12
|
+
"@yuuvis/client-shell-core": "^3.6.0",
|
|
13
|
+
"@yuuvis/client-components": "^3.6.0",
|
|
14
14
|
"ng-dynamic-component": "^10.8.2",
|
|
15
15
|
"modern-normalize": "^3.0.1"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"@angular/material": "^21.2.7",
|
|
19
19
|
"@ngrx/signals": "^21.1.0",
|
|
20
|
-
"@yuuvis/material": "^3.
|
|
20
|
+
"@yuuvis/material": "^3.6.0",
|
|
21
21
|
"@yuuvis/media-viewer": "^3.0.2",
|
|
22
22
|
"angular-split": "^20.0.0",
|
|
23
23
|
"vis-network": "^10.0.2",
|
package/renderer/README.md
CHANGED
|
@@ -1,5 +1,215 @@
|
|
|
1
1
|
# @yuuvis/client-framework/renderer
|
|
2
2
|
|
|
3
|
-
Secondary entry point of `@yuuvis/client-framework`.
|
|
3
|
+
Secondary entry point of `@yuuvis/client-framework`. Import everything from `@yuuvis/client-framework/renderer`.
|
|
4
4
|
|
|
5
|
-
Provides
|
|
5
|
+
Provides a pluggable rendering layer for two distinct things:
|
|
6
|
+
|
|
7
|
+
1. **Property renderers** — components that render a single object-type property value (string, integer, datetime, file size, organization, table, …) inside list rows, summary panels, tile slots, smart-search results, and detail headers.
|
|
8
|
+
2. **Audit renderers** — components that render the inner content of a single entry in the audit timeline (`ObjectAuditComponent`), keyed by the audit `action` (and optionally `subaction`).
|
|
9
|
+
|
|
10
|
+
Both subsystems share the same shape: a service that maintains a registry, an abstract base component that consumers extend, and a directive that resolves and instantiates the right component for a given input.
|
|
11
|
+
|
|
12
|
+
## Public API
|
|
13
|
+
|
|
14
|
+
| Export | Kind | Purpose |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| `RendererService` | service (`providedIn: 'root'`) | Registry for property renderers. |
|
|
17
|
+
| `RendererDirective` (`*yuvRenderer`) | structural directive | Renders a `ResolvedObjectConfigItem` using the registered renderer. |
|
|
18
|
+
| `AbstractRendererComponent<T, U>` | abstract component | Base class for custom property renderers. |
|
|
19
|
+
| `RendererComponent` | type | Union of the built-in property renderer components. |
|
|
20
|
+
| `RendererDirectiveInput` | type alias of `ResolvedObjectConfigItem` | Input shape for `*yuvRenderer`. |
|
|
21
|
+
| `AuditRendererService` | service (`providedIn: 'root'`) | Registry for audit-entry renderers. |
|
|
22
|
+
| `AuditRendererDirective` (`[yuvAuditRenderer]`) | attribute directive | Renders an `AuditEntry` using the registered renderer. |
|
|
23
|
+
| `AbstractAuditRendererComponent` | abstract component | Base class for custom audit renderers. |
|
|
24
|
+
| `DefaultAuditRendererComponent` | component | Built-in fallback that resolves localized audit labels for all known actions (100, 200, 300, 400, custom 10000). |
|
|
25
|
+
| Built-in property renderers | components | `StringRendererComponent`, `IntegerRendererComponent`, `DecimalRendererComponent`, `BooleanRendererComponent`, `DateTimeRendererComponent`, `FileSizeRendererComponent`, `IconRendererComponent`, `OrganizationRendererComponent`, `TableRendererComponent`, `UnknownRendererComponent` (fallback). |
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Property renderers
|
|
30
|
+
|
|
31
|
+
### Rendering a property — `*yuvRenderer`
|
|
32
|
+
|
|
33
|
+
`*yuvRenderer` takes a `ResolvedObjectConfigItem` and instantiates the matching renderer into the host view. The host owns the layout; the directive owns the value cell.
|
|
34
|
+
|
|
35
|
+
```html
|
|
36
|
+
@for (property of object.properties; track property.propertyName) {
|
|
37
|
+
<div class="row">
|
|
38
|
+
<div class="label">{{ property.label }}</div>
|
|
39
|
+
<div class="value">
|
|
40
|
+
<ng-container *yuvRenderer="property.value" />
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Input shape:
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
interface ResolvedObjectConfigItem {
|
|
50
|
+
propertyName: string; // schema property name (e.g. 'system:contentStreamLength')
|
|
51
|
+
rendererType?: RendererType; // optional explicit renderer key — wins over propertyName lookup
|
|
52
|
+
value?: unknown; // the value passed to the renderer
|
|
53
|
+
meta?: Record<string, unknown>; // additional context (e.g. *_title for user fields)
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Resolution order inside `RendererService`:
|
|
58
|
+
|
|
59
|
+
1. If `rendererType` is set → look up by that key (`getRendererByType`).
|
|
60
|
+
2. Otherwise look up by `propertyName` (`getRenderer`). If not registered, fall back to the property's internal field type derived from `SystemService`.
|
|
61
|
+
3. If nothing matches → `UnknownRendererComponent`.
|
|
62
|
+
|
|
63
|
+
The directive re-renders only when the input object actually changes (deep equality via `JSON.stringify`).
|
|
64
|
+
|
|
65
|
+
### Built-in registrations
|
|
66
|
+
|
|
67
|
+
`RendererService` ships with these defaults (in `RendererService` constructor):
|
|
68
|
+
|
|
69
|
+
| Key | Component |
|
|
70
|
+
|---|---|
|
|
71
|
+
| `integer` | `IntegerRendererComponent` |
|
|
72
|
+
| `decimal` | `DecimalRendererComponent` |
|
|
73
|
+
| `datetime` | `DateTimeRendererComponent` |
|
|
74
|
+
| `icon` | `IconRendererComponent` |
|
|
75
|
+
| `string` | `StringRendererComponent` |
|
|
76
|
+
| `boolean` | `BooleanRendererComponent` |
|
|
77
|
+
| `table` | `TableRendererComponent` |
|
|
78
|
+
| `InternalFieldType.STRING_ORGANIZATION` / `STRING_ORGANIZATION_SET` | `OrganizationRendererComponent` |
|
|
79
|
+
| `ContentStreamField.LENGTH` | `FileSizeRendererComponent` |
|
|
80
|
+
|
|
81
|
+
### Registering a custom renderer
|
|
82
|
+
|
|
83
|
+
Get the service and call one of the registration methods. Either overrides the default for that key.
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
import { inject, Injectable } from '@angular/core';
|
|
87
|
+
import { RendererService } from '@yuuvis/client-framework/renderer';
|
|
88
|
+
import { MyHashRendererComponent } from './my-hash.renderer';
|
|
89
|
+
|
|
90
|
+
@Injectable({ providedIn: 'root' })
|
|
91
|
+
export class MyAppRendererSetup {
|
|
92
|
+
#renderers = inject(RendererService);
|
|
93
|
+
|
|
94
|
+
init(): void {
|
|
95
|
+
// Override by renderer type (matches `rendererType` on ResolvedObjectConfigItem)
|
|
96
|
+
this.#renderers.registerRendererByType('string', MyHashRendererComponent);
|
|
97
|
+
|
|
98
|
+
// Or scope to a single property — and optionally to a specific object type
|
|
99
|
+
this.#renderers.registerRenderer(MyHashRendererComponent, 'document:sha256');
|
|
100
|
+
this.#renderers.registerRenderer(MyHashRendererComponent, 'document:sha256', 'system:document');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Call this from `APP_INITIALIZER` or any service that runs before the views using the directive are constructed. Registrations are stored in a signal, so consumers that re-resolve their renderer will pick up changes; however the directive only re-resolves when its input changes — switching renderers at runtime requires re-pushing the input.
|
|
106
|
+
|
|
107
|
+
### Writing a custom property renderer
|
|
108
|
+
|
|
109
|
+
Extend `AbstractRendererComponent<T, U>`. `T` is the value type, `U` is the meta-shape (defaults to `null`).
|
|
110
|
+
|
|
111
|
+
```ts
|
|
112
|
+
import { ChangeDetectionStrategy, Component, computed } from '@angular/core';
|
|
113
|
+
import { AbstractRendererComponent } from '@yuuvis/client-framework/renderer';
|
|
114
|
+
|
|
115
|
+
@Component({
|
|
116
|
+
selector: 'app-hash-renderer',
|
|
117
|
+
standalone: true,
|
|
118
|
+
template: `<code class="hash" [title]="value()">{{ short() }}</code>`,
|
|
119
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
120
|
+
})
|
|
121
|
+
export class MyHashRendererComponent extends AbstractRendererComponent<string> {
|
|
122
|
+
protected short = computed(() => this.value()?.slice(0, 12) ?? '');
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
The base class exposes:
|
|
127
|
+
|
|
128
|
+
- `propertyName = input.required<string>()`
|
|
129
|
+
- `value = input.required<T | null>()`
|
|
130
|
+
- `meta = input<Record<string, unknown> | U>()`
|
|
131
|
+
- `getProperty(): SchemaResponseFieldDefinition | undefined` — schema definition for the property from `SystemService`.
|
|
132
|
+
|
|
133
|
+
All renderers must be `standalone: true` and should use `ChangeDetectionStrategy.OnPush`.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Audit renderers
|
|
138
|
+
|
|
139
|
+
### Rendering an audit entry — `[yuvAuditRenderer]`
|
|
140
|
+
|
|
141
|
+
`[yuvAuditRenderer]` is the attribute-directive twin for the audit timeline. The host component (`ObjectAuditComponent`) owns the date column, timeline line, version badge, and creator label; the renderer owns the *inner content* of the entry.
|
|
142
|
+
|
|
143
|
+
```html
|
|
144
|
+
@for (item of items(); track item.creationDate + '-' + item.action) {
|
|
145
|
+
<li class="audit">
|
|
146
|
+
<time>{{ item.creationDate | localeDate }}</time>
|
|
147
|
+
<div class="content"><ng-container [yuvAuditRenderer]="item" /></div>
|
|
148
|
+
<span class="version">v{{ item.version }}</span>
|
|
149
|
+
<div class="creator">{{ item.createdBy.title }}</div>
|
|
150
|
+
</li>
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Resolution order inside `AuditRendererService.getAuditRenderer(action, subaction)`:
|
|
155
|
+
|
|
156
|
+
1. `(action, subaction)` — if `subaction` is provided and a renderer is registered for the exact pair.
|
|
157
|
+
2. `(action)` — action-only registration.
|
|
158
|
+
3. `DefaultAuditRendererComponent` — built-in fallback that translates the well-known audit labels (`yuv.audit.label.*`) for actions 100/200/300/400 and custom action 10000.
|
|
159
|
+
|
|
160
|
+
### Registering a custom audit renderer
|
|
161
|
+
|
|
162
|
+
```ts
|
|
163
|
+
import { inject, Injectable } from '@angular/core';
|
|
164
|
+
import { AuditRendererService } from '@yuuvis/client-framework/renderer';
|
|
165
|
+
import { CreatedAuditRendererComponent } from './created-audit.renderer';
|
|
166
|
+
import { UpdatedAuditRendererComponent } from './updated-audit.renderer';
|
|
167
|
+
|
|
168
|
+
@Injectable({ providedIn: 'root' })
|
|
169
|
+
export class MyAppAuditSetup {
|
|
170
|
+
#audit = inject(AuditRendererService);
|
|
171
|
+
|
|
172
|
+
init(): void {
|
|
173
|
+
// Override every CREATE_METADATA (action 100) entry
|
|
174
|
+
this.#audit.registerAuditRenderer(CreatedAuditRendererComponent, 100);
|
|
175
|
+
|
|
176
|
+
// Override one specific (action, subaction) pair
|
|
177
|
+
this.#audit.registerAuditRenderer(UpdatedAuditRendererComponent, 300, 42);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Writing a custom audit renderer
|
|
183
|
+
|
|
184
|
+
Extend `AbstractAuditRendererComponent`. The directive sets one input: `auditEntry: AuditEntry`.
|
|
185
|
+
|
|
186
|
+
```ts
|
|
187
|
+
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
188
|
+
import { AbstractAuditRendererComponent } from '@yuuvis/client-framework/renderer';
|
|
189
|
+
|
|
190
|
+
@Component({
|
|
191
|
+
selector: 'app-created-audit',
|
|
192
|
+
standalone: true,
|
|
193
|
+
template: `
|
|
194
|
+
<span class="title">📄 Document created</span>
|
|
195
|
+
<small class="meta">action {{ auditEntry().action }}</small>
|
|
196
|
+
`,
|
|
197
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
198
|
+
})
|
|
199
|
+
export class CreatedAuditRendererComponent extends AbstractAuditRendererComponent {}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
The base class exposes:
|
|
203
|
+
|
|
204
|
+
- `auditEntry = input.required<AuditEntry>()` — the full entry, including `action`, `subaction`, `detail`, `creationDate`, `createdBy`, `version`.
|
|
205
|
+
|
|
206
|
+
If you want to extend (rather than replace) the default labelling, you can compose `DefaultAuditRendererComponent` inside your own template, or read `auditEntry().detail` directly — its format is action-specific (the default renderer parses `[a,b]`-style payloads for tag/restore actions).
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Conventions
|
|
211
|
+
|
|
212
|
+
- Both directives, both services, and both abstract base classes are tree-shakable per sub-library — import only what you need.
|
|
213
|
+
- Renderers are looked up at directive instantiation time. Registering after the view exists is fine but only affects later input changes.
|
|
214
|
+
- All built-in renderers use OnPush and are standalone — follow the same in custom renderers.
|
|
215
|
+
- `RendererService` integrates with `SystemService` to fall back to the property's internal field type; custom renderers do not need to replicate this — register against the field-type key (`registerRendererByType`) to opt in.
|
|
@@ -14,14 +14,9 @@ declare class ObjectAuditComponent {
|
|
|
14
14
|
arrowNext: any;
|
|
15
15
|
};
|
|
16
16
|
auditsRes: _angular_core.WritableSignal<AuditQueryResult | undefined>;
|
|
17
|
-
|
|
17
|
+
items: _angular_core.Signal<AuditEntry[]>;
|
|
18
18
|
error: _angular_core.WritableSignal<boolean>;
|
|
19
19
|
busy: _angular_core.WritableSignal<boolean>;
|
|
20
|
-
searchActions: {
|
|
21
|
-
label: string;
|
|
22
|
-
actions: string[];
|
|
23
|
-
}[];
|
|
24
|
-
auditLabels: Record<string, string>;
|
|
25
20
|
dmsObject: _angular_core.InputSignal<DmsObject | undefined>;
|
|
26
21
|
/**
|
|
27
22
|
* A list of audits that should not be shown. Use the audit codes (like 100, 301, etc.).
|
|
@@ -42,9 +37,6 @@ declare class ObjectAuditComponent {
|
|
|
42
37
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectAuditComponent, never>;
|
|
43
38
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ObjectAuditComponent, "yuv-object-audit", never, { "dmsObject": { "alias": "dmsObject"; "required": false; "isSignal": true; }; "skipActions": { "alias": "skipActions"; "required": false; "isSignal": true; }; "allActions": { "alias": "allActions"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
44
39
|
}
|
|
45
|
-
interface ResolvedAuditEntry extends AuditEntry {
|
|
46
|
-
label: string;
|
|
47
|
-
}
|
|
48
40
|
|
|
49
41
|
interface HeaderData {
|
|
50
42
|
title: RendererDirectiveInput;
|
|
@@ -1,7 +1,67 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { ComponentRef, Type } from '@angular/core';
|
|
3
|
+
import { AuditEntry, SchemaResponseFieldDefinition, TranslateService, ResolvedObjectConfigItem, RendererType } from '@yuuvis/client-core';
|
|
3
4
|
import * as dist_libs_yuuvis_client_core_types_yuuvis_client_core from 'dist/libs/yuuvis/client-core/types/yuuvis-client-core';
|
|
4
|
-
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Abstract class to be extended by audit-entry renderers. The renderer controls the
|
|
8
|
+
* inner content of an audit timeline entry; the surrounding framing (date column,
|
|
9
|
+
* timeline line, version badge, creator) stays with the host component.
|
|
10
|
+
*/
|
|
11
|
+
declare abstract class AbstractAuditRendererComponent {
|
|
12
|
+
auditEntry: i0.InputSignal<AuditEntry>;
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AbstractAuditRendererComponent, never>;
|
|
14
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AbstractAuditRendererComponent, "yuv-abstract-audit-renderer", never, { "auditEntry": { "alias": "auditEntry"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface ResolvedAuditLabel {
|
|
18
|
+
label: string;
|
|
19
|
+
more?: string;
|
|
20
|
+
}
|
|
21
|
+
declare class DefaultAuditRendererComponent extends AbstractAuditRendererComponent {
|
|
22
|
+
#private;
|
|
23
|
+
protected resolved: i0.Signal<ResolvedAuditLabel>;
|
|
24
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DefaultAuditRendererComponent, never>;
|
|
25
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DefaultAuditRendererComponent, "yuv-default-audit-renderer", never, {}, {}, never, never, true, never>;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Attribute directive that renders an `AuditEntry` using the component registered with
|
|
30
|
+
* `AuditRendererService` for the entry's `action` (and optionally `subaction`). Falls
|
|
31
|
+
* back to `DefaultAuditRendererComponent` when no override is registered.
|
|
32
|
+
*/
|
|
33
|
+
declare class AuditRendererDirective {
|
|
34
|
+
#private;
|
|
35
|
+
component: ComponentRef<AbstractAuditRendererComponent>;
|
|
36
|
+
yuvAuditRenderer: i0.InputSignal<AuditEntry>;
|
|
37
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AuditRendererDirective, never>;
|
|
38
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<AuditRendererDirective, "[yuvAuditRenderer]", never, { "yuvAuditRenderer": { "alias": "yuvAuditRenderer"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Service for managing audit-entry renderers. Renderers are components that render the
|
|
43
|
+
* inner content of an audit entry in the timeline view of `ObjectAuditComponent`.
|
|
44
|
+
*
|
|
45
|
+
* Register a renderer for an `action` to override the default rendering of all audit
|
|
46
|
+
* entries with that action, or for an `action` + `subaction` pair to override a specific
|
|
47
|
+
* variant. Lookup prefers the subaction-specific renderer over the action-only renderer;
|
|
48
|
+
* if neither is registered, `DefaultAuditRendererComponent` is used.
|
|
49
|
+
*/
|
|
50
|
+
declare class AuditRendererService {
|
|
51
|
+
#private;
|
|
52
|
+
/**
|
|
53
|
+
* Register a renderer for a specific audit `action`. Pass `subaction` to scope the
|
|
54
|
+
* renderer to a particular (action, subaction) pair.
|
|
55
|
+
*/
|
|
56
|
+
registerAuditRenderer(cmp: Type<AbstractAuditRendererComponent>, action: number, subaction?: number): void;
|
|
57
|
+
/**
|
|
58
|
+
* Resolve the renderer for an audit entry. Tries `(action, subaction)` first, falls
|
|
59
|
+
* back to `(action)`, then to `DefaultAuditRendererComponent`.
|
|
60
|
+
*/
|
|
61
|
+
getAuditRenderer(action: number, subaction?: number): Type<AbstractAuditRendererComponent>;
|
|
62
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AuditRendererService, never>;
|
|
63
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AuditRendererService>;
|
|
64
|
+
}
|
|
5
65
|
|
|
6
66
|
/**
|
|
7
67
|
* Abstract class to be extended by property renderers
|
|
@@ -131,5 +191,5 @@ declare class RendererDirective {
|
|
|
131
191
|
static ɵdir: i0.ɵɵDirectiveDeclaration<RendererDirective, "[yuvRenderer]", never, { "yuvRenderer": { "alias": "yuvRenderer"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
132
192
|
}
|
|
133
193
|
|
|
134
|
-
export { AbstractRendererComponent, BooleanRendererComponent, DateTimeRendererComponent, DecimalRendererComponent, FileSizeRendererComponent, IconRendererComponent, IntegerRendererComponent, OrganizationRendererComponent, RendererDirective, RendererService, StringRendererComponent, TableRendererComponent, UnknownRendererComponent };
|
|
194
|
+
export { AbstractAuditRendererComponent, AbstractRendererComponent, AuditRendererDirective, AuditRendererService, BooleanRendererComponent, DateTimeRendererComponent, DecimalRendererComponent, DefaultAuditRendererComponent, FileSizeRendererComponent, IconRendererComponent, IntegerRendererComponent, OrganizationRendererComponent, RendererDirective, RendererService, StringRendererComponent, TableRendererComponent, UnknownRendererComponent };
|
|
135
195
|
export type { RendererComponent, RendererDirectiveInput };
|