@mediusinc/mng-commons-audit 5.5.0-rc.1 → 5.5.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/esm2022/lib/api/models/entityChange.mjs +1 -1
  2. package/esm2022/lib/api/models/guiEntityModel.mjs +1 -1
  3. package/esm2022/lib/api/models/guiPropertyModel.mjs +1 -1
  4. package/esm2022/lib/api/models/guiPropertyType.mjs +1 -14
  5. package/esm2022/lib/api/models/guiRelationModel.mjs +1 -12
  6. package/esm2022/lib/api/models/revEntityWithChangesDto.mjs +1 -1
  7. package/esm2022/lib/api/models/revEntityWithStateDto.mjs +1 -1
  8. package/esm2022/lib/api/models/revisionType.mjs +1 -14
  9. package/esm2022/lib/api/services/audit-revisions-api.service.mjs +4 -5
  10. package/esm2022/lib/components/entity-changes-field/entity-changes-field.component.mjs +31 -20
  11. package/esm2022/lib/components/pages/entity-revisions/audit-entity-revisions.page.component.mjs +39 -32
  12. package/esm2022/lib/components/pages/revisions/audit-revisions.page.component.mjs +17 -15
  13. package/esm2022/lib/helpers/descriptor.mjs +136 -0
  14. package/esm2022/lib/helpers/entity-changes.mjs +42 -0
  15. package/esm2022/lib/helpers/i18n.mjs +14 -0
  16. package/fesm2022/mediusinc-mng-commons-audit.mjs +282 -325
  17. package/fesm2022/mediusinc-mng-commons-audit.mjs.map +1 -1
  18. package/lib/api/models/entityChange.d.ts +0 -11
  19. package/lib/api/models/guiEntityModel.d.ts +0 -11
  20. package/lib/api/models/guiPropertyModel.d.ts +0 -11
  21. package/lib/api/models/guiRelationModel.d.ts +0 -11
  22. package/lib/api/models/revEntityWithChangesDto.d.ts +0 -11
  23. package/lib/api/models/revEntityWithStateDto.d.ts +0 -11
  24. package/lib/components/entity-changes-field/entity-changes-field.component.d.ts +5 -8
  25. package/lib/components/pages/entity-revisions/audit-entity-revisions.page.component.d.ts +8 -15
  26. package/lib/components/pages/revisions/audit-revisions.page.component.d.ts +5 -7
  27. package/lib/helpers/descriptor.d.ts +10 -0
  28. package/lib/helpers/entity-changes.d.ts +5 -0
  29. package/lib/helpers/i18n.d.ts +3 -0
  30. package/package.json +2 -2
  31. package/version-info.json +5 -5
  32. package/esm2022/lib/utils/audit.util.mjs +0 -227
  33. package/lib/utils/audit.util.d.ts +0 -22
@@ -1,12 +1,11 @@
1
- import { CommonsConfigurationService, TypeRegistry, dataListParamsToUrlQuery, CommonsInternalError, itemIdToDefined, createRoute, createRouteRedirect, createRoutes } from '@mediusinc/mng-commons/core';
1
+ import { CommonsConfigurationService, dataListParamsToUrlQuery, CommonsInternalError, getI18n, getI18nTypePropertyKey, effectWithDeps, itemIdToDefined, createRoute, createRouteRedirect, createRoutes } from '@mediusinc/mng-commons/core';
2
2
  import { TableviewComponent, createTableviewRoute } from '@mediusinc/mng-commons/tableview';
3
3
  import * as i0 from '@angular/core';
4
- import { InjectionToken, inject, Injectable, Component, ChangeDetectionStrategy, computed, signal, effect, DestroyRef, Input, Injector } from '@angular/core';
4
+ import { InjectionToken, inject, Injectable, Component, ChangeDetectionStrategy, computed, signal, DestroyRef, input, Injector } from '@angular/core';
5
5
  import { shareReplay, throwError } from 'rxjs';
6
6
  import { map } from 'rxjs/operators';
7
- import { HttpHeaders, HttpClient, HttpParams } from '@angular/common/http';
7
+ import { HttpHeaders, HttpClient } from '@angular/common/http';
8
8
  import { RouterOutlet, Router, ActivatedRoute } from '@angular/router';
9
- import { AsyncPipe, JsonPipe } from '@angular/common';
10
9
  import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
11
10
  import * as i1 from '@angular/forms';
12
11
  import { FormsModule } from '@angular/forms';
@@ -118,270 +117,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
118
117
  args: [{ standalone: true, selector: 'mng-audit-page', imports: [RouterOutlet], changeDetection: ChangeDetectionStrategy.OnPush, template: "<router-outlet></router-outlet>\n" }]
119
118
  }] });
120
119
 
121
- /**
122
- * Medius quarkus sampler
123
- * Sampler OPENAPI definition
124
- *
125
- * The version of the OpenAPI document: 1.0.0
126
- * Contact: info@medius.si
127
- *
128
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
129
- * https://openapi-generator.tech
130
- * Do not edit the class manually.
131
- */
132
- var GuiPropertyTypeDto;
133
- (function (GuiPropertyTypeDto) {
134
- GuiPropertyTypeDto["LocalDate"] = "LOCAL_DATE";
135
- GuiPropertyTypeDto["OffsetDateTime"] = "OFFSET_DATE_TIME";
136
- GuiPropertyTypeDto["String"] = "STRING";
137
- GuiPropertyTypeDto["Number"] = "NUMBER";
138
- GuiPropertyTypeDto["Boolean"] = "BOOLEAN";
139
- GuiPropertyTypeDto["Enum"] = "ENUM";
140
- GuiPropertyTypeDto["Wildcard"] = "WILDCARD";
141
- })(GuiPropertyTypeDto || (GuiPropertyTypeDto = {}));
142
- TypeRegistry.get().registerEnum(GuiPropertyTypeDto, 'MngGuiPropertyTypeDto');
143
-
144
- /**
145
- * Medius quarkus sampler
146
- * Sampler OPENAPI definition
147
- *
148
- * The version of the OpenAPI document: 1.0.0
149
- * Contact: info@medius.si
150
- *
151
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
152
- * https://openapi-generator.tech
153
- * Do not edit the class manually.
154
- */
155
- var RevisionTypeDto;
156
- (function (RevisionTypeDto) {
157
- RevisionTypeDto["Add"] = "ADD";
158
- RevisionTypeDto["Mod"] = "MOD";
159
- RevisionTypeDto["Del"] = "DEL";
160
- })(RevisionTypeDto || (RevisionTypeDto = {}));
161
- TypeRegistry.get().registerEnum(RevisionTypeDto, 'MngRevisionTypeDto');
162
- const revisionTypeEnum = enumModel(RevisionTypeDto.Add, RevisionTypeDto, 'MngRevisionTypeDto');
163
-
164
- class AuditUtil {
165
- static { this._dateRegex = /\d{4}-[01]\d-[0-3]\d/; }
166
- static addColumnsFromModel(descriptor, properties, modelType = undefined, addFilters = true, addSorts = true) {
167
- for (const property of properties) {
168
- if (!property.resolvedPropertyName) {
169
- continue;
170
- }
171
- const isEnum = property.propertyType === GuiPropertyTypeDto.Enum;
172
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
173
- let column = null;
174
- if (isEnum) {
175
- if (!property.possibleEnumValues) {
176
- continue;
177
- }
178
- const enumModel = AuditUtil.findEnum(property);
179
- if (enumModel) {
180
- column = descriptor.addColumnEnum(property.resolvedPropertyName, enumModel);
181
- if (addFilters) {
182
- descriptor.addFilterLookupEnum(column.property, enumModel, property.possibleEnumValues);
183
- }
184
- }
185
- else {
186
- column = descriptor.addColumnUnsafe(property.resolvedPropertyName);
187
- if (addFilters) {
188
- descriptor.addFilterLookupUnsafe(column.property, lookupDataProvider().withLookup(() => property.possibleEnumValues ?? []));
189
- }
190
- }
191
- }
192
- else if (property.propertyType === GuiPropertyTypeDto.Number) {
193
- column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asNumber();
194
- }
195
- else if (property.propertyType === GuiPropertyTypeDto.Boolean) {
196
- column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asBoolean();
197
- }
198
- else if (property.propertyType === GuiPropertyTypeDto.LocalDate) {
199
- column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asDate('dd. MM yyyy');
200
- }
201
- else if (property.propertyType === GuiPropertyTypeDto.OffsetDateTime) {
202
- column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asDate('dd. MM yyyy HH:mm');
203
- }
204
- else {
205
- // string / wildcard
206
- column = descriptor.addColumnUnsafe(property.resolvedPropertyName).withTitle(AuditUtil.getPropertyTitleKey(property, modelType));
207
- }
208
- if (modelType) {
209
- column.withGetter((value, item) => item?.[modelType]?.[property.resolvedPropertyName]);
210
- }
211
- column.withTitle(AuditUtil.getPropertyTitleKey(property, modelType));
212
- if (!isEnum && addFilters) {
213
- descriptor.addFilterFromColumnDescriptorUnsafe(column);
214
- }
215
- if (addSorts) {
216
- descriptor.withSortUnsafe(column.property);
217
- }
218
- }
219
- return descriptor;
220
- }
221
- static getPropertyTitleKey(property, modelType = undefined) {
222
- if (modelType === 'revEntity') {
223
- return 'MngRevEntity.properties.' + property.resolvedPropertyName;
224
- }
225
- return property.resolvedPropertyName ?? '';
226
- }
227
- static addFieldsFromModel(descriptor, properties, modelType = 'revEntity') {
228
- for (const property of properties) {
229
- if (!property.resolvedPropertyName) {
230
- continue;
231
- }
232
- const fieldPrepend = `${modelType}.`;
233
- if (property.propertyType === GuiPropertyTypeDto.Enum) {
234
- const enumModel = AuditUtil.findEnum(property);
235
- if (enumModel) {
236
- if (!property.possibleEnumValues) {
237
- continue;
238
- }
239
- descriptor.addFieldLookupEnum((fieldPrepend + property.resolvedPropertyName), enumModel, property.possibleEnumValues).withDisabled();
240
- }
241
- else {
242
- descriptor.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName).withLabel(AuditUtil.getPropertyTitleKey(property, modelType));
243
- }
244
- }
245
- else if (property.propertyType === GuiPropertyTypeDto.Number) {
246
- descriptor
247
- .addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
248
- .withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
249
- .asNumber()
250
- .withDisabled();
251
- }
252
- else if (property.propertyType === GuiPropertyTypeDto.Boolean) {
253
- descriptor
254
- .addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
255
- .withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
256
- .withDisabled();
257
- }
258
- else if (property.propertyType === GuiPropertyTypeDto.LocalDate) {
259
- descriptor
260
- .addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
261
- .withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
262
- .asDatePicker({ format: 'dd. MMM yyyy' })
263
- .withDisabled();
264
- }
265
- else if (property.propertyType === GuiPropertyTypeDto.OffsetDateTime) {
266
- descriptor
267
- .addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
268
- .withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
269
- .asDatePicker({
270
- format: 'dd. MM yy',
271
- showTime: true,
272
- showSeconds: false
273
- })
274
- .withDisabled();
275
- }
276
- else {
277
- // string / wildcard
278
- descriptor
279
- .addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
280
- .withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
281
- .withDisabled();
282
- }
283
- }
284
- return descriptor;
285
- }
286
- static buildDescriptorForEntityRevision(descriptor, revModel, entityModel) {
287
- const revType = descriptor.addColumnEnum('revType', revisionTypeEnum).withTitle('MngEntityRevisionChangeState.properties.revType');
288
- descriptor.addFieldLookupEnum('revType', revisionTypeEnum).withLabel('MngEntityRevisionChangeState.properties.revType');
289
- descriptor.table.addFilterFromColumnDescriptorUnsafe(revType);
290
- if (revModel.properties) {
291
- AuditUtil.addColumnsFromModel(descriptor.table, revModel.properties, 'revEntity');
292
- AuditUtil.addFieldsFromModel(descriptor.detailsEditor, revModel.properties, 'revEntity');
293
- }
294
- if (entityModel.properties) {
295
- AuditUtil.addColumnsFromModel(descriptor.table, entityModel.properties, 'entityState');
296
- AuditUtil.addFieldsFromModel(descriptor.detailsEditor, entityModel.properties, 'entityState');
297
- }
298
- return descriptor;
299
- }
300
- static findEnum(property) {
301
- if (!property.enumClassSimpleName) {
302
- return undefined;
303
- }
304
- let i18n = property.enumClassSimpleName;
305
- let enumType = TypeRegistry.get().findEnum(i18n);
306
- if (!enumType) {
307
- i18n = property.enumClassSimpleName + 'Dto';
308
- enumType = TypeRegistry.get().findEnum(i18n);
309
- }
310
- if (!enumType && Array.isArray(property.possibleEnumValues)) {
311
- i18n = null;
312
- enumType = property.possibleEnumValues?.reduce((acc, v) => {
313
- const constName = v
314
- .split('_')
315
- .map(s => (s.length > 1 ? s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase() : s))
316
- .join('');
317
- if (constName !== v) {
318
- acc[constName] = v;
319
- }
320
- acc[v] = constName;
321
- return acc;
322
- }, {});
323
- }
324
- return enumModelGeneric(enumType, i18n);
325
- }
326
- static extractPropertyName(fullPropertyName) {
327
- if (fullPropertyName?.includes('entityState.')) {
328
- return fullPropertyName.replace('entityState.', '');
329
- }
330
- else if (fullPropertyName?.includes('revEntity.')) {
331
- return fullPropertyName?.replace('revEntity.', '');
332
- }
333
- return fullPropertyName;
334
- }
335
- static paramsToHttpParams(params) {
336
- const routeParams = dataListParamsToUrlQuery(params, null);
337
- let httpParams = new HttpParams();
338
- Object.entries(routeParams).forEach(([key, value]) => {
339
- httpParams = httpParams.append(key, value);
340
- });
341
- return httpParams;
342
- }
343
- static mapItemsToEntityChangesArray(fieldValue) {
344
- const entityChanges = [];
345
- for (const key of Object.keys(fieldValue)) {
346
- const ec = { entityType: key, items: [] };
347
- for (const change of fieldValue[key]) {
348
- if (change.revType === RevisionTypeDto.Add && change.entityNewState) {
349
- const item = {
350
- revType: change.revType,
351
- color: 'green'
352
- };
353
- Object.entries(change.entityNewState).forEach(([key, value]) => (item[key] = value));
354
- ec.items?.push(item);
355
- }
356
- else if (change.revType === RevisionTypeDto.Del && change.entityOldState) {
357
- const item = {
358
- revType: change.revType,
359
- color: 'red'
360
- };
361
- Object.entries(change.entityOldState).forEach(([key, value]) => (item[key] = value));
362
- ec.items?.push(item);
363
- }
364
- else if (change.revType === RevisionTypeDto.Mod && change.entityOldState && change.entityNewState) {
365
- const itemOld = {
366
- revType: change.revType,
367
- color: 'red'
368
- };
369
- Object.entries(change.entityOldState).forEach(([key, value]) => (itemOld[key] = value));
370
- const itemNew = {
371
- revType: change.revType,
372
- color: 'green'
373
- };
374
- Object.entries(change.entityNewState).forEach(([key, value]) => (itemNew[key] = value));
375
- ec.items?.push(itemOld);
376
- ec.items?.push(itemNew);
377
- }
378
- }
379
- entityChanges.push(ec);
380
- }
381
- return entityChanges;
382
- }
383
- }
384
-
385
120
  /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types */
386
121
  class AuditRevisionsApiService extends AuditApiService {
387
122
  constructor() {
@@ -389,7 +124,7 @@ class AuditRevisionsApiService extends AuditApiService {
389
124
  }
390
125
  getRevisionList(params) {
391
126
  return this.http.get(this.getUrl(''), {
392
- params: AuditUtil.paramsToHttpParams(params)
127
+ params: dataListParamsToUrlQuery(params)
393
128
  });
394
129
  }
395
130
  getAllChangesForRevision(revId) {
@@ -400,7 +135,7 @@ class AuditRevisionsApiService extends AuditApiService {
400
135
  localVarHeaders = localVarHeaders.set('Accept', 'application/json');
401
136
  return this.http
402
137
  .get(this.getUrl(`/states/${entityType}`), {
403
- params: AuditUtil.paramsToHttpParams(params),
138
+ params: dataListParamsToUrlQuery(params),
404
139
  headers: localVarHeaders
405
140
  })
406
141
  .pipe(map(res => {
@@ -441,18 +176,181 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
441
176
  type: Injectable
442
177
  }], ctorParameters: () => [] });
443
178
 
179
+ var GuiPropertyTypeDto;
180
+ (function (GuiPropertyTypeDto) {
181
+ GuiPropertyTypeDto["LocalDate"] = "LOCAL_DATE";
182
+ GuiPropertyTypeDto["OffsetDateTime"] = "OFFSET_DATE_TIME";
183
+ GuiPropertyTypeDto["String"] = "STRING";
184
+ GuiPropertyTypeDto["Number"] = "NUMBER";
185
+ GuiPropertyTypeDto["Boolean"] = "BOOLEAN";
186
+ GuiPropertyTypeDto["Enum"] = "ENUM";
187
+ GuiPropertyTypeDto["Wildcard"] = "WILDCARD";
188
+ })(GuiPropertyTypeDto || (GuiPropertyTypeDto = {}));
189
+
190
+ var RevisionTypeDto;
191
+ (function (RevisionTypeDto) {
192
+ RevisionTypeDto["Add"] = "ADD";
193
+ RevisionTypeDto["Mod"] = "MOD";
194
+ RevisionTypeDto["Del"] = "DEL";
195
+ })(RevisionTypeDto || (RevisionTypeDto = {}));
196
+ const revisionTypeEnum = enumModel(RevisionTypeDto.Add, RevisionTypeDto, 'MngRevisionTypeDto');
197
+
198
+ const i18nBaseEntityKey = 'AuditEntities';
199
+ function getI18nAuditEntityName(translate, entityName) {
200
+ return getI18n(translate, {}, `${i18nBaseEntityKey}.${entityName}.name`, `${i18nBaseEntityKey}.${entityName}`, `${entityName}.name`) ?? entityName;
201
+ }
202
+ function getI18nAuditEntityProperty(translate, entityName, propertyName, modelType = 'entityState') {
203
+ if (modelType === 'revEntity') {
204
+ return 'MngRevEntity.properties.' + propertyName;
205
+ }
206
+ else {
207
+ return getI18n(translate, {}, getI18nTypePropertyKey(`${i18nBaseEntityKey}.${entityName}`, propertyName), getI18nTypePropertyKey(entityName, propertyName)) ?? propertyName;
208
+ }
209
+ }
210
+
211
+ function auditAddColumnsFromModel(translate, descriptor, entityName, properties, modelType = undefined, addFilters = true, addSorts = true) {
212
+ for (const property of properties) {
213
+ if (!property.resolvedPropertyName) {
214
+ continue;
215
+ }
216
+ const isEnum = property.propertyType === GuiPropertyTypeDto.Enum;
217
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
218
+ let column = null;
219
+ if (isEnum) {
220
+ if (!property.possibleEnumValues) {
221
+ continue;
222
+ }
223
+ const enumModel = getEnumModel(property);
224
+ if (enumModel) {
225
+ column = descriptor.addColumnEnum(property.resolvedPropertyName, enumModel);
226
+ if (addFilters) {
227
+ descriptor.addFilterLookupEnum(column.property, enumModel, property.possibleEnumValues);
228
+ }
229
+ }
230
+ else {
231
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName);
232
+ if (addFilters) {
233
+ descriptor.addFilterLookupUnsafe(column.property, lookupDataProvider().withLookup(() => property.possibleEnumValues ?? []));
234
+ }
235
+ }
236
+ }
237
+ else if (property.propertyType === GuiPropertyTypeDto.Number) {
238
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asNumber();
239
+ }
240
+ else if (property.propertyType === GuiPropertyTypeDto.Boolean) {
241
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asBoolean();
242
+ }
243
+ else if (property.propertyType === GuiPropertyTypeDto.LocalDate) {
244
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asDate('dd. MM yyyy');
245
+ }
246
+ else if (property.propertyType === GuiPropertyTypeDto.OffsetDateTime) {
247
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asDate('dd. MM yyyy HH:mm');
248
+ }
249
+ else {
250
+ // string / wildcard
251
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName).withTitle(getI18nAuditEntityProperty(translate, entityName, property.propertyName ?? '', modelType));
252
+ }
253
+ if (modelType) {
254
+ column.withGetter((value, item) => item?.[modelType]?.[property.resolvedPropertyName]);
255
+ }
256
+ column.withTitle(getI18nAuditEntityProperty(translate, entityName, property.propertyName ?? '', modelType));
257
+ if (!isEnum && addFilters) {
258
+ descriptor.addFilterFromColumnDescriptorUnsafe(column).withTitle(column.title ?? '');
259
+ }
260
+ if (addSorts) {
261
+ descriptor.withSortUnsafe(column.property);
262
+ }
263
+ }
264
+ return descriptor;
265
+ }
266
+ function auditAddFieldsFromModel(translate, descriptor, entityName, properties, modelType = 'revEntity') {
267
+ for (const property of properties) {
268
+ if (!property.resolvedPropertyName) {
269
+ continue;
270
+ }
271
+ const fieldPrepend = `${modelType}.`;
272
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
273
+ let field;
274
+ if (property.propertyType === GuiPropertyTypeDto.Enum) {
275
+ const enumModel = getEnumModel(property);
276
+ if (enumModel) {
277
+ if (!property.possibleEnumValues) {
278
+ continue;
279
+ }
280
+ field = descriptor.addFieldLookupEnum((fieldPrepend + property.resolvedPropertyName), enumModel, property.possibleEnumValues);
281
+ }
282
+ else {
283
+ field = descriptor.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName);
284
+ }
285
+ }
286
+ else if (property.propertyType === GuiPropertyTypeDto.Number) {
287
+ field = descriptor.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName).asNumber();
288
+ }
289
+ else if (property.propertyType === GuiPropertyTypeDto.Boolean) {
290
+ field = descriptor.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName);
291
+ }
292
+ else if (property.propertyType === GuiPropertyTypeDto.LocalDate) {
293
+ field = descriptor.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName).asDatePicker({ format: 'dd. MMM yyyy' });
294
+ }
295
+ else if (property.propertyType === GuiPropertyTypeDto.OffsetDateTime) {
296
+ field = descriptor.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName).asDatePicker({
297
+ format: 'dd. MM yy',
298
+ showTime: true,
299
+ showSeconds: false
300
+ });
301
+ }
302
+ else {
303
+ // string / wildcard
304
+ field = descriptor.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName);
305
+ }
306
+ field.withLabel(getI18nAuditEntityProperty(translate, entityName, property.propertyName ?? '', modelType)).withDisabled();
307
+ }
308
+ return descriptor;
309
+ }
310
+ function auditBuildTableviewEntityRevision(translate, descriptor, revModel, entityModel) {
311
+ const revType = descriptor.addColumnEnum('revType', revisionTypeEnum).withTitle('MngEntityRevisionChangeState.properties.revType');
312
+ descriptor.addFieldLookupEnum('revType', revisionTypeEnum).withLabel('MngEntityRevisionChangeState.properties.revType');
313
+ descriptor.table.addFilterFromColumnDescriptorUnsafe(revType);
314
+ if (revModel.properties) {
315
+ auditAddColumnsFromModel(translate, descriptor.table, revModel.entityName ?? '', revModel.properties, 'revEntity');
316
+ auditAddFieldsFromModel(translate, descriptor.detailsEditor, revModel.entityName ?? '', revModel.properties, 'revEntity');
317
+ }
318
+ if (entityModel.properties) {
319
+ auditAddColumnsFromModel(translate, descriptor.table, entityModel.entityName ?? '', entityModel.properties, 'entityState');
320
+ auditAddFieldsFromModel(translate, descriptor.detailsEditor, entityModel.entityName ?? '', entityModel.properties, 'entityState');
321
+ }
322
+ return descriptor;
323
+ }
324
+ function getEnumModel(property) {
325
+ if (Array.isArray(property.possibleEnumValues)) {
326
+ const enumType = property.possibleEnumValues?.reduce((acc, v) => {
327
+ const constName = v
328
+ .split('_')
329
+ .map(s => (s.length > 1 ? s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase() : s))
330
+ .join('');
331
+ if (constName !== v) {
332
+ acc[constName] = v;
333
+ }
334
+ acc[v] = constName;
335
+ return acc;
336
+ }, {});
337
+ return enumModelGeneric(enumType, property.enumClassSimpleName);
338
+ }
339
+ return null;
340
+ }
341
+
444
342
  class AuditEntityRevisionsPageComponent {
445
343
  constructor() {
446
- this.router = inject(Router);
447
- this.route = inject(ActivatedRoute);
448
- this.translate = inject(TranslateService);
449
- this.auditService = inject(AuditService);
450
- this.revModel = toSignal(this.auditService.revModel$);
451
- this.auditModel = toSignal(this.auditService.auditModel$);
452
- this.entityClass = toSignal(this.route.paramMap.pipe(map(pm => pm.get('entityClass') ?? undefined)));
344
+ this.#router = inject(Router);
345
+ this.#route = inject(ActivatedRoute);
346
+ this.#translate = inject(TranslateService);
347
+ this.#auditService = inject(AuditService);
348
+ this.#revModel = toSignal(this.#auditService.revModel$);
349
+ this.#auditModel = toSignal(this.#auditService.auditModel$);
350
+ this.#entityClass = toSignal(this.#route.paramMap.pipe(map(pm => pm.get('entityClass') ?? undefined)));
453
351
  this.selectedRevisionEntity = computed(() => {
454
- const entities = this.auditModel();
455
- const entityClass = this.entityClass();
352
+ const entities = this.#auditModel();
353
+ const entityClass = this.#entityClass();
456
354
  if (entityClass && entities) {
457
355
  for (const e of entities) {
458
356
  if (e.entityName === entityClass) {
@@ -463,20 +361,21 @@ class AuditEntityRevisionsPageComponent {
463
361
  return undefined;
464
362
  });
465
363
  this.descriptor = computed(() => {
466
- const revModel = this.revModel();
364
+ const revModel = this.#revModel();
467
365
  const selectedRevisionEntity = this.selectedRevisionEntity();
468
366
  if (!revModel || !selectedRevisionEntity?.entityName) {
469
367
  return undefined;
470
368
  }
471
- const desc = tableviewDescriptor({ id: 'mergedId', i18nBase: selectedRevisionEntity.entityName });
472
- AuditUtil.buildDescriptorForEntityRevision(desc, revModel, selectedRevisionEntity);
369
+ const desc = tableviewDescriptor({ id: 'mergedId' });
370
+ auditBuildTableviewEntityRevision(this.#translate, desc, revModel, selectedRevisionEntity);
371
+ desc.table.withTitle(getI18nAuditEntityName(this.#translate, selectedRevisionEntity.entityName));
473
372
  desc.table.withColumnsResizable();
474
373
  desc.table.withCurrentColumnsReorderable();
475
374
  desc.table.withCurrentColumnsToggleable();
476
375
  return desc;
477
376
  });
478
377
  this.dataProvider = computed(() => {
479
- const revModel = this.revModel();
378
+ const revModel = this.#revModel();
480
379
  const selectedRevisionEntity = this.selectedRevisionEntity();
481
380
  if (!revModel || !selectedRevisionEntity?.entityName) {
482
381
  return undefined;
@@ -522,7 +421,7 @@ class AuditEntityRevisionsPageComponent {
522
421
  .withEditorTitle('pages.entityRevisions.actions.details.editor.title');
523
422
  return [detailsAction];
524
423
  });
525
- this.revisionEntitiesLookupProvider = lookupDataProviderWithService(AuditService).withLookup(() => this.auditService.auditModel$.pipe(map(model => {
424
+ this.revisionEntitiesLookupProvider = lookupDataProviderWithService(AuditService).withLookup(() => this.#auditService.auditModel$.pipe(map(model => {
526
425
  const modelI18n = model;
527
426
  modelI18n.sort((m1, m2) => {
528
427
  if (m1.entityName && m2.entityName) {
@@ -536,30 +435,36 @@ class AuditEntityRevisionsPageComponent {
536
435
  }
537
436
  });
538
437
  modelI18n.forEach(item => {
539
- const translatedEntityName = this.translate.instant('AuditEntities.' + item.entityName);
540
- item.entityNameI18n = translatedEntityName.includes('AuditEntities.') ? item.entityName : translatedEntityName;
438
+ item.entityNameI18n = item.entityName ? getI18nAuditEntityName(this.#translate, item.entityName) : undefined;
541
439
  });
542
440
  return modelI18n;
543
441
  })));
544
442
  this.showTableview = signal(false);
545
- effect(() => {
546
- const descriptor = this.descriptor();
443
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
444
+ this.#showTableviewEffectRef = effectWithDeps([this.descriptor], descriptor => {
547
445
  if (descriptor) {
548
- setTimeout(() => {
549
- this.showTableview.set(true);
550
- });
446
+ this.showTableview.set(true);
551
447
  }
552
- }, { allowSignalWrites: true });
448
+ });
553
449
  }
450
+ #router;
451
+ #route;
452
+ #translate;
453
+ #auditService;
454
+ #revModel;
455
+ #auditModel;
456
+ #entityClass;
457
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
458
+ #showTableviewEffectRef;
554
459
  onRevisionEntityChange(value) {
555
460
  this.showTableview.set(false);
556
- const currentUrl = this.router.url;
461
+ const currentUrl = this.#router.url;
557
462
  const routePrefix = currentUrl.substring(0, currentUrl.lastIndexOf('/audit/entity-revisions') + '/audit/entity-revisions'.length);
558
463
  if (value) {
559
- this.router.navigate([routePrefix, value.entityName]);
464
+ this.#router.navigate([routePrefix, value.entityName]);
560
465
  }
561
466
  else {
562
- this.router.navigate([routePrefix]);
467
+ this.#router.navigate([routePrefix]);
563
468
  }
564
469
  }
565
470
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuditEntityRevisionsPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
@@ -567,29 +472,77 @@ class AuditEntityRevisionsPageComponent {
567
472
  }
568
473
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuditEntityRevisionsPageComponent, decorators: [{
569
474
  type: Component,
570
- args: [{ standalone: true, selector: 'mng-audit-entity-revisions-page', imports: [DropdownComponent, FormsModule, AsyncPipe, TranslateModule, FormlyModule, TableviewComponent], providers: [AuditRevisionsApiService], changeDetection: ChangeDetectionStrategy.OnPush, 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($event)\"\n [dataProvider]=\"revisionEntitiesLookupProvider\"\n [showClear]=\"true\"></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() && descriptor()) {\n <mng-tableview [descriptor]=\"descriptor()!\" [dataProvider]=\"dataProvider()\" [actions]=\"actions()\"></mng-tableview>\n}\n" }]
571
- }], ctorParameters: () => [] });
475
+ args: [{ standalone: true, selector: 'mng-audit-entity-revisions-page', imports: [DropdownComponent, FormsModule, TranslateModule, FormlyModule, TableviewComponent], providers: [AuditRevisionsApiService], changeDetection: ChangeDetectionStrategy.OnPush, 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($event)\"\n [dataProvider]=\"revisionEntitiesLookupProvider\"\n [showClear]=\"true\"></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() && descriptor()) {\n <mng-tableview [descriptor]=\"descriptor()!\" [dataProvider]=\"dataProvider()\" [actions]=\"actions()\"></mng-tableview>\n}\n" }]
476
+ }] });
477
+
478
+ function auditMapToEntityChangesArray(fieldValue) {
479
+ const entityChanges = [];
480
+ for (const key of Object.keys(fieldValue)) {
481
+ const ec = { entityType: key, items: [] };
482
+ for (const change of fieldValue[key]) {
483
+ if (change.revType === RevisionTypeDto.Add && change.entityNewState) {
484
+ const item = {
485
+ revType: change.revType,
486
+ color: 'green'
487
+ };
488
+ Object.entries(change.entityNewState).forEach(([key, value]) => (item[key] = value));
489
+ ec.items?.push(item);
490
+ }
491
+ else if (change.revType === RevisionTypeDto.Del && change.entityOldState) {
492
+ const item = {
493
+ revType: change.revType,
494
+ color: 'red'
495
+ };
496
+ Object.entries(change.entityOldState).forEach(([key, value]) => (item[key] = value));
497
+ ec.items?.push(item);
498
+ }
499
+ else if (change.revType === RevisionTypeDto.Mod && change.entityOldState && change.entityNewState) {
500
+ const itemOld = {
501
+ revType: change.revType,
502
+ color: 'red'
503
+ };
504
+ Object.entries(change.entityOldState).forEach(([key, value]) => (itemOld[key] = value));
505
+ const itemNew = {
506
+ revType: change.revType,
507
+ color: 'green'
508
+ };
509
+ Object.entries(change.entityNewState).forEach(([key, value]) => (itemNew[key] = value));
510
+ ec.items?.push(itemOld);
511
+ ec.items?.push(itemNew);
512
+ }
513
+ }
514
+ entityChanges.push(ec);
515
+ }
516
+ return entityChanges;
517
+ }
572
518
 
573
519
  class EntityChangesFieldComponent extends AFormlyCustomFieldComponent {
574
520
  constructor() {
575
521
  super(...arguments);
576
- this.destroyRef = inject(DestroyRef);
522
+ this.#destroyRef = inject(DestroyRef);
523
+ this.#translate = inject(TranslateService);
524
+ this.injector = input();
577
525
  this.entityChanges = signal([]);
578
526
  this.modelFetched = signal(false);
579
- this.auditModel = [];
527
+ this.#auditModel = [];
580
528
  }
529
+ #destroyRef;
530
+ #translate;
531
+ #auditModel;
532
+ #fieldValue;
581
533
  ngOnInit() {
582
- this.fieldValue = this.formControl.value;
583
- this.injector
534
+ this.#fieldValue = this.formControl.value;
535
+ const injector = this.injector();
536
+ injector
584
537
  ?.get(AuditService, undefined, { optional: true })
585
- ?.auditModel$.pipe(takeUntilDestroyed(this.destroyRef))
538
+ ?.auditModel$.pipe(takeUntilDestroyed(this.#destroyRef))
586
539
  .subscribe({
587
540
  next: model => {
588
- this.auditModel = model;
589
- if (this.fieldValue) {
590
- this.entityChanges.set(AuditUtil.mapItemsToEntityChangesArray(this.fieldValue).map(fv => ({
541
+ this.#auditModel = model;
542
+ if (this.#fieldValue) {
543
+ this.entityChanges.set(auditMapToEntityChangesArray(this.#fieldValue).map(fv => ({
591
544
  data: fv,
592
- descriptor: this.createDescriptor(fv)
545
+ descriptor: this.#createDescriptor(fv)
593
546
  })));
594
547
  this.modelFetched.set(true);
595
548
  }
@@ -598,8 +551,11 @@ class EntityChangesFieldComponent extends AFormlyCustomFieldComponent {
598
551
  throw new CommonsInternalError('Error while trying to fetch audit model from audit service', { name: 'EntityChangesFieldComponentError', cause: err });
599
552
  }
600
553
  });
554
+ if (injector) {
555
+ this.#translate = injector.get(TranslateService);
556
+ }
601
557
  }
602
- createDescriptor(entityChanges) {
558
+ #createDescriptor(entityChanges) {
603
559
  const changedFields = [];
604
560
  if (entityChanges.items && entityChanges.items[0].revType === RevisionTypeDto.Mod) {
605
561
  for (const key in entityChanges.items[0]) {
@@ -608,14 +564,14 @@ class EntityChangesFieldComponent extends AFormlyCustomFieldComponent {
608
564
  }
609
565
  }
610
566
  }
611
- const guiEntityModel = this.auditModel.filter(m => m.entityName === entityChanges.entityType)[0];
567
+ const guiEntityModel = this.#auditModel.filter(m => m.entityName === entityChanges.entityType)[0];
612
568
  const desc = tableDescriptor({ i18nBase: guiEntityModel.entityName }).withClassName('py-2');
613
569
  if (guiEntityModel.entityName) {
614
- desc.withTitle(guiEntityModel.entityName);
570
+ desc.withTitle(getI18nAuditEntityName(this.#translate, guiEntityModel.entityName));
615
571
  }
616
572
  desc.addColumnEnum('revType', revisionTypeEnum).withTitle('MngEntityRevisionChangeState.properties.revType');
617
573
  if (guiEntityModel.properties) {
618
- AuditUtil.addColumnsFromModel(desc, guiEntityModel.properties, undefined, false, false);
574
+ auditAddColumnsFromModel(this.#translate, desc, guiEntityModel.entityName ?? '', guiEntityModel.properties, undefined, false, false);
619
575
  }
620
576
  desc.withRowClassName(undefined, (_, item) => (item ? (item.color === 'green' ? 'audit-row-added' : 'audit-row-deleted') : ''));
621
577
  desc.columns.forEach(col => {
@@ -630,42 +586,39 @@ class EntityChangesFieldComponent extends AFormlyCustomFieldComponent {
630
586
  return desc;
631
587
  }
632
588
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: EntityChangesFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
633
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: EntityChangesFieldComponent, isStandalone: true, selector: "mng-entity-changes-field", inputs: { injector: "injector" }, usesInheritance: true, ngImport: i0, template: "@if (modelFetched()) {\n <div>\n @for (ec of entityChanges(); track ec) {\n <mng-table [items]=\"ec.data.items\" [descriptor]=\"ec.descriptor\"></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: TableComponent, selector: "mng-table", inputs: ["descriptor", "items", "result", "loading", "dataProvider", "useQueryParams", "cellClickEnabled", "selectionMode", "selectionEnabled", "rowReorderEnabled", "columnLastMinWidth", "captionComponent", "columnCustomLastComponent", "globalFilterFields"], outputs: ["tableLoad", "cellClick", "selectionChange", "captionComponentInstance", "columnCustomLastComponentInstance", "rowReorder"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
589
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: EntityChangesFieldComponent, isStandalone: true, selector: "mng-entity-changes-field", inputs: { injector: { classPropertyName: "injector", publicName: "injector", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "@if (modelFetched()) {\n <div>\n @for (ec of entityChanges(); track ec) {\n <mng-table [items]=\"ec.data.items\" [descriptor]=\"ec.descriptor\"></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: TableComponent, selector: "mng-table", inputs: ["descriptor", "items", "result", "loading", "dataProvider", "useQueryParams", "cellClickEnabled", "selectionMode", "selectionEnabled", "rowReorderEnabled", "columnLastMinWidth", "captionComponent", "columnCustomLastComponent", "globalFilterFields"], outputs: ["tableLoad", "cellClick", "selectionChange", "captionComponentInstance", "columnCustomLastComponentInstance", "rowReorder"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
634
590
  }
635
591
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: EntityChangesFieldComponent, decorators: [{
636
592
  type: Component,
637
593
  args: [{ standalone: true, selector: 'mng-entity-changes-field', imports: [TableComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (modelFetched()) {\n <div>\n @for (ec of entityChanges(); track ec) {\n <mng-table [items]=\"ec.data.items\" [descriptor]=\"ec.descriptor\"></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"] }]
638
- }], propDecorators: { injector: [{
639
- type: Input
640
- }] } });
594
+ }] });
641
595
 
642
596
  class AuditRevisionsPageComponent {
643
597
  constructor() {
644
- this.injector = inject(Injector);
645
- this.auditService = inject(AuditService);
646
- this.revModel = toSignal(this.auditService.revModel$);
647
- this.showTableview = computed(() => this.revModel() != null);
598
+ this.#injector = inject(Injector);
599
+ this.#translate = inject(TranslateService);
600
+ this.#auditService = inject(AuditService);
601
+ this.#revModel = toSignal(this.#auditService.revModel$);
602
+ this.showTableview = computed(() => this.#revModel() != null);
648
603
  this.descriptor = computed(() => {
649
- const revModel = this.revModel();
604
+ const revModel = this.#revModel();
650
605
  if (revModel) {
651
606
  const idProperty = revModel.properties?.filter(prop => prop.isId).map(prop => prop.resolvedPropertyName)[0];
652
607
  const revEntModel = model({ id: 'rev', title: 'rev', i18nBase: 'MngRevEntity' });
653
- if (revModel.entityName)
654
- revEntModel.withI18nBase(revModel.entityName);
655
608
  if (idProperty)
656
609
  revEntModel.withIdPropertyUnsafe(idProperty);
657
610
  const desc = tableviewDescriptor(revEntModel);
658
611
  const detailsDescriptor = editorDescriptor({ i18nBase: 'MngRevEntity', tableviewEditorType: TableviewEditorTypeEnum.Details });
659
612
  detailsDescriptor.model.withIdPropertyUnsafe('revEntity.' + idProperty);
660
613
  if (revModel.properties) {
661
- AuditUtil.addColumnsFromModel(desc.table, revModel.properties);
662
- AuditUtil.addFieldsFromModel(detailsDescriptor, revModel.properties);
614
+ auditAddColumnsFromModel(this.#translate, desc.table, revModel.entityName ?? '', revModel.properties);
615
+ auditAddFieldsFromModel(this.#translate, detailsDescriptor, revModel.entityName ?? '', revModel.properties);
663
616
  }
664
617
  detailsDescriptor
665
618
  .addField('entityNameChangesMap')
666
619
  .asCustomComponent(EntityChangesFieldComponent, {
667
620
  fieldWrappers: ['field-no-label'],
668
- inputs: { injector: this.injector }
621
+ inputs: { injector: this.#injector }
669
622
  })
670
623
  .withDisabled();
671
624
  desc.withDetailsDescriptor(detailsDescriptor); // MngRevEntity is extended by MngRevEntityWithChangesDto, so no real harm here
@@ -688,12 +641,16 @@ class AuditRevisionsPageComponent {
688
641
  return [detailsAction];
689
642
  });
690
643
  }
644
+ #injector;
645
+ #translate;
646
+ #auditService;
647
+ #revModel;
691
648
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuditRevisionsPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
692
649
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: AuditRevisionsPageComponent, isStandalone: true, selector: "mng-audit-revisions-page", providers: [AuditRevisionsApiService], ngImport: i0, template: "@if (showTableview()) {\n <mng-tableview [descriptor]=\"descriptor()\" [dataProvider]=\"dataProvider()\" [actions]=\"actions()\"></mng-tableview>\n}\n", dependencies: [{ kind: "component", type: TableviewComponent, selector: "mng-tableview", inputs: ["descriptor", "dataProvider", "actions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
693
650
  }
694
651
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuditRevisionsPageComponent, decorators: [{
695
652
  type: Component,
696
- args: [{ standalone: true, selector: 'mng-audit-revisions-page', imports: [TableviewComponent, AsyncPipe, RouterOutlet, JsonPipe], providers: [AuditRevisionsApiService], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (showTableview()) {\n <mng-tableview [descriptor]=\"descriptor()\" [dataProvider]=\"dataProvider()\" [actions]=\"actions()\"></mng-tableview>\n}\n" }]
653
+ args: [{ standalone: true, selector: 'mng-audit-revisions-page', imports: [TableviewComponent], providers: [AuditRevisionsApiService], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (showTableview()) {\n <mng-tableview [descriptor]=\"descriptor()\" [dataProvider]=\"dataProvider()\" [actions]=\"actions()\"></mng-tableview>\n}\n" }]
697
654
  }] });
698
655
 
699
656
  /**