@mediusinc/mng-commons-audit 3.2.0 → 3.3.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { TypeName, ObjectSerializer, MediusFilterMatchType, AMngBaseApiService, MngConfigurationService, MngInternalError, AMngTableviewRouteComponent, LookupDataProvider, TableviewDescriptor, TableviewDataProvider, MediusQueryResult, ActionEditorDescriptor, ActionPositionEnum, ActionDataProviderUtil, TableviewActionDefaultCategories, ActionEditorSubmitDescriptor, ActionEditorSubmitTypeEnum, MngDropdownComponent, MngTableviewRouteComponent, AMngFormlyCustomFieldComponent, TableDescriptor, TablePaginationModeEnum, MngTableComponent, EditorDescriptor, TableviewEditorTypeEnum, TableFilterDisplayEnum, MngTableviewComponent, RouteBuilder, TableviewRouteBuilder, RoutesBuilder } from '@mediusinc/mng-commons';
1
+ import { TypeName, ObjectSerializer, MediusFilterMatchType, AMngBaseApiService, MngConfigurationService, MngInternalError, AMngTableviewRouteComponent, LookupDataProvider, TableviewDescriptor, TableviewDataProvider, MediusQueryResult, ActionEditorDetailsDescriptor, MngDropdownComponent, MngTableviewRouteComponent, AMngFormlyCustomFieldComponent, TableDescriptor, TablePaginationModeEnum, MngTableComponent, EditorDescriptor, TableviewEditorTypeEnum, TableFilterDisplayEnum, MngTableviewComponent, RouteBuilder, TableviewRouteBuilder, RoutesBuilder } from '@mediusinc/mng-commons';
2
2
  import * as i0 from '@angular/core';
3
3
  import { InjectionToken, inject, Injectable, Component, DestroyRef, signal, Input, Injector, ChangeDetectionStrategy } from '@angular/core';
4
4
  import { map } from 'rxjs/operators';
@@ -99,6 +99,18 @@ var MngRevisionTypeDto;
99
99
  })(MngRevisionTypeDto || (MngRevisionTypeDto = {}));
100
100
  ObjectSerializer.get().registerEnum(MngRevisionTypeDto, 'MngRevisionTypeDto');
101
101
 
102
+ let MngEntityRevisionChangeState = class MngEntityRevisionChangeState {
103
+ };
104
+ MngEntityRevisionChangeState = __decorate([
105
+ TypeName('MngEntityRevisionChangeState')
106
+ ], MngEntityRevisionChangeState);
107
+
108
+ let MngEntityRevisionChanges = class MngEntityRevisionChanges {
109
+ };
110
+ MngEntityRevisionChanges = __decorate([
111
+ TypeName('MngEntityChanges')
112
+ ], MngEntityRevisionChanges);
113
+
102
114
  var NewMediusFilterMatchType;
103
115
  (function (NewMediusFilterMatchType) {
104
116
  NewMediusFilterMatchType["Equals"] = "eq";
@@ -119,6 +131,7 @@ var NewMediusFilterMatchType;
119
131
  })(NewMediusFilterMatchType || (NewMediusFilterMatchType = {}));
120
132
 
121
133
  class AuditUtil {
134
+ static { this._dateRegex = /\d{4}-[01]\d-[0-3]\d/; }
122
135
  static addColumnsFromModel(descriptor, properties, modelType = undefined, addFilters = true, addSorts = true) {
123
136
  for (const property of properties) {
124
137
  if (!property.resolvedPropertyName) {
@@ -287,7 +300,12 @@ class AuditUtil {
287
300
  break;
288
301
  }
289
302
  case MediusFilterMatchType.FromTo: {
290
- filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.Between}:${mfp.filterValue},${mfp.filterValueTo}`);
303
+ if (this._dateRegex.test(mfp.filterValue)) {
304
+ filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.Between}:${new Date(mfp.filterValue).toISOString()},${new Date(mfp.filterValueTo).toISOString()}`);
305
+ }
306
+ else {
307
+ filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.Between}:${mfp.filterValue},${mfp.filterValueTo}`);
308
+ }
291
309
  break;
292
310
  }
293
311
  case MediusFilterMatchType.Contains: {
@@ -311,11 +329,21 @@ class AuditUtil {
311
329
  break;
312
330
  }
313
331
  case MediusFilterMatchType.SmallerThan: {
314
- filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.LessThan}:${mfp.filterValue}`);
332
+ if (this._dateRegex.test(mfp.filterValue)) {
333
+ filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.LessThan}:${new Date(mfp.filterValue).toISOString()}`);
334
+ }
335
+ else {
336
+ filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.LessThan}:${mfp.filterValue}`);
337
+ }
315
338
  break;
316
339
  }
317
340
  case MediusFilterMatchType.GreaterThan: {
318
- filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.GreaterThan}:${mfp.filterValue}`);
341
+ if (this._dateRegex.test(mfp.filterValue)) {
342
+ filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.GreaterThan}:${new Date(mfp.filterValue).toISOString()}`);
343
+ }
344
+ else {
345
+ filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.GreaterThan}:${mfp.filterValue}`);
346
+ }
319
347
  break;
320
348
  }
321
349
  }
@@ -325,6 +353,44 @@ class AuditUtil {
325
353
  }
326
354
  return url;
327
355
  }
356
+ static mapItemsToEntityChangesArray(fieldValue) {
357
+ const entityChanges = [];
358
+ for (const key of Object.keys(fieldValue)) {
359
+ const ec = new MngEntityRevisionChanges();
360
+ ec.entityType = key;
361
+ ec.items = [];
362
+ for (const change of fieldValue[key]) {
363
+ if (change.revType === MngRevisionTypeDto.Add && change.entityNewState) {
364
+ const item = new MngEntityRevisionChangeState();
365
+ item.revType = change.revType;
366
+ item.color = 'green';
367
+ Object.entries(change.entityNewState).forEach(([key, value]) => (item[key] = value));
368
+ ec.items.push(item);
369
+ }
370
+ else if (change.revType === MngRevisionTypeDto.Del && change.entityOldState) {
371
+ const item = new MngEntityRevisionChangeState();
372
+ item.revType = change.revType;
373
+ item.color = 'red';
374
+ Object.entries(change.entityOldState).forEach(([key, value]) => (item[key] = value));
375
+ ec.items.push(item);
376
+ }
377
+ else if (change.revType === MngRevisionTypeDto.Mod && change.entityOldState && change.entityNewState) {
378
+ const itemOld = new MngEntityRevisionChangeState();
379
+ itemOld.revType = change.revType;
380
+ itemOld.color = 'red';
381
+ Object.entries(change.entityOldState).forEach(([key, value]) => (itemOld[key] = value));
382
+ const itemNew = new MngEntityRevisionChangeState();
383
+ itemNew.revType = change.revType;
384
+ itemNew.color = 'green';
385
+ Object.entries(change.entityNewState).forEach(([key, value]) => (itemNew[key] = value));
386
+ ec.items.push(itemOld);
387
+ ec.items.push(itemNew);
388
+ }
389
+ }
390
+ entityChanges.push(ec);
391
+ }
392
+ return entityChanges;
393
+ }
328
394
  }
329
395
 
330
396
  class MngAuditRevisionsApiService extends AMngBaseApiService {
@@ -367,10 +433,10 @@ class MngAuditRevisionsApiService extends AMngBaseApiService {
367
433
  countRevisionsWithStateForEntityType(queryParams, entityType) {
368
434
  return this.http.get(this.getUrl(`/states/${entityType}/count`, AuditUtil.appendMediusQueryParamsToUrl(queryParams)));
369
435
  }
370
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MngAuditRevisionsApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
371
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MngAuditRevisionsApiService }); }
436
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngAuditRevisionsApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
437
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngAuditRevisionsApiService }); }
372
438
  }
373
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MngAuditRevisionsApiService, decorators: [{
439
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngAuditRevisionsApiService, decorators: [{
374
440
  type: Injectable
375
441
  }], ctorParameters: function () { return []; } });
376
442
 
@@ -429,22 +495,28 @@ class MngAuditService extends AMngBaseApiService {
429
495
  requestAuditModel() {
430
496
  return this.http.get(this.getUrl('/audit-models')).pipe(map(response => this.deserializeClassArray(response, MngGuiEntityModelDto)));
431
497
  }
432
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MngAuditService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
433
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MngAuditService }); }
498
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngAuditService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
499
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngAuditService }); }
434
500
  }
435
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MngAuditService, decorators: [{
501
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngAuditService, decorators: [{
436
502
  type: Injectable
437
503
  }], ctorParameters: function () { return []; } });
438
504
 
439
505
  class MngAuditPageComponent {
440
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MngAuditPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
441
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MngAuditPageComponent, isStandalone: true, selector: "mng-audit-page", ngImport: i0, template: "<router-outlet></router-outlet>\n", dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] }); }
506
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngAuditPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
507
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: MngAuditPageComponent, isStandalone: true, selector: "mng-audit-page", ngImport: i0, template: "<router-outlet></router-outlet>\n", dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] }); }
442
508
  }
443
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MngAuditPageComponent, decorators: [{
509
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngAuditPageComponent, decorators: [{
444
510
  type: Component,
445
511
  args: [{ standalone: true, selector: 'mng-audit-page', imports: [RouterOutlet], template: "<router-outlet></router-outlet>\n" }]
446
512
  }] });
447
513
 
514
+ let MngGuiEntityModelWithI18n = class MngGuiEntityModelWithI18n extends MngGuiEntityModelDto {
515
+ };
516
+ MngGuiEntityModelWithI18n = __decorate([
517
+ TypeName('MngGuiEntityModelWithI18n')
518
+ ], MngGuiEntityModelWithI18n);
519
+
448
520
  class MngAuditEntityRevisionsPageComponent extends AMngTableviewRouteComponent {
449
521
  constructor(router) {
450
522
  super();
@@ -453,17 +525,25 @@ class MngAuditEntityRevisionsPageComponent extends AMngTableviewRouteComponent {
453
525
  this.auditService = inject(MngAuditService);
454
526
  this.revisisonsApiService = inject(MngAuditRevisionsApiService);
455
527
  this.showTableview = signal(false);
456
- this.revisionEntitiesLookupProvider = new LookupDataProvider(MngGuiEntityModelDto).withLookup(() => this.auditService.auditModel$.pipe(map(model => model.sort((m1, m2) => {
457
- if (m1.entityName && m2.entityName) {
458
- return m1.entityName.localeCompare(m2.entityName);
459
- }
460
- else if (m1.entityName && !m2.entityName) {
461
- return 1;
462
- }
463
- else {
464
- return -1;
465
- }
466
- }))));
528
+ this.revisionEntitiesLookupProvider = new LookupDataProvider(MngGuiEntityModelWithI18n).withLookup(() => this.auditService.auditModel$.pipe(map(model => {
529
+ const modelI18n = model;
530
+ modelI18n.sort((m1, m2) => {
531
+ if (m1.entityName && m2.entityName) {
532
+ return m1.entityName.localeCompare(m2.entityName);
533
+ }
534
+ else if (m1.entityName && !m2.entityName) {
535
+ return 1;
536
+ }
537
+ else {
538
+ return -1;
539
+ }
540
+ });
541
+ modelI18n.forEach(item => {
542
+ const translatedEntityName = this.translateService.instant('AuditEntities.' + item.entityName);
543
+ item.entityNameI18n = translatedEntityName.includes('AuditEntities.') ? item.entityName : translatedEntityName;
544
+ });
545
+ return modelI18n;
546
+ })));
467
547
  }
468
548
  ngOnInit() {
469
549
  this.route.paramMap.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {
@@ -532,11 +612,7 @@ class MngAuditEntityRevisionsPageComponent extends AMngTableviewRouteComponent {
532
612
  throw new MngInternalError('No revision model or revision entity is provided for tableview.');
533
613
  }
534
614
  const entityName = this.selectedRevisionEntity.entityName;
535
- const detailsAction = new ActionEditorDescriptor(this.descriptor.detailsEditor, 'entity-revision-details')
536
- .withPosition(ActionPositionEnum.RowClick)
537
- .withRouteTrigger(':itemId')
538
- .withFetchFunction(ActionDataProviderUtil.runFetchOrFail)
539
- .withTableviewCategory(TableviewActionDefaultCategories.DETAILS)
615
+ const detailsAction = new ActionEditorDetailsDescriptor(this.descriptor.detailsEditor)
540
616
  .withFetchFunction(ctx => {
541
617
  if (!entityName) {
542
618
  return throwError(() => new MngInternalError('No revision entity is provided for details.'));
@@ -547,16 +623,16 @@ class MngAuditEntityRevisionsPageComponent extends AMngTableviewRouteComponent {
547
623
  const revId = ctx.parameters.itemId.toString().split('_')[0];
548
624
  const itemId = ctx.parameters.itemId.toString().split('_')[1];
549
625
  return this.revisisonsApiService.fetchRevisionsWithStateForEntityType(entityName, revId, itemId);
550
- });
551
- detailsAction.withEditorActions([new ActionEditorSubmitDescriptor(detailsAction, ActionEditorSubmitTypeEnum.Cancel)]);
626
+ })
627
+ .withEditorTitle('pages.entityRevisions.actions.details.editor.title');
552
628
  return [detailsAction];
553
629
  }
554
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MngAuditEntityRevisionsPageComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
555
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MngAuditEntityRevisionsPageComponent, isStandalone: true, selector: "mng-audit-entity-revisions-page", usesInheritance: true, ngImport: i0, template: "<div class=\"card\">\n <div class=\"field mb-0\">\n <mng-dropdown\n id=\"revisionEntityDropdown\"\n [placeholder]=\"'pages.entityRevisions.dropdown.placeholder' | translate\"\n [itemsLabelProperty]=\"'entityName'\"\n [(ngModel)]=\"selectedRevisionEntity\"\n (valueChange)=\"onRevisionEntityChange()\"\n [dataProvider]=\"revisionEntitiesLookupProvider\"></mng-dropdown>\n <small *ngIf=\"!selectedRevisionEntity\" class=\"block\">\n {{ 'pages.entityRevisions.dropdown.helpText' | translate }}\n </small>\n </div>\n</div>\n<div *ngIf=\"showTableview()\">\n <mng-tableview-route [descriptor]=\"descriptor\" [dataProvider]=\"dataProvider\" [actions]=\"actions\"></mng-tableview-route>\n</div>\n", dependencies: [{ kind: "component", type: MngDropdownComponent, selector: "mng-dropdown", inputs: ["dataProvider", "dataKeyProperty", "itemsLabelProperty", "itemsLabelTranslate", "itemsValueProperty", "itemsDisabledProperty", "multiselect", "placeholder", "showClear", "selectFirstItem", "className", "dropdownClassName", "changeValueOnBlur"], outputs: ["valueChange"] }, { kind: "component", type: MngTableviewRouteComponent, selector: "mng-tableview-route", inputs: ["descriptor", "dataProvider", "actions"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormlyModule }] }); }
630
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngAuditEntityRevisionsPageComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
631
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: MngAuditEntityRevisionsPageComponent, isStandalone: true, selector: "mng-audit-entity-revisions-page", usesInheritance: true, ngImport: i0, template: "<div class=\"card\">\n <div class=\"field mb-0\">\n <mng-dropdown\n id=\"revisionEntityDropdown\"\n [placeholder]=\"'pages.entityRevisions.dropdown.placeholder' | translate\"\n [itemsLabelProperty]=\"'entityNameI18n'\"\n [(ngModel)]=\"selectedRevisionEntity\"\n (valueChange)=\"onRevisionEntityChange()\"\n [dataProvider]=\"revisionEntitiesLookupProvider\"></mng-dropdown>\n <small *ngIf=\"!selectedRevisionEntity\" class=\"block\">\n {{ 'pages.entityRevisions.dropdown.helpText' | translate }}\n </small>\n </div>\n</div>\n<div *ngIf=\"showTableview()\">\n <mng-tableview-route [descriptor]=\"descriptor\" [dataProvider]=\"dataProvider\" [actions]=\"actions\"></mng-tableview-route>\n</div>\n", dependencies: [{ kind: "component", type: MngDropdownComponent, selector: "mng-dropdown", inputs: ["dataProvider", "dataKeyProperty", "itemsLabelProperty", "itemsLabelTranslate", "itemsValueProperty", "itemsDisabledProperty", "multiselect", "placeholder", "showClear", "selectFirstItem", "className", "dropdownClassName", "changeValueOnBlur"], outputs: ["valueChange"] }, { kind: "component", type: MngTableviewRouteComponent, selector: "mng-tableview-route", inputs: ["descriptor", "dataProvider", "actions"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormlyModule }] }); }
556
632
  }
557
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MngAuditEntityRevisionsPageComponent, decorators: [{
633
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngAuditEntityRevisionsPageComponent, decorators: [{
558
634
  type: Component,
559
- args: [{ standalone: true, selector: 'mng-audit-entity-revisions-page', imports: [MngDropdownComponent, MngTableviewRouteComponent, FormsModule, AsyncPipe, NgIf, TranslateModule, FormlyModule], template: "<div class=\"card\">\n <div class=\"field mb-0\">\n <mng-dropdown\n id=\"revisionEntityDropdown\"\n [placeholder]=\"'pages.entityRevisions.dropdown.placeholder' | translate\"\n [itemsLabelProperty]=\"'entityName'\"\n [(ngModel)]=\"selectedRevisionEntity\"\n (valueChange)=\"onRevisionEntityChange()\"\n [dataProvider]=\"revisionEntitiesLookupProvider\"></mng-dropdown>\n <small *ngIf=\"!selectedRevisionEntity\" class=\"block\">\n {{ 'pages.entityRevisions.dropdown.helpText' | translate }}\n </small>\n </div>\n</div>\n<div *ngIf=\"showTableview()\">\n <mng-tableview-route [descriptor]=\"descriptor\" [dataProvider]=\"dataProvider\" [actions]=\"actions\"></mng-tableview-route>\n</div>\n" }]
635
+ args: [{ standalone: true, selector: 'mng-audit-entity-revisions-page', imports: [MngDropdownComponent, MngTableviewRouteComponent, FormsModule, AsyncPipe, NgIf, TranslateModule, FormlyModule], template: "<div class=\"card\">\n <div class=\"field mb-0\">\n <mng-dropdown\n id=\"revisionEntityDropdown\"\n [placeholder]=\"'pages.entityRevisions.dropdown.placeholder' | translate\"\n [itemsLabelProperty]=\"'entityNameI18n'\"\n [(ngModel)]=\"selectedRevisionEntity\"\n (valueChange)=\"onRevisionEntityChange()\"\n [dataProvider]=\"revisionEntitiesLookupProvider\"></mng-dropdown>\n <small *ngIf=\"!selectedRevisionEntity\" class=\"block\">\n {{ 'pages.entityRevisions.dropdown.helpText' | translate }}\n </small>\n </div>\n</div>\n<div *ngIf=\"showTableview()\">\n <mng-tableview-route [descriptor]=\"descriptor\" [dataProvider]=\"dataProvider\" [actions]=\"actions\"></mng-tableview-route>\n</div>\n" }]
560
636
  }], ctorParameters: function () { return [{ type: i1.Router }]; } });
561
637
 
562
638
  var MngRevEntityWithChangesDto_1;
@@ -595,18 +671,6 @@ MngRevEntityDetailed = __decorate([
595
671
  TypeName('MngRevEntityDetailed')
596
672
  ], MngRevEntityDetailed);
597
673
 
598
- let MngEntityRevisionChangeState = class MngEntityRevisionChangeState {
599
- };
600
- MngEntityRevisionChangeState = __decorate([
601
- TypeName('MngEntityRevisionChangeState')
602
- ], MngEntityRevisionChangeState);
603
-
604
- let MngEntityRevisionChanges = class MngEntityRevisionChanges {
605
- };
606
- MngEntityRevisionChanges = __decorate([
607
- TypeName('MngEntityChanges')
608
- ], MngEntityRevisionChanges);
609
-
610
674
  class EntityChangesFieldComponent extends AMngFormlyCustomFieldComponent {
611
675
  constructor() {
612
676
  super(...arguments);
@@ -624,40 +688,7 @@ class EntityChangesFieldComponent extends AMngFormlyCustomFieldComponent {
624
688
  next: model => {
625
689
  this.auditModel = model;
626
690
  if (this.fieldValue) {
627
- for (const key of Object.keys(this.fieldValue)) {
628
- const ec = new MngEntityRevisionChanges();
629
- ec.entityType = key;
630
- ec.items = [];
631
- for (const change of this.fieldValue[key]) {
632
- if (change.revType === MngRevisionTypeDto.Add && change.entityNewState) {
633
- const item = new MngEntityRevisionChangeState();
634
- item.revType = change.revType;
635
- item.color = 'green';
636
- Object.entries(change.entityNewState).forEach(([key, value]) => (item[key] = value));
637
- ec.items.push(item);
638
- }
639
- else if (change.revType === MngRevisionTypeDto.Del && change.entityOldState) {
640
- const item = new MngEntityRevisionChangeState();
641
- item.revType = change.revType;
642
- item.color = 'red';
643
- Object.entries(change.entityOldState).forEach(([key, value]) => (item[key] = value));
644
- ec.items.push(item);
645
- }
646
- else if (change.revType === MngRevisionTypeDto.Mod && change.entityOldState && change.entityNewState) {
647
- const itemOld = new MngEntityRevisionChangeState();
648
- itemOld.revType = change.revType;
649
- itemOld.color = 'red';
650
- Object.entries(change.entityOldState).forEach(([key, value]) => (itemOld[key] = value));
651
- const itemNew = new MngEntityRevisionChangeState();
652
- itemNew.revType = change.revType;
653
- itemNew.color = 'green';
654
- Object.entries(change.entityNewState).forEach(([key, value]) => (itemNew[key] = value));
655
- ec.items.push(itemOld);
656
- ec.items.push(itemNew);
657
- }
658
- }
659
- this.entityChanges.push(ec);
660
- }
691
+ this.entityChanges = AuditUtil.mapItemsToEntityChangesArray(this.fieldValue);
661
692
  this.modelFetched.next(true);
662
693
  }
663
694
  },
@@ -696,10 +727,10 @@ class EntityChangesFieldComponent extends AMngFormlyCustomFieldComponent {
696
727
  desc.withDataKey(`EntityChangeField_${entityChanges.entityType ?? 'default'}`);
697
728
  return desc;
698
729
  }
699
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EntityChangesFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
700
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: EntityChangesFieldComponent, isStandalone: true, selector: "mng-entity-changes-field", inputs: { injector: "injector" }, usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"modelFetched | async; else loading\">\n <mng-table *ngFor=\"let ec of entityChanges\" [items]=\"ec.items\" [descriptor]=\"createDescriptor(ec)\"></mng-table>\n</div>\n<ng-template #loading>\n <div class=\"text-center\">\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem\"></i>\n </div>\n</ng-template>\n", styles: ["::ng-deep tr.audit-row-deleted{background:hsla(3,100%,60%,.1)!important}::ng-deep tr.audit-row-deleted .audit-cell{background:hsla(3,90%,63%,.3)!important}::ng-deep tr.audit-row-added{background-color:#1bc5621a!important}::ng-deep tr.audit-row-added .audit-cell{background:hsla(145,76%,44%,.3)!important}\n"], dependencies: [{ kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: MngTableComponent, selector: "mng-table", inputs: ["descriptor", "items", "queryResult", "loading", "dataProvider", "useQueryParams", "selectionMode", "selectionEnabled", "actions", "isColumnClickable", "viewContainer", "captionComponent", "columnActionComponent", "columnActionMinWidth", "globalFilterFields"], outputs: ["tableLoad", "cellClick", "selectionChange", "captionComponentInstance", "columnActionComponentInstance"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
730
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: EntityChangesFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
731
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: EntityChangesFieldComponent, isStandalone: true, selector: "mng-entity-changes-field", inputs: { injector: "injector" }, usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"modelFetched | async; else loading\">\n <mng-table *ngFor=\"let ec of entityChanges\" [items]=\"ec.items\" [descriptor]=\"createDescriptor(ec)\"></mng-table>\n</div>\n<ng-template #loading>\n <div class=\"text-center\">\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem\"></i>\n </div>\n</ng-template>\n", styles: ["::ng-deep tr.audit-row-deleted{background:hsla(3,100%,60%,.1)!important}::ng-deep tr.audit-row-deleted .audit-cell{background:hsla(3,90%,63%,.3)!important}::ng-deep tr.audit-row-added{background-color:#1bc5621a!important}::ng-deep tr.audit-row-added .audit-cell{background:hsla(145,76%,44%,.3)!important}\n"], dependencies: [{ kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: MngTableComponent, selector: "mng-table", inputs: ["descriptor", "items", "queryResult", "loading", "dataProvider", "useQueryParams", "selectionMode", "selectionEnabled", "actions", "isColumnClickable", "viewContainer", "captionComponent", "columnActionComponent", "columnActionMinWidth", "globalFilterFields"], outputs: ["tableLoad", "cellClick", "selectionChange", "captionComponentInstance", "columnActionComponentInstance"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
701
732
  }
702
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EntityChangesFieldComponent, decorators: [{
733
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: EntityChangesFieldComponent, decorators: [{
703
734
  type: Component,
704
735
  args: [{ standalone: true, selector: 'mng-entity-changes-field', imports: [NgForOf, MngTableComponent, NgIf, AsyncPipe], template: "<div *ngIf=\"modelFetched | async; else loading\">\n <mng-table *ngFor=\"let ec of entityChanges\" [items]=\"ec.items\" [descriptor]=\"createDescriptor(ec)\"></mng-table>\n</div>\n<ng-template #loading>\n <div class=\"text-center\">\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem\"></i>\n </div>\n</ng-template>\n", styles: ["::ng-deep tr.audit-row-deleted{background:hsla(3,100%,60%,.1)!important}::ng-deep tr.audit-row-deleted .audit-cell{background:hsla(3,90%,63%,.3)!important}::ng-deep tr.audit-row-added{background-color:#1bc5621a!important}::ng-deep tr.audit-row-added .audit-cell{background:hsla(145,76%,44%,.3)!important}\n"] }]
705
736
  }], propDecorators: { injector: [{
@@ -747,11 +778,7 @@ class MngAuditRevisionsPageComponent extends AMngTableviewRouteComponent {
747
778
  return new TableviewDataProvider(MngRevEntity);
748
779
  }
749
780
  createActionDescriptors() {
750
- const detailsAction = new ActionEditorDescriptor(this.descriptor.detailsEditor, 'revision-details')
751
- .withPosition(ActionPositionEnum.RowClick)
752
- .withRouteTrigger(':itemId')
753
- .withTableviewCategory(TableviewActionDefaultCategories.DETAILS)
754
- .withFetchFunction(ctx => ctx.parameters.itemId
781
+ const detailsAction = new ActionEditorDetailsDescriptor(this.descriptor.detailsEditor).withFetchFunction(ctx => ctx.parameters.itemId
755
782
  ? this.revisisonsApiService.getAllChangesForRevision(ctx.parameters.itemId).pipe(map(item => {
756
783
  const revEntityWithChanges = new MngRevEntityDetailed();
757
784
  revEntityWithChanges.rev = ctx.parameters.itemId;
@@ -760,13 +787,12 @@ class MngAuditRevisionsPageComponent extends AMngTableviewRouteComponent {
760
787
  return revEntityWithChanges;
761
788
  }))
762
789
  : throwError(() => new MngInternalError('No revision id provided for fetch function')));
763
- detailsAction.withEditorActions([new ActionEditorSubmitDescriptor(detailsAction, ActionEditorSubmitTypeEnum.Cancel)]);
764
790
  return [detailsAction];
765
791
  }
766
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MngAuditRevisionsPageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
767
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MngAuditRevisionsPageComponent, isStandalone: true, selector: "mng-audit-revisions-page", usesInheritance: true, ngImport: i0, template: "<mng-tableview-route *ngIf=\"showTableview()\" [descriptor]=\"descriptor\" [dataProvider]=\"dataProvider\" [actions]=\"actions\"></mng-tableview-route>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MngTableviewRouteComponent, selector: "mng-tableview-route", inputs: ["descriptor", "dataProvider", "actions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
792
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngAuditRevisionsPageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
793
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: MngAuditRevisionsPageComponent, isStandalone: true, selector: "mng-audit-revisions-page", usesInheritance: true, ngImport: i0, template: "<mng-tableview-route *ngIf=\"showTableview()\" [descriptor]=\"descriptor\" [dataProvider]=\"dataProvider\" [actions]=\"actions\"></mng-tableview-route>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MngTableviewRouteComponent, selector: "mng-tableview-route", inputs: ["descriptor", "dataProvider", "actions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
768
794
  }
769
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MngAuditRevisionsPageComponent, decorators: [{
795
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngAuditRevisionsPageComponent, decorators: [{
770
796
  type: Component,
771
797
  args: [{ standalone: true, selector: 'mng-audit-revisions-page', imports: [NgIf, MngTableviewComponent, AsyncPipe, MngTableviewComponent, RouterOutlet, JsonPipe, MngTableviewRouteComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mng-tableview-route *ngIf=\"showTableview()\" [descriptor]=\"descriptor\" [dataProvider]=\"dataProvider\" [actions]=\"actions\"></mng-tableview-route>\n" }]
772
798
  }] });