@yuuvis/app-templates 1.2.1 → 1.2.3

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/README.md CHANGED
@@ -34,7 +34,7 @@ In your `app.routes.ts` add a new lazy loaded route for the `@yuuvis/app-templat
34
34
  export const app: App[] = [
35
35
  {
36
36
  id: 'io.yuuvis.app.templates',
37
- title: "yuuvis® templates",
37
+ title: "yuuvis templates",
38
38
  path: 'templates',
39
39
  iconName: 'library_books',
40
40
  loadChildren: () => import('@yuuvis/app-templates').then((m) => m.YuvTemplateManagerRoutes)
@@ -58,7 +58,13 @@ class TemplateService {
58
58
  this.busy$ = this.busyDataSource.asReadonly();
59
59
  }
60
60
  getAvailableDataObjectTypes() {
61
- return this.#systemService.getObjectTypes().filter((ot) => !ot.isFolder && ot.contentStreamAllowed !== ContentStreamAllowed.NOT_ALLOWED);
61
+ return this.#systemService.getObjectTypes(true)
62
+ .filter((ot) => !ot.isFolder && ot.contentStreamAllowed !== ContentStreamAllowed.NOT_ALLOWED)
63
+ .map((ot) => {
64
+ // use id as fallback label
65
+ ot.label = ot.label || '[' + ot.id + ']';
66
+ return ot;
67
+ });
62
68
  }
63
69
  getPage(page) {
64
70
  this.busyDataSource.set(true);
@@ -244,7 +250,7 @@ class CreateTemplateComponent {
244
250
  this.#loadDataObjectTypes();
245
251
  }
246
252
  #loadDataObjectTypes() {
247
- this.dataObjectTypes.set(this.#templateService.getAvailableDataObjectTypes().sort((ot1, ot2) => ot1.id > ot2.id ? 1 : -1));
253
+ this.dataObjectTypes.set(this.#templateService.getAvailableDataObjectTypes().sort((ot1, ot2) => ot1.label > ot2.label ? 1 : -1));
248
254
  }
249
255
  createTemplate() {
250
256
  let createdTemplate;
@@ -275,13 +281,13 @@ class CreateTemplateComponent {
275
281
  });
276
282
  }
277
283
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: CreateTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
278
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: CreateTemplateComponent, isStandalone: true, selector: "ymtmpl-create-template", host: { properties: { "class.busy": "!busy()" } }, ngImport: i0, template: "<yuv-dialog [yuvBusyOverlay]=\"busy()\" [headertitel]=\"'yuv.app.templates.action.create.headline' | translate\">\n <main class=\"yuv-dialog-content\">\n <form [formGroup]=\"form\">\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.name\" | translate }}</mat-label>\n <yuv-string [required]=\"true\" formControlName=\"name\"></yuv-string>\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.description\" | translate}}</mat-label>\n <yuv-string formControlName=\"description\"></yuv-string>\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.dataObjectType\" | translate}}</mat-label>\n <mat-select formControlName=\"dataObjectType\">\n @for (dataObjectType of dataObjectTypes(); track dataObjectType) {\n <mat-option [value]=\"dataObjectType.id\">{{ dataObjectType.id }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (error()) {\n <p class=\"error\">{{ error() }}</p>\n }\n </form>\n </main>\n <footer>\n <button ymtButton=\"secondary\" [disabled]=\"busy()\" (click)=\"close()\">\n {{ \"yuv.app.templates.action.button.cancel\" | translate }}\n </button>\n <button ymtButton=\"primary\" [disabled]=\"disabledSubmit()\" (click)=\"createTemplate()\">\n {{ 'yuv.app.templates.action.button.create' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: [":host{display:block;position:relative}:host main form{padding:var(--ymt-spacing-m)}:host main form .yuv-form-field{width:100%;margin:var(--ymt-spacing-xs) 0}:host main form .error{color:var(--ymt-on-danger-container);background-color:var(--ymt-danger-container);padding:var(--ymt-spacing-m);border-radius:var(--ymt-corner-xs)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig"] }, { kind: "component", type: StringComponent, selector: "yuv-string", inputs: ["multiselect", "rows", "readonly", "autofocus", "classifications", "situation", "regex", "minLength", "maxLength"] }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }, { kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitel"] }] }); }
284
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: CreateTemplateComponent, isStandalone: true, selector: "ymtmpl-create-template", host: { properties: { "class.busy": "!busy()" } }, ngImport: i0, template: "<yuv-dialog [yuvBusyOverlay]=\"busy()\" [headertitel]=\"'yuv.app.templates.action.create.headline' | translate\">\n <main class=\"yuv-dialog-content\">\n <form [formGroup]=\"form\">\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.name\" | translate }}</mat-label>\n <yuv-string [required]=\"true\" formControlName=\"name\"></yuv-string>\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.description\" | translate}}</mat-label>\n <yuv-string formControlName=\"description\"></yuv-string>\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.dataObjectType\" | translate}}</mat-label>\n <mat-select formControlName=\"dataObjectType\">\n @for (dataObjectType of dataObjectTypes(); track dataObjectType) {\n <mat-option [value]=\"dataObjectType.id\">{{ dataObjectType.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (error()) {\n <p class=\"error\">{{ error() }}</p>\n }\n </form>\n </main>\n <footer>\n <button ymtButton=\"secondary\" [disabled]=\"busy()\" (click)=\"close()\">\n {{ \"yuv.app.templates.action.button.cancel\" | translate }}\n </button>\n <button ymtButton=\"primary\" [disabled]=\"disabledSubmit()\" (click)=\"createTemplate()\">\n {{ 'yuv.app.templates.action.button.create' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: [":host{display:block;position:relative}:host main form{padding:var(--ymt-spacing-m)}:host main form .yuv-form-field{width:100%;margin:var(--ymt-spacing-xs) 0}:host main form .error{color:var(--ymt-on-danger-container);background-color:var(--ymt-danger-container);padding:var(--ymt-spacing-m);border-radius:var(--ymt-corner-xs)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig"] }, { kind: "component", type: StringComponent, selector: "yuv-string", inputs: ["multiselect", "rows", "readonly", "autofocus", "classifications", "situation", "regex", "minLength", "maxLength"] }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }, { kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitel"] }] }); }
279
285
  }
280
286
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: CreateTemplateComponent, decorators: [{
281
287
  type: Component,
282
288
  args: [{ selector: 'ymtmpl-create-template', standalone: true, imports: [...modules$2, ...components$2], host: {
283
289
  '[class.busy]': '!busy()',
284
- }, template: "<yuv-dialog [yuvBusyOverlay]=\"busy()\" [headertitel]=\"'yuv.app.templates.action.create.headline' | translate\">\n <main class=\"yuv-dialog-content\">\n <form [formGroup]=\"form\">\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.name\" | translate }}</mat-label>\n <yuv-string [required]=\"true\" formControlName=\"name\"></yuv-string>\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.description\" | translate}}</mat-label>\n <yuv-string formControlName=\"description\"></yuv-string>\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.dataObjectType\" | translate}}</mat-label>\n <mat-select formControlName=\"dataObjectType\">\n @for (dataObjectType of dataObjectTypes(); track dataObjectType) {\n <mat-option [value]=\"dataObjectType.id\">{{ dataObjectType.id }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (error()) {\n <p class=\"error\">{{ error() }}</p>\n }\n </form>\n </main>\n <footer>\n <button ymtButton=\"secondary\" [disabled]=\"busy()\" (click)=\"close()\">\n {{ \"yuv.app.templates.action.button.cancel\" | translate }}\n </button>\n <button ymtButton=\"primary\" [disabled]=\"disabledSubmit()\" (click)=\"createTemplate()\">\n {{ 'yuv.app.templates.action.button.create' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: [":host{display:block;position:relative}:host main form{padding:var(--ymt-spacing-m)}:host main form .yuv-form-field{width:100%;margin:var(--ymt-spacing-xs) 0}:host main form .error{color:var(--ymt-on-danger-container);background-color:var(--ymt-danger-container);padding:var(--ymt-spacing-m);border-radius:var(--ymt-corner-xs)}\n"] }]
290
+ }, template: "<yuv-dialog [yuvBusyOverlay]=\"busy()\" [headertitel]=\"'yuv.app.templates.action.create.headline' | translate\">\n <main class=\"yuv-dialog-content\">\n <form [formGroup]=\"form\">\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.name\" | translate }}</mat-label>\n <yuv-string [required]=\"true\" formControlName=\"name\"></yuv-string>\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.description\" | translate}}</mat-label>\n <yuv-string formControlName=\"description\"></yuv-string>\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.dataObjectType\" | translate}}</mat-label>\n <mat-select formControlName=\"dataObjectType\">\n @for (dataObjectType of dataObjectTypes(); track dataObjectType) {\n <mat-option [value]=\"dataObjectType.id\">{{ dataObjectType.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (error()) {\n <p class=\"error\">{{ error() }}</p>\n }\n </form>\n </main>\n <footer>\n <button ymtButton=\"secondary\" [disabled]=\"busy()\" (click)=\"close()\">\n {{ \"yuv.app.templates.action.button.cancel\" | translate }}\n </button>\n <button ymtButton=\"primary\" [disabled]=\"disabledSubmit()\" (click)=\"createTemplate()\">\n {{ 'yuv.app.templates.action.button.create' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: [":host{display:block;position:relative}:host main form{padding:var(--ymt-spacing-m)}:host main form .yuv-form-field{width:100%;margin:var(--ymt-spacing-xs) 0}:host main form .error{color:var(--ymt-on-danger-container);background-color:var(--ymt-danger-container);padding:var(--ymt-spacing-m);border-radius:var(--ymt-corner-xs)}\n"] }]
285
291
  }], ctorParameters: () => [] });
286
292
 
287
293
  const components$1 = [BusyOverlayDirective, StringComponent, YmtButtonDirective, DialogComponent];
@@ -300,7 +306,7 @@ class EditTemplateComponent {
300
306
  this.form = this.#fb.group({
301
307
  name: [this.data.template?.name || '', Validators.required],
302
308
  description: [this.data.template?.description || ''],
303
- dataObjectType: [this.data.template?.dataObjectType || ''],
309
+ dataObjectType: [this.data.template?.dataObjectType.label || '']
304
310
  });
305
311
  }
306
312
  constructor() {
@@ -383,6 +389,7 @@ class TemplateManagementComponent {
383
389
  #dmsService;
384
390
  #translateService;
385
391
  #eventService;
392
+ #systemService;
386
393
  #templates;
387
394
  constructor() {
388
395
  this.layoutSettingsID = 'template-management.layout.settings';
@@ -395,6 +402,7 @@ class TemplateManagementComponent {
395
402
  this.#dmsService = inject(DmsService);
396
403
  this.#translateService = inject(TranslateService);
397
404
  this.#eventService = inject(EventService);
405
+ this.#systemService = inject(SystemService);
398
406
  this.busy = this.#templateService.busy$;
399
407
  this.icons = {
400
408
  ...APP_ICONS,
@@ -613,14 +621,21 @@ class TemplateManagementComponent {
613
621
  ngOnInit() {
614
622
  this.#templateService.refreshTemplates();
615
623
  }
624
+ getLocalizedObjectName(objectTypeId) {
625
+ const label = this.#systemService.getLocalizedLabel(objectTypeId);
626
+ if (!label?.trim()) {
627
+ return objectTypeId;
628
+ }
629
+ return label;
630
+ }
616
631
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TemplateManagementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
617
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: TemplateManagementComponent, isStandalone: true, selector: "ymtmpl-templates-management", host: { attributes: { "class.smallScreen": "smallScreenLayout()" }, properties: { "class.pagination": "this.pagination" } }, ngImport: i0, template: "<header>\n <nav [attr.aria-label]=\"'yuv.app.templates.naviagtion.aria.label' | translate\">\n <div class=\"primary-actions\">\n <button mat-mini-fab (click)=\"createNewTemplate()\" [matTooltip]=\"'yuv.app.templates.action.create.label' | translate\">\n <mat-icon>{{icons.actionCreateNewTemplate}}</mat-icon> \n </button>\n </div>\n <div class=\"template-actions\">\n <yuv-overflow-menu [menuItems]=\"actions\"></yuv-overflow-menu>\n </div>\n <div class=\"secondary-actions\">\n @if (!smallScreenLayout()) {\n <button mat-icon-button (click)=\"enableDetails.set(!enableDetails())\" [matTooltip]=\"'yuv.app.templates.toggledetails.tooltip' | translate\" [ngClass]=\"{ enabled: enableDetails() }\">\n <mat-icon>{{icons.toggleRight}}</mat-icon>\n </button>\n }\n </div>\n </nav>\n</header>\n\n<main>\n <yuv-master-details\n [gutterSize]=\"1\"\n [detailsActive]=\"!smallScreenLayout() && enableDetails()\"\n [layoutOptions]=\"layoutOptions()\"\n [layoutSettingsID]=\"layoutSettingsID\">\n \n <ng-template #yuvMasterPane>\n <div class=\"masterPaneContainer\">\n @let templateObjects = (templates$ | async)?.items;\n @if (templateObjects?.length) {\n <yuv-list (itemSelect)=\"onItemSelect($event)\">\n @for (t of templateObjects; track t.id) {\n <div class=\"item\" [ngClass]=\"[t.published ? 'public' : '']\" yuvListItem [style.--i]=\"$index\">\n <mat-icon class=\"icon\">{{t.published ? 'export_notes' : 'article'}}</mat-icon>\n <div class=\"name\">{{ t.name }}</div>\n <div class=\"description\">{{ t.description }}</div>\n <div class=\"id\">{{ t.id.toUpperCase( ) }}</div>\n <div class=\"dataObjectType\">{{ t.dataObjectType }}</div> \n </div>\n }\n </yuv-list>\n @if (pagination) {\n <mat-paginator\n class=\"paginator\"\n [length]=\"pagination.total\"\n [pageSize]=\"getPageSize()\"\n aria-label=\"Select page\"\n (page)=\"changePage($event)\"\n hidePageSize>\n </mat-paginator>\n }\n } @else {\n <div class=\"empty\">\n <p>{{ 'yuv.app.templates.list.empty' | translate }}</p>\n </div>\n }\n </div>\n </ng-template>\n\n <ng-template #yuvDetailsPane>\n <div class=\"detailsPaneContainer\">\n @let dmsObject = selectedDmsObject();\n @if (dmsObject) {\n @if (smallScreenLayout()) {\n <div class=\"toolbar\">\n <button (click)=\"selectedTemplate.set(undefined)\"> \n <mat-icon>{{icons.close}}</mat-icon> \n </button>\n </div>\n }\n <ymtmpl-template-details [dmsObject]=\"dmsObject\"></ymtmpl-template-details>\n } @else {\n <div class=\"nothing-selected\">\n <h2>{{ 'yuv.app.templates.list.selection.empty' | translate }}</h2>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M14 2H6C4.89 2 4 2.9 4 4V20C4 21.11 4.89 22 6 22H18C19.11 22 20 21.11 20 20V8L14 2M18 20H6V4H13V9H18V20M17.35 10L15.25 19H13.85L12.05 12.21L10.25 19H8.85L6.65 10H8.15L9.55 16.81L11.35 10H12.65L14.45 16.81L15.85 10H17.35Z\" /></svg>\n </div>\n }\n </div>\n </ng-template>\n\n </yuv-master-details>\n</main>\n\n<router-outlet name=\"modal\"></router-outlet>", styles: [":host{--split-gutter-background-color: var(--ymt-outline-variant);display:flex;overflow:hidden;flex-flow:column;box-sizing:border-box;height:100%}:host header>nav{flex:0 0 auto;display:grid;grid-template-columns:auto 1fr auto;grid-template-areas:\"primary actions sort secondary\";align-items:center;gap:var(--ymt-spacing-s);border-block-end:1px solid var(--ymt-outline-variant);position:relative;padding:var(--ymt-spacing-xs) var(--ymt-spacing-s)}:host header>nav .primary-actions{grid-area:primary;overflow-x:auto}:host header>nav .secondary-actions{grid-area:secondary;overflow-x:auto}:host header>nav .template-actions{grid-area:actions;align-self:stretch;overflow-x:auto;border-color:var(--ymt-outline-variant);border-width:0 1px 0 1px;border-style:solid;display:grid;grid-template-rows:1fr;grid-template-columns:1fr;align-items:center}:host main{overflow:hidden;background-color:var(--ymt-surface);height:100%}:host yuv-master-details{height:100%}:host yuv-master-details .masterPaneContainer{display:flex;flex-direction:column;height:100%;overflow:hidden}:host yuv-master-details .masterPaneContainer yuv-list{height:100%}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem]{--icon-size: 32px;--list-item-hover-background: var(--ymt-focus-background);display:grid;padding:var(--ymt-spacing-s) var(--ymt-spacing-s);border-block-end:1px solid var(--ymt-outline-variant);align-items:center;grid-template-columns:var(--icon-size) 1fr auto;grid-template-rows:repeat(2,auto);grid-template-areas:\"icon name name\" \"icon description description\" \"icon id dataObjectType\";column-gap:var(--ymt-spacing-s);row-gap:var(--ymt-spacing-s);cursor:pointer}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .icon{grid-area:icon;color:var(--ymt-text-color-subtle)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .id{grid-area:id;color:var(--ymt-text-color-subtle);font:var(--ymt-font-body-subtle)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .name{grid-area:name;color:var(--ymt-text-color-body);font:var(--ymt-font-body)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .description{grid-area:description;color:var(--ymt-text-color-subtle);font:var(--ymt-font-body)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .dataObjectType{grid-area:dataObjectType;color:var(--ymt-text-color-subtle);font:var(--ymt-font-body-subtle)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem]:not(:last-child){border-block-end:1px solid var(--ymt-outline-variant)}:host yuv-master-details .masterPaneContainer .paginator{font:inherit;border-block-start:1px solid var(--ymt-outline-variant);background-color:var(--ymt-surface-panel)}:host yuv-master-details .detailsPaneContainer{display:flex;flex-direction:column;height:100%;overflow:hidden}:host yuv-master-details .detailsPaneContainer ymtmpl-template-details{height:100%}:host yuv-master-details .detailsPaneContainer .toolbar{flex:0 0 auto}:host yuv-master-details .detailsPaneContainer .nothing-selected{display:flex;flex-flow:column;justify-content:center;align-items:center;height:100%}:host yuv-master-details .detailsPaneContainer .nothing-selected svg{width:150px;height:150px;opacity:.5;fill:var(--ymt-text-color-subtle)}:host.smallScreen{--border-radius: 0}:host.smallScreen yuv-master-details{padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: YuvOverflowMenuModule }, { kind: "component", type: i4$1.OverflowMenuComponent, selector: "yuv-overflow-menu", inputs: ["overflowIcon", "groupLabels", "menuItems", "vertical"] }, { kind: "ngmodule", type: YuvMasterDetailsModule }, { kind: "component", type: i5.YuvMasterDetailsComponent, selector: "yuv-master-details", inputs: ["detailsActive", "layoutSettingsID", "layoutOptions", "undockableDetails", "panelStyle", "gutterSize"], outputs: ["detailsActiveChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i7.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i8.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ListComponent, selector: "yuv-list", inputs: ["preventChangeUntil", "multiselect", "selfHandleSelection", "autoSelect", "disableSelection"], outputs: ["itemSelect", "itemFocus"] }, { kind: "directive", type: ListItemDirective, selector: "[yuvListItem]", inputs: ["disabled", "active", "selected"] }, { kind: "component", type: TemplateDetailsComponent, selector: "ymtmpl-template-details", inputs: ["dmsObject"] }] }); }
632
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: TemplateManagementComponent, isStandalone: true, selector: "ymtmpl-templates-management", host: { attributes: { "class.smallScreen": "smallScreenLayout()" }, properties: { "class.pagination": "this.pagination" } }, ngImport: i0, template: "<header>\n <nav [attr.aria-label]=\"'yuv.app.templates.naviagtion.aria.label' | translate\">\n <div class=\"primary-actions\">\n <button mat-mini-fab (click)=\"createNewTemplate()\" [matTooltip]=\"'yuv.app.templates.action.create.label' | translate\">\n <mat-icon>{{icons.actionCreateNewTemplate}}</mat-icon> \n </button>\n </div>\n <div class=\"template-actions\">\n <yuv-overflow-menu [menuItems]=\"actions\"></yuv-overflow-menu>\n </div>\n <div class=\"secondary-actions\">\n @if (!smallScreenLayout()) {\n <button mat-icon-button (click)=\"enableDetails.set(!enableDetails())\" [matTooltip]=\"'yuv.app.templates.toggledetails.tooltip' | translate\" [ngClass]=\"{ enabled: enableDetails() }\">\n <mat-icon>{{icons.toggleRight}}</mat-icon>\n </button>\n }\n </div>\n </nav>\n</header>\n\n<main>\n <yuv-master-details\n [gutterSize]=\"1\"\n [detailsActive]=\"!smallScreenLayout() && enableDetails()\"\n [layoutOptions]=\"layoutOptions()\"\n [layoutSettingsID]=\"layoutSettingsID\">\n \n <ng-template #yuvMasterPane>\n <div class=\"masterPaneContainer\">\n @let templateObjects = (templates$ | async)?.items;\n @if (templateObjects?.length) {\n <yuv-list (itemSelect)=\"onItemSelect($event)\">\n @for (t of templateObjects; track t.id) {\n <div class=\"item\" [ngClass]=\"[t.published ? 'public' : '']\" yuvListItem [style.--i]=\"$index\">\n <mat-icon class=\"icon\">{{t.published ? 'export_notes' : 'article'}}</mat-icon>\n <div class=\"name\">{{ t.name }}</div>\n <div class=\"description\">{{ t.description }}</div>\n <div class=\"id\">{{ t.id.toUpperCase( ) }}</div>\n <div class=\"dataObjectType\">{{ getLocalizedObjectName(t.dataObjectType) }}</div> \n </div>\n }\n </yuv-list>\n @if (pagination) {\n <mat-paginator\n class=\"paginator\"\n [length]=\"pagination.total\"\n [pageSize]=\"getPageSize()\"\n aria-label=\"Select page\"\n (page)=\"changePage($event)\"\n hidePageSize>\n </mat-paginator>\n }\n } @else {\n <div class=\"empty\">\n <p>{{ 'yuv.app.templates.list.empty' | translate }}</p>\n </div>\n }\n </div>\n </ng-template>\n\n <ng-template #yuvDetailsPane>\n <div class=\"detailsPaneContainer\">\n @let dmsObject = selectedDmsObject();\n @if (dmsObject) {\n @if (smallScreenLayout()) {\n <div class=\"toolbar\">\n <button (click)=\"selectedTemplate.set(undefined)\"> \n <mat-icon>{{icons.close}}</mat-icon> \n </button>\n </div>\n }\n <ymtmpl-template-details [dmsObject]=\"dmsObject\"></ymtmpl-template-details>\n } @else {\n <div class=\"nothing-selected\">\n <h2>{{ 'yuv.app.templates.list.selection.empty' | translate }}</h2>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M14 2H6C4.89 2 4 2.9 4 4V20C4 21.11 4.89 22 6 22H18C19.11 22 20 21.11 20 20V8L14 2M18 20H6V4H13V9H18V20M17.35 10L15.25 19H13.85L12.05 12.21L10.25 19H8.85L6.65 10H8.15L9.55 16.81L11.35 10H12.65L14.45 16.81L15.85 10H17.35Z\" /></svg>\n </div>\n }\n </div>\n </ng-template>\n\n </yuv-master-details>\n</main>\n\n<router-outlet name=\"modal\"></router-outlet>", styles: [":host{--split-gutter-background-color: var(--ymt-outline-variant);display:flex;overflow:hidden;flex-flow:column;box-sizing:border-box;height:100%}:host header>nav{flex:0 0 auto;display:grid;grid-template-columns:auto 1fr auto;grid-template-areas:\"primary actions sort secondary\";align-items:center;gap:var(--ymt-spacing-s);border-block-end:1px solid var(--ymt-outline-variant);position:relative;padding:var(--ymt-spacing-xs) var(--ymt-spacing-s)}:host header>nav .primary-actions{grid-area:primary;overflow-x:auto}:host header>nav .secondary-actions{grid-area:secondary;overflow-x:auto}:host header>nav .template-actions{grid-area:actions;align-self:stretch;overflow-x:auto;border-color:var(--ymt-outline-variant);border-width:0 1px 0 1px;border-style:solid;display:grid;grid-template-rows:1fr;grid-template-columns:1fr;align-items:center}:host main{overflow:hidden;background-color:var(--ymt-surface);height:100%}:host yuv-master-details{height:100%}:host yuv-master-details .masterPaneContainer{display:flex;flex-direction:column;height:100%;overflow:hidden}:host yuv-master-details .masterPaneContainer yuv-list{height:100%}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem]{--icon-size: 32px;--list-item-hover-background: var(--ymt-focus-background);display:grid;padding:var(--ymt-spacing-s) var(--ymt-spacing-s);border-block-end:1px solid var(--ymt-outline-variant);align-items:center;grid-template-columns:var(--icon-size) 1fr auto;grid-template-rows:repeat(2,auto);grid-template-areas:\"icon name name\" \"icon description description\" \"icon id dataObjectType\";column-gap:var(--ymt-spacing-s);row-gap:var(--ymt-spacing-s);cursor:pointer}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .icon{grid-area:icon;color:var(--ymt-text-color-subtle)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .id{grid-area:id;color:var(--ymt-text-color-subtle);font:var(--ymt-font-body-subtle)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .name{grid-area:name;color:var(--ymt-text-color-body);font:var(--ymt-font-body)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .description{grid-area:description;color:var(--ymt-text-color-subtle);font:var(--ymt-font-body)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .dataObjectType{grid-area:dataObjectType;color:var(--ymt-text-color-subtle);font:var(--ymt-font-body-subtle)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem]:not(:last-child){border-block-end:1px solid var(--ymt-outline-variant)}:host yuv-master-details .masterPaneContainer .paginator{font:inherit;border-block-start:1px solid var(--ymt-outline-variant);background-color:var(--ymt-surface-panel)}:host yuv-master-details .detailsPaneContainer{display:flex;flex-direction:column;height:100%;overflow:hidden}:host yuv-master-details .detailsPaneContainer ymtmpl-template-details{height:100%}:host yuv-master-details .detailsPaneContainer .toolbar{flex:0 0 auto}:host yuv-master-details .detailsPaneContainer .nothing-selected{display:flex;flex-flow:column;justify-content:center;align-items:center;height:100%}:host yuv-master-details .detailsPaneContainer .nothing-selected svg{width:150px;height:150px;opacity:.5;fill:var(--ymt-text-color-subtle)}:host.smallScreen{--border-radius: 0}:host.smallScreen yuv-master-details{padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: YuvOverflowMenuModule }, { kind: "component", type: i4$1.OverflowMenuComponent, selector: "yuv-overflow-menu", inputs: ["overflowIcon", "groupLabels", "menuItems", "vertical"] }, { kind: "ngmodule", type: YuvMasterDetailsModule }, { kind: "component", type: i5.YuvMasterDetailsComponent, selector: "yuv-master-details", inputs: ["detailsActive", "layoutSettingsID", "layoutOptions", "undockableDetails", "panelStyle", "gutterSize"], outputs: ["detailsActiveChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i7.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i8.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ListComponent, selector: "yuv-list", inputs: ["preventChangeUntil", "multiselect", "selfHandleSelection", "autoSelect", "disableSelection"], outputs: ["itemSelect", "itemFocus"] }, { kind: "directive", type: ListItemDirective, selector: "[yuvListItem]", inputs: ["disabled", "active", "selected"] }, { kind: "component", type: TemplateDetailsComponent, selector: "ymtmpl-template-details", inputs: ["dmsObject"] }] }); }
618
633
  }
619
634
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TemplateManagementComponent, decorators: [{
620
635
  type: Component,
621
636
  args: [{ selector: 'ymtmpl-templates-management', standalone: true, imports: [...modules, ...components], host: {
622
637
  'class.smallScreen': 'smallScreenLayout()',
623
- }, template: "<header>\n <nav [attr.aria-label]=\"'yuv.app.templates.naviagtion.aria.label' | translate\">\n <div class=\"primary-actions\">\n <button mat-mini-fab (click)=\"createNewTemplate()\" [matTooltip]=\"'yuv.app.templates.action.create.label' | translate\">\n <mat-icon>{{icons.actionCreateNewTemplate}}</mat-icon> \n </button>\n </div>\n <div class=\"template-actions\">\n <yuv-overflow-menu [menuItems]=\"actions\"></yuv-overflow-menu>\n </div>\n <div class=\"secondary-actions\">\n @if (!smallScreenLayout()) {\n <button mat-icon-button (click)=\"enableDetails.set(!enableDetails())\" [matTooltip]=\"'yuv.app.templates.toggledetails.tooltip' | translate\" [ngClass]=\"{ enabled: enableDetails() }\">\n <mat-icon>{{icons.toggleRight}}</mat-icon>\n </button>\n }\n </div>\n </nav>\n</header>\n\n<main>\n <yuv-master-details\n [gutterSize]=\"1\"\n [detailsActive]=\"!smallScreenLayout() && enableDetails()\"\n [layoutOptions]=\"layoutOptions()\"\n [layoutSettingsID]=\"layoutSettingsID\">\n \n <ng-template #yuvMasterPane>\n <div class=\"masterPaneContainer\">\n @let templateObjects = (templates$ | async)?.items;\n @if (templateObjects?.length) {\n <yuv-list (itemSelect)=\"onItemSelect($event)\">\n @for (t of templateObjects; track t.id) {\n <div class=\"item\" [ngClass]=\"[t.published ? 'public' : '']\" yuvListItem [style.--i]=\"$index\">\n <mat-icon class=\"icon\">{{t.published ? 'export_notes' : 'article'}}</mat-icon>\n <div class=\"name\">{{ t.name }}</div>\n <div class=\"description\">{{ t.description }}</div>\n <div class=\"id\">{{ t.id.toUpperCase( ) }}</div>\n <div class=\"dataObjectType\">{{ t.dataObjectType }}</div> \n </div>\n }\n </yuv-list>\n @if (pagination) {\n <mat-paginator\n class=\"paginator\"\n [length]=\"pagination.total\"\n [pageSize]=\"getPageSize()\"\n aria-label=\"Select page\"\n (page)=\"changePage($event)\"\n hidePageSize>\n </mat-paginator>\n }\n } @else {\n <div class=\"empty\">\n <p>{{ 'yuv.app.templates.list.empty' | translate }}</p>\n </div>\n }\n </div>\n </ng-template>\n\n <ng-template #yuvDetailsPane>\n <div class=\"detailsPaneContainer\">\n @let dmsObject = selectedDmsObject();\n @if (dmsObject) {\n @if (smallScreenLayout()) {\n <div class=\"toolbar\">\n <button (click)=\"selectedTemplate.set(undefined)\"> \n <mat-icon>{{icons.close}}</mat-icon> \n </button>\n </div>\n }\n <ymtmpl-template-details [dmsObject]=\"dmsObject\"></ymtmpl-template-details>\n } @else {\n <div class=\"nothing-selected\">\n <h2>{{ 'yuv.app.templates.list.selection.empty' | translate }}</h2>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M14 2H6C4.89 2 4 2.9 4 4V20C4 21.11 4.89 22 6 22H18C19.11 22 20 21.11 20 20V8L14 2M18 20H6V4H13V9H18V20M17.35 10L15.25 19H13.85L12.05 12.21L10.25 19H8.85L6.65 10H8.15L9.55 16.81L11.35 10H12.65L14.45 16.81L15.85 10H17.35Z\" /></svg>\n </div>\n }\n </div>\n </ng-template>\n\n </yuv-master-details>\n</main>\n\n<router-outlet name=\"modal\"></router-outlet>", styles: [":host{--split-gutter-background-color: var(--ymt-outline-variant);display:flex;overflow:hidden;flex-flow:column;box-sizing:border-box;height:100%}:host header>nav{flex:0 0 auto;display:grid;grid-template-columns:auto 1fr auto;grid-template-areas:\"primary actions sort secondary\";align-items:center;gap:var(--ymt-spacing-s);border-block-end:1px solid var(--ymt-outline-variant);position:relative;padding:var(--ymt-spacing-xs) var(--ymt-spacing-s)}:host header>nav .primary-actions{grid-area:primary;overflow-x:auto}:host header>nav .secondary-actions{grid-area:secondary;overflow-x:auto}:host header>nav .template-actions{grid-area:actions;align-self:stretch;overflow-x:auto;border-color:var(--ymt-outline-variant);border-width:0 1px 0 1px;border-style:solid;display:grid;grid-template-rows:1fr;grid-template-columns:1fr;align-items:center}:host main{overflow:hidden;background-color:var(--ymt-surface);height:100%}:host yuv-master-details{height:100%}:host yuv-master-details .masterPaneContainer{display:flex;flex-direction:column;height:100%;overflow:hidden}:host yuv-master-details .masterPaneContainer yuv-list{height:100%}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem]{--icon-size: 32px;--list-item-hover-background: var(--ymt-focus-background);display:grid;padding:var(--ymt-spacing-s) var(--ymt-spacing-s);border-block-end:1px solid var(--ymt-outline-variant);align-items:center;grid-template-columns:var(--icon-size) 1fr auto;grid-template-rows:repeat(2,auto);grid-template-areas:\"icon name name\" \"icon description description\" \"icon id dataObjectType\";column-gap:var(--ymt-spacing-s);row-gap:var(--ymt-spacing-s);cursor:pointer}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .icon{grid-area:icon;color:var(--ymt-text-color-subtle)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .id{grid-area:id;color:var(--ymt-text-color-subtle);font:var(--ymt-font-body-subtle)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .name{grid-area:name;color:var(--ymt-text-color-body);font:var(--ymt-font-body)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .description{grid-area:description;color:var(--ymt-text-color-subtle);font:var(--ymt-font-body)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .dataObjectType{grid-area:dataObjectType;color:var(--ymt-text-color-subtle);font:var(--ymt-font-body-subtle)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem]:not(:last-child){border-block-end:1px solid var(--ymt-outline-variant)}:host yuv-master-details .masterPaneContainer .paginator{font:inherit;border-block-start:1px solid var(--ymt-outline-variant);background-color:var(--ymt-surface-panel)}:host yuv-master-details .detailsPaneContainer{display:flex;flex-direction:column;height:100%;overflow:hidden}:host yuv-master-details .detailsPaneContainer ymtmpl-template-details{height:100%}:host yuv-master-details .detailsPaneContainer .toolbar{flex:0 0 auto}:host yuv-master-details .detailsPaneContainer .nothing-selected{display:flex;flex-flow:column;justify-content:center;align-items:center;height:100%}:host yuv-master-details .detailsPaneContainer .nothing-selected svg{width:150px;height:150px;opacity:.5;fill:var(--ymt-text-color-subtle)}:host.smallScreen{--border-radius: 0}:host.smallScreen yuv-master-details{padding:0}\n"] }]
638
+ }, template: "<header>\n <nav [attr.aria-label]=\"'yuv.app.templates.naviagtion.aria.label' | translate\">\n <div class=\"primary-actions\">\n <button mat-mini-fab (click)=\"createNewTemplate()\" [matTooltip]=\"'yuv.app.templates.action.create.label' | translate\">\n <mat-icon>{{icons.actionCreateNewTemplate}}</mat-icon> \n </button>\n </div>\n <div class=\"template-actions\">\n <yuv-overflow-menu [menuItems]=\"actions\"></yuv-overflow-menu>\n </div>\n <div class=\"secondary-actions\">\n @if (!smallScreenLayout()) {\n <button mat-icon-button (click)=\"enableDetails.set(!enableDetails())\" [matTooltip]=\"'yuv.app.templates.toggledetails.tooltip' | translate\" [ngClass]=\"{ enabled: enableDetails() }\">\n <mat-icon>{{icons.toggleRight}}</mat-icon>\n </button>\n }\n </div>\n </nav>\n</header>\n\n<main>\n <yuv-master-details\n [gutterSize]=\"1\"\n [detailsActive]=\"!smallScreenLayout() && enableDetails()\"\n [layoutOptions]=\"layoutOptions()\"\n [layoutSettingsID]=\"layoutSettingsID\">\n \n <ng-template #yuvMasterPane>\n <div class=\"masterPaneContainer\">\n @let templateObjects = (templates$ | async)?.items;\n @if (templateObjects?.length) {\n <yuv-list (itemSelect)=\"onItemSelect($event)\">\n @for (t of templateObjects; track t.id) {\n <div class=\"item\" [ngClass]=\"[t.published ? 'public' : '']\" yuvListItem [style.--i]=\"$index\">\n <mat-icon class=\"icon\">{{t.published ? 'export_notes' : 'article'}}</mat-icon>\n <div class=\"name\">{{ t.name }}</div>\n <div class=\"description\">{{ t.description }}</div>\n <div class=\"id\">{{ t.id.toUpperCase( ) }}</div>\n <div class=\"dataObjectType\">{{ getLocalizedObjectName(t.dataObjectType) }}</div> \n </div>\n }\n </yuv-list>\n @if (pagination) {\n <mat-paginator\n class=\"paginator\"\n [length]=\"pagination.total\"\n [pageSize]=\"getPageSize()\"\n aria-label=\"Select page\"\n (page)=\"changePage($event)\"\n hidePageSize>\n </mat-paginator>\n }\n } @else {\n <div class=\"empty\">\n <p>{{ 'yuv.app.templates.list.empty' | translate }}</p>\n </div>\n }\n </div>\n </ng-template>\n\n <ng-template #yuvDetailsPane>\n <div class=\"detailsPaneContainer\">\n @let dmsObject = selectedDmsObject();\n @if (dmsObject) {\n @if (smallScreenLayout()) {\n <div class=\"toolbar\">\n <button (click)=\"selectedTemplate.set(undefined)\"> \n <mat-icon>{{icons.close}}</mat-icon> \n </button>\n </div>\n }\n <ymtmpl-template-details [dmsObject]=\"dmsObject\"></ymtmpl-template-details>\n } @else {\n <div class=\"nothing-selected\">\n <h2>{{ 'yuv.app.templates.list.selection.empty' | translate }}</h2>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M14 2H6C4.89 2 4 2.9 4 4V20C4 21.11 4.89 22 6 22H18C19.11 22 20 21.11 20 20V8L14 2M18 20H6V4H13V9H18V20M17.35 10L15.25 19H13.85L12.05 12.21L10.25 19H8.85L6.65 10H8.15L9.55 16.81L11.35 10H12.65L14.45 16.81L15.85 10H17.35Z\" /></svg>\n </div>\n }\n </div>\n </ng-template>\n\n </yuv-master-details>\n</main>\n\n<router-outlet name=\"modal\"></router-outlet>", styles: [":host{--split-gutter-background-color: var(--ymt-outline-variant);display:flex;overflow:hidden;flex-flow:column;box-sizing:border-box;height:100%}:host header>nav{flex:0 0 auto;display:grid;grid-template-columns:auto 1fr auto;grid-template-areas:\"primary actions sort secondary\";align-items:center;gap:var(--ymt-spacing-s);border-block-end:1px solid var(--ymt-outline-variant);position:relative;padding:var(--ymt-spacing-xs) var(--ymt-spacing-s)}:host header>nav .primary-actions{grid-area:primary;overflow-x:auto}:host header>nav .secondary-actions{grid-area:secondary;overflow-x:auto}:host header>nav .template-actions{grid-area:actions;align-self:stretch;overflow-x:auto;border-color:var(--ymt-outline-variant);border-width:0 1px 0 1px;border-style:solid;display:grid;grid-template-rows:1fr;grid-template-columns:1fr;align-items:center}:host main{overflow:hidden;background-color:var(--ymt-surface);height:100%}:host yuv-master-details{height:100%}:host yuv-master-details .masterPaneContainer{display:flex;flex-direction:column;height:100%;overflow:hidden}:host yuv-master-details .masterPaneContainer yuv-list{height:100%}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem]{--icon-size: 32px;--list-item-hover-background: var(--ymt-focus-background);display:grid;padding:var(--ymt-spacing-s) var(--ymt-spacing-s);border-block-end:1px solid var(--ymt-outline-variant);align-items:center;grid-template-columns:var(--icon-size) 1fr auto;grid-template-rows:repeat(2,auto);grid-template-areas:\"icon name name\" \"icon description description\" \"icon id dataObjectType\";column-gap:var(--ymt-spacing-s);row-gap:var(--ymt-spacing-s);cursor:pointer}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .icon{grid-area:icon;color:var(--ymt-text-color-subtle)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .id{grid-area:id;color:var(--ymt-text-color-subtle);font:var(--ymt-font-body-subtle)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .name{grid-area:name;color:var(--ymt-text-color-body);font:var(--ymt-font-body)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .description{grid-area:description;color:var(--ymt-text-color-subtle);font:var(--ymt-font-body)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem] .dataObjectType{grid-area:dataObjectType;color:var(--ymt-text-color-subtle);font:var(--ymt-font-body-subtle)}:host yuv-master-details .masterPaneContainer yuv-list [yuvListItem]:not(:last-child){border-block-end:1px solid var(--ymt-outline-variant)}:host yuv-master-details .masterPaneContainer .paginator{font:inherit;border-block-start:1px solid var(--ymt-outline-variant);background-color:var(--ymt-surface-panel)}:host yuv-master-details .detailsPaneContainer{display:flex;flex-direction:column;height:100%;overflow:hidden}:host yuv-master-details .detailsPaneContainer ymtmpl-template-details{height:100%}:host yuv-master-details .detailsPaneContainer .toolbar{flex:0 0 auto}:host yuv-master-details .detailsPaneContainer .nothing-selected{display:flex;flex-flow:column;justify-content:center;align-items:center;height:100%}:host yuv-master-details .detailsPaneContainer .nothing-selected svg{width:150px;height:150px;opacity:.5;fill:var(--ymt-text-color-subtle)}:host.smallScreen{--border-radius: 0}:host.smallScreen yuv-master-details{padding:0}\n"] }]
624
639
  }], ctorParameters: () => [], propDecorators: { pagination: [{
625
640
  type: HostBinding,
626
641
  args: ['class.pagination']
@@ -1 +1 @@
1
- {"version":3,"file":"yuuvis-app-templates.mjs","sources":["../../../../projects/yuuvis/app-templates/src/lib/app-templates.service.ts","../../../../projects/yuuvis/app-templates/src/lib/app-templates.component.ts","../../../../projects/yuuvis/app-templates/src/lib/components/template-details/template-details.component.ts","../../../../projects/yuuvis/app-templates/src/lib/components/template-details/template-details.component.html","../../../../projects/yuuvis/app-templates/src/lib/overlays/create-template/create-template.component.ts","../../../../projects/yuuvis/app-templates/src/lib/overlays/create-template/create-template.component.html","../../../../projects/yuuvis/app-templates/src/lib/overlays/edit-template/edit-template.component.ts","../../../../projects/yuuvis/app-templates/src/lib/overlays/edit-template/edit-template.component.html","../../../../projects/yuuvis/app-templates/src/lib/pages/management/template-management.component.ts","../../../../projects/yuuvis/app-templates/src/lib/pages/management/template-management.component.html","../../../../projects/yuuvis/app-templates/src/lib/lib.routes.ts","../../../../projects/yuuvis/app-templates/src/yuuvis-app-templates.ts"],"sourcesContent":["import { HttpErrorResponse, HttpParams } from '@angular/common/http';\nimport { inject, Injectable, signal } from '@angular/core';\nimport {\n ApiBase,\n BackendService,\n ContentStreamAllowed,\n CoreApiObject,\n DmsService,\n GenericObjectType,\n Logger,\n SearchResponse,\n SystemService,\n TranslateService,\n} from '@yuuvis/client-core';\nimport {\n catchError,\n map,\n Observable,\n of,\n ReplaySubject,\n switchMap,\n tap,\n throwError,\n} from 'rxjs';\nimport {\n TEMPLATE_FILE_MIME_TYPE,\n TemplateObject,\n TemplateSearchResponse,\n} from '@yuuvis/app-templates/shared';\n\nimport { ConfirmService } from '@yuuvis/client-framework/common';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TemplateService {\n static PAGE_SIZE = 20;\n\n readonly #logger = inject(Logger);\n\n readonly #backendService = inject(BackendService);\n readonly #dmsService = inject(DmsService);\n readonly #confirmService = inject(ConfirmService);\n readonly #translateService = inject(TranslateService);\n readonly #systemService = inject(SystemService)\n\n private templates?: TemplateSearchResponse;\n\n private templatesDataSource = new ReplaySubject<TemplateSearchResponse>(1);\n public templates$: Observable<TemplateSearchResponse> =\n this.templatesDataSource.asObservable();\n\n private busyDataSource = signal<boolean>(false);\n public busy$ = this.busyDataSource.asReadonly();\n\n constructor() {}\n\n getAvailableDataObjectTypes(): GenericObjectType[] {\n return this.#systemService.getObjectTypes().filter((ot) => !ot.isFolder && ot.contentStreamAllowed !== ContentStreamAllowed.NOT_ALLOWED);\n }\n\n getPage(page?: number) {\n this.busyDataSource.set(true);\n\n this.#fetchTemplates(page)\n .subscribe({\n next: (res: TemplateSearchResponse) => {\n this.templates = res;\n this.templatesDataSource.next(this.templates);\n },\n error: (e: any) => {\n this.#logger.error('Failed to fetch templates', e);\n },\n })\n .add(() => this.busyDataSource.set(false));\n }\n\n createTemplate(\n name: string,\n description: string,\n dataObjectType: string\n ): Observable<TemplateObject> {\n let requestParams = {\n name: name,\n description: description,\n dataObjects: { objectData: dataObjectType }\n };\n\n return this.#backendService\n .post(`/template-service/api/objects/`, requestParams, ApiBase.none)\n .pipe(\n catchError((e: HttpErrorResponse) => {\n this.#logger.error('Failed to create template', e);\n return throwError(() => new Error(e.message));\n }),\n map((res: CoreApiObject) => new TemplateObject(res)\n )\n );\n }\n\n downloadTemplateContent(template: TemplateObject): void {\n return this.#backendService.download(\n this.#dmsService.getContentPath(template.id, undefined)\n );\n }\n\n replaceTemplateContent(\n template: TemplateObject,\n file: File\n ): Observable<any> {\n if (file.type != TEMPLATE_FILE_MIME_TYPE) {\n return throwError(\n () =>\n new Error(\n this.#translateService.instant(\n 'yuv.app.templates.action.replaceContent.error.unsupportedFileType'\n )\n )\n );\n }\n return this.#dmsService\n .uploadContent(template.id, file)\n .pipe(\n catchError((e: HttpErrorResponse) => {\n this.#logger.error('Failed to create template', e);\n return throwError(() => new Error(e.message));\n }),\n \n );\n }\n\n toggleTemplateState(template: TemplateObject): Observable<boolean> {\n let requestParams = {\n published: !template.published,\n };\n\n return this.#confirmService\n .confirm(\n template.published\n ? {\n title: this.#translateService.instant(\n 'yuv.app.templates.action.unpublish.label'\n ),\n message: this.#translateService.instant(\n 'yuv.app.templates.action.unpublish.confirm.message',\n { template: template.name }\n ),\n }\n : {\n title: this.#translateService.instant(\n 'yuv.app.templates.action.publish.label'\n ),\n message: this.#translateService.instant(\n 'yuv.app.templates.action.publish.confirm.message',\n { template: template.name }\n ),\n }\n )\n .pipe(\n switchMap((confirmed: boolean) => {\n if (confirmed) {\n return this.#backendService\n .patch(\n `/template-service/api/objects/${template.id}`,\n requestParams,\n ApiBase.none\n )\n .pipe(\n map(() => true),\n tap(() => this.refreshTemplates())\n );\n } else return of(false);\n })\n );\n }\n\n updateTemplateData(id: string, requestParams: any): Observable<boolean> {\n \n return this.#backendService\n .patch(\n `/template-service/api/objects/${id}`,\n requestParams,\n ApiBase.none\n )\n .pipe(\n map(() => true),\n tap(() => this.refreshTemplates())\n );\n }\n\n deleteTemplate(template: TemplateObject): Observable<boolean> {\n return this.#confirmService\n .confirm({\n title: this.#translateService.instant(\n 'yuv.app.templates.action.delete.label'\n ),\n message: template.published\n ? this.#translateService.instant(\n 'yuv.app.templates.action.delete.public.confirm.message',\n { template: template.name }\n )\n : this.#translateService.instant(\n 'yuv.app.templates.action.delete.confirm.message',\n { template: template.name }\n ),\n })\n .pipe(\n switchMap((confirmed: boolean) => {\n if (confirmed) {\n return this.#backendService\n .delete(`/dms/objects/${template.id}`, ApiBase.core)\n .pipe(\n map(() => true),\n tap(() => this.refreshTemplates())\n );\n } else return of(false);\n })\n );\n }\n\n refreshTemplates() {\n this.getPage(this.templates?.pageNumber);\n }\n\n #fetchTemplates(pageNumber = 0): Observable<TemplateSearchResponse> {\n let filterParams = new HttpParams()\n .set('page', pageNumber)\n .set('size', TemplateService.PAGE_SIZE)\n .set('sort', 'name%2Casc');\n\n return this.#backendService\n .get(`/template-service/api/objects/?${filterParams}`, ApiBase.none)\n .pipe(\n map((res: SearchResponse) => ({\n pageNumber: pageNumber,\n pageSize: TemplateService.PAGE_SIZE,\n totalNumItems: res.totalNumItems,\n items: res.objects.map(\n (obj: CoreApiObject) => new TemplateObject(obj)\n ),\n }))\n );\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { TranslateModule } from '@yuuvis/client-core';\nimport { ShellService } from '@yuuvis/client-shell-core';\n\nimport { APP_ID } from '@yuuvis/app-templates/shared';\n\n@Component({\n selector: 'ymtmpl-app-templates',\n standalone: true,\n imports: [CommonModule, TranslateModule, RouterModule],\n template: `<router-outlet></router-outlet>`,\n styleUrl: './app-templates.component.scss',\n})\nexport class YuvTemplatesComponent {\n #shell = inject(ShellService);\n \n #app = this.#shell.getApp(APP_ID);\n appName = this.#app?.title as string;\n appIcon = this.#app?.iconName;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { ObjectPreviewComponent } from '@yuuvis/client-framework/object-preview';\nimport { DmsObject} from '@yuuvis/client-core';\nconst components = [\n ObjectPreviewComponent\n];\n\nconst modules = [\n CommonModule\n];\n\n@Component({\n selector: 'ymtmpl-template-details',\n templateUrl: './template-details.component.html',\n styleUrls: ['./template-details.component.scss'],\n standalone: true,\n imports: [...modules, ...components]\n})\nexport class TemplateDetailsComponent {\n @Input() dmsObject!: DmsObject;\n}","<yuv-object-preview [dmsObject]=\"dmsObject\"></yuv-object-preview>","import { CommonModule } from '@angular/common';\nimport { Component, inject, linkedSignal, signal } from '@angular/core';\nimport {\n FormBuilder,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { GenericObjectType, TranslateModule } from '@yuuvis/client-core';\nimport { StringComponent } from '@yuuvis/client-framework/forms';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { TemplateService } from './../../app-templates.service';\nimport { BusyOverlayDirective, DialogComponent } from '@yuuvis/client-framework/common';\nimport { TemplateObject } from '@yuuvis/app-templates/shared';\n\nconst components = [BusyOverlayDirective, StringComponent, YmtButtonDirective, DialogComponent];\n\nconst modules = [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n MatFormFieldModule,\n MatSelectModule\n];\n\n@Component({\n selector: 'ymtmpl-create-template',\n templateUrl: './create-template.component.html',\n styleUrl: './create-template.component.scss',\n standalone: true,\n imports: [...modules, ...components],\n host: {\n '[class.busy]': '!busy()',\n },\n})\nexport class CreateTemplateComponent {\n readonly #fb = inject(FormBuilder);\n readonly #templateService = inject(TemplateService);\n readonly #dialogRef = inject(MatDialogRef<CreateTemplateComponent, TemplateObject>);\n\n busy = signal<boolean>(false);\n\n error = signal<string | undefined>(undefined);\n\n form: FormGroup = this.#fb.group({\n name: ['New template', Validators.required],\n description: [''],\n dataObjectType: ['system:document', Validators.required]\n });\n\n dataObjectTypes = signal<GenericObjectType[]>([]);\n\n changedInput = signal<any | undefined>(undefined);\n \n disabledSubmit = linkedSignal({\n source: this.changedInput,\n computation: () => {\n return this.busy() || this.form.invalid || !this.form.value.name;\n }\n });\n\n constructor() {\n this.#loadDataObjectTypes();\n }\n\n #loadDataObjectTypes() {\n this.dataObjectTypes.set(this.#templateService.getAvailableDataObjectTypes().sort((ot1, ot2) => ot1.id > ot2.id ? 1 : -1))\n }\n\n createTemplate() {\n let createdTemplate : TemplateObject;\n let createParams = this.form.value;\n\n this.busy.set(true);\n this.error.set(undefined);\n\n this.#templateService\n .createTemplate(\n createParams.name,\n createParams.description,\n createParams.dataObjectType\n )\n .subscribe({\n error: (e: any) => {\n this.error.set(e);\n this.busy.set(false);\n },\n next: (obj : TemplateObject) => {\n createdTemplate = obj;\n },\n complete: () => {\n this.#dialogRef.close(createdTemplate);\n },\n });\n }\n\n close() {\n this.#dialogRef.close();\n }\n\n ngAfterViewInit() {\n this.form.valueChanges.subscribe((value) => {\n this.changedInput.set(value);\n });\n }\n}\n","<yuv-dialog [yuvBusyOverlay]=\"busy()\" [headertitel]=\"'yuv.app.templates.action.create.headline' | translate\">\n <main class=\"yuv-dialog-content\">\n <form [formGroup]=\"form\">\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.name\" | translate }}</mat-label>\n <yuv-string [required]=\"true\" formControlName=\"name\"></yuv-string>\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.description\" | translate}}</mat-label>\n <yuv-string formControlName=\"description\"></yuv-string>\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.dataObjectType\" | translate}}</mat-label>\n <mat-select formControlName=\"dataObjectType\">\n @for (dataObjectType of dataObjectTypes(); track dataObjectType) {\n <mat-option [value]=\"dataObjectType.id\">{{ dataObjectType.id }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (error()) {\n <p class=\"error\">{{ error() }}</p>\n }\n </form>\n </main>\n <footer>\n <button ymtButton=\"secondary\" [disabled]=\"busy()\" (click)=\"close()\">\n {{ \"yuv.app.templates.action.button.cancel\" | translate }}\n </button>\n <button ymtButton=\"primary\" [disabled]=\"disabledSubmit()\" (click)=\"createTemplate()\">\n {{ 'yuv.app.templates.action.button.create' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, linkedSignal, signal } from '@angular/core';\nimport {\n FormBuilder,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { TranslateModule } from '@yuuvis/client-core';\nimport { StringComponent } from '@yuuvis/client-framework/forms';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { TemplateService } from '../../app-templates.service';\nimport { BusyOverlayDirective, DialogComponent } from '@yuuvis/client-framework/common';\nimport { TemplateObject } from '@yuuvis/app-templates/shared';\n\nconst components = [BusyOverlayDirective, StringComponent, YmtButtonDirective, DialogComponent];\n\nconst modules = [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n MatFormFieldModule,\n MatSelectModule\n];\n\n@Component({\n selector: 'ymtmpl-edit-template',\n templateUrl: './edit-template.component.html',\n styleUrl: './edit-template.component.scss',\n standalone: true,\n imports: [...modules, ...components],\n host: {\n '[class.busy]': '!busy()',\n },\n})\nexport class EditTemplateComponent {\n readonly #fb = inject(FormBuilder);\n readonly #templateService = inject(TemplateService);\n readonly #dialogRef = inject(\n MatDialogRef<EditTemplateComponent, TemplateObject>\n );\n\n busy = signal<boolean>(false);\n\n error = signal<string | undefined>(undefined);\n\n data = inject<any>(MAT_DIALOG_DATA);\n\n changedInput = signal<any | undefined>(undefined);\n\n disabledSubmit = linkedSignal({\n source: this.changedInput,\n computation: () => {\n return this.busy() || this.form.invalid || !this.form.value.name;\n }\n });\n\n form: FormGroup;\n\n ngOnInit() {\n this.form = this.#fb.group({\n name: [this.data.template?.name || '', Validators.required],\n description: [this.data.template?.description || ''],\n dataObjectType: [this.data.template?.dataObjectType || ''],\n });\n }\n\n constructor() {}\n\n updateTemplate() {\n if(!this.form.dirty) {\n this.#dialogRef.close();\n return;\n }\n\n this.busy.set(true);\n this.error.set(undefined);\n\n this.#templateService\n .updateTemplateData(this.data.template.id, \n { name: this.form.value.name, description: this.form.value.description }\n )\n .subscribe({\n error: (e: any) => {\n this.error.set(e);\n this.busy.set(false);\n },\n next: () => {\n },\n complete: () => {\n this.#dialogRef.close();\n },\n });\n }\n\n close() {\n this.#dialogRef.close();\n }\n ngAfterViewInit() {\n this.form.valueChanges.subscribe((value) => {\n this.changedInput.set(value);\n });\n }\n}\n","<yuv-dialog [yuvBusyOverlay]=\"busy()\" [headertitel]=\"'yuv.app.templates.action.edit.label' | translate\">\n <main class=\"yuv-dialog-content\">\n <form [formGroup]=\"form\">\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.name\" | translate }}</mat-label>\n <yuv-string [required]=\"true\" formControlName=\"name\"></yuv-string>\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.description\" | translate}}</mat-label>\n <yuv-string formControlName=\"description\"></yuv-string>\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.dataObjectType\" | translate}}</mat-label>\n <yuv-string formControlName=\"dataObjectType\" [readonly]=\"true\"></yuv-string>\n </mat-form-field>\n @if (error()) {\n <p class=\"error\">{{ error() }}</p>\n }\n </form>\n </main>\n <footer>\n <button ymtButton=\"secondary\" (click)=\"close()\">\n {{ \"yuv.app.templates.action.button.cancel\" | translate }}\n </button>\n <button ymtButton=\"primary\" [disabled]=\"disabledSubmit()\" (click)=\"updateTemplate()\">\n {{ \"yuv.app.templates.action.button.apply\" | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { CommonModule, DOCUMENT } from '@angular/common';\nimport {\n Component,\n HostBinding,\n inject,\n OnInit,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RouterModule } from '@angular/router';\nimport {\n DeviceScreen,\n DeviceService,\n DmsObject,\n DmsService,\n EventService,\n Logger,\n NotificationService,\n TranslateModule,\n TranslateService,\n YuvEvent,\n YuvEventType\n} from '@yuuvis/client-core';\nimport {\n ListComponent,\n ListItemDirective,\n} from '@yuuvis/client-framework/list';\nimport { YuvMasterDetailsModule } from '@yuuvis/client-framework/master-details';\nimport {\n OverflowMenuItem,\n YuvOverflowMenuModule,\n} from '@yuuvis/client-framework/overflow-menu';\nimport {\n Pagination\n} from '@yuuvis/client-framework/pagination';\nimport { tap } from 'rxjs';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport {\n APP_ICONS,\n TEMPLATE_FILE_MIME_TYPE,\n TemplateObject,\n TemplateSearchResponse,\n} from '@yuuvis/app-templates/shared';\nimport { TemplateDetailsComponent } from '../../components/template-details/template-details.component';\nimport { CreateTemplateComponent } from '../../overlays/create-template/create-template.component';\nimport { TemplateService } from '../../app-templates.service';\nimport { EditTemplateComponent } from '../../overlays/edit-template/edit-template.component';\n\nconst components = [\n ListComponent,\n ListItemDirective,\n TemplateDetailsComponent\n];\n\nconst modules = [\n CommonModule,\n TranslateModule,\n RouterModule,\n YuvOverflowMenuModule,\n YuvMasterDetailsModule,\n MatIconModule,\n MatButtonModule,\n MatPaginatorModule,\n MatTooltipModule\n];\n\n@Component({\n selector: 'ymtmpl-templates-management',\n templateUrl: './template-management.component.html',\n styleUrl: './template-management.component.scss',\n standalone: true,\n imports: [...modules, ...components],\n host: {\n 'class.smallScreen': 'smallScreenLayout()',\n },\n})\nexport class TemplateManagementComponent implements OnInit {\n readonly layoutSettingsID = 'template-management.layout.settings';\n\n readonly #logger = inject(Logger);\n\n readonly #document = inject(DOCUMENT);\n readonly #deviceService = inject(DeviceService);\n readonly #notificationService = inject(NotificationService);\n readonly #dialog = inject(MatDialog);\n\n readonly #templateService = inject(TemplateService);\n readonly #dmsService = inject(DmsService);\n readonly #translateService = inject(TranslateService);\n readonly #eventService = inject(EventService);\n \n @HostBinding('class.pagination') pagination?: Pagination;\n\n busy = this.#templateService.busy$;\n\n icons = {\n ...APP_ICONS,\n };\n\n selectedTemplate = signal<TemplateObject | undefined>(undefined);\n selectedDmsObject = signal<DmsObject | undefined>(undefined);\n\n smallScreenLayout = signal(false);\n\n layoutOptions = signal<{ masterSize: number; detailsSize: number }>({\n masterSize: 40,\n detailsSize: 60,\n });\n\n actions: OverflowMenuItem[] = [];\n\n #templates: TemplateObject[] = [];\n\n templates$ = this.#templateService.templates$.pipe(\n tap((response: TemplateSearchResponse) => {\n this.#templates = response.items;\n const selectedTemplate = this.selectedTemplate();\n if (selectedTemplate) {\n // check if the selected template is still in the list\n const found = this.#templates.find((t) => t.id === selectedTemplate.id);\n if (found) {\n // update the selected template instance and the actions\n this.selectedTemplate.set(found);\n this.#updateActions(this.selectedTemplate());\n } \n // if not, set selected template to undefined\n else this.selectedTemplate.set(undefined);\n }\n this.pagination =\n response && response.totalNumItems > response.pageSize\n ? {\n total: response.totalNumItems,\n pages: Math.ceil(response.totalNumItems / response.pageSize),\n page: response.pageNumber + 1\n }\n : undefined;\n })\n );\n\n enableDetails = signal<boolean>(true);\n\n constructor() {\n this.#eventService.on(YuvEventType.DMS_OBJECT_UPDATED)\n .pipe(takeUntilDestroyed())\n .subscribe((e: YuvEvent) => {\n const id = e.data.id as string;\n let sel = this.selectedTemplate();\n if(sel && id === sel.id){\n this.#dmsService.getDmsObject(id).subscribe({\n next: (obj) => {\n this.selectedDmsObject.set(obj);\n }\n });\n }\n });\n \n this.#deviceService.screenChange$\n .pipe(takeUntilDestroyed())\n .subscribe((s: DeviceScreen) => {\n this.smallScreenLayout.set(\n s.size === 's' && s.orientation === 'portrait'\n );\n });\n }\n\n #updateActions(obj: TemplateObject | undefined) {\n this.actions = obj\n ? [ \n {\n id: 'yuv.app.templates.action.edit',\n icon: APP_ICONS.actionEditTemplate,\n label: this.#translateService.instant(\n 'yuv.app.templates.action.edit.label'\n ),\n callback: () => this.editTemplate(),\n },\n {\n id: 'yuv.app.templates.action.replaceContent',\n icon: APP_ICONS.actionReplaceTemplateContent,\n label: this.#translateService.instant(\n 'yuv.app.templates.action.replaceContent.label'\n ),\n callback: () => this.replaceCurrentContent(),\n },\n {\n id: 'yuv.app.templates.action.downloadContent',\n icon: APP_ICONS.actionDownloadTemplateContent,\n label: this.#translateService.instant(\n 'yuv.app.templates.action.downloadContent.label'\n ),\n callback: () => this.downloadCurrentContent(),\n },\n {\n id: 'yuv.app.templates.action.delete',\n icon: APP_ICONS.actionDeleteTemplate,\n label: this.#translateService.instant(\n 'yuv.app.templates.action.delete.label'\n ),\n callback: () => this.deleteCurrent(),\n },\n {\n id: 'yuv.app.templates.action.toggleState',\n icon: this.selectedTemplate()?.published\n ? APP_ICONS.actionToggleStateToUnpublished\n : APP_ICONS.actionToggleStateToPublished,\n label: this.#translateService.instant(\n this.selectedTemplate()?.published\n ? 'yuv.app.templates.action.unpublish.label'\n : 'yuv.app.templates.action.publish.label'\n ),\n callback: () => this.toggleCurrentState(),\n },\n ]\n : [];\n }\n\n createNewTemplate() {\n this.#logger.debug('Create new template ...');\n\n this.#dialog.open(CreateTemplateComponent, {\n width: '400px',\n maxWidth: '90vw',\n }).afterClosed().subscribe((createdTemplate: TemplateObject | undefined)=>{\n if (createdTemplate){\n this.#templates.push(createdTemplate);\n this.#logger.debug(\"New template created and added to list\");\n }\n });\n }\n\n editTemplate() {\n const template = this.selectedTemplate();\n if (template) {\n this.#logger.debug('Edit template ' + template.id + ' ...');\n // Open the TemplateDetailsComponent in edit mode or handle editing logic here\n // You may want to open a dialog similar to createNewTemplate, e.g.:\n this.#dialog.open(EditTemplateComponent, {\n data: { template },\n width: '400px',\n maxWidth: '90vw',\n }).afterClosed().subscribe(() => {\n // if (updatedTemplate) {\n // // Update the template in the list if needed\n // const idx = this.#templates.findIndex(t => t.id === updatedTemplate.id);\n // if (idx > -1) {\n // this.#templates[idx] = updatedTemplate;\n // this.selectedTemplate.set(updatedTemplate);\n // this.#logger.debug('Template updated');\n // }\n // }\n });\n }\n }\n\n downloadCurrentContent() {\n const template = this.selectedTemplate();\n if (template) {\n this.#templateService.downloadTemplateContent(template);\n }\n }\n\n replaceCurrentContent() {\n const template = this.selectedTemplate();\n if (template) {\n this.#logger.debug('Replace content of template ' + template.id + ' ...');\n\n const fileInput = this.#document.createElement('input');\n\n fileInput.type = 'file';\n fileInput.multiple = false;\n fileInput.accept = TEMPLATE_FILE_MIME_TYPE;\n\n fileInput.onchange = (e) => {\n const file = (e.target as HTMLInputElement).files?.[0];\n if (file) {\n this.#templateService\n .replaceTemplateContent(template, file)\n .subscribe({\n next: () => {\n this.#notificationService.success(\n this.#translateService.instant(\n 'yuv.app.templates.action.replaceContent.success'\n )\n );\n },\n error: (err: any) => {\n this.#notificationService.error(err);\n },\n complete: () => {\n this.#logger.debug('Template content replaced');\n },\n });\n }\n };\n\n fileInput.click();\n fileInput.remove();\n }\n }\n\n toggleCurrentState() {\n const template = this.selectedTemplate();\n if (template) {\n this.#templateService\n .toggleTemplateState(template)\n .subscribe((res: boolean) => {\n if (res) {\n this.#updateActions(template);\n this.#logger.info('Template published state chenged');\n }\n });\n }\n }\n\n deleteCurrent() {\n const template = this.selectedTemplate();\n if (template) {\n const index: number = this.#templates.indexOf(template);\n this.#logger.debug('Delete template ' + template.id + ' ...');\n this.#templateService.deleteTemplate(template)\n .subscribe((res: boolean) => {\n if (res) {\n this.#templates.splice(index, 1);\n this.#logger.debug('Template deleted and removed from list');\n }\n });\n }\n }\n\n changePage($event: PageEvent) {\n const { pageIndex } = $event;\n this.goToPage(pageIndex + 1);\n }\n\n goToPage(pageNumber: number) {\n this.#templateService.getPage(pageNumber - 1);\n }\n\n getPageSize(): number {\n return TemplateService.PAGE_SIZE;\n }\n\n onItemSelect(idx: number[]) {\n const item = this.#templates[idx[0]];\n if (item.id === this.selectedTemplate()?.id) return;\n\n this.selectedTemplate.set(item);\n this.#dmsService.getDmsObject(item.id).subscribe({\n next: (obj) => this.selectedDmsObject.set(obj)\n })\n this.#updateActions(this.selectedTemplate());\n }\n\n ngOnInit() {\n this.#templateService.refreshTemplates();\n }\n}\n","<header>\n <nav [attr.aria-label]=\"'yuv.app.templates.naviagtion.aria.label' | translate\">\n <div class=\"primary-actions\">\n <button mat-mini-fab (click)=\"createNewTemplate()\" [matTooltip]=\"'yuv.app.templates.action.create.label' | translate\">\n <mat-icon>{{icons.actionCreateNewTemplate}}</mat-icon> \n </button>\n </div>\n <div class=\"template-actions\">\n <yuv-overflow-menu [menuItems]=\"actions\"></yuv-overflow-menu>\n </div>\n <div class=\"secondary-actions\">\n @if (!smallScreenLayout()) {\n <button mat-icon-button (click)=\"enableDetails.set(!enableDetails())\" [matTooltip]=\"'yuv.app.templates.toggledetails.tooltip' | translate\" [ngClass]=\"{ enabled: enableDetails() }\">\n <mat-icon>{{icons.toggleRight}}</mat-icon>\n </button>\n }\n </div>\n </nav>\n</header>\n\n<main>\n <yuv-master-details\n [gutterSize]=\"1\"\n [detailsActive]=\"!smallScreenLayout() && enableDetails()\"\n [layoutOptions]=\"layoutOptions()\"\n [layoutSettingsID]=\"layoutSettingsID\">\n \n <ng-template #yuvMasterPane>\n <div class=\"masterPaneContainer\">\n @let templateObjects = (templates$ | async)?.items;\n @if (templateObjects?.length) {\n <yuv-list (itemSelect)=\"onItemSelect($event)\">\n @for (t of templateObjects; track t.id) {\n <div class=\"item\" [ngClass]=\"[t.published ? 'public' : '']\" yuvListItem [style.--i]=\"$index\">\n <mat-icon class=\"icon\">{{t.published ? 'export_notes' : 'article'}}</mat-icon>\n <div class=\"name\">{{ t.name }}</div>\n <div class=\"description\">{{ t.description }}</div>\n <div class=\"id\">{{ t.id.toUpperCase( ) }}</div>\n <div class=\"dataObjectType\">{{ t.dataObjectType }}</div> \n </div>\n }\n </yuv-list>\n @if (pagination) {\n <mat-paginator\n class=\"paginator\"\n [length]=\"pagination.total\"\n [pageSize]=\"getPageSize()\"\n aria-label=\"Select page\"\n (page)=\"changePage($event)\"\n hidePageSize>\n </mat-paginator>\n }\n } @else {\n <div class=\"empty\">\n <p>{{ 'yuv.app.templates.list.empty' | translate }}</p>\n </div>\n }\n </div>\n </ng-template>\n\n <ng-template #yuvDetailsPane>\n <div class=\"detailsPaneContainer\">\n @let dmsObject = selectedDmsObject();\n @if (dmsObject) {\n @if (smallScreenLayout()) {\n <div class=\"toolbar\">\n <button (click)=\"selectedTemplate.set(undefined)\"> \n <mat-icon>{{icons.close}}</mat-icon> \n </button>\n </div>\n }\n <ymtmpl-template-details [dmsObject]=\"dmsObject\"></ymtmpl-template-details>\n } @else {\n <div class=\"nothing-selected\">\n <h2>{{ 'yuv.app.templates.list.selection.empty' | translate }}</h2>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M14 2H6C4.89 2 4 2.9 4 4V20C4 21.11 4.89 22 6 22H18C19.11 22 20 21.11 20 20V8L14 2M18 20H6V4H13V9H18V20M17.35 10L15.25 19H13.85L12.05 12.21L10.25 19H8.85L6.65 10H8.15L9.55 16.81L11.35 10H12.65L14.45 16.81L15.85 10H17.35Z\" /></svg>\n </div>\n }\n </div>\n </ng-template>\n\n </yuv-master-details>\n</main>\n\n<router-outlet name=\"modal\"></router-outlet>","import { Route } from '@angular/router';\nimport { YuvTemplatesComponent } from './app-templates.component';\nimport { TemplateManagementComponent } from './pages/management/template-management.component';\n\nexport const YuvTemplateManagerRoutes: Route[] = [\n {\n path: '',\n component: YuvTemplatesComponent,\n children: [\n { path: 'management', component: TemplateManagementComponent }, \n { path: '', redirectTo: 'management', pathMatch: 'full' },\n ]\n },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["components","modules","i1","i3","i4"],"mappings":"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"}
1
+ {"version":3,"file":"yuuvis-app-templates.mjs","sources":["../../../../projects/yuuvis/app-templates/src/lib/app-templates.service.ts","../../../../projects/yuuvis/app-templates/src/lib/app-templates.component.ts","../../../../projects/yuuvis/app-templates/src/lib/components/template-details/template-details.component.ts","../../../../projects/yuuvis/app-templates/src/lib/components/template-details/template-details.component.html","../../../../projects/yuuvis/app-templates/src/lib/overlays/create-template/create-template.component.ts","../../../../projects/yuuvis/app-templates/src/lib/overlays/create-template/create-template.component.html","../../../../projects/yuuvis/app-templates/src/lib/overlays/edit-template/edit-template.component.ts","../../../../projects/yuuvis/app-templates/src/lib/overlays/edit-template/edit-template.component.html","../../../../projects/yuuvis/app-templates/src/lib/pages/management/template-management.component.ts","../../../../projects/yuuvis/app-templates/src/lib/pages/management/template-management.component.html","../../../../projects/yuuvis/app-templates/src/lib/lib.routes.ts","../../../../projects/yuuvis/app-templates/src/yuuvis-app-templates.ts"],"sourcesContent":["import { HttpErrorResponse, HttpParams } from '@angular/common/http';\nimport { inject, Injectable, signal } from '@angular/core';\nimport {\n ApiBase,\n BackendService,\n ContentStreamAllowed,\n CoreApiObject,\n DmsService,\n GenericObjectType,\n Logger,\n SearchResponse,\n SystemService,\n TranslateService,\n} from '@yuuvis/client-core';\nimport {\n catchError,\n map,\n Observable,\n of,\n ReplaySubject,\n switchMap,\n tap,\n throwError,\n} from 'rxjs';\nimport {\n TEMPLATE_FILE_MIME_TYPE,\n TemplateObject,\n TemplateSearchResponse,\n} from '@yuuvis/app-templates/shared';\n\nimport { ConfirmService } from '@yuuvis/client-framework/common';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TemplateService {\n static PAGE_SIZE = 20;\n\n readonly #logger = inject(Logger);\n\n readonly #backendService = inject(BackendService);\n readonly #dmsService = inject(DmsService);\n readonly #confirmService = inject(ConfirmService);\n readonly #translateService = inject(TranslateService);\n readonly #systemService = inject(SystemService)\n\n private templates?: TemplateSearchResponse;\n\n private templatesDataSource = new ReplaySubject<TemplateSearchResponse>(1);\n public templates$: Observable<TemplateSearchResponse> =\n this.templatesDataSource.asObservable();\n\n private busyDataSource = signal<boolean>(false);\n public busy$ = this.busyDataSource.asReadonly();\n\n constructor() {}\n\n getAvailableDataObjectTypes(): GenericObjectType[] {\n return this.#systemService.getObjectTypes(true)\n .filter((ot) => !ot.isFolder && ot.contentStreamAllowed !== ContentStreamAllowed.NOT_ALLOWED)\n .map((ot) => {\n // use id as fallback label\n ot.label = ot.label || '[' + ot.id + ']';\n return ot;\n });\n }\n\n getPage(page?: number) {\n this.busyDataSource.set(true);\n\n this.#fetchTemplates(page)\n .subscribe({\n next: (res: TemplateSearchResponse) => {\n this.templates = res;\n this.templatesDataSource.next(this.templates);\n },\n error: (e: any) => {\n this.#logger.error('Failed to fetch templates', e);\n },\n })\n .add(() => this.busyDataSource.set(false));\n }\n\n createTemplate(\n name: string,\n description: string,\n dataObjectType: string\n ): Observable<TemplateObject> {\n let requestParams = {\n name: name,\n description: description,\n dataObjects: { objectData: dataObjectType }\n };\n\n return this.#backendService\n .post(`/template-service/api/objects/`, requestParams, ApiBase.none)\n .pipe(\n catchError((e: HttpErrorResponse) => {\n this.#logger.error('Failed to create template', e);\n return throwError(() => new Error(e.message));\n }),\n map((res: CoreApiObject) => new TemplateObject(res)\n )\n );\n }\n\n downloadTemplateContent(template: TemplateObject): void {\n return this.#backendService.download(\n this.#dmsService.getContentPath(template.id, undefined)\n );\n }\n\n replaceTemplateContent(\n template: TemplateObject,\n file: File\n ): Observable<any> {\n if (file.type != TEMPLATE_FILE_MIME_TYPE) {\n return throwError(\n () =>\n new Error(\n this.#translateService.instant(\n 'yuv.app.templates.action.replaceContent.error.unsupportedFileType'\n )\n )\n );\n }\n return this.#dmsService\n .uploadContent(template.id, file)\n .pipe(\n catchError((e: HttpErrorResponse) => {\n this.#logger.error('Failed to create template', e);\n return throwError(() => new Error(e.message));\n }),\n \n );\n }\n\n toggleTemplateState(template: TemplateObject): Observable<boolean> {\n let requestParams = {\n published: !template.published,\n };\n\n return this.#confirmService\n .confirm(\n template.published\n ? {\n title: this.#translateService.instant(\n 'yuv.app.templates.action.unpublish.label'\n ),\n message: this.#translateService.instant(\n 'yuv.app.templates.action.unpublish.confirm.message',\n { template: template.name }\n ),\n }\n : {\n title: this.#translateService.instant(\n 'yuv.app.templates.action.publish.label'\n ),\n message: this.#translateService.instant(\n 'yuv.app.templates.action.publish.confirm.message',\n { template: template.name }\n ),\n }\n )\n .pipe(\n switchMap((confirmed: boolean) => {\n if (confirmed) {\n return this.#backendService\n .patch(\n `/template-service/api/objects/${template.id}`,\n requestParams,\n ApiBase.none\n )\n .pipe(\n map(() => true),\n tap(() => this.refreshTemplates())\n );\n } else return of(false);\n })\n );\n }\n\n updateTemplateData(id: string, requestParams: any): Observable<boolean> {\n \n return this.#backendService\n .patch(\n `/template-service/api/objects/${id}`,\n requestParams,\n ApiBase.none\n )\n .pipe(\n map(() => true),\n tap(() => this.refreshTemplates())\n );\n }\n\n deleteTemplate(template: TemplateObject): Observable<boolean> {\n return this.#confirmService\n .confirm({\n title: this.#translateService.instant(\n 'yuv.app.templates.action.delete.label'\n ),\n message: template.published\n ? this.#translateService.instant(\n 'yuv.app.templates.action.delete.public.confirm.message',\n { template: template.name }\n )\n : this.#translateService.instant(\n 'yuv.app.templates.action.delete.confirm.message',\n { template: template.name }\n ),\n })\n .pipe(\n switchMap((confirmed: boolean) => {\n if (confirmed) {\n return this.#backendService\n .delete(`/dms/objects/${template.id}`, ApiBase.core)\n .pipe(\n map(() => true),\n tap(() => this.refreshTemplates())\n );\n } else return of(false);\n })\n );\n }\n\n refreshTemplates() {\n this.getPage(this.templates?.pageNumber);\n }\n\n #fetchTemplates(pageNumber = 0): Observable<TemplateSearchResponse> {\n let filterParams = new HttpParams()\n .set('page', pageNumber)\n .set('size', TemplateService.PAGE_SIZE)\n .set('sort', 'name%2Casc');\n\n return this.#backendService\n .get(`/template-service/api/objects/?${filterParams}`, ApiBase.none)\n .pipe(\n map((res: SearchResponse) => ({\n pageNumber: pageNumber,\n pageSize: TemplateService.PAGE_SIZE,\n totalNumItems: res.totalNumItems,\n items: res.objects.map(\n (obj: CoreApiObject) => new TemplateObject(obj)\n ),\n }))\n );\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { TranslateModule } from '@yuuvis/client-core';\nimport { ShellService } from '@yuuvis/client-shell-core';\n\nimport { APP_ID } from '@yuuvis/app-templates/shared';\n\n@Component({\n selector: 'ymtmpl-app-templates',\n standalone: true,\n imports: [CommonModule, TranslateModule, RouterModule],\n template: `<router-outlet></router-outlet>`,\n styleUrl: './app-templates.component.scss',\n})\nexport class YuvTemplatesComponent {\n #shell = inject(ShellService);\n \n #app = this.#shell.getApp(APP_ID);\n appName = this.#app?.title as string;\n appIcon = this.#app?.iconName;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { ObjectPreviewComponent } from '@yuuvis/client-framework/object-preview';\nimport { DmsObject} from '@yuuvis/client-core';\nconst components = [\n ObjectPreviewComponent\n];\n\nconst modules = [\n CommonModule\n];\n\n@Component({\n selector: 'ymtmpl-template-details',\n templateUrl: './template-details.component.html',\n styleUrls: ['./template-details.component.scss'],\n standalone: true,\n imports: [...modules, ...components]\n})\nexport class TemplateDetailsComponent {\n @Input() dmsObject!: DmsObject;\n}","<yuv-object-preview [dmsObject]=\"dmsObject\"></yuv-object-preview>","import { CommonModule } from '@angular/common';\nimport { Component, inject, linkedSignal, signal } from '@angular/core';\nimport {\n FormBuilder,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { GenericObjectType, TranslateModule } from '@yuuvis/client-core';\nimport { StringComponent } from '@yuuvis/client-framework/forms';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { TemplateService } from './../../app-templates.service';\nimport { BusyOverlayDirective, DialogComponent } from '@yuuvis/client-framework/common';\nimport { TemplateObject } from '@yuuvis/app-templates/shared';\n\nconst components = [BusyOverlayDirective, StringComponent, YmtButtonDirective, DialogComponent];\n\nconst modules = [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n MatFormFieldModule,\n MatSelectModule\n];\n\n@Component({\n selector: 'ymtmpl-create-template',\n templateUrl: './create-template.component.html',\n styleUrl: './create-template.component.scss',\n standalone: true,\n imports: [...modules, ...components],\n host: {\n '[class.busy]': '!busy()',\n },\n})\nexport class CreateTemplateComponent {\n readonly #fb = inject(FormBuilder);\n readonly #templateService = inject(TemplateService);\n readonly #dialogRef = inject(MatDialogRef<CreateTemplateComponent, TemplateObject>);\n\n busy = signal<boolean>(false);\n\n error = signal<string | undefined>(undefined);\n\n form: FormGroup = this.#fb.group({\n name: ['New template', Validators.required],\n description: [''],\n dataObjectType: ['system:document', Validators.required]\n });\n\n dataObjectTypes = signal<GenericObjectType[]>([]);\n\n changedInput = signal<any | undefined>(undefined);\n \n disabledSubmit = linkedSignal({\n source: this.changedInput,\n computation: () => {\n return this.busy() || this.form.invalid || !this.form.value.name;\n }\n });\n\n constructor() {\n this.#loadDataObjectTypes();\n }\n\n #loadDataObjectTypes() {\n this.dataObjectTypes.set(this.#templateService.getAvailableDataObjectTypes().sort((ot1, ot2) => ot1.label! > ot2.label! ? 1 : -1))\n }\n\n createTemplate() {\n let createdTemplate : TemplateObject;\n let createParams = this.form.value;\n\n this.busy.set(true);\n this.error.set(undefined);\n\n this.#templateService\n .createTemplate(\n createParams.name,\n createParams.description,\n createParams.dataObjectType\n )\n .subscribe({\n error: (e: any) => {\n this.error.set(e);\n this.busy.set(false);\n },\n next: (obj : TemplateObject) => {\n createdTemplate = obj;\n },\n complete: () => {\n this.#dialogRef.close(createdTemplate);\n },\n });\n }\n\n close() {\n this.#dialogRef.close();\n }\n\n ngAfterViewInit() {\n this.form.valueChanges.subscribe((value) => {\n this.changedInput.set(value);\n });\n }\n}\n","<yuv-dialog [yuvBusyOverlay]=\"busy()\" [headertitel]=\"'yuv.app.templates.action.create.headline' | translate\">\n <main class=\"yuv-dialog-content\">\n <form [formGroup]=\"form\">\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.name\" | translate }}</mat-label>\n <yuv-string [required]=\"true\" formControlName=\"name\"></yuv-string>\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.description\" | translate}}</mat-label>\n <yuv-string formControlName=\"description\"></yuv-string>\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.dataObjectType\" | translate}}</mat-label>\n <mat-select formControlName=\"dataObjectType\">\n @for (dataObjectType of dataObjectTypes(); track dataObjectType) {\n <mat-option [value]=\"dataObjectType.id\">{{ dataObjectType.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (error()) {\n <p class=\"error\">{{ error() }}</p>\n }\n </form>\n </main>\n <footer>\n <button ymtButton=\"secondary\" [disabled]=\"busy()\" (click)=\"close()\">\n {{ \"yuv.app.templates.action.button.cancel\" | translate }}\n </button>\n <button ymtButton=\"primary\" [disabled]=\"disabledSubmit()\" (click)=\"createTemplate()\">\n {{ 'yuv.app.templates.action.button.create' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, linkedSignal, signal } from '@angular/core';\nimport {\n FormBuilder,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { TranslateModule } from '@yuuvis/client-core';\nimport { StringComponent } from '@yuuvis/client-framework/forms';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { TemplateService } from '../../app-templates.service';\nimport { BusyOverlayDirective, DialogComponent } from '@yuuvis/client-framework/common';\nimport { TemplateObject } from '@yuuvis/app-templates/shared';\n\nconst components = [BusyOverlayDirective, StringComponent, YmtButtonDirective, DialogComponent];\n\nconst modules = [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n MatFormFieldModule,\n MatSelectModule\n];\n\n@Component({\n selector: 'ymtmpl-edit-template',\n templateUrl: './edit-template.component.html',\n styleUrl: './edit-template.component.scss',\n standalone: true,\n imports: [...modules, ...components],\n host: {\n '[class.busy]': '!busy()',\n },\n})\nexport class EditTemplateComponent {\n readonly #fb = inject(FormBuilder);\n readonly #templateService = inject(TemplateService);\n readonly #dialogRef = inject(\n MatDialogRef<EditTemplateComponent, TemplateObject>\n );\n\n busy = signal<boolean>(false);\n\n error = signal<string | undefined>(undefined);\n\n data = inject<any>(MAT_DIALOG_DATA);\n\n changedInput = signal<any | undefined>(undefined);\n\n disabledSubmit = linkedSignal({\n source: this.changedInput,\n computation: () => {\n return this.busy() || this.form.invalid || !this.form.value.name;\n }\n });\n\n form: FormGroup;\n\n ngOnInit() {\n this.form = this.#fb.group({\n name: [this.data.template?.name || '', Validators.required],\n description: [this.data.template?.description || ''],\n dataObjectType: [this.data.template?.dataObjectType.label || '']\n });\n }\n\n constructor() {}\n\n updateTemplate() {\n if(!this.form.dirty) {\n this.#dialogRef.close();\n return;\n }\n\n this.busy.set(true);\n this.error.set(undefined);\n\n this.#templateService\n .updateTemplateData(this.data.template.id, \n { name: this.form.value.name, description: this.form.value.description }\n )\n .subscribe({\n error: (e: any) => {\n this.error.set(e);\n this.busy.set(false);\n },\n next: () => {\n },\n complete: () => {\n this.#dialogRef.close();\n },\n });\n }\n\n close() {\n this.#dialogRef.close();\n }\n ngAfterViewInit() {\n this.form.valueChanges.subscribe((value) => {\n this.changedInput.set(value);\n });\n }\n}\n","<yuv-dialog [yuvBusyOverlay]=\"busy()\" [headertitel]=\"'yuv.app.templates.action.edit.label' | translate\">\n <main class=\"yuv-dialog-content\">\n <form [formGroup]=\"form\">\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.name\" | translate }}</mat-label>\n <yuv-string [required]=\"true\" formControlName=\"name\"></yuv-string>\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.description\" | translate}}</mat-label>\n <yuv-string formControlName=\"description\"></yuv-string>\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.dataObjectType\" | translate}}</mat-label>\n <yuv-string formControlName=\"dataObjectType\" [readonly]=\"true\"></yuv-string>\n </mat-form-field>\n @if (error()) {\n <p class=\"error\">{{ error() }}</p>\n }\n </form>\n </main>\n <footer>\n <button ymtButton=\"secondary\" (click)=\"close()\">\n {{ \"yuv.app.templates.action.button.cancel\" | translate }}\n </button>\n <button ymtButton=\"primary\" [disabled]=\"disabledSubmit()\" (click)=\"updateTemplate()\">\n {{ \"yuv.app.templates.action.button.apply\" | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { CommonModule, DOCUMENT } from '@angular/common';\nimport {\n Component,\n HostBinding,\n inject,\n OnInit,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RouterModule } from '@angular/router';\nimport {\n DeviceScreen,\n DeviceService,\n DmsObject,\n DmsService,\n EventService,\n Logger,\n NotificationService,\n SystemService,\n TranslateModule,\n TranslateService,\n YuvEvent,\n YuvEventType\n} from '@yuuvis/client-core';\nimport {\n ListComponent,\n ListItemDirective,\n} from '@yuuvis/client-framework/list';\nimport { YuvMasterDetailsModule } from '@yuuvis/client-framework/master-details';\nimport {\n OverflowMenuItem,\n YuvOverflowMenuModule,\n} from '@yuuvis/client-framework/overflow-menu';\nimport {\n Pagination\n} from '@yuuvis/client-framework/pagination';\nimport { tap } from 'rxjs';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport {\n APP_ICONS,\n TEMPLATE_FILE_MIME_TYPE,\n TemplateObject,\n TemplateSearchResponse,\n} from '@yuuvis/app-templates/shared';\nimport { TemplateDetailsComponent } from '../../components/template-details/template-details.component';\nimport { CreateTemplateComponent } from '../../overlays/create-template/create-template.component';\nimport { TemplateService } from '../../app-templates.service';\nimport { EditTemplateComponent } from '../../overlays/edit-template/edit-template.component';\n\nconst components = [\n ListComponent,\n ListItemDirective,\n TemplateDetailsComponent\n];\n\nconst modules = [\n CommonModule,\n TranslateModule,\n RouterModule,\n YuvOverflowMenuModule,\n YuvMasterDetailsModule,\n MatIconModule,\n MatButtonModule,\n MatPaginatorModule,\n MatTooltipModule\n];\n\n@Component({\n selector: 'ymtmpl-templates-management',\n templateUrl: './template-management.component.html',\n styleUrl: './template-management.component.scss',\n standalone: true,\n imports: [...modules, ...components],\n host: {\n 'class.smallScreen': 'smallScreenLayout()',\n },\n})\nexport class TemplateManagementComponent implements OnInit {\n readonly layoutSettingsID = 'template-management.layout.settings';\n\n readonly #logger = inject(Logger);\n\n readonly #document = inject(DOCUMENT);\n readonly #deviceService = inject(DeviceService);\n readonly #notificationService = inject(NotificationService);\n readonly #dialog = inject(MatDialog);\n\n readonly #templateService = inject(TemplateService);\n readonly #dmsService = inject(DmsService);\n readonly #translateService = inject(TranslateService);\n readonly #eventService = inject(EventService);\n readonly #systemService = inject(SystemService);\n\n @HostBinding('class.pagination') pagination?: Pagination;\n\n busy = this.#templateService.busy$;\n\n icons = {\n ...APP_ICONS,\n };\n\n selectedTemplate = signal<TemplateObject | undefined>(undefined);\n selectedDmsObject = signal<DmsObject | undefined>(undefined);\n\n smallScreenLayout = signal(false);\n\n layoutOptions = signal<{ masterSize: number; detailsSize: number }>({\n masterSize: 40,\n detailsSize: 60,\n });\n\n actions: OverflowMenuItem[] = [];\n\n #templates: TemplateObject[] = [];\n\n templates$ = this.#templateService.templates$.pipe(\n tap((response: TemplateSearchResponse) => {\n this.#templates = response.items;\n const selectedTemplate = this.selectedTemplate();\n if (selectedTemplate) {\n // check if the selected template is still in the list\n const found = this.#templates.find((t) => t.id === selectedTemplate.id);\n if (found) {\n // update the selected template instance and the actions\n this.selectedTemplate.set(found);\n this.#updateActions(this.selectedTemplate());\n } \n // if not, set selected template to undefined\n else this.selectedTemplate.set(undefined);\n }\n this.pagination =\n response && response.totalNumItems > response.pageSize\n ? {\n total: response.totalNumItems,\n pages: Math.ceil(response.totalNumItems / response.pageSize),\n page: response.pageNumber + 1\n }\n : undefined;\n })\n );\n\n enableDetails = signal<boolean>(true);\n\n constructor() {\n this.#eventService.on(YuvEventType.DMS_OBJECT_UPDATED)\n .pipe(takeUntilDestroyed())\n .subscribe((e: YuvEvent) => {\n const id = e.data.id as string;\n let sel = this.selectedTemplate();\n if(sel && id === sel.id){\n this.#dmsService.getDmsObject(id).subscribe({\n next: (obj) => {\n this.selectedDmsObject.set(obj);\n }\n });\n }\n });\n \n this.#deviceService.screenChange$\n .pipe(takeUntilDestroyed())\n .subscribe((s: DeviceScreen) => {\n this.smallScreenLayout.set(\n s.size === 's' && s.orientation === 'portrait'\n );\n });\n }\n\n #updateActions(obj: TemplateObject | undefined) {\n this.actions = obj\n ? [ \n {\n id: 'yuv.app.templates.action.edit',\n icon: APP_ICONS.actionEditTemplate,\n label: this.#translateService.instant(\n 'yuv.app.templates.action.edit.label'\n ),\n callback: () => this.editTemplate(),\n },\n {\n id: 'yuv.app.templates.action.replaceContent',\n icon: APP_ICONS.actionReplaceTemplateContent,\n label: this.#translateService.instant(\n 'yuv.app.templates.action.replaceContent.label'\n ),\n callback: () => this.replaceCurrentContent(),\n },\n {\n id: 'yuv.app.templates.action.downloadContent',\n icon: APP_ICONS.actionDownloadTemplateContent,\n label: this.#translateService.instant(\n 'yuv.app.templates.action.downloadContent.label'\n ),\n callback: () => this.downloadCurrentContent(),\n },\n {\n id: 'yuv.app.templates.action.delete',\n icon: APP_ICONS.actionDeleteTemplate,\n label: this.#translateService.instant(\n 'yuv.app.templates.action.delete.label'\n ),\n callback: () => this.deleteCurrent(),\n },\n {\n id: 'yuv.app.templates.action.toggleState',\n icon: this.selectedTemplate()?.published\n ? APP_ICONS.actionToggleStateToUnpublished\n : APP_ICONS.actionToggleStateToPublished,\n label: this.#translateService.instant(\n this.selectedTemplate()?.published\n ? 'yuv.app.templates.action.unpublish.label'\n : 'yuv.app.templates.action.publish.label'\n ),\n callback: () => this.toggleCurrentState(),\n },\n ]\n : [];\n }\n\n createNewTemplate() {\n this.#logger.debug('Create new template ...');\n\n this.#dialog.open(CreateTemplateComponent, {\n width: '400px',\n maxWidth: '90vw',\n }).afterClosed().subscribe((createdTemplate: TemplateObject | undefined)=>{\n if (createdTemplate){\n this.#templates.push(createdTemplate);\n this.#logger.debug(\"New template created and added to list\");\n }\n });\n }\n\n editTemplate() {\n const template = this.selectedTemplate();\n if (template) {\n this.#logger.debug('Edit template ' + template.id + ' ...');\n // Open the TemplateDetailsComponent in edit mode or handle editing logic here\n // You may want to open a dialog similar to createNewTemplate, e.g.:\n this.#dialog.open(EditTemplateComponent, {\n data: { template },\n width: '400px',\n maxWidth: '90vw',\n }).afterClosed().subscribe(() => {\n // if (updatedTemplate) {\n // // Update the template in the list if needed\n // const idx = this.#templates.findIndex(t => t.id === updatedTemplate.id);\n // if (idx > -1) {\n // this.#templates[idx] = updatedTemplate;\n // this.selectedTemplate.set(updatedTemplate);\n // this.#logger.debug('Template updated');\n // }\n // }\n });\n }\n }\n\n downloadCurrentContent() {\n const template = this.selectedTemplate();\n if (template) {\n this.#templateService.downloadTemplateContent(template);\n }\n }\n\n replaceCurrentContent() {\n const template = this.selectedTemplate();\n if (template) {\n this.#logger.debug('Replace content of template ' + template.id + ' ...');\n\n const fileInput = this.#document.createElement('input');\n\n fileInput.type = 'file';\n fileInput.multiple = false;\n fileInput.accept = TEMPLATE_FILE_MIME_TYPE;\n\n fileInput.onchange = (e) => {\n const file = (e.target as HTMLInputElement).files?.[0];\n if (file) {\n this.#templateService\n .replaceTemplateContent(template, file)\n .subscribe({\n next: () => {\n this.#notificationService.success(\n this.#translateService.instant(\n 'yuv.app.templates.action.replaceContent.success'\n )\n );\n },\n error: (err: any) => {\n this.#notificationService.error(err);\n },\n complete: () => {\n this.#logger.debug('Template content replaced');\n },\n });\n }\n };\n\n fileInput.click();\n fileInput.remove();\n }\n }\n\n toggleCurrentState() {\n const template = this.selectedTemplate();\n if (template) {\n this.#templateService\n .toggleTemplateState(template)\n .subscribe((res: boolean) => {\n if (res) {\n this.#updateActions(template);\n this.#logger.info('Template published state chenged');\n }\n });\n }\n }\n\n deleteCurrent() {\n const template = this.selectedTemplate();\n if (template) {\n const index: number = this.#templates.indexOf(template);\n this.#logger.debug('Delete template ' + template.id + ' ...');\n this.#templateService.deleteTemplate(template)\n .subscribe((res: boolean) => {\n if (res) {\n this.#templates.splice(index, 1);\n this.#logger.debug('Template deleted and removed from list');\n }\n });\n }\n }\n\n changePage($event: PageEvent) {\n const { pageIndex } = $event;\n this.goToPage(pageIndex + 1);\n }\n\n goToPage(pageNumber: number) {\n this.#templateService.getPage(pageNumber - 1);\n }\n\n getPageSize(): number {\n return TemplateService.PAGE_SIZE;\n }\n\n onItemSelect(idx: number[]) {\n const item = this.#templates[idx[0]];\n if (item.id === this.selectedTemplate()?.id) return;\n\n this.selectedTemplate.set(item);\n this.#dmsService.getDmsObject(item.id).subscribe({\n next: (obj) => this.selectedDmsObject.set(obj)\n })\n this.#updateActions(this.selectedTemplate());\n }\n\n ngOnInit() {\n this.#templateService.refreshTemplates();\n }\n\n getLocalizedObjectName(objectTypeId: string): string {\n const label = this.#systemService.getLocalizedLabel(objectTypeId)\n if (!label?.trim()) {\n return objectTypeId;\n }\n return label;\n }\n}\n","<header>\n <nav [attr.aria-label]=\"'yuv.app.templates.naviagtion.aria.label' | translate\">\n <div class=\"primary-actions\">\n <button mat-mini-fab (click)=\"createNewTemplate()\" [matTooltip]=\"'yuv.app.templates.action.create.label' | translate\">\n <mat-icon>{{icons.actionCreateNewTemplate}}</mat-icon> \n </button>\n </div>\n <div class=\"template-actions\">\n <yuv-overflow-menu [menuItems]=\"actions\"></yuv-overflow-menu>\n </div>\n <div class=\"secondary-actions\">\n @if (!smallScreenLayout()) {\n <button mat-icon-button (click)=\"enableDetails.set(!enableDetails())\" [matTooltip]=\"'yuv.app.templates.toggledetails.tooltip' | translate\" [ngClass]=\"{ enabled: enableDetails() }\">\n <mat-icon>{{icons.toggleRight}}</mat-icon>\n </button>\n }\n </div>\n </nav>\n</header>\n\n<main>\n <yuv-master-details\n [gutterSize]=\"1\"\n [detailsActive]=\"!smallScreenLayout() && enableDetails()\"\n [layoutOptions]=\"layoutOptions()\"\n [layoutSettingsID]=\"layoutSettingsID\">\n \n <ng-template #yuvMasterPane>\n <div class=\"masterPaneContainer\">\n @let templateObjects = (templates$ | async)?.items;\n @if (templateObjects?.length) {\n <yuv-list (itemSelect)=\"onItemSelect($event)\">\n @for (t of templateObjects; track t.id) {\n <div class=\"item\" [ngClass]=\"[t.published ? 'public' : '']\" yuvListItem [style.--i]=\"$index\">\n <mat-icon class=\"icon\">{{t.published ? 'export_notes' : 'article'}}</mat-icon>\n <div class=\"name\">{{ t.name }}</div>\n <div class=\"description\">{{ t.description }}</div>\n <div class=\"id\">{{ t.id.toUpperCase( ) }}</div>\n <div class=\"dataObjectType\">{{ getLocalizedObjectName(t.dataObjectType) }}</div> \n </div>\n }\n </yuv-list>\n @if (pagination) {\n <mat-paginator\n class=\"paginator\"\n [length]=\"pagination.total\"\n [pageSize]=\"getPageSize()\"\n aria-label=\"Select page\"\n (page)=\"changePage($event)\"\n hidePageSize>\n </mat-paginator>\n }\n } @else {\n <div class=\"empty\">\n <p>{{ 'yuv.app.templates.list.empty' | translate }}</p>\n </div>\n }\n </div>\n </ng-template>\n\n <ng-template #yuvDetailsPane>\n <div class=\"detailsPaneContainer\">\n @let dmsObject = selectedDmsObject();\n @if (dmsObject) {\n @if (smallScreenLayout()) {\n <div class=\"toolbar\">\n <button (click)=\"selectedTemplate.set(undefined)\"> \n <mat-icon>{{icons.close}}</mat-icon> \n </button>\n </div>\n }\n <ymtmpl-template-details [dmsObject]=\"dmsObject\"></ymtmpl-template-details>\n } @else {\n <div class=\"nothing-selected\">\n <h2>{{ 'yuv.app.templates.list.selection.empty' | translate }}</h2>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M14 2H6C4.89 2 4 2.9 4 4V20C4 21.11 4.89 22 6 22H18C19.11 22 20 21.11 20 20V8L14 2M18 20H6V4H13V9H18V20M17.35 10L15.25 19H13.85L12.05 12.21L10.25 19H8.85L6.65 10H8.15L9.55 16.81L11.35 10H12.65L14.45 16.81L15.85 10H17.35Z\" /></svg>\n </div>\n }\n </div>\n </ng-template>\n\n </yuv-master-details>\n</main>\n\n<router-outlet name=\"modal\"></router-outlet>","import { Route } from '@angular/router';\nimport { YuvTemplatesComponent } from './app-templates.component';\nimport { TemplateManagementComponent } from './pages/management/template-management.component';\n\nexport const YuvTemplateManagerRoutes: Route[] = [\n {\n path: '',\n component: YuvTemplatesComponent,\n children: [\n { path: 'management', component: TemplateManagementComponent }, \n { path: '', redirectTo: 'management', pathMatch: 'full' },\n ]\n },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["components","modules","i1","i3","i4"],"mappings":"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"}
@@ -45,6 +45,7 @@ export declare class TemplateManagementComponent implements OnInit {
45
45
  getPageSize(): number;
46
46
  onItemSelect(idx: number[]): void;
47
47
  ngOnInit(): void;
48
+ getLocalizedObjectName(objectTypeId: string): string;
48
49
  static ɵfac: i0.ɵɵFactoryDeclaration<TemplateManagementComponent, never>;
49
50
  static ɵcmp: i0.ɵɵComponentDeclaration<TemplateManagementComponent, "ymtmpl-templates-management", never, {}, {}, never, never, true, never>;
50
51
  }
package/package.json CHANGED
@@ -32,5 +32,5 @@
32
32
  "dependencies": {
33
33
  "tslib": "^2.3.0"
34
34
  },
35
- "version": "1.2.1"
35
+ "version": "1.2.3"
36
36
  }
package/yuv-manifest.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "id": "io.yuuvis.app.templates",
3
- "title": "yuuvis® templates",
3
+ "title": "yuuvis templates",
4
+ "requires": ["templates"],
4
5
  "extension": "YuvTemplatesExtension",
5
6
  "ui": {
6
7
  "path": "templates",
@@ -10,4 +11,4 @@
10
11
  "appHeader": true
11
12
  }
12
13
  }
13
- }
14
+ }