@yuuvis/client-framework 3.2.0 → 3.2.2
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-actions.mjs +16 -21
- package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-badges.mjs +2 -2
- package/fesm2022/yuuvis-client-framework-badges.mjs.map +1 -1
- package/package.json +5 -5
- package/types/yuuvis-client-framework-actions.d.ts +2 -12
|
@@ -9,7 +9,7 @@ import * as i1 from '@angular/material/icon';
|
|
|
9
9
|
import { MatIconModule, MatIconRegistry } from '@angular/material/icon';
|
|
10
10
|
import { YuvListModule } from '@yuuvis/client-framework/list';
|
|
11
11
|
import { MatTooltip } from '@angular/material/tooltip';
|
|
12
|
-
import { TranslateService as TranslateService$1, AppCacheService, ObjectLockingService, ClipboardService, DmsService, TranslatePipe, RetentionService, SystemType, Utils } from '@yuuvis/client-core';
|
|
12
|
+
import { TranslateService as TranslateService$1, AppCacheService, ObjectLockingService, ClipboardService, DmsService, TranslatePipe, RetentionService, IdmService, SystemType, Utils } from '@yuuvis/client-core';
|
|
13
13
|
import { of, map, forkJoin, switchMap } from 'rxjs';
|
|
14
14
|
import { MAT_DIALOG_DATA, MatDialogRef, MatDialog } from '@angular/material/dialog';
|
|
15
15
|
import { MatButtonModule } from '@angular/material/button';
|
|
@@ -145,6 +145,7 @@ const ActionPriorityLevel = {
|
|
|
145
145
|
* Service responsible for validating actions on DMS objects.
|
|
146
146
|
* Provides checks for document lock states and related user information.
|
|
147
147
|
*/
|
|
148
|
+
/** @deprecated */
|
|
148
149
|
class ActionsValidationService {
|
|
149
150
|
constructor() {
|
|
150
151
|
this.translate = inject(TranslateService$1);
|
|
@@ -157,18 +158,7 @@ class ActionsValidationService {
|
|
|
157
158
|
#objectLocking;
|
|
158
159
|
/** Cache key used to retrieve the list of users from the application cache. */
|
|
159
160
|
#STORAGE_USER_KEY;
|
|
160
|
-
/**
|
|
161
|
-
* Checks whether a DMS object is locked by another user.
|
|
162
|
-
*
|
|
163
|
-
* Delegates lock detection to {@link ObjectLockingService.getLockState}. When the
|
|
164
|
-
* object is locked by a different user, returns `state: true` along with a
|
|
165
|
-
* translated description identifying the lock holder.
|
|
166
|
-
*
|
|
167
|
-
* @param dmsObject - The DMS object to check for a lock.
|
|
168
|
-
* @returns An observable emitting an object with:
|
|
169
|
-
* - `state`: `true` if the object is locked by another user, `false` otherwise.
|
|
170
|
-
* - `description`: An optional translated message describing the lock state (only present when `state` is `true`).
|
|
171
|
-
*/
|
|
161
|
+
/** @deprecated */
|
|
172
162
|
checkDocumentLock(dmsObject) {
|
|
173
163
|
const lockState = this.#objectLocking.getLockState(dmsObject);
|
|
174
164
|
if (!lockState.locked || lockState.lockedByCurrentUser)
|
|
@@ -319,7 +309,8 @@ class DeleteAction extends AbstractContextAction {
|
|
|
319
309
|
this.#translate = inject(TranslateService$1);
|
|
320
310
|
this.#dialog = inject(MatDialog);
|
|
321
311
|
this.#retention = inject(RetentionService);
|
|
322
|
-
this.#
|
|
312
|
+
this.#idmService = inject(IdmService);
|
|
313
|
+
this.#objectLocking = inject(ObjectLockingService);
|
|
323
314
|
this.id = BASE_ACTION.delete;
|
|
324
315
|
this.label = this.#translate.instant('yuv.action-menu.action.delete.dms.object.label');
|
|
325
316
|
this.description = this.#translate.instant('yuv.action-menu.action.delete.dms.object.description');
|
|
@@ -334,14 +325,18 @@ class DeleteAction extends AbstractContextAction {
|
|
|
334
325
|
#translate;
|
|
335
326
|
#dialog;
|
|
336
327
|
#retention;
|
|
337
|
-
#
|
|
328
|
+
#idmService;
|
|
329
|
+
#objectLocking;
|
|
338
330
|
isDisabled(items) {
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
331
|
+
const lockState = this.#objectLocking.getLockState(items[0]);
|
|
332
|
+
if (!lockState.locked)
|
|
333
|
+
return of(false);
|
|
334
|
+
return this.#idmService.getUserById(lockState.ownerId || '').pipe(map((user) => {
|
|
335
|
+
const userName = user ? user.title || user.email || user.id : null;
|
|
336
|
+
this.description = userName
|
|
337
|
+
? this.#translate.instant('yuv.action-menu.action.unlock.description-locked-by-other', { user: userName })
|
|
338
|
+
: this.#translate.instant('yuv.action-menu.action.unlock.description-locked-by-unknown-user');
|
|
339
|
+
return true;
|
|
345
340
|
}));
|
|
346
341
|
}
|
|
347
342
|
isExecutable(items) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-framework-actions.mjs","sources":["../../../../../libs/yuuvis/client-framework/actions/src/lib/actions.module.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/components/contextmenu/contextmenu.component.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/components/contextmenu/contextmenu.component.html","../../../../../libs/yuuvis/client-framework/actions/src/lib/components/contextmenu/contextmenuTrigger.directive.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/models/actions.icon.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/models/actions.models.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/services/action.priority-levels.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/services/action.validation.service.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/copy-action/copy-action.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/cut-action/cut-action.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/delete-action/delete/delete.component.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/delete-action/delete/delete.component.html","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/delete-action/delete-action.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/download-action/download-action.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/services/actions.service.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/tokens/actions.token.ts","../../../../../libs/yuuvis/client-framework/actions/src/yuuvis-client-framework-actions.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\n/**\n * Module for the actions library.\n */\n@NgModule({\n imports: [TranslateModule]\n})\nexport class ActionsModule {}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\n\nimport { CdkMenu, CdkMenuItem } from '@angular/cdk/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { YuvListModule } from '@yuuvis/client-framework/list';\n\nimport {\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n untracked,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ContextMenuAction, ContextMenuItemSelectEvent } from './contextmenu.model';\n\n@Component({\n selector: 'yuv-contextmenu',\n imports: [CommonModule, MatIconModule, YuvListModule, A11yModule, CdkMenu, CdkMenuItem, MatTooltip],\n providers: [MatTooltip],\n templateUrl: './contextmenu.component.html',\n styleUrls: ['./contextmenu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ContextmenuComponent {\n actions = input<ContextMenuAction[]>([]);\n selection = input<unknown[]>([]);\n itemSelect = output<ContextMenuItemSelectEvent>();\n private translate = inject(TranslateService);\n\n cdkMenu = viewChild.required(CdkMenu);\n menuItems = viewChildren<CdkMenuItem | null>(CdkMenuItem);\n\n sortedActions = computed(() =>\n [...this.actions()].sort((a, b) => a.label.localeCompare(b.label, this.translate.getCurrentLang()))\n );\n\n constructor() {\n afterRenderEffect(() => {\n //Focus First Item when @for is finished\n untracked(() => {\n //firstElement?.nativeElement.focus();\n this.cdkMenu().focusFirstItem('program');\n });\n });\n }\n\n onItemTrigger({ action }: ContextMenuItemSelectEvent): void {\n this.itemSelect.emit({ action });\n }\n}\n","<div class=\"context-menu\" cdkMenu>\n @for (a of sortedActions(); track a.id) {\n <span [matTooltip]=\"a.description\" [matTooltipDisabled]=\"!a.description\">\n <div\n class=\"context-menu__item\"\n [class.context-menu__item--disabled]=\"a.disabled\"\n cdkMenuItem\n [cdkMenuItemDisabled]=\"a.disabled\"\n [attr.aria-label]=\"'Execute Action: ' + a.label\"\n (cdkMenuItemTriggered)=\"onItemTrigger({ action: a })\"\n >\n <mat-icon class=\"context-menu__item-icon ymt-icon--size-s\">{{ a.icon }}</mat-icon>\n {{ a.label }}\n </div>\n </span>\n }\n</div>\n","import { CdkContextMenuTrigger, MENU_STACK, MENU_TRIGGER, MenuStack } from '@angular/cdk/menu';\nimport { Directive, effect, Input, input, signal, TemplateRef, untracked } from '@angular/core';\n\n@Directive({\n selector: '[yuvContextMenuTrigger]',\n exportAs: 'yuvContextMenuTrigger',\n standalone: true,\n providers: [\n { provide: MENU_TRIGGER, useExisting: YuvContextMenuTriggerDirective },\n { provide: MENU_STACK, useClass: MenuStack }\n ]\n})\nexport class YuvContextMenuTriggerDirective extends CdkContextMenuTrigger {\n @Input({ alias: 'yuvContextMenuTrigger' })\n override menuTemplateRef!: TemplateRef<unknown>;\n\n triggerWhen = input<boolean | null>(null, { alias: 'yuvContextMenuTriggerWhen' });\n \n #contextMenuEvent = signal<MouseEvent | null>(null);\n\n constructor() {\n super();\n\n effect(() => {\n const event = this.#contextMenuEvent();\n const triggerWhen = this.triggerWhen();\n untracked(() => {\n if ((event && triggerWhen) || (event && triggerWhen === null)) {\n super._openOnContextMenu(event);\n }\n });\n });\n }\n\n override _openOnContextMenu(event: MouseEvent) {\n this.#contextMenuEvent.set(event);\n }\n}\n","export const ACTION_ICON = {\n download: 'download',\n delete: 'delete',\n copy: 'content_copy',\n cut: 'content_cut',\n manageFlavor: 'cards_star'\n}","import { DmsObject } from '@yuuvis/client-core';\nimport { Observable } from 'rxjs';\n\nexport type ActionClass = { \n new (...args: any[]): any \n};\n\nexport class AbstractContextAction {\n context?: ActionContext;\n constructor(context?: ActionContext) {\n this.context = context;\n }\n}\n\nexport interface BaseAction {\n /**\n * Equals the selector of the actions selector (will be set by the action service)\n */\n id: string;\n /**\n * label to be displayed inside the action menu\n */\n label: string;\n /**\n * description to be displayed inside the action menu\n */\n description?: string;\n /**\n * @ignore\n */\n icon: string;\n /**\n * actions priority defining the position of the action within the whole list of actions\n */\n priority: number;\n /**\n * group of actions the action should be part of ('common' or 'further')\n */\n group: string;\n /**\n * number of selected items supported by the action\n * (SelectionRange.SINGLE_SELECT, SelectionRange.MULTI_SELECT, SelectionRange.MULTI_SELECT_ONLY )\n */\n range: SelectionRange;\n\n /**\n * Types that are supported by the action\n */\n supports: ActionSupport;\n\n /**\n * Determining whether or not the action is executable for the given selection.\n * Controls visibility: when false, the action is hidden from the UI entirely.\n * @param item Current selection\n * @returns true if the action is executable for the current selection, false otherwise\n */\n isExecutable: (items: DmsObject[]) => Observable<boolean>;\n\n /**\n * Optional check whether the action should be disabled for the given selection.\n * Unlike isExecutable (which controls visibility), isDisabled controls whether\n * a visible action can be triggered. When absent, the action is never disabled.\n * @param items Current selection\n * @returns true if the action should be disabled, false otherwise\n */\n isDisabled?: (items: DmsObject[]) => Observable<boolean>;\n\n /**\n * Resolved disabled state for template binding. Set by ActionsService after\n * evaluating isDisabled(). Do not set manually on action classes.\n */\n disabled?: boolean;\n}\n\nexport interface ActionSupport {\n // object types\n types?: string[];\n // object types\n sots?: string[];\n // pattern to match the type name against\n pattern?: string;\n}\n\nexport interface ActionContext {\n /**\n * As actions deal with DmsObjects the subject property is the property that\n * should be used to display the name of the object. This may be used for\n * showing the name of the object in a confirmation/error dialog or similar.\n */\n subjectProperty?: string;\n /**\n * The appId is the id of the application that the action is executed in.\n */\n appId?: string;\n}\n\nexport interface Action extends BaseAction {\n run: (items: DmsObject[]) => Observable<boolean>;\n /**\n * Optional child actions. When present, this action renders as a sub-menu\n * trigger instead of executing `run`. Nesting can be arbitrarily deep.\n * An empty array is treated as \"no children\" (leaf action).\n */\n children?: Action[];\n}\n\nexport interface ActionOptions {\n context?: ActionContext;\n exclude?: string[] | RegExp;\n}\n\nexport enum SelectionRange {\n SINGLE_SELECT,\n MULTI_SELECT,\n MULTI_SELECT_ONLY,\n ANY\n}\n\nexport const BASE_ACTION = {\n copy: 'yuv.base.copy',\n cut: 'yuv.base.cut',\n download: 'yuv.base.download',\n delete: 'yuv.base.delete'\n};\n","export const ActionPriorityLevel = {\n LEVEL_1: 1,\n LEVEL_2: 2,\n LEVEL_3: 3,\n LEVEL_4: 4,\n LEVEL_5: 5,\n LEVEL_6: 6,\n LEVEL_7: 7,\n LEVEL_8: 8,\n LEVEL_9: 9,\n LEVEL_10: 10\n} as const;\n","import { inject, Injectable } from '@angular/core';\nimport { AppCacheService, DmsObject, ObjectLockingService, TranslateService, YuvUser } from '@yuuvis/client-core';\nimport { map, Observable, of } from 'rxjs';\n\n/**\n * Service responsible for validating actions on DMS objects.\n * Provides checks for document lock states and related user information.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ActionsValidationService {\n private readonly translate = inject(TranslateService);\n readonly #appCache = inject(AppCacheService);\n readonly #objectLocking = inject(ObjectLockingService);\n\n /** Cache key used to retrieve the list of users from the application cache. */\n readonly #STORAGE_USER_KEY = 'yuv.core.users.storage';\n\n /**\n * Checks whether a DMS object is locked by another user.\n *\n * Delegates lock detection to {@link ObjectLockingService.getLockState}. When the\n * object is locked by a different user, returns `state: true` along with a\n * translated description identifying the lock holder.\n *\n * @param dmsObject - The DMS object to check for a lock.\n * @returns An observable emitting an object with:\n * - `state`: `true` if the object is locked by another user, `false` otherwise.\n * - `description`: An optional translated message describing the lock state (only present when `state` is `true`).\n */\n checkDocumentLock(dmsObject: DmsObject): Observable<{ state: boolean; description?: string }> {\n const lockState = this.#objectLocking.getLockState(dmsObject);\n if (!lockState.locked || lockState.lockedByCurrentUser) return of({ state: false });\n return this.#appCache.getItem<YuvUser[]>(this.#STORAGE_USER_KEY).pipe(\n map((users) => {\n const lockUser = users?.find((user) => user.id === lockState.ownerId);\n const user = lockUser ? lockUser.title || lockUser.email || lockUser.id : null;\n const description = user\n ? this.translate.instant('yuv.action-menu.action.unlock.description-locked-by-other', { user })\n : this.translate.instant('yuv.action-menu.action.unlock.description-locked-by-unknown-user');\n return { state: true, description };\n })\n );\n }\n}\n","import { inject } from '@angular/core';\nimport { ClipboardService, DmsObject, TranslateService } from '@yuuvis/client-core';\nimport { Observable, of } from 'rxjs';\nimport { AbstractContextAction, Action, ACTION_ICON, ActionSupport, BASE_ACTION, SelectionRange } from '../../models';\nimport { ActionPriorityLevel } from '../../services';\n\nexport class CopyAction extends AbstractContextAction implements Action {\n readonly #clipboardService = inject(ClipboardService);\n readonly #translate = inject(TranslateService);\n\n id = BASE_ACTION.copy;\n label = this.#translate.instant('yuv.action-menu.action.copy.dms.object.label');\n description = this.#translate.instant('yuv.action-menu.action.copy.dms.object.description');\n priority = ActionPriorityLevel.LEVEL_8;\n icon = ACTION_ICON.copy;\n group = 'common';\n range = SelectionRange.MULTI_SELECT;\n supports: ActionSupport = {\n pattern: '*'\n };\n\n isExecutable(items: DmsObject[]): Observable<boolean> {\n const notAllowed = items.some((item) => !item.permissions?.writeIndexData);\n return of(items.length > 0 && !notAllowed);\n }\n\n run(items: DmsObject[]): Observable<boolean> {\n this.#clipboardService.addObjects(items, 'copy', this.context?.appId);\n return of(true);\n }\n}\n","import { inject } from '@angular/core';\nimport { ClipboardService, DmsObject, TranslateService } from '@yuuvis/client-core';\nimport { Observable, of } from 'rxjs';\nimport { AbstractContextAction, Action, ACTION_ICON, ActionSupport, BASE_ACTION, SelectionRange } from '../../models';\nimport { ActionPriorityLevel } from '../../services';\n\nexport class CutAction extends AbstractContextAction implements Action {\n readonly #clipboardService = inject(ClipboardService);\n readonly #translate = inject(TranslateService);\n\n id = BASE_ACTION.cut;\n label = this.#translate.instant('yuv.action-menu.action.cut.dms.object.label');\n description = this.#translate.instant('yuv.action-menu.action.cut.dms.object.description');\n priority = ActionPriorityLevel.LEVEL_8;\n icon = ACTION_ICON.cut;\n group = 'common';\n range = SelectionRange.MULTI_SELECT;\n supports: ActionSupport = {\n pattern: '*'\n };\n\n isExecutable(items: DmsObject[]): Observable<boolean> {\n return of(\n items.length > 0 &&\n items.every(\n (item) => item.permissions?.writeContent && item.permissions.writeIndexData && item.permissions.deleteObject\n )\n );\n }\n\n run(items: DmsObject[]): Observable<boolean> {\n this.#clipboardService.addObjects(items, 'cut', this.context?.appId);\n return of(true);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, signal } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport {\n DmsObject,\n DmsService,\n ObjectDeleteError,\n ObjectDeleteResult,\n TranslatePipe,\n TranslateService\n} from '@yuuvis/client-core';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { ActionContext } from '../../../models';\n\n/**\n * @ignore\n */\n\n@Component({\n selector: 'yuv-delete',\n standalone: true,\n imports: [CommonModule, TranslatePipe, MatButtonModule, DialogComponent, MatProgressBar, YmtButtonDirective],\n templateUrl: './delete.component.html',\n styleUrls: ['./delete.component.scss']\n})\nexport class DeleteComponent {\n readonly #dmsService = inject(DmsService);\n private readonly translate = inject(TranslateService);\n #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<DeleteComponent>);\n\n errors = signal<\n {\n status: number;\n subject: string;\n message: string;\n }[]\n >([]);\n\n deleting = signal(false);\n deleteItems: DmsObject[] = this.#dialogData.items;\n context: ActionContext = this.#dialogData.context;\n\n run() {\n this.errors.set([]);\n if (this.deleteItems.length) {\n this.deleting.set(true);\n this.#dmsService\n .deleteDmsObjects(\n this.deleteItems.map((o) => ({\n id: o.id,\n subject: o.data[this.context.subjectProperty || o.id] as string\n }))\n )\n .subscribe({\n next: (res: ObjectDeleteResult[]) => {\n this.errors.set(\n res\n .filter((r) => !!r._error)\n .map((r: any) => ({\n status: r._error.status,\n subject: this.context?.subjectProperty ? r.properties[this.context.subjectProperty].value : r.id,\n message: this.#getErrorMessage(r._error)\n }))\n );\n !this.errors().length && this.#dialogRef.close();\n },\n error: (err: ObjectDeleteError) => {\n this.deleting.set(false);\n },\n complete: () => this.deleting.set(false)\n });\n }\n }\n\n #getErrorMessage(error: ObjectDeleteError): string {\n switch (error.status) {\n case 403:\n return this.translate.instant('yuv.action-menu.action.delete.error.403');\n case 404:\n return this.translate.instant('yuv.action-menu.action.delete.error.404');\n default:\n return this.translate.instant('yuv.action-menu.action.delete.error.default');\n }\n }\n\n cancel() {\n this.#dialogRef.close();\n }\n}\n","<yuv-dialog [headertitle]=\"'yuv.action-menu.action.delete.dms.object.label' | translate\">\n <main class=\"yuv-delete\" [ngClass]=\"{ deleting: deleting() }\">\n <mat-progress-bar mode=\"indeterminate\" class=\"progress-bar\"></mat-progress-bar>\n\n @if (errors().length) {\n <ul class=\"errors\">\n @for (e of errors(); track $index) {\n <li class=\"error\">\n <span class=\"subject\">{{ e.subject }}</span>\n <span class=\"message\">{{ e.message }}</span>\n </li>\n }\n </ul>\n } @else {\n <p>{{ 'yuv.action-menu.action.delete.dms.object.confirm.message' | translate }}</p>\n }\n </main>\n <footer class=\"form-buttons\">\n <button ymtButton=\"secondary\" [disabled]=\"deleting()\" (click)=\"cancel()\">\n {{ 'yuv.action-menu.action.delete.dms.object.confirm.cancel' | translate }}\n </button>\n\n <button ymtButton=\"primary\" [disabled]=\"deleting() || !!errors().length\" (click)=\"run()\">\n {{ 'yuv.action-menu.action.delete.dms.object.confirm.ok' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { inject } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DmsObject, RetentionService, TranslateService } from '@yuuvis/client-core';\nimport { map, Observable, of } from 'rxjs';\nimport { AbstractContextAction, Action, ACTION_ICON, ActionSupport, BASE_ACTION, SelectionRange } from '../../models';\nimport { ActionPriorityLevel, ActionsValidationService } from '../../services';\nimport { DeleteComponent } from './delete/delete.component';\n\nexport class DeleteAction extends AbstractContextAction implements Action {\n readonly #translate = inject(TranslateService);\n readonly #dialog = inject(MatDialog);\n readonly #retention = inject(RetentionService);\n readonly #actionsValidation = inject(ActionsValidationService);\n\n id = BASE_ACTION.delete;\n label = this.#translate.instant('yuv.action-menu.action.delete.dms.object.label');\n description = this.#translate.instant('yuv.action-menu.action.delete.dms.object.description');\n priority = ActionPriorityLevel.LEVEL_8;\n icon = ACTION_ICON.delete;\n group = 'common';\n range = SelectionRange.MULTI_SELECT;\n supports: ActionSupport = {\n pattern: '*'\n };\n\n isDisabled(items: DmsObject[]): Observable<boolean> {\n return this.#actionsValidation.checkDocumentLock(items[0]).pipe(\n map(({ state, description }) => {\n if (state) {\n this.description = description;\n return true;\n }\n return false;\n })\n );\n }\n\n isExecutable(items: DmsObject[]): Observable<boolean> {\n const dmsObject = items[0];\n return of(\n !!dmsObject.permissions &&\n dmsObject.permissions.deleteObject &&\n !this.#retention.getRetentionState(dmsObject).underRetention\n );\n }\n\n run(items: DmsObject[]): Observable<boolean> {\n this.#dialog.open(DeleteComponent, {\n data: {\n items,\n context: this.context\n }\n });\n return of(true);\n }\n}\n","import { inject } from '@angular/core';\nimport { DmsObject, DmsService, SystemType, TranslateService } from '@yuuvis/client-core';\nimport { Observable, of } from 'rxjs';\nimport { AbstractContextAction, Action, ACTION_ICON, ActionSupport, BASE_ACTION, SelectionRange } from '../../models';\nimport { ActionPriorityLevel } from '../../services';\n\nexport class DownloadAction extends AbstractContextAction implements Action {\n readonly #translate = inject(TranslateService);\n readonly #dmsService = inject(DmsService);\n\n id = BASE_ACTION.download;\n label = this.#translate.instant('yuv.action-menu.action.download.dms.object.content.label');\n description = this.#translate.instant('yuv.action-menu.action.download.dms.object.content.description');\n priority = ActionPriorityLevel.LEVEL_2;\n icon = ACTION_ICON.download;\n group = 'common';\n range = SelectionRange.MULTI_SELECT;\n supports: ActionSupport = {\n types: [SystemType.DOCUMENT]\n };\n\n isExecutable(selection: DmsObject[]): Observable<boolean> {\n const noContentMatch = (Array.isArray(selection) ? selection : [selection]).find((e) => !e.content);\n if (selection.length < 1) return of(false);\n return of(!noContentMatch);\n }\n\n run(selection: DmsObject[]): Observable<boolean> {\n this.#dmsService.downloadContent(Array.isArray(selection) ? selection : [selection]);\n return of(true);\n }\n}\n","import { Injectable, Injector, Signal, inject, runInInjectionContext } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DmsObject, Utils } from '@yuuvis/client-core';\nimport { Observable, forkJoin, map, of, switchMap } from 'rxjs';\nimport { CopyAction } from '../actions/copy-action/copy-action';\nimport { CutAction } from '../actions/cut-action/cut-action';\nimport { DeleteAction } from '../actions/delete-action/delete-action';\nimport { DownloadAction } from '../actions/download-action/download-action';\nimport { ContextmenuComponent } from '../components/contextmenu/contextmenu.component';\nimport { Action, ActionClass, ActionContext, ActionOptions, BASE_ACTION } from '../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ActionsService {\n readonly injector = inject(Injector);\n #dialog = inject(MatDialog);\n readonly iconRegistry = inject(MatIconRegistry);\n\n private _registeredActions: Record<string, ActionClass> = {};\n\n /**\n * Registers actions that can be used in the application.\n * @param a Array of actions to register, each action must have an id and a\n * class that extends ActionClass\n */\n registerActions(actions: { id: string; action: ActionClass }[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n Array.isArray(actions) &&\n actions.forEach((action) => {\n this._registeredActions[action.id] = action.action;\n });\n }\n\n /**\n * Conceals actions that are no longer needed or should not be available.\n * This will remove the actions from the registered actions list.\n * @param actionIDs Array of action IDs to conceal\n */\n concealActions(actionIDs: string[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n Array.isArray(actionIDs) && actionIDs.forEach((id) => delete this._registeredActions[id]);\n }\n\n /**\n * Returns all actions that are executable for the given selection.\n * @param selection Array of DmsObjects to check for executable actions\n * @param options options to filter the actions\n * @returns Observable of actions that are executable for the given selection\n */\n getActions(selection: DmsObject[], options?: ActionOptions): Observable<Action[]> {\n // TODO: check if selection is empty or if nessasery at all\n // if (!selection || selection.length === 0) return of([]);\n const selections: Observable<{ action: Action; executable: boolean }>[] = this.getAvailableActions(options?.context)\n .filter((action) =>\n options?.exclude\n ? Array.isArray(options.exclude)\n ? !options.exclude.includes(action.id)\n : options.exclude instanceof RegExp\n ? !options.exclude.test(action.id)\n : true\n : true\n )\n .map((action: Action) =>\n action.isExecutable(selection).pipe(\n map((executable: boolean) => ({\n action,\n executable\n }))\n )\n );\n\n return forkJoin(selections).pipe(\n map((res: { action: Action; executable: boolean }[]) =>\n res.filter((result) => result.executable).map((executable) => executable.action)\n ),\n switchMap((actions: Action[]) => this.resolveDisabledState(actions, selection))\n );\n }\n\n /**\n * Get all available actions. This includes the default actions and all registered actions but\n * without checking if they are executable.\n * @param context Context passed to the actions\n * @returns Array of available actions\n */\n getAvailableActions(context?: ActionContext): Action[] {\n let actions: Action[] = [];\n\n runInInjectionContext(this.injector, () => {\n actions = [...Object.values(this._registeredActions).map((action: ActionClass) => new action(context))];\n });\n return actions;\n }\n\n getActionsForType(objectTypeId: string, context?: ActionContext): Action[] {\n return this.getAvailableActions(context).filter((action: Action) =>\n this.#actionsSupportsType(action, objectTypeId)\n );\n }\n\n getActionById(id: string, context?: ActionContext): Action | undefined {\n return this.getAvailableActions(context).find((action) => action.id === id);\n }\n\n getActionsById(ids: string[], context?: ActionContext): Action[] {\n return this.getAvailableActions(context).filter((action: Action) => ids.includes(action.id));\n }\n\n /**\n * Resolves the disabled state for the given actions against the given selection.\n * Sets the `disabled` property on each action instance.\n * @param actions Array of actions to resolve\n * @param selection Array of DmsObjects to check against\n * @returns Observable emitting the same actions with `disabled` set\n */\n resolveDisabledState(actions: Action[], selection: DmsObject[]): Observable<Action[]> {\n if (actions.length === 0) return of([]);\n\n const disabledChecks = actions.map((action: Action) => {\n const resolve$ = action.isDisabled\n ? action.isDisabled(selection).pipe(\n map((disabled: boolean) => {\n action.disabled = disabled;\n return action;\n })\n )\n : of(Object.assign(action, { disabled: false }));\n\n // Recursively resolve children\n if (action.children?.length) {\n return resolve$.pipe(\n switchMap((action) => this.resolveDisabledState(action.children!, selection).pipe(map(() => action)))\n );\n }\n return resolve$;\n });\n\n return forkJoin(disabledChecks);\n }\n\n openContextMenu(\n actions: Signal<Action[]>,\n callback: (action: Action) => void,\n overlayOrigin: { x: number; y: number }\n ): void {\n if (actions().length)\n this.#dialog.open(ContextmenuComponent, {\n data: { actions, callback },\n panelClass: 'context-menu-dialog'\n // position: { top: `${overlayOrigin.y}`, left: `${overlayOrigin.x}` }\n });\n const width = 10;\n const hight = 10;\n\n setTimeout(() => {\n const dialog = document.querySelector('.context-menu-dialog') as HTMLElement;\n\n const dialogWidth = dialog.offsetWidth;\n const dialogHeight = dialog.offsetHeight;\n const screenW = window.innerWidth;\n const screenH = window.innerHeight;\n\n let left = overlayOrigin.x;\n let top = overlayOrigin.y;\n if (left + dialogWidth > screenW) {\n left = screenW - dialogWidth - width;\n }\n if (top + dialogHeight > screenH) {\n top = screenH - dialogHeight - hight;\n }\n\n dialog.style.position = 'fixed';\n dialog.style.left = `${left}px`;\n dialog.style.top = `${top}px`;\n });\n }\n\n /**\n * Registers a set of default actions that are commonly used in the application.\n * These actions include delete, download, copy and cut. This method can be called\n * during the initialization of the application to ensure that these actions\n * are available for use.\n */\n registerDefaultActions(): void {\n this.registerActions([\n { id: BASE_ACTION.delete, action: DeleteAction },\n { id: BASE_ACTION.download, action: DownloadAction },\n { id: BASE_ACTION.copy, action: CopyAction },\n { id: BASE_ACTION.cut, action: CutAction }\n ]);\n }\n\n #actionsSupportsType(action: Action, objectTypeId: string): boolean {\n const matchesTypes = action.supports.types ? action.supports.types.includes(objectTypeId) : false;\n const matchesSOTs = action.supports.sots ? action.supports.sots.includes(objectTypeId) : false;\n const matchesPattern = action.supports.pattern\n ? Utils.patternToRegExp(action.supports.pattern).test(objectTypeId)\n : false;\n return matchesTypes || matchesSOTs || matchesPattern;\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ActionContext } from '../models';\n\nexport const ACTION_CONTEXT_TOKEN = new InjectionToken<ActionContext>('action-context');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["TranslateService","i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-client-framework-actions.mjs","sources":["../../../../../libs/yuuvis/client-framework/actions/src/lib/actions.module.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/components/contextmenu/contextmenu.component.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/components/contextmenu/contextmenu.component.html","../../../../../libs/yuuvis/client-framework/actions/src/lib/components/contextmenu/contextmenuTrigger.directive.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/models/actions.icon.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/models/actions.models.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/services/action.priority-levels.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/services/action.validation.service.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/copy-action/copy-action.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/cut-action/cut-action.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/delete-action/delete/delete.component.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/delete-action/delete/delete.component.html","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/delete-action/delete-action.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/download-action/download-action.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/services/actions.service.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/tokens/actions.token.ts","../../../../../libs/yuuvis/client-framework/actions/src/yuuvis-client-framework-actions.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\n/**\n * Module for the actions library.\n */\n@NgModule({\n imports: [TranslateModule]\n})\nexport class ActionsModule {}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\n\nimport { CdkMenu, CdkMenuItem } from '@angular/cdk/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { YuvListModule } from '@yuuvis/client-framework/list';\n\nimport {\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n untracked,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ContextMenuAction, ContextMenuItemSelectEvent } from './contextmenu.model';\n\n@Component({\n selector: 'yuv-contextmenu',\n imports: [CommonModule, MatIconModule, YuvListModule, A11yModule, CdkMenu, CdkMenuItem, MatTooltip],\n providers: [MatTooltip],\n templateUrl: './contextmenu.component.html',\n styleUrls: ['./contextmenu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ContextmenuComponent {\n actions = input<ContextMenuAction[]>([]);\n selection = input<unknown[]>([]);\n itemSelect = output<ContextMenuItemSelectEvent>();\n private translate = inject(TranslateService);\n\n cdkMenu = viewChild.required(CdkMenu);\n menuItems = viewChildren<CdkMenuItem | null>(CdkMenuItem);\n\n sortedActions = computed(() =>\n [...this.actions()].sort((a, b) => a.label.localeCompare(b.label, this.translate.getCurrentLang()))\n );\n\n constructor() {\n afterRenderEffect(() => {\n //Focus First Item when @for is finished\n untracked(() => {\n //firstElement?.nativeElement.focus();\n this.cdkMenu().focusFirstItem('program');\n });\n });\n }\n\n onItemTrigger({ action }: ContextMenuItemSelectEvent): void {\n this.itemSelect.emit({ action });\n }\n}\n","<div class=\"context-menu\" cdkMenu>\n @for (a of sortedActions(); track a.id) {\n <span [matTooltip]=\"a.description\" [matTooltipDisabled]=\"!a.description\">\n <div\n class=\"context-menu__item\"\n [class.context-menu__item--disabled]=\"a.disabled\"\n cdkMenuItem\n [cdkMenuItemDisabled]=\"a.disabled\"\n [attr.aria-label]=\"'Execute Action: ' + a.label\"\n (cdkMenuItemTriggered)=\"onItemTrigger({ action: a })\"\n >\n <mat-icon class=\"context-menu__item-icon ymt-icon--size-s\">{{ a.icon }}</mat-icon>\n {{ a.label }}\n </div>\n </span>\n }\n</div>\n","import { CdkContextMenuTrigger, MENU_STACK, MENU_TRIGGER, MenuStack } from '@angular/cdk/menu';\nimport { Directive, effect, Input, input, signal, TemplateRef, untracked } from '@angular/core';\n\n@Directive({\n selector: '[yuvContextMenuTrigger]',\n exportAs: 'yuvContextMenuTrigger',\n standalone: true,\n providers: [\n { provide: MENU_TRIGGER, useExisting: YuvContextMenuTriggerDirective },\n { provide: MENU_STACK, useClass: MenuStack }\n ]\n})\nexport class YuvContextMenuTriggerDirective extends CdkContextMenuTrigger {\n @Input({ alias: 'yuvContextMenuTrigger' })\n override menuTemplateRef!: TemplateRef<unknown>;\n\n triggerWhen = input<boolean | null>(null, { alias: 'yuvContextMenuTriggerWhen' });\n \n #contextMenuEvent = signal<MouseEvent | null>(null);\n\n constructor() {\n super();\n\n effect(() => {\n const event = this.#contextMenuEvent();\n const triggerWhen = this.triggerWhen();\n untracked(() => {\n if ((event && triggerWhen) || (event && triggerWhen === null)) {\n super._openOnContextMenu(event);\n }\n });\n });\n }\n\n override _openOnContextMenu(event: MouseEvent) {\n this.#contextMenuEvent.set(event);\n }\n}\n","export const ACTION_ICON = {\n download: 'download',\n delete: 'delete',\n copy: 'content_copy',\n cut: 'content_cut',\n manageFlavor: 'cards_star'\n}","import { DmsObject } from '@yuuvis/client-core';\nimport { Observable } from 'rxjs';\n\nexport type ActionClass = { \n new (...args: any[]): any \n};\n\nexport class AbstractContextAction {\n context?: ActionContext;\n constructor(context?: ActionContext) {\n this.context = context;\n }\n}\n\nexport interface BaseAction {\n /**\n * Equals the selector of the actions selector (will be set by the action service)\n */\n id: string;\n /**\n * label to be displayed inside the action menu\n */\n label: string;\n /**\n * description to be displayed inside the action menu\n */\n description?: string;\n /**\n * @ignore\n */\n icon: string;\n /**\n * actions priority defining the position of the action within the whole list of actions\n */\n priority: number;\n /**\n * group of actions the action should be part of ('common' or 'further')\n */\n group: string;\n /**\n * number of selected items supported by the action\n * (SelectionRange.SINGLE_SELECT, SelectionRange.MULTI_SELECT, SelectionRange.MULTI_SELECT_ONLY )\n */\n range: SelectionRange;\n\n /**\n * Types that are supported by the action\n */\n supports: ActionSupport;\n\n /**\n * Determining whether or not the action is executable for the given selection.\n * Controls visibility: when false, the action is hidden from the UI entirely.\n * @param item Current selection\n * @returns true if the action is executable for the current selection, false otherwise\n */\n isExecutable: (items: DmsObject[]) => Observable<boolean>;\n\n /**\n * Optional check whether the action should be disabled for the given selection.\n * Unlike isExecutable (which controls visibility), isDisabled controls whether\n * a visible action can be triggered. When absent, the action is never disabled.\n * @param items Current selection\n * @returns true if the action should be disabled, false otherwise\n */\n isDisabled?: (items: DmsObject[]) => Observable<boolean>;\n\n /**\n * Resolved disabled state for template binding. Set by ActionsService after\n * evaluating isDisabled(). Do not set manually on action classes.\n */\n disabled?: boolean;\n}\n\nexport interface ActionSupport {\n // object types\n types?: string[];\n // object types\n sots?: string[];\n // pattern to match the type name against\n pattern?: string;\n}\n\nexport interface ActionContext {\n /**\n * As actions deal with DmsObjects the subject property is the property that\n * should be used to display the name of the object. This may be used for\n * showing the name of the object in a confirmation/error dialog or similar.\n */\n subjectProperty?: string;\n /**\n * The appId is the id of the application that the action is executed in.\n */\n appId?: string;\n}\n\nexport interface Action extends BaseAction {\n run: (items: DmsObject[]) => Observable<boolean>;\n /**\n * Optional child actions. When present, this action renders as a sub-menu\n * trigger instead of executing `run`. Nesting can be arbitrarily deep.\n * An empty array is treated as \"no children\" (leaf action).\n */\n children?: Action[];\n}\n\nexport interface ActionOptions {\n context?: ActionContext;\n exclude?: string[] | RegExp;\n}\n\nexport enum SelectionRange {\n SINGLE_SELECT,\n MULTI_SELECT,\n MULTI_SELECT_ONLY,\n ANY\n}\n\nexport const BASE_ACTION = {\n copy: 'yuv.base.copy',\n cut: 'yuv.base.cut',\n download: 'yuv.base.download',\n delete: 'yuv.base.delete'\n};\n","export const ActionPriorityLevel = {\n LEVEL_1: 1,\n LEVEL_2: 2,\n LEVEL_3: 3,\n LEVEL_4: 4,\n LEVEL_5: 5,\n LEVEL_6: 6,\n LEVEL_7: 7,\n LEVEL_8: 8,\n LEVEL_9: 9,\n LEVEL_10: 10\n} as const;\n","import { inject, Injectable } from '@angular/core';\nimport { AppCacheService, DmsObject, ObjectLockingService, TranslateService, YuvUser } from '@yuuvis/client-core';\nimport { map, Observable, of } from 'rxjs';\n\n/**\n * Service responsible for validating actions on DMS objects.\n * Provides checks for document lock states and related user information.\n */\n/** @deprecated */\n@Injectable({\n providedIn: 'root'\n})\nexport class ActionsValidationService {\n private readonly translate = inject(TranslateService);\n readonly #appCache = inject(AppCacheService);\n readonly #objectLocking = inject(ObjectLockingService);\n\n /** Cache key used to retrieve the list of users from the application cache. */\n readonly #STORAGE_USER_KEY = 'yuv.core.users.storage';\n\n /** @deprecated */\n checkDocumentLock(dmsObject: DmsObject): Observable<{ state: boolean; description?: string }> {\n const lockState = this.#objectLocking.getLockState(dmsObject);\n if (!lockState.locked || lockState.lockedByCurrentUser) return of({ state: false });\n return this.#appCache.getItem<YuvUser[]>(this.#STORAGE_USER_KEY).pipe(\n map((users) => {\n const lockUser = users?.find((user) => user.id === lockState.ownerId);\n const user = lockUser ? lockUser.title || lockUser.email || lockUser.id : null;\n const description = user\n ? this.translate.instant('yuv.action-menu.action.unlock.description-locked-by-other', { user })\n : this.translate.instant('yuv.action-menu.action.unlock.description-locked-by-unknown-user');\n return { state: true, description };\n })\n );\n }\n}\n","import { inject } from '@angular/core';\nimport { ClipboardService, DmsObject, TranslateService } from '@yuuvis/client-core';\nimport { Observable, of } from 'rxjs';\nimport { AbstractContextAction, Action, ACTION_ICON, ActionSupport, BASE_ACTION, SelectionRange } from '../../models';\nimport { ActionPriorityLevel } from '../../services';\n\nexport class CopyAction extends AbstractContextAction implements Action {\n readonly #clipboardService = inject(ClipboardService);\n readonly #translate = inject(TranslateService);\n\n id = BASE_ACTION.copy;\n label = this.#translate.instant('yuv.action-menu.action.copy.dms.object.label');\n description = this.#translate.instant('yuv.action-menu.action.copy.dms.object.description');\n priority = ActionPriorityLevel.LEVEL_8;\n icon = ACTION_ICON.copy;\n group = 'common';\n range = SelectionRange.MULTI_SELECT;\n supports: ActionSupport = {\n pattern: '*'\n };\n\n isExecutable(items: DmsObject[]): Observable<boolean> {\n const notAllowed = items.some((item) => !item.permissions?.writeIndexData);\n return of(items.length > 0 && !notAllowed);\n }\n\n run(items: DmsObject[]): Observable<boolean> {\n this.#clipboardService.addObjects(items, 'copy', this.context?.appId);\n return of(true);\n }\n}\n","import { inject } from '@angular/core';\nimport { ClipboardService, DmsObject, TranslateService } from '@yuuvis/client-core';\nimport { Observable, of } from 'rxjs';\nimport { AbstractContextAction, Action, ACTION_ICON, ActionSupport, BASE_ACTION, SelectionRange } from '../../models';\nimport { ActionPriorityLevel } from '../../services';\n\nexport class CutAction extends AbstractContextAction implements Action {\n readonly #clipboardService = inject(ClipboardService);\n readonly #translate = inject(TranslateService);\n\n id = BASE_ACTION.cut;\n label = this.#translate.instant('yuv.action-menu.action.cut.dms.object.label');\n description = this.#translate.instant('yuv.action-menu.action.cut.dms.object.description');\n priority = ActionPriorityLevel.LEVEL_8;\n icon = ACTION_ICON.cut;\n group = 'common';\n range = SelectionRange.MULTI_SELECT;\n supports: ActionSupport = {\n pattern: '*'\n };\n\n isExecutable(items: DmsObject[]): Observable<boolean> {\n return of(\n items.length > 0 &&\n items.every(\n (item) => item.permissions?.writeContent && item.permissions.writeIndexData && item.permissions.deleteObject\n )\n );\n }\n\n run(items: DmsObject[]): Observable<boolean> {\n this.#clipboardService.addObjects(items, 'cut', this.context?.appId);\n return of(true);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, signal } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport {\n DmsObject,\n DmsService,\n ObjectDeleteError,\n ObjectDeleteResult,\n TranslatePipe,\n TranslateService\n} from '@yuuvis/client-core';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { ActionContext } from '../../../models';\n\n/**\n * @ignore\n */\n\n@Component({\n selector: 'yuv-delete',\n standalone: true,\n imports: [CommonModule, TranslatePipe, MatButtonModule, DialogComponent, MatProgressBar, YmtButtonDirective],\n templateUrl: './delete.component.html',\n styleUrls: ['./delete.component.scss']\n})\nexport class DeleteComponent {\n readonly #dmsService = inject(DmsService);\n private readonly translate = inject(TranslateService);\n #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<DeleteComponent>);\n\n errors = signal<\n {\n status: number;\n subject: string;\n message: string;\n }[]\n >([]);\n\n deleting = signal(false);\n deleteItems: DmsObject[] = this.#dialogData.items;\n context: ActionContext = this.#dialogData.context;\n\n run() {\n this.errors.set([]);\n if (this.deleteItems.length) {\n this.deleting.set(true);\n this.#dmsService\n .deleteDmsObjects(\n this.deleteItems.map((o) => ({\n id: o.id,\n subject: o.data[this.context.subjectProperty || o.id] as string\n }))\n )\n .subscribe({\n next: (res: ObjectDeleteResult[]) => {\n this.errors.set(\n res\n .filter((r) => !!r._error)\n .map((r: any) => ({\n status: r._error.status,\n subject: this.context?.subjectProperty ? r.properties[this.context.subjectProperty].value : r.id,\n message: this.#getErrorMessage(r._error)\n }))\n );\n !this.errors().length && this.#dialogRef.close();\n },\n error: (err: ObjectDeleteError) => {\n this.deleting.set(false);\n },\n complete: () => this.deleting.set(false)\n });\n }\n }\n\n #getErrorMessage(error: ObjectDeleteError): string {\n switch (error.status) {\n case 403:\n return this.translate.instant('yuv.action-menu.action.delete.error.403');\n case 404:\n return this.translate.instant('yuv.action-menu.action.delete.error.404');\n default:\n return this.translate.instant('yuv.action-menu.action.delete.error.default');\n }\n }\n\n cancel() {\n this.#dialogRef.close();\n }\n}\n","<yuv-dialog [headertitle]=\"'yuv.action-menu.action.delete.dms.object.label' | translate\">\n <main class=\"yuv-delete\" [ngClass]=\"{ deleting: deleting() }\">\n <mat-progress-bar mode=\"indeterminate\" class=\"progress-bar\"></mat-progress-bar>\n\n @if (errors().length) {\n <ul class=\"errors\">\n @for (e of errors(); track $index) {\n <li class=\"error\">\n <span class=\"subject\">{{ e.subject }}</span>\n <span class=\"message\">{{ e.message }}</span>\n </li>\n }\n </ul>\n } @else {\n <p>{{ 'yuv.action-menu.action.delete.dms.object.confirm.message' | translate }}</p>\n }\n </main>\n <footer class=\"form-buttons\">\n <button ymtButton=\"secondary\" [disabled]=\"deleting()\" (click)=\"cancel()\">\n {{ 'yuv.action-menu.action.delete.dms.object.confirm.cancel' | translate }}\n </button>\n\n <button ymtButton=\"primary\" [disabled]=\"deleting() || !!errors().length\" (click)=\"run()\">\n {{ 'yuv.action-menu.action.delete.dms.object.confirm.ok' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { inject } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DmsObject, IdmService, ObjectLockingService, RetentionService, TranslateService } from '@yuuvis/client-core';\nimport { map, Observable, of } from 'rxjs';\nimport { AbstractContextAction, Action, ACTION_ICON, ActionSupport, BASE_ACTION, SelectionRange } from '../../models';\nimport { ActionPriorityLevel } from '../../services';\nimport { DeleteComponent } from './delete/delete.component';\n\nexport class DeleteAction extends AbstractContextAction implements Action {\n readonly #translate = inject(TranslateService);\n readonly #dialog = inject(MatDialog);\n readonly #retention = inject(RetentionService);\n readonly #idmService = inject(IdmService);\n readonly #objectLocking = inject(ObjectLockingService);\n\n id = BASE_ACTION.delete;\n label = this.#translate.instant('yuv.action-menu.action.delete.dms.object.label');\n description = this.#translate.instant('yuv.action-menu.action.delete.dms.object.description');\n priority = ActionPriorityLevel.LEVEL_8;\n icon = ACTION_ICON.delete;\n group = 'common';\n range = SelectionRange.MULTI_SELECT;\n supports: ActionSupport = {\n pattern: '*'\n };\n\n isDisabled(items: DmsObject[]): Observable<boolean> {\n const lockState = this.#objectLocking.getLockState(items[0]);\n if (!lockState.locked) return of(false);\n return this.#idmService.getUserById(lockState.ownerId || '').pipe(\n map((user) => {\n const userName = user ? user.title || user.email || user.id : null;\n this.description = userName\n ? this.#translate.instant('yuv.action-menu.action.unlock.description-locked-by-other', { user: userName })\n : this.#translate.instant('yuv.action-menu.action.unlock.description-locked-by-unknown-user');\n return true;\n })\n );\n }\n\n isExecutable(items: DmsObject[]): Observable<boolean> {\n const dmsObject = items[0];\n return of(\n !!dmsObject.permissions &&\n dmsObject.permissions.deleteObject &&\n !this.#retention.getRetentionState(dmsObject).underRetention\n );\n }\n\n run(items: DmsObject[]): Observable<boolean> {\n this.#dialog.open(DeleteComponent, {\n data: {\n items,\n context: this.context\n }\n });\n return of(true);\n }\n}\n","import { inject } from '@angular/core';\nimport { DmsObject, DmsService, SystemType, TranslateService } from '@yuuvis/client-core';\nimport { Observable, of } from 'rxjs';\nimport { AbstractContextAction, Action, ACTION_ICON, ActionSupport, BASE_ACTION, SelectionRange } from '../../models';\nimport { ActionPriorityLevel } from '../../services';\n\nexport class DownloadAction extends AbstractContextAction implements Action {\n readonly #translate = inject(TranslateService);\n readonly #dmsService = inject(DmsService);\n\n id = BASE_ACTION.download;\n label = this.#translate.instant('yuv.action-menu.action.download.dms.object.content.label');\n description = this.#translate.instant('yuv.action-menu.action.download.dms.object.content.description');\n priority = ActionPriorityLevel.LEVEL_2;\n icon = ACTION_ICON.download;\n group = 'common';\n range = SelectionRange.MULTI_SELECT;\n supports: ActionSupport = {\n types: [SystemType.DOCUMENT]\n };\n\n isExecutable(selection: DmsObject[]): Observable<boolean> {\n const noContentMatch = (Array.isArray(selection) ? selection : [selection]).find((e) => !e.content);\n if (selection.length < 1) return of(false);\n return of(!noContentMatch);\n }\n\n run(selection: DmsObject[]): Observable<boolean> {\n this.#dmsService.downloadContent(Array.isArray(selection) ? selection : [selection]);\n return of(true);\n }\n}\n","import { Injectable, Injector, Signal, inject, runInInjectionContext } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DmsObject, Utils } from '@yuuvis/client-core';\nimport { Observable, forkJoin, map, of, switchMap } from 'rxjs';\nimport { CopyAction } from '../actions/copy-action/copy-action';\nimport { CutAction } from '../actions/cut-action/cut-action';\nimport { DeleteAction } from '../actions/delete-action/delete-action';\nimport { DownloadAction } from '../actions/download-action/download-action';\nimport { ContextmenuComponent } from '../components/contextmenu/contextmenu.component';\nimport { Action, ActionClass, ActionContext, ActionOptions, BASE_ACTION } from '../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ActionsService {\n readonly injector = inject(Injector);\n #dialog = inject(MatDialog);\n readonly iconRegistry = inject(MatIconRegistry);\n\n private _registeredActions: Record<string, ActionClass> = {};\n\n /**\n * Registers actions that can be used in the application.\n * @param a Array of actions to register, each action must have an id and a\n * class that extends ActionClass\n */\n registerActions(actions: { id: string; action: ActionClass }[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n Array.isArray(actions) &&\n actions.forEach((action) => {\n this._registeredActions[action.id] = action.action;\n });\n }\n\n /**\n * Conceals actions that are no longer needed or should not be available.\n * This will remove the actions from the registered actions list.\n * @param actionIDs Array of action IDs to conceal\n */\n concealActions(actionIDs: string[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n Array.isArray(actionIDs) && actionIDs.forEach((id) => delete this._registeredActions[id]);\n }\n\n /**\n * Returns all actions that are executable for the given selection.\n * @param selection Array of DmsObjects to check for executable actions\n * @param options options to filter the actions\n * @returns Observable of actions that are executable for the given selection\n */\n getActions(selection: DmsObject[], options?: ActionOptions): Observable<Action[]> {\n // TODO: check if selection is empty or if nessasery at all\n // if (!selection || selection.length === 0) return of([]);\n const selections: Observable<{ action: Action; executable: boolean }>[] = this.getAvailableActions(options?.context)\n .filter((action) =>\n options?.exclude\n ? Array.isArray(options.exclude)\n ? !options.exclude.includes(action.id)\n : options.exclude instanceof RegExp\n ? !options.exclude.test(action.id)\n : true\n : true\n )\n .map((action: Action) =>\n action.isExecutable(selection).pipe(\n map((executable: boolean) => ({\n action,\n executable\n }))\n )\n );\n\n return forkJoin(selections).pipe(\n map((res: { action: Action; executable: boolean }[]) =>\n res.filter((result) => result.executable).map((executable) => executable.action)\n ),\n switchMap((actions: Action[]) => this.resolveDisabledState(actions, selection))\n );\n }\n\n /**\n * Get all available actions. This includes the default actions and all registered actions but\n * without checking if they are executable.\n * @param context Context passed to the actions\n * @returns Array of available actions\n */\n getAvailableActions(context?: ActionContext): Action[] {\n let actions: Action[] = [];\n\n runInInjectionContext(this.injector, () => {\n actions = [...Object.values(this._registeredActions).map((action: ActionClass) => new action(context))];\n });\n return actions;\n }\n\n getActionsForType(objectTypeId: string, context?: ActionContext): Action[] {\n return this.getAvailableActions(context).filter((action: Action) =>\n this.#actionsSupportsType(action, objectTypeId)\n );\n }\n\n getActionById(id: string, context?: ActionContext): Action | undefined {\n return this.getAvailableActions(context).find((action) => action.id === id);\n }\n\n getActionsById(ids: string[], context?: ActionContext): Action[] {\n return this.getAvailableActions(context).filter((action: Action) => ids.includes(action.id));\n }\n\n /**\n * Resolves the disabled state for the given actions against the given selection.\n * Sets the `disabled` property on each action instance.\n * @param actions Array of actions to resolve\n * @param selection Array of DmsObjects to check against\n * @returns Observable emitting the same actions with `disabled` set\n */\n resolveDisabledState(actions: Action[], selection: DmsObject[]): Observable<Action[]> {\n if (actions.length === 0) return of([]);\n\n const disabledChecks = actions.map((action: Action) => {\n const resolve$ = action.isDisabled\n ? action.isDisabled(selection).pipe(\n map((disabled: boolean) => {\n action.disabled = disabled;\n return action;\n })\n )\n : of(Object.assign(action, { disabled: false }));\n\n // Recursively resolve children\n if (action.children?.length) {\n return resolve$.pipe(\n switchMap((action) => this.resolveDisabledState(action.children!, selection).pipe(map(() => action)))\n );\n }\n return resolve$;\n });\n\n return forkJoin(disabledChecks);\n }\n\n openContextMenu(\n actions: Signal<Action[]>,\n callback: (action: Action) => void,\n overlayOrigin: { x: number; y: number }\n ): void {\n if (actions().length)\n this.#dialog.open(ContextmenuComponent, {\n data: { actions, callback },\n panelClass: 'context-menu-dialog'\n // position: { top: `${overlayOrigin.y}`, left: `${overlayOrigin.x}` }\n });\n const width = 10;\n const hight = 10;\n\n setTimeout(() => {\n const dialog = document.querySelector('.context-menu-dialog') as HTMLElement;\n\n const dialogWidth = dialog.offsetWidth;\n const dialogHeight = dialog.offsetHeight;\n const screenW = window.innerWidth;\n const screenH = window.innerHeight;\n\n let left = overlayOrigin.x;\n let top = overlayOrigin.y;\n if (left + dialogWidth > screenW) {\n left = screenW - dialogWidth - width;\n }\n if (top + dialogHeight > screenH) {\n top = screenH - dialogHeight - hight;\n }\n\n dialog.style.position = 'fixed';\n dialog.style.left = `${left}px`;\n dialog.style.top = `${top}px`;\n });\n }\n\n /**\n * Registers a set of default actions that are commonly used in the application.\n * These actions include delete, download, copy and cut. This method can be called\n * during the initialization of the application to ensure that these actions\n * are available for use.\n */\n registerDefaultActions(): void {\n this.registerActions([\n { id: BASE_ACTION.delete, action: DeleteAction },\n { id: BASE_ACTION.download, action: DownloadAction },\n { id: BASE_ACTION.copy, action: CopyAction },\n { id: BASE_ACTION.cut, action: CutAction }\n ]);\n }\n\n #actionsSupportsType(action: Action, objectTypeId: string): boolean {\n const matchesTypes = action.supports.types ? action.supports.types.includes(objectTypeId) : false;\n const matchesSOTs = action.supports.sots ? action.supports.sots.includes(objectTypeId) : false;\n const matchesPattern = action.supports.pattern\n ? Utils.patternToRegExp(action.supports.pattern).test(objectTypeId)\n : false;\n return matchesTypes || matchesSOTs || matchesPattern;\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ActionContext } from '../models';\n\nexport const ACTION_CONTEXT_TOKEN = new InjectionToken<ActionContext>('action-context');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["TranslateService","i1"],"mappings":"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"}
|
|
@@ -37,7 +37,7 @@ const LOCK_BADGE = {
|
|
|
37
37
|
labelKey: _('yuv.badge.lock.label'),
|
|
38
38
|
descriptionKey: _('yuv.badge.lock.description'),
|
|
39
39
|
icon: 'lock',
|
|
40
|
-
severity: '
|
|
40
|
+
severity: 'danger',
|
|
41
41
|
priority: 10,
|
|
42
42
|
/**
|
|
43
43
|
* Applies if a lock tag exists and the current user is not the lock owner.
|
|
@@ -52,7 +52,7 @@ const LOCK_SELF_BADGE = {
|
|
|
52
52
|
labelKey: _('yuv.badge.lock.self.label'),
|
|
53
53
|
descriptionKey: _('yuv.badge.lock.self.description'),
|
|
54
54
|
icon: 'lock_person',
|
|
55
|
-
severity: '
|
|
55
|
+
severity: 'success',
|
|
56
56
|
priority: 10,
|
|
57
57
|
variantOf: 'yuv.badge.lock',
|
|
58
58
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-framework-badges.mjs","sources":["../../../../../libs/yuuvis/client-framework/badges/src/lib/badge-chip/badge-chip.component.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/badge-chip/badge-chip.component.html","../../../../../libs/yuuvis/client-framework/badges/src/lib/default-badges/lock.badge.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/default-badges/retention.badge.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/utils/badge.utils.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/services/badge.service.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/badge-select/badge-select.component.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/badge-select/badge-select.component.html","../../../../../libs/yuuvis/client-framework/badges/src/lib/tile-badges/tile-badges.component.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/tile-badges/tile-badges.component.html","../../../../../libs/yuuvis/client-framework/badges/src/yuuvis-client-framework-badges.ts"],"sourcesContent":["import { Component, computed, inject, input } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { YmtBadge } from '@yuuvis/material/badge';\nimport { Badge } from '../models';\n@Component({\n selector: 'yuv-badge-chip',\n imports: [MatIconModule, MatTooltipModule, YmtBadge, TranslatePipe],\n templateUrl: './badge-chip.component.html',\n styleUrls: ['./badge-chip.component.scss']\n})\nexport class BadgeChipComponent {\n readonly #translate = inject(TranslateService);\n\n badge = input.required<Badge>();\n showLabel = input<boolean>(false);\n\n readonly tooltip = computed<string>(() => {\n const current = this.badge();\n return this.#translate.instant(current.descriptionKey ?? current.labelKey);\n });\n}\n","@let b = badge();\n\n<ymt-badge [severity]=\"b.severity ?? 'neutral'\" [matTooltip]=\"tooltip()\" class=\"badge-chip\">\n @if (b.svgIcon) {\n <mat-icon [svgIcon]=\"b.icon\" inert=\"true\" />\n } @else {\n <mat-icon inert=\"true\">{{ b.icon }}</mat-icon>\n }\n @if (showLabel()) {\n <span>{{ b.labelKey | translate }}</span>\n }\n</ymt-badge>\n","import { _ as marker } from '@ngx-translate/core';\nimport { Badge } from '../models';\n\n/**\n * Badge shown when an object is locked by another user.\n */\nexport const LOCK_BADGE: Badge = {\n id: 'yuv.badge.lock',\n labelKey: marker('yuv.badge.lock.label'),\n descriptionKey: marker('yuv.badge.lock.description'),\n icon: 'lock',\n severity: 'warning',\n priority: 10,\n /**\n * Applies if a lock tag exists and the current user is not the lock owner.\n */\n applies: (_dmsObject, ctx) => !!ctx.lockState?.locked && !ctx.lockState.lockedByCurrentUser\n};\n\n/**\n * Badge shown when an object is locked by the current user.\n */\nexport const LOCK_SELF_BADGE: Badge = {\n id: 'yuv.badge.lock.self',\n labelKey: marker('yuv.badge.lock.self.label'),\n descriptionKey: marker('yuv.badge.lock.self.description'),\n icon: 'lock_person',\n severity: 'primary',\n priority: 10,\n variantOf: 'yuv.badge.lock',\n /**\n * Applies if a lock tag exists and the current user is the lock owner.\n */\n applies: (_dmsObject, ctx) => !!ctx.lockState?.locked && ctx.lockState.lockedByCurrentUser\n};\n","import { _ as marker } from '@ngx-translate/core';\nimport { BaseObjectTypeField, RetentionField, SystemSOT } from '@yuuvis/client-core';\nimport { Badge } from '../models/badge.models';\n\n/**\n * Badge definition for DMS objects that are subject to a destruction retention policy.\n *\n * This badge is displayed when a DMS object has the `DESTRUCTION_RETENTION` secondary object type\n * assigned and an active or ongoing retention period. It helps users identify objects that are\n * legally or organizationally protected from deletion during their retention period.\n *\n * **Applies when:**\n * - The object includes the `SystemSOT.DESTRUCTION_RETENTION` secondary object type.\n * - A retention start date (`RetentionField.RETENTION_START`) is present.\n * - The retention period has started (start date is in the past), or an end date is set and\n * still lies in the future.\n *\n * @remarks\n * - `severity` is set to `'danger'` to visually emphasize the retention constraint.\n * - `priority` is `20`, which controls the display order relative to other badges.\n */ export const RETENTION_BADGE: Badge = {\n id: 'yuv.badge.retention',\n labelKey: marker('yuv.badge.retention.label'),\n descriptionKey: marker('yuv.badge.retention.description'),\n icon: 'gavel',\n severity: 'danger',\n priority: 20,\n applies: (dmsObject) => {\n const sots = dmsObject.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[] | undefined;\n if (!sots?.includes(SystemSOT.DESTRUCTION_RETENTION)) return false;\n const startRetention = dmsObject.data[RetentionField.RETENTION_START] as string | undefined;\n if (!startRetention) return false;\n const now = new Date();\n const start = new Date(startRetention);\n const endRetention = dmsObject.data[RetentionField.RETENTION_END] as string | undefined;\n const end = endRetention ? new Date(endRetention) : null;\n return start < now || (end !== null && end > now);\n }\n};\n","import { BaseObjectTypeField, DmsObject } from '@yuuvis/client-core';\nimport { BadgeRule } from '../models/badge.models';\n\n/**\n * Evaluates a single badge rule against a given DMS object.\n *\n * Supported operations:\n * - `isSet`: returns `true` when the field value is not `undefined`, `null`, or an empty string.\n * - `equals`: returns `true` when the field value strictly equals `rule.value`.\n * - `tagPresent`: returns `true` when the configured tags field contains a tag whose first element equals `rule.value`.\n *\n * @param rule Badge rule definition to evaluate.\n * @param dmsObject Source object containing field data.\n * @returns `true` if the rule matches; otherwise `false`.\n */\nexport function evaluateRule(rule: BadgeRule, dmsObject: DmsObject): boolean {\n switch (rule.op) {\n case 'isSet': {\n const value = dmsObject.data[rule.field];\n return value !== undefined && value !== null && value !== '';\n }\n case 'equals': {\n return dmsObject.data[rule.field] === rule.value;\n }\n case 'tagPresent': {\n const tagsField = rule.field || BaseObjectTypeField.TAGS;\n const tags = dmsObject.data[tagsField] as unknown[][] | undefined;\n return !!tags?.some((tag) => Array.isArray(tag) && tag[0] === rule.value);\n }\n default:\n return false;\n }\n}\n","import { Injectable, Signal, computed, inject, signal } from '@angular/core';\nimport { DmsObject, ObjectLockingService, YUV_USER } from '@yuuvis/client-core';\nimport { LOCK_BADGE, LOCK_SELF_BADGE, RETENTION_BADGE } from '../default-badges';\nimport { Badge, BadgeContext } from '../models/badge.models';\nimport { evaluateRule } from '../utils';\n\ninterface StoredBadges {\n main: Badge[];\n buckets: Map<string, Badge[]>;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class BadgeRegistryService {\n readonly #store = signal<StoredBadges>({ main: [], buckets: new Map() });\n readonly #currentUser = inject(YUV_USER, { optional: true }) ?? undefined;\n readonly #objectLocking = inject(ObjectLockingService);\n\n /**\n * Registers one or multiple badges in the registry.\n *\n * If a badge with the same id already exists in the same scope, it is replaced.\n * Otherwise, the badge is added to the scope.\n *\n * @param badges An array of badges to register.\n * @param bucket Optional bucket id (typically an APP_ID). If omitted, badges are\n * registered globally and visible to every consumer. If provided,\n * badges are scoped to that bucket and only visible when consumers\n * query with the matching bucket.\n *\n * @see {@link Badge}\n */\n registerBadges(badges: Badge[], bucket?: string): void {\n this.#store.update((current) => {\n const next: StoredBadges = { main: current.main, buckets: new Map(current.buckets) };\n if (bucket === undefined) {\n next.main = this.#mergeInto(current.main, badges);\n } else {\n const existing = current.buckets.get(bucket) ?? [];\n next.buckets.set(bucket, this.#mergeInto(existing, badges));\n }\n return next;\n });\n }\n\n /**\n * Registers the default badges into the registry.\n *\n * Initializes three built-in badge types:\n * - LOCK_BADGE: Indicates objects locked by other users\n * - LOCK_SELF_BADGE: Indicates objects locked by the current user\n * - RETENTION_BADGE: Indicates objects under retention hold\n *\n * @param bucket Optional bucket id. If omitted, defaults are registered globally.\n *\n * @see {@link Badge}\n */\n registerDefaultBadges(bucket?: string): void {\n this.registerBadges([LOCK_BADGE, LOCK_SELF_BADGE, RETENTION_BADGE], bucket);\n }\n\n /**\n * Unregisters one or multiple badges from the registry by id.\n *\n * Operates only on the specified scope: omitting `bucket` removes from the global\n * scope only, providing `bucket` removes from that bucket only.\n *\n * @param id A single badge id or an array of badge ids to remove.\n * @param bucket Optional bucket id.\n */\n unregister(id: string | string[], bucket?: string): void {\n const ids = Array.isArray(id) ? id : [id];\n this.#store.update((current) => {\n const next: StoredBadges = { main: current.main, buckets: new Map(current.buckets) };\n if (bucket === undefined) {\n next.main = current.main.filter((badge) => !ids.includes(badge.id));\n } else {\n const existing = current.buckets.get(bucket);\n if (existing) {\n next.buckets.set(\n bucket,\n existing.filter((badge) => !ids.includes(badge.id))\n );\n }\n }\n return next;\n });\n }\n\n /**\n * Returns a registered badge by id.\n *\n * Looks first in the given bucket (if any), then in the global scope.\n *\n * @param id The badge id.\n * @param bucket Optional bucket id.\n * @returns The matching badge, or undefined if no badge is registered with that id.\n */\n get(id: string, bucket?: string): Badge | undefined {\n const { main, buckets } = this.#store();\n if (bucket !== undefined) {\n const local = buckets.get(bucket)?.find((badge) => badge.id === id);\n if (local) return local;\n }\n return main.find((badge) => badge.id === id);\n }\n\n /**\n * Returns all registered badges across the global scope and every bucket.\n *\n * Bucket entries override globals with the same id; remaining duplicates between\n * buckets keep the first occurrence. Useful for tests and debug inspection.\n */\n all(): Badge[] {\n const { main, buckets } = this.#store();\n const byId = new Map<string, Badge>();\n for (const badge of main) byId.set(badge.id, badge);\n for (const list of buckets.values()) {\n for (const badge of list) byId.set(badge.id, badge);\n }\n return Array.from(byId.values());\n }\n\n /**\n * Returns a reactive list of badges visible in the given scope.\n *\n * The returned signal recomputes whenever the registry changes. The list contains\n * the global badges merged with the named bucket's badges (bucket entries override\n * globals with the same id), sorted by ascending priority. At equal priority,\n * globals come first, then bucket-local badges.\n *\n * @param bucket Optional bucket id.\n */\n getBadgesForBucket(bucket?: string): Signal<Badge[]> {\n return computed(() => this.#visibleScope(bucket).sort(this.#byPriority));\n }\n\n /**\n * Resolves all active badges for a given object in the given scope.\n *\n * The visible scope is `main ∪ bucket`. Variants only resolve when their parent id\n * is present in the visible scope. If `idFilter` is provided, only badges whose id\n * (or whose variant's parent id) is in the filter are considered. The resulting\n * list is sorted by ascending priority.\n *\n * @param dmsObject The object to evaluate badges against.\n * @param options Optional bucket and id filter.\n */\n getActiveBadges(dmsObject: DmsObject, options?: { bucket?: string; idFilter?: string[] }): Badge[] {\n const visible = this.#visibleScope(options?.bucket);\n const idFilter = options?.idFilter;\n const filtered = visible.filter((badge) => {\n if (badge.variantOf !== undefined) {\n const parentVisible = visible.some((parent) => parent.id === badge.variantOf);\n if (!parentVisible) return false;\n return idFilter ? idFilter.includes(badge.variantOf) : true;\n }\n return idFilter ? idFilter.includes(badge.id) : true;\n });\n return filtered.filter((badge) => this.#isActive(badge, dmsObject)).sort(this.#byPriority);\n }\n\n /**\n * Returns globals merged with the named bucket. Bucket entries with the same id\n * override globals (the bucket entry replaces the global entry in place, preserving\n * the global's position). At equal priority, globals appear first.\n */\n #visibleScope(bucket?: string): Badge[] {\n const { main, buckets } = this.#store();\n if (bucket === undefined) return [...main];\n const local = buckets.get(bucket);\n if (!local || local.length === 0) return [...main];\n const localById = new Map(local.map((badge) => [badge.id, badge]));\n const merged: Badge[] = main.map((global) => localById.get(global.id) ?? global);\n const additions = local.filter((badge) => !main.some((global) => global.id === badge.id));\n return [...merged, ...additions];\n }\n\n readonly #byPriority = (first: Badge, second: Badge): number => (first.priority ?? 0) - (second.priority ?? 0);\n\n /**\n * Merges incoming badges into an existing list, replacing entries with the same id\n * in place and appending new ones at the end.\n */\n #mergeInto(existing: Badge[], incoming: Badge[]): Badge[] {\n const next = [...existing];\n for (const badge of incoming) {\n const idx = next.findIndex((current) => current.id === badge.id);\n if (idx === -1) next.push(badge);\n else next[idx] = badge;\n }\n return next;\n }\n\n /**\n * Evaluates whether a badge applies to the given object.\n *\n * A custom {@link Badge.applies} function has precedence over rule evaluation.\n * If neither applies nor rule is provided, the badge is considered inactive.\n */\n #isActive(badge: Badge, dmsObject: DmsObject): boolean {\n const ctx: BadgeContext = {\n currentUser: this.#currentUser,\n lockState: this.#objectLocking.getLockState(dmsObject)\n };\n if (badge.applies) return !!badge.applies(dmsObject, ctx);\n if (badge.rule) return evaluateRule(badge.rule, dmsObject);\n return false;\n }\n}\n","import { NgClass } from '@angular/common';\nimport { Component, Signal, computed, inject, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule } from '@yuuvis/client-core';\nimport { Badge } from '../models';\nimport { BadgeRegistryService } from '../services/badge.service';\n\n@Component({\n selector: 'yuv-tile-badge-select',\n imports: [NgClass, MatIconModule, TranslateModule],\n templateUrl: './badge-select.component.html',\n styleUrls: ['./badge-select.component.scss']\n})\nexport class BadgeSelectComponent {\n readonly #registry = inject(BadgeRegistryService);\n\n selectedBadgeIds = input<string[]>([]);\n bucket = input<string | undefined>();\n badgeSelect = output<Badge>();\n\n readonly badges: Signal<Badge[]> = computed<Badge[]>(() =>\n this.#registry\n .getBadgesForBucket(this.bucket())()\n .filter((badge) => badge.variantOf === undefined)\n );\n}\n","<div class=\"badges\">\n @for (b of badges(); track b.id) {\n <button type=\"button\" [ngClass]=\"{ selected: selectedBadgeIds().includes(b.id) }\" (click)=\"badgeSelect.emit(b)\">\n @if (b.svgIcon) {\n <mat-icon [svgIcon]=\"b.icon\" inert=\"true\" />\n } @else {\n <mat-icon inert=\"true\">{{ b.icon }}</mat-icon>\n }\n <span>{{ b.labelKey | translate }}</span>\n </button>\n } @empty {\n <span class=\"empty\">\n {{ 'yuv.badge.empty.selection' | translate }}\n </span>\n }\n</div>\n","import { Component, computed, inject, input } from '@angular/core';\nimport { DmsObject } from '@yuuvis/client-core';\nimport { BadgeChipComponent } from '../badge-chip/badge-chip.component';\nimport { Badge } from '../models/badge.models';\nimport { BadgeRegistryService } from '../services/badge.service';\n\n@Component({\n selector: 'yuv-tile-badges',\n imports: [BadgeChipComponent],\n templateUrl: './tile-badges.component.html',\n styleUrls: ['./tile-badges.component.scss']\n})\nexport class TileBadgesComponent {\n readonly #registry = inject(BadgeRegistryService);\n\n dmsObject = input.required<DmsObject>();\n badgeIds = input<string[] | undefined>();\n bucket = input<string | undefined>();\n\n readonly activeBadges = computed<Badge[]>(() =>\n this.#registry.getActiveBadges(this.dmsObject(), {\n bucket: this.bucket(),\n idFilter: this.badgeIds()\n })\n );\n}\n","@for (b of activeBadges(); track $index) {\n <yuv-badge-chip [badge]=\"b\" />\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["marker","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-client-framework-badges.mjs","sources":["../../../../../libs/yuuvis/client-framework/badges/src/lib/badge-chip/badge-chip.component.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/badge-chip/badge-chip.component.html","../../../../../libs/yuuvis/client-framework/badges/src/lib/default-badges/lock.badge.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/default-badges/retention.badge.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/utils/badge.utils.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/services/badge.service.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/badge-select/badge-select.component.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/badge-select/badge-select.component.html","../../../../../libs/yuuvis/client-framework/badges/src/lib/tile-badges/tile-badges.component.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/tile-badges/tile-badges.component.html","../../../../../libs/yuuvis/client-framework/badges/src/yuuvis-client-framework-badges.ts"],"sourcesContent":["import { Component, computed, inject, input } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { YmtBadge } from '@yuuvis/material/badge';\nimport { Badge } from '../models';\n@Component({\n selector: 'yuv-badge-chip',\n imports: [MatIconModule, MatTooltipModule, YmtBadge, TranslatePipe],\n templateUrl: './badge-chip.component.html',\n styleUrls: ['./badge-chip.component.scss']\n})\nexport class BadgeChipComponent {\n readonly #translate = inject(TranslateService);\n\n badge = input.required<Badge>();\n showLabel = input<boolean>(false);\n\n readonly tooltip = computed<string>(() => {\n const current = this.badge();\n return this.#translate.instant(current.descriptionKey ?? current.labelKey);\n });\n}\n","@let b = badge();\n\n<ymt-badge [severity]=\"b.severity ?? 'neutral'\" [matTooltip]=\"tooltip()\" class=\"badge-chip\">\n @if (b.svgIcon) {\n <mat-icon [svgIcon]=\"b.icon\" inert=\"true\" />\n } @else {\n <mat-icon inert=\"true\">{{ b.icon }}</mat-icon>\n }\n @if (showLabel()) {\n <span>{{ b.labelKey | translate }}</span>\n }\n</ymt-badge>\n","import { _ as marker } from '@ngx-translate/core';\nimport { Badge } from '../models';\n\n/**\n * Badge shown when an object is locked by another user.\n */\nexport const LOCK_BADGE: Badge = {\n id: 'yuv.badge.lock',\n labelKey: marker('yuv.badge.lock.label'),\n descriptionKey: marker('yuv.badge.lock.description'),\n icon: 'lock',\n severity: 'danger',\n priority: 10,\n /**\n * Applies if a lock tag exists and the current user is not the lock owner.\n */\n applies: (_dmsObject, ctx) => !!ctx.lockState?.locked && !ctx.lockState.lockedByCurrentUser\n};\n\n/**\n * Badge shown when an object is locked by the current user.\n */\nexport const LOCK_SELF_BADGE: Badge = {\n id: 'yuv.badge.lock.self',\n labelKey: marker('yuv.badge.lock.self.label'),\n descriptionKey: marker('yuv.badge.lock.self.description'),\n icon: 'lock_person',\n severity: 'success',\n priority: 10,\n variantOf: 'yuv.badge.lock',\n /**\n * Applies if a lock tag exists and the current user is the lock owner.\n */\n applies: (_dmsObject, ctx) => !!ctx.lockState?.locked && ctx.lockState.lockedByCurrentUser\n};\n","import { _ as marker } from '@ngx-translate/core';\nimport { BaseObjectTypeField, RetentionField, SystemSOT } from '@yuuvis/client-core';\nimport { Badge } from '../models/badge.models';\n\n/**\n * Badge definition for DMS objects that are subject to a destruction retention policy.\n *\n * This badge is displayed when a DMS object has the `DESTRUCTION_RETENTION` secondary object type\n * assigned and an active or ongoing retention period. It helps users identify objects that are\n * legally or organizationally protected from deletion during their retention period.\n *\n * **Applies when:**\n * - The object includes the `SystemSOT.DESTRUCTION_RETENTION` secondary object type.\n * - A retention start date (`RetentionField.RETENTION_START`) is present.\n * - The retention period has started (start date is in the past), or an end date is set and\n * still lies in the future.\n *\n * @remarks\n * - `severity` is set to `'danger'` to visually emphasize the retention constraint.\n * - `priority` is `20`, which controls the display order relative to other badges.\n */ export const RETENTION_BADGE: Badge = {\n id: 'yuv.badge.retention',\n labelKey: marker('yuv.badge.retention.label'),\n descriptionKey: marker('yuv.badge.retention.description'),\n icon: 'gavel',\n severity: 'danger',\n priority: 20,\n applies: (dmsObject) => {\n const sots = dmsObject.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[] | undefined;\n if (!sots?.includes(SystemSOT.DESTRUCTION_RETENTION)) return false;\n const startRetention = dmsObject.data[RetentionField.RETENTION_START] as string | undefined;\n if (!startRetention) return false;\n const now = new Date();\n const start = new Date(startRetention);\n const endRetention = dmsObject.data[RetentionField.RETENTION_END] as string | undefined;\n const end = endRetention ? new Date(endRetention) : null;\n return start < now || (end !== null && end > now);\n }\n};\n","import { BaseObjectTypeField, DmsObject } from '@yuuvis/client-core';\nimport { BadgeRule } from '../models/badge.models';\n\n/**\n * Evaluates a single badge rule against a given DMS object.\n *\n * Supported operations:\n * - `isSet`: returns `true` when the field value is not `undefined`, `null`, or an empty string.\n * - `equals`: returns `true` when the field value strictly equals `rule.value`.\n * - `tagPresent`: returns `true` when the configured tags field contains a tag whose first element equals `rule.value`.\n *\n * @param rule Badge rule definition to evaluate.\n * @param dmsObject Source object containing field data.\n * @returns `true` if the rule matches; otherwise `false`.\n */\nexport function evaluateRule(rule: BadgeRule, dmsObject: DmsObject): boolean {\n switch (rule.op) {\n case 'isSet': {\n const value = dmsObject.data[rule.field];\n return value !== undefined && value !== null && value !== '';\n }\n case 'equals': {\n return dmsObject.data[rule.field] === rule.value;\n }\n case 'tagPresent': {\n const tagsField = rule.field || BaseObjectTypeField.TAGS;\n const tags = dmsObject.data[tagsField] as unknown[][] | undefined;\n return !!tags?.some((tag) => Array.isArray(tag) && tag[0] === rule.value);\n }\n default:\n return false;\n }\n}\n","import { Injectable, Signal, computed, inject, signal } from '@angular/core';\nimport { DmsObject, ObjectLockingService, YUV_USER } from '@yuuvis/client-core';\nimport { LOCK_BADGE, LOCK_SELF_BADGE, RETENTION_BADGE } from '../default-badges';\nimport { Badge, BadgeContext } from '../models/badge.models';\nimport { evaluateRule } from '../utils';\n\ninterface StoredBadges {\n main: Badge[];\n buckets: Map<string, Badge[]>;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class BadgeRegistryService {\n readonly #store = signal<StoredBadges>({ main: [], buckets: new Map() });\n readonly #currentUser = inject(YUV_USER, { optional: true }) ?? undefined;\n readonly #objectLocking = inject(ObjectLockingService);\n\n /**\n * Registers one or multiple badges in the registry.\n *\n * If a badge with the same id already exists in the same scope, it is replaced.\n * Otherwise, the badge is added to the scope.\n *\n * @param badges An array of badges to register.\n * @param bucket Optional bucket id (typically an APP_ID). If omitted, badges are\n * registered globally and visible to every consumer. If provided,\n * badges are scoped to that bucket and only visible when consumers\n * query with the matching bucket.\n *\n * @see {@link Badge}\n */\n registerBadges(badges: Badge[], bucket?: string): void {\n this.#store.update((current) => {\n const next: StoredBadges = { main: current.main, buckets: new Map(current.buckets) };\n if (bucket === undefined) {\n next.main = this.#mergeInto(current.main, badges);\n } else {\n const existing = current.buckets.get(bucket) ?? [];\n next.buckets.set(bucket, this.#mergeInto(existing, badges));\n }\n return next;\n });\n }\n\n /**\n * Registers the default badges into the registry.\n *\n * Initializes three built-in badge types:\n * - LOCK_BADGE: Indicates objects locked by other users\n * - LOCK_SELF_BADGE: Indicates objects locked by the current user\n * - RETENTION_BADGE: Indicates objects under retention hold\n *\n * @param bucket Optional bucket id. If omitted, defaults are registered globally.\n *\n * @see {@link Badge}\n */\n registerDefaultBadges(bucket?: string): void {\n this.registerBadges([LOCK_BADGE, LOCK_SELF_BADGE, RETENTION_BADGE], bucket);\n }\n\n /**\n * Unregisters one or multiple badges from the registry by id.\n *\n * Operates only on the specified scope: omitting `bucket` removes from the global\n * scope only, providing `bucket` removes from that bucket only.\n *\n * @param id A single badge id or an array of badge ids to remove.\n * @param bucket Optional bucket id.\n */\n unregister(id: string | string[], bucket?: string): void {\n const ids = Array.isArray(id) ? id : [id];\n this.#store.update((current) => {\n const next: StoredBadges = { main: current.main, buckets: new Map(current.buckets) };\n if (bucket === undefined) {\n next.main = current.main.filter((badge) => !ids.includes(badge.id));\n } else {\n const existing = current.buckets.get(bucket);\n if (existing) {\n next.buckets.set(\n bucket,\n existing.filter((badge) => !ids.includes(badge.id))\n );\n }\n }\n return next;\n });\n }\n\n /**\n * Returns a registered badge by id.\n *\n * Looks first in the given bucket (if any), then in the global scope.\n *\n * @param id The badge id.\n * @param bucket Optional bucket id.\n * @returns The matching badge, or undefined if no badge is registered with that id.\n */\n get(id: string, bucket?: string): Badge | undefined {\n const { main, buckets } = this.#store();\n if (bucket !== undefined) {\n const local = buckets.get(bucket)?.find((badge) => badge.id === id);\n if (local) return local;\n }\n return main.find((badge) => badge.id === id);\n }\n\n /**\n * Returns all registered badges across the global scope and every bucket.\n *\n * Bucket entries override globals with the same id; remaining duplicates between\n * buckets keep the first occurrence. Useful for tests and debug inspection.\n */\n all(): Badge[] {\n const { main, buckets } = this.#store();\n const byId = new Map<string, Badge>();\n for (const badge of main) byId.set(badge.id, badge);\n for (const list of buckets.values()) {\n for (const badge of list) byId.set(badge.id, badge);\n }\n return Array.from(byId.values());\n }\n\n /**\n * Returns a reactive list of badges visible in the given scope.\n *\n * The returned signal recomputes whenever the registry changes. The list contains\n * the global badges merged with the named bucket's badges (bucket entries override\n * globals with the same id), sorted by ascending priority. At equal priority,\n * globals come first, then bucket-local badges.\n *\n * @param bucket Optional bucket id.\n */\n getBadgesForBucket(bucket?: string): Signal<Badge[]> {\n return computed(() => this.#visibleScope(bucket).sort(this.#byPriority));\n }\n\n /**\n * Resolves all active badges for a given object in the given scope.\n *\n * The visible scope is `main ∪ bucket`. Variants only resolve when their parent id\n * is present in the visible scope. If `idFilter` is provided, only badges whose id\n * (or whose variant's parent id) is in the filter are considered. The resulting\n * list is sorted by ascending priority.\n *\n * @param dmsObject The object to evaluate badges against.\n * @param options Optional bucket and id filter.\n */\n getActiveBadges(dmsObject: DmsObject, options?: { bucket?: string; idFilter?: string[] }): Badge[] {\n const visible = this.#visibleScope(options?.bucket);\n const idFilter = options?.idFilter;\n const filtered = visible.filter((badge) => {\n if (badge.variantOf !== undefined) {\n const parentVisible = visible.some((parent) => parent.id === badge.variantOf);\n if (!parentVisible) return false;\n return idFilter ? idFilter.includes(badge.variantOf) : true;\n }\n return idFilter ? idFilter.includes(badge.id) : true;\n });\n return filtered.filter((badge) => this.#isActive(badge, dmsObject)).sort(this.#byPriority);\n }\n\n /**\n * Returns globals merged with the named bucket. Bucket entries with the same id\n * override globals (the bucket entry replaces the global entry in place, preserving\n * the global's position). At equal priority, globals appear first.\n */\n #visibleScope(bucket?: string): Badge[] {\n const { main, buckets } = this.#store();\n if (bucket === undefined) return [...main];\n const local = buckets.get(bucket);\n if (!local || local.length === 0) return [...main];\n const localById = new Map(local.map((badge) => [badge.id, badge]));\n const merged: Badge[] = main.map((global) => localById.get(global.id) ?? global);\n const additions = local.filter((badge) => !main.some((global) => global.id === badge.id));\n return [...merged, ...additions];\n }\n\n readonly #byPriority = (first: Badge, second: Badge): number => (first.priority ?? 0) - (second.priority ?? 0);\n\n /**\n * Merges incoming badges into an existing list, replacing entries with the same id\n * in place and appending new ones at the end.\n */\n #mergeInto(existing: Badge[], incoming: Badge[]): Badge[] {\n const next = [...existing];\n for (const badge of incoming) {\n const idx = next.findIndex((current) => current.id === badge.id);\n if (idx === -1) next.push(badge);\n else next[idx] = badge;\n }\n return next;\n }\n\n /**\n * Evaluates whether a badge applies to the given object.\n *\n * A custom {@link Badge.applies} function has precedence over rule evaluation.\n * If neither applies nor rule is provided, the badge is considered inactive.\n */\n #isActive(badge: Badge, dmsObject: DmsObject): boolean {\n const ctx: BadgeContext = {\n currentUser: this.#currentUser,\n lockState: this.#objectLocking.getLockState(dmsObject)\n };\n if (badge.applies) return !!badge.applies(dmsObject, ctx);\n if (badge.rule) return evaluateRule(badge.rule, dmsObject);\n return false;\n }\n}\n","import { NgClass } from '@angular/common';\nimport { Component, Signal, computed, inject, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule } from '@yuuvis/client-core';\nimport { Badge } from '../models';\nimport { BadgeRegistryService } from '../services/badge.service';\n\n@Component({\n selector: 'yuv-tile-badge-select',\n imports: [NgClass, MatIconModule, TranslateModule],\n templateUrl: './badge-select.component.html',\n styleUrls: ['./badge-select.component.scss']\n})\nexport class BadgeSelectComponent {\n readonly #registry = inject(BadgeRegistryService);\n\n selectedBadgeIds = input<string[]>([]);\n bucket = input<string | undefined>();\n badgeSelect = output<Badge>();\n\n readonly badges: Signal<Badge[]> = computed<Badge[]>(() =>\n this.#registry\n .getBadgesForBucket(this.bucket())()\n .filter((badge) => badge.variantOf === undefined)\n );\n}\n","<div class=\"badges\">\n @for (b of badges(); track b.id) {\n <button type=\"button\" [ngClass]=\"{ selected: selectedBadgeIds().includes(b.id) }\" (click)=\"badgeSelect.emit(b)\">\n @if (b.svgIcon) {\n <mat-icon [svgIcon]=\"b.icon\" inert=\"true\" />\n } @else {\n <mat-icon inert=\"true\">{{ b.icon }}</mat-icon>\n }\n <span>{{ b.labelKey | translate }}</span>\n </button>\n } @empty {\n <span class=\"empty\">\n {{ 'yuv.badge.empty.selection' | translate }}\n </span>\n }\n</div>\n","import { Component, computed, inject, input } from '@angular/core';\nimport { DmsObject } from '@yuuvis/client-core';\nimport { BadgeChipComponent } from '../badge-chip/badge-chip.component';\nimport { Badge } from '../models/badge.models';\nimport { BadgeRegistryService } from '../services/badge.service';\n\n@Component({\n selector: 'yuv-tile-badges',\n imports: [BadgeChipComponent],\n templateUrl: './tile-badges.component.html',\n styleUrls: ['./tile-badges.component.scss']\n})\nexport class TileBadgesComponent {\n readonly #registry = inject(BadgeRegistryService);\n\n dmsObject = input.required<DmsObject>();\n badgeIds = input<string[] | undefined>();\n bucket = input<string | undefined>();\n\n readonly activeBadges = computed<Badge[]>(() =>\n this.#registry.getActiveBadges(this.dmsObject(), {\n bucket: this.bucket(),\n idFilter: this.badgeIds()\n })\n );\n}\n","@for (b of activeBadges(); track $index) {\n <yuv-badge-chip [badge]=\"b\" />\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["marker","i2"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuuvis/client-framework",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.2",
|
|
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.2.
|
|
12
|
-
"@yuuvis/client-shell-core": "^3.2.
|
|
13
|
-
"@yuuvis/client-components": "^3.2.
|
|
11
|
+
"@yuuvis/client-core": "^3.2.2",
|
|
12
|
+
"@yuuvis/client-shell-core": "^3.2.2",
|
|
13
|
+
"@yuuvis/client-components": "^3.2.2",
|
|
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.2.
|
|
20
|
+
"@yuuvis/material": "^3.2.2",
|
|
21
21
|
"@yuuvis/media-viewer": "^3.0.1",
|
|
22
22
|
"angular-split": "^20.0.0",
|
|
23
23
|
"vis-network": "^10.0.2",
|
|
@@ -178,21 +178,11 @@ declare const ActionPriorityLevel: {
|
|
|
178
178
|
* Service responsible for validating actions on DMS objects.
|
|
179
179
|
* Provides checks for document lock states and related user information.
|
|
180
180
|
*/
|
|
181
|
+
/** @deprecated */
|
|
181
182
|
declare class ActionsValidationService {
|
|
182
183
|
#private;
|
|
183
184
|
private readonly translate;
|
|
184
|
-
/**
|
|
185
|
-
* Checks whether a DMS object is locked by another user.
|
|
186
|
-
*
|
|
187
|
-
* Delegates lock detection to {@link ObjectLockingService.getLockState}. When the
|
|
188
|
-
* object is locked by a different user, returns `state: true` along with a
|
|
189
|
-
* translated description identifying the lock holder.
|
|
190
|
-
*
|
|
191
|
-
* @param dmsObject - The DMS object to check for a lock.
|
|
192
|
-
* @returns An observable emitting an object with:
|
|
193
|
-
* - `state`: `true` if the object is locked by another user, `false` otherwise.
|
|
194
|
-
* - `description`: An optional translated message describing the lock state (only present when `state` is `true`).
|
|
195
|
-
*/
|
|
185
|
+
/** @deprecated */
|
|
196
186
|
checkDocumentLock(dmsObject: DmsObject): Observable<{
|
|
197
187
|
state: boolean;
|
|
198
188
|
description?: string;
|