@mediusinc/mng-commons-audit 3.6.0 → 4.0.0-rc.1
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/esm2022/lib/api/models/entityChange.mjs +5 -4
- package/esm2022/lib/api/models/guiEntityModel.mjs +5 -4
- package/esm2022/lib/api/models/guiPropertyModel.mjs +5 -4
- package/esm2022/lib/api/models/guiPropertyType.mjs +3 -3
- package/esm2022/lib/api/models/guiRelationModel.mjs +5 -4
- package/esm2022/lib/api/models/revEntityWithChangesDto.mjs +5 -4
- package/esm2022/lib/api/models/revEntityWithStateDto.mjs +5 -4
- package/esm2022/lib/api/models/revisionType.mjs +3 -3
- package/esm2022/lib/api/services/audit-revisions-api.service.mjs +4 -4
- package/esm2022/lib/api/services/audit.service.mjs +4 -4
- package/esm2022/lib/components/entity-changes-field/entity-changes-field.component.mjs +8 -8
- package/esm2022/lib/components/pages/audit/audit.page.component.mjs +3 -3
- package/esm2022/lib/components/pages/entity-revisions/audit-entity-revisions.page.component.mjs +15 -16
- package/esm2022/lib/components/pages/revisions/audit-revisions.page.component.mjs +33 -23
- package/esm2022/lib/models/config.model.mjs +1 -1
- package/esm2022/lib/models/entity-revision-change-state.model.mjs +3 -2
- package/esm2022/lib/models/entity-revision-changes.model.mjs +3 -2
- package/esm2022/lib/models/guiEntityModelWithI18n.model.mjs +3 -2
- package/esm2022/lib/models/rev-entity-detailed.model.mjs +3 -2
- package/esm2022/lib/models/rev-entity.model.mjs +3 -2
- package/esm2022/lib/models/revEntityWithId.model.mjs +5 -4
- package/esm2022/lib/utils/audit.util.mjs +28 -21
- package/fesm2022/mediusinc-mng-commons-audit.mjs +93 -77
- package/fesm2022/mediusinc-mng-commons-audit.mjs.map +1 -1
- package/lib/api/models/entityChange.d.ts +3 -3
- package/lib/api/models/guiEntityModel.d.ts +3 -3
- package/lib/api/models/guiPropertyModel.d.ts +3 -3
- package/lib/api/models/guiRelationModel.d.ts +3 -3
- package/lib/api/models/revEntityWithChangesDto.d.ts +3 -3
- package/lib/api/models/revEntityWithStateDto.d.ts +3 -3
- package/lib/components/entity-changes-field/entity-changes-field.component.d.ts +2 -2
- package/lib/components/pages/entity-revisions/audit-entity-revisions.page.component.d.ts +7 -7
- package/lib/components/pages/revisions/audit-revisions.page.component.d.ts +5 -5
- package/lib/utils/audit.util.d.ts +4 -4
- package/package.json +8 -8
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TypeName,
|
|
1
|
+
import { TypeName, TypeRegistry, MediusFilterMatchType, AMngBaseApiService, MngConfigurationService, MngInternalError, AMngTableviewRouteComponent, LookupDataProvider, TableviewDescriptor, MediusQueryResult, TableviewDataProvider, ActionEditorDetailsDescriptor, MngDropdownComponent, MngTableviewRouteComponent, AMngFormlyCustomFieldComponent, TableDescriptor, TablePaginationModeEnum, MngTableComponent, ModelDescriptor, TableviewEditorTypeEnum, EditorDescriptor, TableFilterDisplayEnum, itemIdToDefined, 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';
|
|
@@ -6,7 +6,7 @@ import { __decorate } from 'tslib';
|
|
|
6
6
|
import { of, shareReplay, combineLatest, throwError, BehaviorSubject } from 'rxjs';
|
|
7
7
|
import * as i1 from '@angular/router';
|
|
8
8
|
import { RouterOutlet } from '@angular/router';
|
|
9
|
-
import {
|
|
9
|
+
import { AsyncPipe, JsonPipe } from '@angular/common';
|
|
10
10
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
11
11
|
import * as i2 from '@angular/forms';
|
|
12
12
|
import { FormsModule } from '@angular/forms';
|
|
@@ -46,14 +46,14 @@ let MngRevEntityWithStateDto = class MngRevEntityWithStateDto {
|
|
|
46
46
|
MngRevEntityWithStateDto = MngRevEntityWithStateDto_1 = __decorate([
|
|
47
47
|
TypeName('MngRevEntityWithStateDto')
|
|
48
48
|
], MngRevEntityWithStateDto);
|
|
49
|
-
|
|
49
|
+
TypeRegistry.get().registerType(MngRevEntityWithStateDto);
|
|
50
50
|
|
|
51
51
|
let MngRevEntityWithId = class MngRevEntityWithId extends MngRevEntityWithStateDto {
|
|
52
52
|
};
|
|
53
53
|
MngRevEntityWithId = __decorate([
|
|
54
54
|
TypeName('MngRevEntityWithId')
|
|
55
55
|
], MngRevEntityWithId);
|
|
56
|
-
|
|
56
|
+
TypeRegistry.get().registerType(MngRevEntityWithId);
|
|
57
57
|
|
|
58
58
|
const MNG_AUDIT_MODULE_CONFIG_IT = new InjectionToken('MngAuditModuleConfig');
|
|
59
59
|
|
|
@@ -78,7 +78,7 @@ var MngGuiPropertyTypeDto;
|
|
|
78
78
|
MngGuiPropertyTypeDto["Enum"] = "ENUM";
|
|
79
79
|
MngGuiPropertyTypeDto["Wildcard"] = "WILDCARD";
|
|
80
80
|
})(MngGuiPropertyTypeDto || (MngGuiPropertyTypeDto = {}));
|
|
81
|
-
|
|
81
|
+
TypeRegistry.get().registerEnum(MngGuiPropertyTypeDto, 'MngGuiPropertyTypeDto');
|
|
82
82
|
|
|
83
83
|
/**
|
|
84
84
|
* Medius quarkus sampler
|
|
@@ -97,7 +97,7 @@ var MngRevisionTypeDto;
|
|
|
97
97
|
MngRevisionTypeDto["Mod"] = "MOD";
|
|
98
98
|
MngRevisionTypeDto["Del"] = "DEL";
|
|
99
99
|
})(MngRevisionTypeDto || (MngRevisionTypeDto = {}));
|
|
100
|
-
|
|
100
|
+
TypeRegistry.get().registerEnum(MngRevisionTypeDto, 'MngRevisionTypeDto');
|
|
101
101
|
|
|
102
102
|
let MngEntityRevisionChangeState = class MngEntityRevisionChangeState {
|
|
103
103
|
};
|
|
@@ -137,8 +137,8 @@ class AuditUtil {
|
|
|
137
137
|
if (!property.resolvedPropertyName) {
|
|
138
138
|
continue;
|
|
139
139
|
}
|
|
140
|
-
const columnPrepend = modelType ? `${modelType}.` : '';
|
|
141
140
|
const isEnum = property.propertyType === MngGuiPropertyTypeDto.Enum;
|
|
141
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
142
142
|
let column = null;
|
|
143
143
|
if (isEnum) {
|
|
144
144
|
if (!property.possibleEnumValues) {
|
|
@@ -146,33 +146,36 @@ class AuditUtil {
|
|
|
146
146
|
}
|
|
147
147
|
const enumType = AuditUtil.findEnumType(property);
|
|
148
148
|
if (enumType) {
|
|
149
|
-
column = descriptor.
|
|
149
|
+
column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asEnum(enumType);
|
|
150
150
|
if (addFilters) {
|
|
151
151
|
column.withFilterLookupEnum(property.possibleEnumValues);
|
|
152
152
|
}
|
|
153
153
|
}
|
|
154
154
|
else {
|
|
155
|
-
column = descriptor.
|
|
155
|
+
column = descriptor.addColumnUnsafe(property.resolvedPropertyName);
|
|
156
156
|
if (addFilters) {
|
|
157
157
|
(column?.withFilterLookup()).withLookup(() => of(property.possibleEnumValues ?? []));
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
161
|
else if (property.propertyType === MngGuiPropertyTypeDto.Number) {
|
|
162
|
-
column = descriptor.
|
|
162
|
+
column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asNumber();
|
|
163
163
|
}
|
|
164
164
|
else if (property.propertyType === MngGuiPropertyTypeDto.Boolean) {
|
|
165
|
-
column = descriptor.
|
|
165
|
+
column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asBoolean();
|
|
166
166
|
}
|
|
167
167
|
else if (property.propertyType === MngGuiPropertyTypeDto.LocalDate) {
|
|
168
|
-
column = descriptor.
|
|
168
|
+
column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asDate('dd. MM yyyy');
|
|
169
169
|
}
|
|
170
170
|
else if (property.propertyType === MngGuiPropertyTypeDto.OffsetDateTime) {
|
|
171
|
-
column = descriptor.
|
|
171
|
+
column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asDate('dd. MM yyyy HH:mm');
|
|
172
172
|
}
|
|
173
173
|
else {
|
|
174
174
|
// string / wildcard
|
|
175
|
-
column = descriptor.
|
|
175
|
+
column = descriptor.addColumnUnsafe(property.resolvedPropertyName).withTitle(AuditUtil.getPropertyTitleKey(property, modelType));
|
|
176
|
+
}
|
|
177
|
+
if (modelType) {
|
|
178
|
+
column.withGetter((value, item) => item?.[modelType]?.[property.resolvedPropertyName]);
|
|
176
179
|
}
|
|
177
180
|
column.withTitle(AuditUtil.getPropertyTitleKey(property, modelType));
|
|
178
181
|
if (!isEnum && addFilters) {
|
|
@@ -202,43 +205,47 @@ class AuditUtil {
|
|
|
202
205
|
if (!property.possibleEnumValues) {
|
|
203
206
|
continue;
|
|
204
207
|
}
|
|
205
|
-
descriptor.
|
|
208
|
+
descriptor.addFieldLookupEnumUnsafe(fieldPrepend + property.resolvedPropertyName, enumType, property.possibleEnumValues).withDisabled();
|
|
206
209
|
}
|
|
207
210
|
else {
|
|
208
|
-
descriptor.
|
|
211
|
+
descriptor.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName).withLabel(AuditUtil.getPropertyTitleKey(property, modelType));
|
|
209
212
|
}
|
|
210
213
|
}
|
|
211
214
|
else if (property.propertyType === MngGuiPropertyTypeDto.Number) {
|
|
212
215
|
descriptor
|
|
213
|
-
.
|
|
216
|
+
.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
|
|
214
217
|
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
215
218
|
.asNumber()
|
|
216
219
|
.withDisabled();
|
|
217
220
|
}
|
|
218
221
|
else if (property.propertyType === MngGuiPropertyTypeDto.Boolean) {
|
|
219
222
|
descriptor
|
|
220
|
-
.
|
|
223
|
+
.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
|
|
221
224
|
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
222
225
|
.withDisabled();
|
|
223
226
|
}
|
|
224
227
|
else if (property.propertyType === MngGuiPropertyTypeDto.LocalDate) {
|
|
225
228
|
descriptor
|
|
226
|
-
.
|
|
229
|
+
.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
|
|
227
230
|
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
228
|
-
.asDatePicker('dd. MMM yyyy')
|
|
231
|
+
.asDatePicker({ format: 'dd. MMM yyyy' })
|
|
229
232
|
.withDisabled();
|
|
230
233
|
}
|
|
231
234
|
else if (property.propertyType === MngGuiPropertyTypeDto.OffsetDateTime) {
|
|
232
235
|
descriptor
|
|
233
|
-
.
|
|
236
|
+
.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
|
|
234
237
|
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
235
|
-
.asDatePicker(
|
|
238
|
+
.asDatePicker({
|
|
239
|
+
format: 'dd. MM yy',
|
|
240
|
+
showTime: true,
|
|
241
|
+
showSeconds: false
|
|
242
|
+
})
|
|
236
243
|
.withDisabled();
|
|
237
244
|
}
|
|
238
245
|
else {
|
|
239
246
|
// string / wildcard
|
|
240
247
|
descriptor
|
|
241
|
-
.
|
|
248
|
+
.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
|
|
242
249
|
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
243
250
|
.withDisabled();
|
|
244
251
|
}
|
|
@@ -262,9 +269,9 @@ class AuditUtil {
|
|
|
262
269
|
if (!property.enumClassSimpleName) {
|
|
263
270
|
return undefined;
|
|
264
271
|
}
|
|
265
|
-
let enumType =
|
|
272
|
+
let enumType = TypeRegistry.get().findEnum(property.enumClassSimpleName);
|
|
266
273
|
if (!enumType) {
|
|
267
|
-
enumType =
|
|
274
|
+
enumType = TypeRegistry.get().findEnum(property.enumClassSimpleName + 'Dto');
|
|
268
275
|
}
|
|
269
276
|
return enumType;
|
|
270
277
|
}
|
|
@@ -433,12 +440,12 @@ class MngAuditRevisionsApiService extends AMngBaseApiService {
|
|
|
433
440
|
countRevisionsWithStateForEntityType(queryParams, entityType) {
|
|
434
441
|
return this.http.get(this.getUrl(`/states/${entityType}/count`, AuditUtil.appendMediusQueryParamsToUrl(queryParams)));
|
|
435
442
|
}
|
|
436
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
437
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
443
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MngAuditRevisionsApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
444
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MngAuditRevisionsApiService }); }
|
|
438
445
|
}
|
|
439
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
446
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MngAuditRevisionsApiService, decorators: [{
|
|
440
447
|
type: Injectable
|
|
441
|
-
}], ctorParameters:
|
|
448
|
+
}], ctorParameters: () => [] });
|
|
442
449
|
|
|
443
450
|
var MngGuiEntityModelDto_1;
|
|
444
451
|
let MngGuiEntityModelDto = class MngGuiEntityModelDto {
|
|
@@ -462,7 +469,7 @@ let MngGuiEntityModelDto = class MngGuiEntityModelDto {
|
|
|
462
469
|
MngGuiEntityModelDto = MngGuiEntityModelDto_1 = __decorate([
|
|
463
470
|
TypeName('MngGuiEntityModelDto')
|
|
464
471
|
], MngGuiEntityModelDto);
|
|
465
|
-
|
|
472
|
+
TypeRegistry.get().registerType(MngGuiEntityModelDto);
|
|
466
473
|
|
|
467
474
|
class MngAuditService extends AMngBaseApiService {
|
|
468
475
|
constructor() {
|
|
@@ -495,18 +502,18 @@ class MngAuditService extends AMngBaseApiService {
|
|
|
495
502
|
requestAuditModel() {
|
|
496
503
|
return this.http.get(this.getUrl('/audit-models')).pipe(map(response => this.deserializeClassArray(response, MngGuiEntityModelDto)));
|
|
497
504
|
}
|
|
498
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
499
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
505
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MngAuditService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
506
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MngAuditService }); }
|
|
500
507
|
}
|
|
501
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
508
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MngAuditService, decorators: [{
|
|
502
509
|
type: Injectable
|
|
503
|
-
}], ctorParameters:
|
|
510
|
+
}], ctorParameters: () => [] });
|
|
504
511
|
|
|
505
512
|
class MngAuditPageComponent {
|
|
506
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
507
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
513
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MngAuditPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
514
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", 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"] }] }); }
|
|
508
515
|
}
|
|
509
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
516
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MngAuditPageComponent, decorators: [{
|
|
510
517
|
type: Component,
|
|
511
518
|
args: [{ standalone: true, selector: 'mng-audit-page', imports: [RouterOutlet], template: "<router-outlet></router-outlet>\n" }]
|
|
512
519
|
}] });
|
|
@@ -523,9 +530,9 @@ class MngAuditEntityRevisionsPageComponent extends AMngTableviewRouteComponent {
|
|
|
523
530
|
this.router = router;
|
|
524
531
|
this.destroyRef = inject(DestroyRef);
|
|
525
532
|
this.auditService = inject(MngAuditService);
|
|
526
|
-
this.
|
|
533
|
+
this.revisionsApiService = inject(MngAuditRevisionsApiService);
|
|
527
534
|
this.showTableview = signal(false);
|
|
528
|
-
this.revisionEntitiesLookupProvider =
|
|
535
|
+
this.revisionEntitiesLookupProvider = LookupDataProvider.fromClass(MngGuiEntityModelWithI18n).withLookup(() => this.auditService.auditModel$.pipe(map(model => {
|
|
529
536
|
const modelI18n = model;
|
|
530
537
|
modelI18n.sort((m1, m2) => {
|
|
531
538
|
if (m1.entityName && m2.entityName) {
|
|
@@ -575,12 +582,11 @@ class MngAuditEntityRevisionsPageComponent extends AMngTableviewRouteComponent {
|
|
|
575
582
|
if (!this.revModel || !this.selectedRevisionEntity?.entityName) {
|
|
576
583
|
throw new MngInternalError('No revision model or revision entity is provided for tableview.');
|
|
577
584
|
}
|
|
578
|
-
const desc =
|
|
585
|
+
const desc = TableviewDescriptor.fromClass(MngRevEntityWithId, 'mergedId', undefined, this.selectedRevisionEntity.entityName);
|
|
579
586
|
AuditUtil.buildDescriptorForEntityRevision(desc, this.revModel, this.selectedRevisionEntity);
|
|
580
587
|
desc.table.withColumnsResizable();
|
|
581
588
|
desc.table.withCurrentColumnsReorderable();
|
|
582
589
|
desc.table.withCurrentColumnsToggleable();
|
|
583
|
-
desc.table.withDataKey(`EntityRevisionsPage_${this.selectedRevisionEntity.entityName}`);
|
|
584
590
|
return desc;
|
|
585
591
|
}
|
|
586
592
|
createTableviewDataProvider() {
|
|
@@ -588,10 +594,10 @@ class MngAuditEntityRevisionsPageComponent extends AMngTableviewRouteComponent {
|
|
|
588
594
|
throw new MngInternalError('No revision model or revision entity is provided for tableview.');
|
|
589
595
|
}
|
|
590
596
|
const entityName = this.selectedRevisionEntity.entityName;
|
|
591
|
-
return
|
|
597
|
+
return TableviewDataProvider.fromClass(MngRevEntityWithId).withGetAll(qp => this.selectedRevisionEntity?.entityName
|
|
592
598
|
? combineLatest([
|
|
593
|
-
this.
|
|
594
|
-
this.
|
|
599
|
+
this.revisionsApiService.countRevisionsWithStateForEntityType(qp, entityName),
|
|
600
|
+
this.revisionsApiService.listRevisionsWithStateForEntityType(qp, entityName)
|
|
595
601
|
]).pipe(map(([count, values]) => {
|
|
596
602
|
const revEntityWithStateAndIdList = [];
|
|
597
603
|
for (const revEntityWithState of values) {
|
|
@@ -612,7 +618,7 @@ class MngAuditEntityRevisionsPageComponent extends AMngTableviewRouteComponent {
|
|
|
612
618
|
throw new MngInternalError('No revision model or revision entity is provided for tableview.');
|
|
613
619
|
}
|
|
614
620
|
const entityName = this.selectedRevisionEntity.entityName;
|
|
615
|
-
const detailsAction =
|
|
621
|
+
const detailsAction = ActionEditorDetailsDescriptor.create(this.descriptor.detailsEditor)
|
|
616
622
|
.withFetchFunction(ctx => {
|
|
617
623
|
if (!entityName) {
|
|
618
624
|
return throwError(() => new MngInternalError('No revision entity is provided for details.'));
|
|
@@ -622,18 +628,18 @@ class MngAuditEntityRevisionsPageComponent extends AMngTableviewRouteComponent {
|
|
|
622
628
|
}
|
|
623
629
|
const revId = ctx.parameters.itemId.toString().split('_')[0];
|
|
624
630
|
const itemId = ctx.parameters.itemId.toString().split('_')[1];
|
|
625
|
-
return this.
|
|
631
|
+
return this.revisionsApiService.fetchRevisionsWithStateForEntityType(entityName, revId, itemId);
|
|
626
632
|
})
|
|
627
633
|
.withEditorTitle('pages.entityRevisions.actions.details.editor.title');
|
|
628
634
|
return [detailsAction];
|
|
629
635
|
}
|
|
630
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
631
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
636
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MngAuditEntityRevisionsPageComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
637
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.8", 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 optionsLabelProperty=\"entityNameI18n\"\n [(ngModel)]=\"selectedRevisionEntity\"\n (valueChange)=\"onRevisionEntityChange()\"\n [dataProvider]=\"revisionEntitiesLookupProvider\"></mng-dropdown>\n @if (!selectedRevisionEntity) {\n <small class=\"block\">\n {{ 'pages.entityRevisions.dropdown.helpText' | translate }}\n </small>\n }\n </div>\n</div>\n@if (showTableview()) {\n <mng-tableview-route [descriptor]=\"descriptor\" [dataProvider]=\"dataProvider\" [actions]=\"actions\"></mng-tableview-route>\n}\n", dependencies: [{ kind: "component", type: MngDropdownComponent, selector: "mng-dropdown", inputs: ["dataProvider", "optionsTrackProperty", "optionsLabelProperty", "optionsLabelTranslate", "optionsValueProperty", "optionsDisabledProperty", "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: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormlyModule }] }); }
|
|
632
638
|
}
|
|
633
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
639
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MngAuditEntityRevisionsPageComponent, decorators: [{
|
|
634
640
|
type: Component,
|
|
635
|
-
args: [{ standalone: true, selector: 'mng-audit-entity-revisions-page', imports: [MngDropdownComponent, MngTableviewRouteComponent, FormsModule, AsyncPipe,
|
|
636
|
-
}], ctorParameters:
|
|
641
|
+
args: [{ standalone: true, selector: 'mng-audit-entity-revisions-page', imports: [MngDropdownComponent, MngTableviewRouteComponent, FormsModule, AsyncPipe, 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 optionsLabelProperty=\"entityNameI18n\"\n [(ngModel)]=\"selectedRevisionEntity\"\n (valueChange)=\"onRevisionEntityChange()\"\n [dataProvider]=\"revisionEntitiesLookupProvider\"></mng-dropdown>\n @if (!selectedRevisionEntity) {\n <small class=\"block\">\n {{ 'pages.entityRevisions.dropdown.helpText' | translate }}\n </small>\n }\n </div>\n</div>\n@if (showTableview()) {\n <mng-tableview-route [descriptor]=\"descriptor\" [dataProvider]=\"dataProvider\" [actions]=\"actions\"></mng-tableview-route>\n}\n" }]
|
|
642
|
+
}], ctorParameters: () => [{ type: i1.Router }] });
|
|
637
643
|
|
|
638
644
|
var MngRevEntityWithChangesDto_1;
|
|
639
645
|
let MngRevEntityWithChangesDto = class MngRevEntityWithChangesDto {
|
|
@@ -657,7 +663,7 @@ let MngRevEntityWithChangesDto = class MngRevEntityWithChangesDto {
|
|
|
657
663
|
MngRevEntityWithChangesDto = MngRevEntityWithChangesDto_1 = __decorate([
|
|
658
664
|
TypeName('MngRevEntityWithChangesDto')
|
|
659
665
|
], MngRevEntityWithChangesDto);
|
|
660
|
-
|
|
666
|
+
TypeRegistry.get().registerType(MngRevEntityWithChangesDto);
|
|
661
667
|
|
|
662
668
|
let MngRevEntity = class MngRevEntity {
|
|
663
669
|
};
|
|
@@ -707,7 +713,7 @@ class EntityChangesFieldComponent extends AMngFormlyCustomFieldComponent {
|
|
|
707
713
|
}
|
|
708
714
|
}
|
|
709
715
|
const guiEntityModel = this.auditModel.filter(m => m.entityName === entityChanges.entityType)[0];
|
|
710
|
-
const desc =
|
|
716
|
+
const desc = TableDescriptor.fromClass(MngEntityRevisionChangeState, undefined, undefined, guiEntityModel.entityName).withClassName('py-2');
|
|
711
717
|
if (guiEntityModel.entityName) {
|
|
712
718
|
desc.withTitle(guiEntityModel.entityName);
|
|
713
719
|
}
|
|
@@ -724,15 +730,15 @@ class EntityChangesFieldComponent extends AMngFormlyCustomFieldComponent {
|
|
|
724
730
|
desc.withPaginationMode(TablePaginationModeEnum.Pagination);
|
|
725
731
|
desc.withCurrentColumnsReorderable();
|
|
726
732
|
desc.withCurrentColumnsToggleable();
|
|
727
|
-
desc.
|
|
733
|
+
desc.withTrackProperty(`EntityChangeField_${entityChanges.entityType ?? 'default'}`);
|
|
728
734
|
return desc;
|
|
729
735
|
}
|
|
730
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
731
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
736
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: EntityChangesFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
737
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.8", type: EntityChangesFieldComponent, isStandalone: true, selector: "mng-entity-changes-field", inputs: { injector: "injector" }, usesInheritance: true, ngImport: i0, template: "@if (modelFetched | async) {\n <div>\n @for (ec of entityChanges; track ec) {\n <mng-table [items]=\"ec.items\" [descriptor]=\"createDescriptor(ec)\"></mng-table>\n }\n </div>\n} @else {\n <div class=\"text-center\">\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem\"></i>\n </div>\n}\n", styles: ["::ng-deep tr.audit-row-deleted{background:#ff3d331a!important}::ng-deep tr.audit-row-deleted .audit-cell{background:#f6544c4d!important}::ng-deep tr.audit-row-added{background-color:#1bc5621a!important}::ng-deep tr.audit-row-added .audit-cell{background:#1bc5624d!important}\n"], dependencies: [{ 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: "pipe", type: AsyncPipe, name: "async" }] }); }
|
|
732
738
|
}
|
|
733
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
739
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: EntityChangesFieldComponent, decorators: [{
|
|
734
740
|
type: Component,
|
|
735
|
-
args: [{ standalone: true, selector: 'mng-entity-changes-field', imports: [
|
|
741
|
+
args: [{ standalone: true, selector: 'mng-entity-changes-field', imports: [MngTableComponent, AsyncPipe], template: "@if (modelFetched | async) {\n <div>\n @for (ec of entityChanges; track ec) {\n <mng-table [items]=\"ec.items\" [descriptor]=\"createDescriptor(ec)\"></mng-table>\n }\n </div>\n} @else {\n <div class=\"text-center\">\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem\"></i>\n </div>\n}\n", styles: ["::ng-deep tr.audit-row-deleted{background:#ff3d331a!important}::ng-deep tr.audit-row-deleted .audit-cell{background:#f6544c4d!important}::ng-deep tr.audit-row-added{background-color:#1bc5621a!important}::ng-deep tr.audit-row-added .audit-cell{background:#1bc5624d!important}\n"] }]
|
|
736
742
|
}], propDecorators: { injector: [{
|
|
737
743
|
type: Input
|
|
738
744
|
}] } });
|
|
@@ -758,43 +764,53 @@ class MngAuditRevisionsPageComponent extends AMngTableviewRouteComponent {
|
|
|
758
764
|
createTableviewDescriptor() {
|
|
759
765
|
if (this.revModel) {
|
|
760
766
|
const idProperty = this.revModel.properties?.filter(prop => prop.isId).map(prop => prop.resolvedPropertyName)[0];
|
|
761
|
-
const
|
|
762
|
-
|
|
767
|
+
const model = ModelDescriptor.fromClass(MngRevEntity);
|
|
768
|
+
if (this.revModel.entityName)
|
|
769
|
+
model.withI18nBase(this.revModel.entityName);
|
|
770
|
+
if (idProperty)
|
|
771
|
+
model.withIdPropertyUnsafe(idProperty);
|
|
772
|
+
const desc = TableviewDescriptor.fromModel(model);
|
|
773
|
+
const detailsDescriptor = EditorDescriptor.fromClass(MngRevEntityWithChangesDto, undefined, undefined, undefined, TableviewEditorTypeEnum.Details);
|
|
774
|
+
detailsDescriptor.model.withIdPropertyUnsafe('revEntity.' + idProperty);
|
|
763
775
|
if (this.revModel.properties) {
|
|
764
776
|
AuditUtil.addColumnsFromModel(desc.table, this.revModel.properties);
|
|
765
777
|
AuditUtil.addFieldsFromModel(detailsDescriptor, this.revModel.properties);
|
|
766
778
|
}
|
|
767
|
-
detailsDescriptor
|
|
779
|
+
detailsDescriptor
|
|
780
|
+
.addField('entityNameChangesMap')
|
|
781
|
+
.asCustomComponent(EntityChangesFieldComponent, {
|
|
782
|
+
fieldWrappers: ['field-no-label'],
|
|
783
|
+
inputs: { injector: this.injector }
|
|
784
|
+
})
|
|
785
|
+
.withDisabled();
|
|
768
786
|
desc.withDetailsDescriptor(detailsDescriptor); // MngRevEntity is extended by MngRevEntityWithChangesDto, so no real harm here
|
|
769
787
|
desc.table.withFilterDisplay(TableFilterDisplayEnum.Row);
|
|
770
788
|
return desc;
|
|
771
789
|
}
|
|
772
|
-
return
|
|
790
|
+
return TableviewDescriptor.fromClass(MngRevEntity);
|
|
773
791
|
}
|
|
774
792
|
createTableviewDataProvider() {
|
|
775
793
|
if (this.revModel) {
|
|
776
|
-
return
|
|
794
|
+
return TableviewDataProvider.fromClass(MngRevEntity).withGetAll(qp => combineLatest([this.revisisonsApiService.getRevisionCount(qp), this.revisisonsApiService.getRevisionList(qp)]).pipe(map(([count, values]) => MediusQueryResult.fromArray(values, count))));
|
|
777
795
|
}
|
|
778
|
-
return
|
|
796
|
+
return TableviewDataProvider.fromClass(MngRevEntity);
|
|
779
797
|
}
|
|
780
798
|
createActionDescriptors() {
|
|
781
|
-
const detailsAction =
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
}))
|
|
789
|
-
: throwError(() => new MngInternalError('No revision id provided for fetch function')));
|
|
799
|
+
const detailsAction = ActionEditorDetailsDescriptor.create(this.descriptor.detailsEditor).withFetchFunction(ctx => this.revisisonsApiService.getAllChangesForRevision(itemIdToDefined(ctx.parameters.itemId)).pipe(map(item => {
|
|
800
|
+
const revEntityWithChanges = new MngRevEntityDetailed();
|
|
801
|
+
revEntityWithChanges.rev = ctx.parameters.itemId;
|
|
802
|
+
revEntityWithChanges.revEntity = item.revEntity;
|
|
803
|
+
revEntityWithChanges.entityNameChangesMap = item.entityNameChangesMap;
|
|
804
|
+
return revEntityWithChanges;
|
|
805
|
+
})));
|
|
790
806
|
return [detailsAction];
|
|
791
807
|
}
|
|
792
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
793
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
808
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MngAuditRevisionsPageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
809
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.8", type: MngAuditRevisionsPageComponent, isStandalone: true, selector: "mng-audit-revisions-page", usesInheritance: true, ngImport: i0, template: "@if (showTableview()) {\n <mng-tableview-route [descriptor]=\"descriptor\" [dataProvider]=\"dataProvider\" [actions]=\"actions\"></mng-tableview-route>\n}\n", dependencies: [{ kind: "component", type: MngTableviewRouteComponent, selector: "mng-tableview-route", inputs: ["descriptor", "dataProvider", "actions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
794
810
|
}
|
|
795
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
811
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MngAuditRevisionsPageComponent, decorators: [{
|
|
796
812
|
type: Component,
|
|
797
|
-
args: [{ standalone: true, selector: 'mng-audit-revisions-page', imports: [
|
|
813
|
+
args: [{ standalone: true, selector: 'mng-audit-revisions-page', imports: [MngTableviewComponent, AsyncPipe, MngTableviewComponent, RouterOutlet, JsonPipe, MngTableviewRouteComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (showTableview()) {\n <mng-tableview-route [descriptor]=\"descriptor\" [dataProvider]=\"dataProvider\" [actions]=\"actions\"></mng-tableview-route>\n}\n" }]
|
|
798
814
|
}] });
|
|
799
815
|
|
|
800
816
|
/**
|