@mediusinc/mng-commons-audit 3.0.0-rc.0 → 3.0.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -4
- package/assets/i18n/en.json +39 -21
- package/assets/i18n/sl.json +41 -14
- package/esm2022/lib/api/models/entityChange.mjs +9 -9
- package/esm2022/lib/api/models/guiEntityModel.mjs +9 -9
- package/esm2022/lib/api/models/guiPropertyModel.mjs +14 -9
- package/esm2022/lib/api/models/guiPropertyType.mjs +12 -12
- package/esm2022/lib/api/models/guiRelationModel.mjs +9 -9
- package/esm2022/lib/api/models/revEntityWithChangesDto.mjs +9 -9
- package/esm2022/lib/api/models/revEntityWithStateDto.mjs +9 -9
- package/esm2022/lib/api/models/revisionType.mjs +8 -8
- package/esm2022/lib/api/services/audit-revisions-api.service.mjs +42 -21
- package/esm2022/lib/api/services/audit.service.mjs +45 -0
- package/esm2022/lib/audit.routes.mjs +26 -10
- package/esm2022/lib/components/entity-changes-field/entity-changes-field.component.mjs +82 -37
- package/esm2022/lib/components/pages/audit/audit-page.component.mjs +12 -0
- package/esm2022/lib/components/pages/entity-revisions/audit-entity-revisions-page.component.mjs +122 -32
- package/esm2022/lib/components/pages/revisions/audit-revisions-page.component.mjs +52 -47
- package/esm2022/lib/models/config.model.mjs +2 -0
- package/esm2022/lib/models/entity-revision-change-state.model.mjs +8 -0
- package/esm2022/lib/models/entity-revision-changes.model.mjs +8 -0
- package/esm2022/lib/models/new-filter-match-type.model.mjs +19 -0
- package/esm2022/lib/models/rev-entity-detailed.model.mjs +9 -0
- package/esm2022/lib/models/rev-entity.model.mjs +8 -0
- package/esm2022/lib/models/revEntityWithId.model.mjs +10 -0
- package/esm2022/lib/service/module-config.token.mjs +3 -0
- package/esm2022/lib/utils/audit.util.mjs +214 -0
- package/fesm2022/mediusinc-mng-commons-audit.mjs +682 -490
- 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 +6 -5
- package/lib/api/models/guiPropertyType.d.ts +1 -1
- package/lib/api/models/guiRelationModel.d.ts +1 -1
- package/lib/api/models/revEntityWithChangesDto.d.ts +3 -3
- package/lib/api/models/revEntityWithStateDto.d.ts +3 -3
- package/lib/api/models/revisionType.d.ts +1 -1
- package/lib/api/services/audit-revisions-api.service.d.ts +18 -11
- package/lib/api/services/audit.service.d.ts +20 -0
- package/lib/audit.routes.d.ts +3 -2
- package/lib/components/entity-changes-field/entity-changes-field.component.d.ts +14 -8
- package/lib/components/pages/audit/audit-page.component.d.ts +5 -0
- package/lib/components/pages/entity-revisions/audit-entity-revisions-page.component.d.ts +22 -12
- package/lib/components/pages/revisions/audit-revisions-page.component.d.ts +13 -9
- package/lib/models/config.model.d.ts +4 -0
- package/lib/models/entity-revision-change-state.model.d.ts +6 -0
- package/lib/models/entity-revision-changes.model.d.ts +5 -0
- package/lib/models/new-filter-match-type.model.d.ts +17 -0
- package/lib/models/rev-entity-detailed.model.d.ts +10 -0
- package/lib/models/rev-entity.model.d.ts +6 -0
- package/lib/models/revEntityWithId.model.d.ts +4 -0
- package/lib/service/module-config.token.d.ts +3 -0
- package/lib/utils/audit.util.d.ts +13 -0
- package/package.json +2 -3
- package/esm2022/lib/api/models/index.mjs +0 -12
- package/esm2022/lib/api/models/revEntityChangeDto.mjs +0 -52
- package/esm2022/lib/api/models/revEntityDto.mjs +0 -42
- package/esm2022/lib/api/models/revisionTypeEnumDto.mjs +0 -20
- package/esm2022/lib/api/services/audit-entity-revisions-api.service.mjs +0 -47
- package/esm2022/lib/components/pages/entity-revisions/entity-dropdown-page.component.mjs +0 -32
- package/esm2022/lib/models/entity-changes.model.mjs +0 -8
- package/lib/api/models/index.d.ts +0 -11
- package/lib/api/models/revEntityChangeDto.d.ts +0 -25
- package/lib/api/models/revEntityDto.d.ts +0 -20
- package/lib/api/models/revisionTypeEnumDto.d.ts +0 -5
- package/lib/api/services/audit-entity-revisions-api.service.d.ts +0 -14
- package/lib/components/pages/entity-revisions/entity-dropdown-page.component.d.ts +0 -12
- package/lib/models/entity-changes.model.d.ts +0 -4
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Injectable, inject } from '@angular/core';
|
|
2
|
+
import { shareReplay } from 'rxjs';
|
|
3
|
+
import { map } from 'rxjs/operators';
|
|
4
|
+
import { AMngBaseApiService, MngConfigurationService } from '@mediusinc/mng-commons';
|
|
5
|
+
import { MNG_AUDIT_MODULE_CONFIG_IT } from '../../service/module-config.token';
|
|
6
|
+
import { MngGuiEntityModelDto } from '../models/guiEntityModel';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class MngAuditService extends AMngBaseApiService {
|
|
9
|
+
constructor() {
|
|
10
|
+
super();
|
|
11
|
+
this.CACHE_SIZE = 1;
|
|
12
|
+
this.moduleConfig = inject(MNG_AUDIT_MODULE_CONFIG_IT);
|
|
13
|
+
this.configService = MngConfigurationService.get();
|
|
14
|
+
}
|
|
15
|
+
getServiceBasePath() {
|
|
16
|
+
return this.moduleConfig.apiServiceBasePath ?? '';
|
|
17
|
+
}
|
|
18
|
+
getBasePath() {
|
|
19
|
+
return `${this.configService.getConfigValue(this.moduleConfig.apiBasePathConfigKey)}`;
|
|
20
|
+
}
|
|
21
|
+
get revModel$() {
|
|
22
|
+
if (!this.revModelObs) {
|
|
23
|
+
this.revModelObs = this.requestRevModel().pipe(shareReplay(this.CACHE_SIZE));
|
|
24
|
+
}
|
|
25
|
+
return this.revModelObs;
|
|
26
|
+
}
|
|
27
|
+
get auditModel$() {
|
|
28
|
+
if (!this.auditModelObs) {
|
|
29
|
+
this.auditModelObs = this.requestAuditModel().pipe(shareReplay(this.CACHE_SIZE));
|
|
30
|
+
}
|
|
31
|
+
return this.auditModelObs;
|
|
32
|
+
}
|
|
33
|
+
requestRevModel() {
|
|
34
|
+
return this.http.get(this.getUrl('/rev-model'));
|
|
35
|
+
}
|
|
36
|
+
requestAuditModel() {
|
|
37
|
+
return this.http.get(this.getUrl('/audit-models')).pipe(map(response => this.deserializeClassArray(response, MngGuiEntityModelDto)));
|
|
38
|
+
}
|
|
39
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MngAuditService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
40
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MngAuditService }); }
|
|
41
|
+
}
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MngAuditService, decorators: [{
|
|
43
|
+
type: Injectable
|
|
44
|
+
}], ctorParameters: function () { return []; } });
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXBpL3NlcnZpY2VzL2F1ZGl0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFhLFdBQVcsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUFDLGtCQUFrQixFQUFFLHVCQUF1QixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFbkYsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDN0UsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7O0FBRzlELE1BQU0sT0FBTyxlQUFnQixTQUFRLGtCQUFrQjtJQVFuRDtRQUNJLEtBQUssRUFBRSxDQUFDO1FBUkssZUFBVSxHQUFHLENBQUMsQ0FBQztRQUVmLGlCQUFZLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFPL0QsSUFBSSxDQUFDLGFBQWEsR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBRVMsa0JBQWtCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsSUFBSSxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVTLFdBQVc7UUFDakIsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDO0lBQzFGLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUNoRjtRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUNwRjtRQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBRU8sZUFBZTtRQUNuQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pJLENBQUM7OEdBekNRLGVBQWU7a0hBQWYsZUFBZTs7MkZBQWYsZUFBZTtrQkFEM0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtPYnNlcnZhYmxlLCBzaGFyZVJlcGxheX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0FNbmdCYXNlQXBpU2VydmljZSwgTW5nQ29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMnO1xuXG5pbXBvcnQge01OR19BVURJVF9NT0RVTEVfQ09ORklHX0lUfSBmcm9tICcuLi8uLi9zZXJ2aWNlL21vZHVsZS1jb25maWcudG9rZW4nO1xuaW1wb3J0IHtNbmdHdWlFbnRpdHlNb2RlbER0b30gZnJvbSAnLi4vbW9kZWxzL2d1aUVudGl0eU1vZGVsJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1uZ0F1ZGl0U2VydmljZSBleHRlbmRzIEFNbmdCYXNlQXBpU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBDQUNIRV9TSVpFID0gMTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IE1uZ0NvbmZpZ3VyYXRpb25TZXJ2aWNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kdWxlQ29uZmlnID0gaW5qZWN0KE1OR19BVURJVF9NT0RVTEVfQ09ORklHX0lUKTtcblxuICAgIHByaXZhdGUgcmV2TW9kZWxPYnM/OiBPYnNlcnZhYmxlPE1uZ0d1aUVudGl0eU1vZGVsRHRvPjtcbiAgICBwcml2YXRlIGF1ZGl0TW9kZWxPYnM/OiBPYnNlcnZhYmxlPEFycmF5PE1uZ0d1aUVudGl0eU1vZGVsRHRvPj47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlID0gTW5nQ29uZmlndXJhdGlvblNlcnZpY2UuZ2V0KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFNlcnZpY2VCYXNlUGF0aCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ29uZmlnLmFwaVNlcnZpY2VCYXNlUGF0aCA/PyAnJztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0QmFzZVBhdGgoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uZmlnU2VydmljZS5nZXRDb25maWdWYWx1ZSh0aGlzLm1vZHVsZUNvbmZpZy5hcGlCYXNlUGF0aENvbmZpZ0tleSl9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJldk1vZGVsJCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJldk1vZGVsT2JzKSB7XG4gICAgICAgICAgICB0aGlzLnJldk1vZGVsT2JzID0gdGhpcy5yZXF1ZXN0UmV2TW9kZWwoKS5waXBlKHNoYXJlUmVwbGF5KHRoaXMuQ0FDSEVfU0laRSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJldk1vZGVsT2JzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXVkaXRNb2RlbCQoKSB7XG4gICAgICAgIGlmICghdGhpcy5hdWRpdE1vZGVsT2JzKSB7XG4gICAgICAgICAgICB0aGlzLmF1ZGl0TW9kZWxPYnMgPSB0aGlzLnJlcXVlc3RBdWRpdE1vZGVsKCkucGlwZShzaGFyZVJlcGxheSh0aGlzLkNBQ0hFX1NJWkUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hdWRpdE1vZGVsT2JzO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVxdWVzdFJldk1vZGVsKCk6IE9ic2VydmFibGU8TW5nR3VpRW50aXR5TW9kZWxEdG8+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5nZXRVcmwoJy9yZXYtbW9kZWwnKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXF1ZXN0QXVkaXRNb2RlbCgpOiBPYnNlcnZhYmxlPEFycmF5PE1uZ0d1aUVudGl0eU1vZGVsRHRvPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmdldFVybCgnL2F1ZGl0LW1vZGVscycpKS5waXBlKG1hcChyZXNwb25zZSA9PiB0aGlzLmRlc2VyaWFsaXplQ2xhc3NBcnJheShyZXNwb25zZSwgTW5nR3VpRW50aXR5TW9kZWxEdG8pKSk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,12 +1,28 @@
|
|
|
1
1
|
import { RouteBuilder, RoutesBuilder, TableviewRouteBuilder } from '@mediusinc/mng-commons';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { MngAuditRevisionsApiService } from './api/services/audit-revisions-api.service';
|
|
3
|
+
import { MngAuditService } from './api/services/audit.service';
|
|
4
|
+
import { MngAuditPageComponent } from './components/pages/audit/audit-page.component';
|
|
5
|
+
import { MngAuditEntityRevisionsPageComponent } from './components/pages/entity-revisions/audit-entity-revisions-page.component';
|
|
4
6
|
import { MngAuditRevisionsPageComponent } from './components/pages/revisions/audit-revisions-page.component';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
import { MNG_AUDIT_MODULE_CONFIG_IT } from './service/module-config.token';
|
|
8
|
+
export function provideMngAuditRoutes(config) {
|
|
9
|
+
return RoutesBuilder.create()
|
|
10
|
+
.addRouteBuilder(RouteBuilder.create('', MngAuditPageComponent)
|
|
11
|
+
.withProvider(MngAuditService)
|
|
12
|
+
.withProvider(MngAuditService)
|
|
13
|
+
.withProvider(MngAuditRevisionsApiService)
|
|
14
|
+
.withProvider({
|
|
15
|
+
provide: MNG_AUDIT_MODULE_CONFIG_IT,
|
|
16
|
+
useValue: config
|
|
17
|
+
})
|
|
18
|
+
.addChildBuilder(RouteBuilder.createRedirect('', 'revisions', 'full'))
|
|
19
|
+
.addChildBuilder(TableviewRouteBuilder.fromComponent('revisions', MngAuditRevisionsPageComponent)
|
|
20
|
+
.withMenuItem('pi pi-history', 'pages.revisions.title')
|
|
21
|
+
.withTitle('pages.revisions.title'))
|
|
22
|
+
.addChildBuilder(RouteBuilder.create('entity-revisions', MngAuditEntityRevisionsPageComponent)
|
|
23
|
+
.withMenuItem('pi pi-history', 'pages.entityRevisions.title')
|
|
24
|
+
.withTitle('pages.entityRevisions.title'))
|
|
25
|
+
.addChildBuilder(TableviewRouteBuilder.fromComponent('entity-revisions/:entityClass', MngAuditEntityRevisionsPageComponent).withTitle('pages.entityRevisions.title')))
|
|
26
|
+
.build();
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQucm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hdWRpdC5yb3V0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRixPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUN2RixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDcEYsT0FBTyxFQUFDLG9DQUFvQyxFQUFDLE1BQU0sMkVBQTJFLENBQUM7QUFDL0gsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sNkRBQTZELENBQUM7QUFFM0csT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFFekUsTUFBTSxVQUFVLHFCQUFxQixDQUFDLE1BQTRCO0lBQzlELE9BQU8sYUFBYSxDQUFDLE1BQU0sRUFBRTtTQUN4QixlQUFlLENBQ1osWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUscUJBQXFCLENBQUM7U0FDekMsWUFBWSxDQUFDLGVBQWUsQ0FBQztTQUM3QixZQUFZLENBQUMsZUFBZSxDQUFDO1NBQzdCLFlBQVksQ0FBQywyQkFBMkIsQ0FBQztTQUN6QyxZQUFZLENBQUM7UUFDVixPQUFPLEVBQUUsMEJBQTBCO1FBQ25DLFFBQVEsRUFBRSxNQUFNO0tBQ25CLENBQUM7U0FDRCxlQUFlLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3JFLGVBQWUsQ0FDWixxQkFBcUIsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLDhCQUE4QixDQUFDO1NBQzNFLFlBQVksQ0FBQyxlQUFlLEVBQUUsdUJBQXVCLENBQUM7U0FDdEQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLENBQzFDO1NBQ0EsZUFBZSxDQUNaLFlBQVksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsb0NBQW9DLENBQUM7U0FDeEUsWUFBWSxDQUFDLGVBQWUsRUFBRSw2QkFBNkIsQ0FBQztTQUM1RCxTQUFTLENBQUMsNkJBQTZCLENBQUMsQ0FDaEQ7U0FDQSxlQUFlLENBQ1oscUJBQXFCLENBQUMsYUFBYSxDQUFDLCtCQUErQixFQUFFLG9DQUFvQyxDQUFDLENBQUMsU0FBUyxDQUFDLDZCQUE2QixDQUFDLENBQ3RKLENBQ1I7U0FDQSxLQUFLLEVBQUUsQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSb3V0ZXN9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7Um91dGVCdWlsZGVyLCBSb3V0ZXNCdWlsZGVyLCBUYWJsZXZpZXdSb3V0ZUJ1aWxkZXJ9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMnO1xuXG5pbXBvcnQge01uZ0F1ZGl0UmV2aXNpb25zQXBpU2VydmljZX0gZnJvbSAnLi9hcGkvc2VydmljZXMvYXVkaXQtcmV2aXNpb25zLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7TW5nQXVkaXRTZXJ2aWNlfSBmcm9tICcuL2FwaS9zZXJ2aWNlcy9hdWRpdC5zZXJ2aWNlJztcbmltcG9ydCB7TW5nQXVkaXRQYWdlQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvcGFnZXMvYXVkaXQvYXVkaXQtcGFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHtNbmdBdWRpdEVudGl0eVJldmlzaW9uc1BhZ2VDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9wYWdlcy9lbnRpdHktcmV2aXNpb25zL2F1ZGl0LWVudGl0eS1yZXZpc2lvbnMtcGFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHtNbmdBdWRpdFJldmlzaW9uc1BhZ2VDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9wYWdlcy9yZXZpc2lvbnMvYXVkaXQtcmV2aXNpb25zLXBhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7TW5nQXVkaXRNb2R1bGVDb25maWd9IGZyb20gJy4vbW9kZWxzL2NvbmZpZy5tb2RlbCc7XG5pbXBvcnQge01OR19BVURJVF9NT0RVTEVfQ09ORklHX0lUfSBmcm9tICcuL3NlcnZpY2UvbW9kdWxlLWNvbmZpZy50b2tlbic7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTW5nQXVkaXRSb3V0ZXMoY29uZmlnOiBNbmdBdWRpdE1vZHVsZUNvbmZpZyk6IFJvdXRlcyB7XG4gICAgcmV0dXJuIFJvdXRlc0J1aWxkZXIuY3JlYXRlKClcbiAgICAgICAgLmFkZFJvdXRlQnVpbGRlcihcbiAgICAgICAgICAgIFJvdXRlQnVpbGRlci5jcmVhdGUoJycsIE1uZ0F1ZGl0UGFnZUNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAud2l0aFByb3ZpZGVyKE1uZ0F1ZGl0U2VydmljZSlcbiAgICAgICAgICAgICAgICAud2l0aFByb3ZpZGVyKE1uZ0F1ZGl0U2VydmljZSlcbiAgICAgICAgICAgICAgICAud2l0aFByb3ZpZGVyKE1uZ0F1ZGl0UmV2aXNpb25zQXBpU2VydmljZSlcbiAgICAgICAgICAgICAgICAud2l0aFByb3ZpZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTU5HX0FVRElUX01PRFVMRV9DT05GSUdfSVQsXG4gICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiBjb25maWdcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hZGRDaGlsZEJ1aWxkZXIoUm91dGVCdWlsZGVyLmNyZWF0ZVJlZGlyZWN0KCcnLCAncmV2aXNpb25zJywgJ2Z1bGwnKSlcbiAgICAgICAgICAgICAgICAuYWRkQ2hpbGRCdWlsZGVyKFxuICAgICAgICAgICAgICAgICAgICBUYWJsZXZpZXdSb3V0ZUJ1aWxkZXIuZnJvbUNvbXBvbmVudCgncmV2aXNpb25zJywgTW5nQXVkaXRSZXZpc2lvbnNQYWdlQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhNZW51SXRlbSgncGkgcGktaGlzdG9yeScsICdwYWdlcy5yZXZpc2lvbnMudGl0bGUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhUaXRsZSgncGFnZXMucmV2aXNpb25zLnRpdGxlJylcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmFkZENoaWxkQnVpbGRlcihcbiAgICAgICAgICAgICAgICAgICAgUm91dGVCdWlsZGVyLmNyZWF0ZSgnZW50aXR5LXJldmlzaW9ucycsIE1uZ0F1ZGl0RW50aXR5UmV2aXNpb25zUGFnZUNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoTWVudUl0ZW0oJ3BpIHBpLWhpc3RvcnknLCAncGFnZXMuZW50aXR5UmV2aXNpb25zLnRpdGxlJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoVGl0bGUoJ3BhZ2VzLmVudGl0eVJldmlzaW9ucy50aXRsZScpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hZGRDaGlsZEJ1aWxkZXIoXG4gICAgICAgICAgICAgICAgICAgIFRhYmxldmlld1JvdXRlQnVpbGRlci5mcm9tQ29tcG9uZW50KCdlbnRpdHktcmV2aXNpb25zLzplbnRpdHlDbGFzcycsIE1uZ0F1ZGl0RW50aXR5UmV2aXNpb25zUGFnZUNvbXBvbmVudCkud2l0aFRpdGxlKCdwYWdlcy5lbnRpdHlSZXZpc2lvbnMudGl0bGUnKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuYnVpbGQoKTtcbn1cbiJdfQ==
|
|
@@ -1,62 +1,107 @@
|
|
|
1
|
-
import { NgForOf } from '@angular/common';
|
|
2
|
-
import { Component } from '@angular/core';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
1
|
+
import { AsyncPipe, NgForOf, NgIf } from '@angular/common';
|
|
2
|
+
import { Component, DestroyRef, inject, Injector, Input } from '@angular/core';
|
|
3
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
|
+
import { AMngFormlyCustomFieldComponent, MngTableComponent, TableDescriptor, TablePaginationModeEnum } from '@mediusinc/mng-commons';
|
|
5
|
+
import { BehaviorSubject } from 'rxjs';
|
|
6
|
+
import { MngRevisionTypeDto } from '../../api/models/revisionType';
|
|
7
|
+
import { MngAuditService } from '../../api/services/audit.service';
|
|
8
|
+
import { MngEntityRevisionChangeState } from '../../models/entity-revision-change-state.model';
|
|
9
|
+
import { MngEntityRevisionChanges } from '../../models/entity-revision-changes.model';
|
|
10
|
+
import { AuditUtil } from '../../utils/audit.util';
|
|
7
11
|
import * as i0 from "@angular/core";
|
|
8
|
-
export class EntityChangesFieldComponent extends
|
|
12
|
+
export class EntityChangesFieldComponent extends AMngFormlyCustomFieldComponent {
|
|
9
13
|
constructor() {
|
|
10
14
|
super(...arguments);
|
|
15
|
+
this.destroyRef = inject(DestroyRef);
|
|
11
16
|
this.entityChanges = [];
|
|
17
|
+
this.modelFetched = new BehaviorSubject(false);
|
|
18
|
+
this.auditModel = [];
|
|
12
19
|
}
|
|
13
20
|
ngOnInit() {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
this.fieldValue = this.formControl.value;
|
|
22
|
+
this.injector
|
|
23
|
+
?.get(MngAuditService, undefined, { optional: true })
|
|
24
|
+
?.auditModel$.pipe(takeUntilDestroyed(this.destroyRef))
|
|
25
|
+
.subscribe({
|
|
26
|
+
next: model => {
|
|
27
|
+
this.auditModel = model;
|
|
28
|
+
if (this.fieldValue) {
|
|
29
|
+
for (const key of Object.keys(this.fieldValue)) {
|
|
30
|
+
const ec = new MngEntityRevisionChanges();
|
|
31
|
+
ec.entityType = key;
|
|
32
|
+
ec.items = [];
|
|
33
|
+
for (const change of this.fieldValue[key]) {
|
|
34
|
+
if (change.revType === MngRevisionTypeDto.Add && change.entityNewState) {
|
|
35
|
+
const item = new MngEntityRevisionChangeState();
|
|
36
|
+
item.revType = change.revType;
|
|
37
|
+
item.color = 'green';
|
|
38
|
+
Object.entries(change.entityNewState).forEach(([key, value]) => (item[key] = value));
|
|
39
|
+
ec.items.push(item);
|
|
40
|
+
}
|
|
41
|
+
else if (change.revType === MngRevisionTypeDto.Del && change.entityOldState) {
|
|
42
|
+
const item = new MngEntityRevisionChangeState();
|
|
43
|
+
item.revType = change.revType;
|
|
44
|
+
item.color = 'red';
|
|
45
|
+
Object.entries(change.entityOldState).forEach(([key, value]) => (item[key] = value));
|
|
46
|
+
ec.items.push(item);
|
|
47
|
+
}
|
|
48
|
+
else if (change.revType === MngRevisionTypeDto.Mod && change.entityOldState && change.entityNewState) {
|
|
49
|
+
const itemOld = new MngEntityRevisionChangeState();
|
|
50
|
+
itemOld.revType = change.revType;
|
|
51
|
+
itemOld.color = 'red';
|
|
52
|
+
Object.entries(change.entityOldState).forEach(([key, value]) => (itemOld[key] = value));
|
|
53
|
+
const itemNew = new MngEntityRevisionChangeState();
|
|
54
|
+
itemNew.revType = change.revType;
|
|
55
|
+
itemNew.color = 'green';
|
|
56
|
+
Object.entries(change.entityNewState).forEach(([key, value]) => (itemNew[key] = value));
|
|
57
|
+
ec.items.push(itemOld);
|
|
58
|
+
ec.items.push(itemNew);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
this.entityChanges.push(ec);
|
|
62
|
+
}
|
|
63
|
+
this.modelFetched.next(true);
|
|
28
64
|
}
|
|
29
65
|
}
|
|
30
|
-
|
|
31
|
-
}
|
|
66
|
+
});
|
|
32
67
|
}
|
|
33
|
-
|
|
68
|
+
createDescriptor(entityChanges) {
|
|
34
69
|
const changedFields = [];
|
|
35
|
-
if (entityChanges.items && entityChanges.items[0].revType ===
|
|
70
|
+
if (entityChanges.items && entityChanges.items[0].revType === MngRevisionTypeDto.Mod) {
|
|
36
71
|
for (const key in entityChanges.items[0]) {
|
|
37
72
|
if (entityChanges.items[0][key] !== entityChanges.items[1][key]) {
|
|
38
73
|
changedFields.push(key);
|
|
39
74
|
}
|
|
40
75
|
}
|
|
41
76
|
}
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
77
|
+
const guiEntityModel = this.auditModel.filter(m => m.entityName === entityChanges.entityType)[0];
|
|
78
|
+
const desc = new TableDescriptor(MngEntityRevisionChangeState, undefined, undefined, guiEntityModel.entityName).withClassName('py-2');
|
|
79
|
+
if (guiEntityModel.entityName) {
|
|
80
|
+
desc.withTitle(guiEntityModel.entityName);
|
|
81
|
+
}
|
|
82
|
+
desc.addColumn('revType').withTitle('MngEntityRevisionChangeState.properties.revType').asEnum(MngRevisionTypeDto);
|
|
83
|
+
if (guiEntityModel.properties) {
|
|
84
|
+
AuditUtil.addColumnsFromModel(desc, guiEntityModel.properties, undefined, false, false);
|
|
85
|
+
}
|
|
86
|
+
desc.withRowClassName(undefined, (_, item) => (item ? (item.color === 'green' ? 'audit-row-added' : 'audit-row-deleted') : ''));
|
|
87
|
+
desc.columns.forEach(col => {
|
|
49
88
|
if (changedFields.length > 0 && changedFields.some(val => col.property === val)) {
|
|
50
89
|
col.withClassName('audit-cell');
|
|
51
90
|
}
|
|
52
91
|
});
|
|
53
|
-
|
|
92
|
+
desc.withPaginationMode(TablePaginationModeEnum.Pagination);
|
|
93
|
+
desc.withCurrentColumnsReorderable();
|
|
94
|
+
desc.withCurrentColumnsToggleable();
|
|
95
|
+
desc.withDataKey(`EntityChangeField_${entityChanges.entityType ?? 'default'}`);
|
|
96
|
+
return desc;
|
|
54
97
|
}
|
|
55
98
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EntityChangesFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
56
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: EntityChangesFieldComponent, isStandalone: true, selector: "mng-entity-changes-field", usesInheritance: true, ngImport: i0, template: "<mng-table *ngFor=\"let ec of entityChanges\" [items]=\"ec.items\" [descriptor]=\"
|
|
99
|
+
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" }] }); }
|
|
57
100
|
}
|
|
58
101
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EntityChangesFieldComponent, decorators: [{
|
|
59
102
|
type: Component,
|
|
60
|
-
args: [{ standalone: true, selector: 'mng-entity-changes-field', imports: [NgForOf, MngTableComponent], template: "<mng-table *ngFor=\"let ec of entityChanges\" [items]=\"ec.items\" [descriptor]=\"
|
|
61
|
-
}]
|
|
62
|
-
|
|
103
|
+
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"] }]
|
|
104
|
+
}], propDecorators: { injector: [{
|
|
105
|
+
type: Input
|
|
106
|
+
}] } });
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWNoYW5nZXMtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2VudGl0eS1jaGFuZ2VzLWZpZWxkL2VudGl0eS1jaGFuZ2VzLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lbnRpdHktY2hhbmdlcy1maWVsZC9lbnRpdHktY2hhbmdlcy1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RCxPQUFPLEVBQUMsOEJBQThCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLHVCQUF1QixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFbkksT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUlyQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0saURBQWlELENBQUM7QUFDN0YsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDOztBQVNqRCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsOEJBQThCO0lBUC9FOztRQVVZLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENB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QUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsRUFBRTtnQkFDN0UsR0FBRyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNuQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLGFBQWEsQ0FBQyxVQUFVLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQztRQUUvRSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOzhHQWpHUSwyQkFBMkI7a0dBQTNCLDJCQUEyQiw2SUN2QnhDLHlWQVFBLDRXRFdjLE9BQU8sbUhBQUUsaUJBQWlCLHliQUFFLElBQUksd0ZBQUUsU0FBUzs7MkZBSTVDLDJCQUEyQjtrQkFQdkMsU0FBUztpQ0FDTSxJQUFJLFlBQ04sMEJBQTBCLFdBQzNCLENBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxTQUFTLENBQUM7OEJBS3RDLFFBQVE7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FzeW5jUGlwZSwgTmdGb3JPZiwgTmdJZn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q29tcG9uZW50LCBEZXN0cm95UmVmLCBpbmplY3QsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmltcG9ydCB7QU1uZ0Zvcm1seUN1c3RvbUZpZWxkQ29tcG9uZW50LCBNbmdUYWJsZUNvbXBvbmVudCwgVGFibGVEZXNjcmlwdG9yLCBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucyc7XG5cbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtNbmdFbnRpdHlDaGFuZ2VEdG99IGZyb20gJy4uLy4uL2FwaS9tb2RlbHMvZW50aXR5Q2hhbmdlJztcbmltcG9ydCB7TW5nR3VpRW50aXR5TW9kZWxEdG99IGZyb20gJy4uLy4uL2FwaS9tb2RlbHMvZ3VpRW50aXR5TW9kZWwnO1xuaW1wb3J0IHtNbmdSZXZpc2lvblR5cGVEdG99IGZyb20gJy4uLy4uL2FwaS9tb2RlbHMvcmV2aXNpb25UeXBlJztcbmltcG9ydCB7TW5nQXVkaXRTZXJ2aWNlfSBmcm9tICcuLi8uLi9hcGkvc2VydmljZXMvYXVkaXQuc2VydmljZSc7XG5pbXBvcnQge01uZ0VudGl0eVJldmlzaW9uQ2hhbmdlU3RhdGV9IGZyb20gJy4uLy4uL21vZGVscy9lbnRpdHktcmV2aXNpb24tY2hhbmdlLXN0YXRlLm1vZGVsJztcbmltcG9ydCB7TW5nRW50aXR5UmV2aXNpb25DaGFuZ2VzfSBmcm9tICcuLi8uLi9tb2RlbHMvZW50aXR5LXJldmlzaW9uLWNoYW5nZXMubW9kZWwnO1xuaW1wb3J0IHtBdWRpdFV0aWx9IGZyb20gJy4uLy4uL3V0aWxzL2F1ZGl0LnV0aWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWVudGl0eS1jaGFuZ2VzLWZpZWxkJyxcbiAgICBpbXBvcnRzOiBbTmdGb3JPZiwgTW5nVGFibGVDb21wb25lbnQsIE5nSWYsIEFzeW5jUGlwZV0sXG4gICAgc3R5bGVVcmxzOiBbJ2VudGl0eS1jaGFuZ2VzLWZpZWxkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgdGVtcGxhdGVVcmw6ICdlbnRpdHktY2hhbmdlcy1maWVsZC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRW50aXR5Q2hhbmdlc0ZpZWxkQ29tcG9uZW50IGV4dGVuZHMgQU1uZ0Zvcm1seUN1c3RvbUZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBwdWJsaWMgaW5qZWN0b3I/OiBJbmplY3RvcjtcblxuICAgIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIHB1YmxpYyBlbnRpdHlDaGFuZ2VzOiBNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZXNbXSA9IFtdO1xuICAgIHB1YmxpYyBtb2RlbEZldGNoZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIHByaXZhdGUgYXVkaXRNb2RlbDogTW5nR3VpRW50aXR5TW9kZWxEdG9bXSA9IFtdO1xuICAgIHByaXZhdGUgZmllbGRWYWx1ZT86IHtba2V5OiBzdHJpbmddOiBBcnJheTxNbmdFbnRpdHlDaGFuZ2VEdG8+fTtcblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpZWxkVmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlIGFzIHtba2V5OiBzdHJpbmddOiBBcnJheTxNbmdFbnRpdHlDaGFuZ2VEdG8+fTtcbiAgICAgICAgdGhpcy5pbmplY3RvclxuICAgICAgICAgICAgPy5nZXQoTW5nQXVkaXRTZXJ2aWNlLCB1bmRlZmluZWQsIHtvcHRpb25hbDogdHJ1ZX0pXG4gICAgICAgICAgICA/LmF1ZGl0TW9kZWwkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBtb2RlbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXVkaXRNb2RlbCA9IG1vZGVsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpZWxkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuZmllbGRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlYyA9IG5ldyBNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYy5lbnRpdHlUeXBlID0ga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjLml0ZW1zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgdGhpcy5maWVsZFZhbHVlW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZS5yZXZUeXBlID09PSBNbmdSZXZpc2lvblR5cGVEdG8uQWRkICYmIGNoYW5nZS5lbnRpdHlOZXdTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IG5ldyBNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnJldlR5cGUgPSBjaGFuZ2UucmV2VHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29sb3IgPSAnZ3JlZW4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlLmVudGl0eU5ld1N0YXRlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IChpdGVtW2tleV0gPSB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWMuaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2UucmV2VHlwZSA9PT0gTW5nUmV2aXNpb25UeXBlRHRvLkRlbCAmJiBjaGFuZ2UuZW50aXR5T2xkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBuZXcgTW5nRW50aXR5UmV2aXNpb25DaGFuZ2VTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5yZXZUeXBlID0gY2hhbmdlLnJldlR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbG9yID0gJ3JlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2UuZW50aXR5T2xkU3RhdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gKGl0ZW1ba2V5XSA9IHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZXZUeXBlID09PSBNbmdSZXZpc2lvblR5cGVEdG8uTW9kICYmIGNoYW5nZS5lbnRpdHlPbGRTdGF0ZSAmJiBjaGFuZ2UuZW50aXR5TmV3U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1PbGQgPSBuZXcgTW5nRW50aXR5UmV2aXNpb25DaGFuZ2VTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU9sZC5yZXZUeXBlID0gY2hhbmdlLnJldlR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtT2xkLmNvbG9yID0gJ3JlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2UuZW50aXR5T2xkU3RhdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gKGl0ZW1PbGRba2V5XSA9IHZhbHVlKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1OZXcgPSBuZXcgTW5nRW50aXR5UmV2aXNpb25DaGFuZ2VTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU5ldy5yZXZUeXBlID0gY2hhbmdlLnJldlR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTmV3LmNvbG9yID0gJ2dyZWVuJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZS5lbnRpdHlOZXdTdGF0ZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiAoaXRlbU5ld1trZXldID0gdmFsdWUpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWMuaXRlbXMucHVzaChpdGVtT2xkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjLml0ZW1zLnB1c2goaXRlbU5ldyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRpdHlDaGFuZ2VzLnB1c2goZWMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbEZldGNoZWQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEZXNjcmlwdG9yKGVudGl0eUNoYW5nZXM6IE1uZ0VudGl0eVJldmlzaW9uQ2hhbmdlcykge1xuICAgICAgICBjb25zdCBjaGFuZ2VkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBpZiAoZW50aXR5Q2hhbmdlcy5pdGVtcyAmJiBlbnRpdHlDaGFuZ2VzLml0ZW1zWzBdLnJldlR5cGUgPT09IE1uZ1JldmlzaW9uVHlwZUR0by5Nb2QpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGVudGl0eUNoYW5nZXMuaXRlbXNbMF0pIHtcbiAgICAgICAgICAgICAgICBpZiAoZW50aXR5Q2hhbmdlcy5pdGVtc1swXVtrZXldICE9PSBlbnRpdHlDaGFuZ2VzLml0ZW1zWzFdW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZEZpZWxkcy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ3VpRW50aXR5TW9kZWwgPSB0aGlzLmF1ZGl0TW9kZWwuZmlsdGVyKG0gPT4gbS5lbnRpdHlOYW1lID09PSBlbnRpdHlDaGFuZ2VzLmVudGl0eVR5cGUpWzBdO1xuXG4gICAgICAgIGNvbnN0IGRlc2MgPSBuZXcgVGFibGVEZXNjcmlwdG9yKE1uZ0VudGl0eVJldmlzaW9uQ2hhbmdlU3RhdGUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBndWlFbnRpdHlNb2RlbC5lbnRpdHlOYW1lKS53aXRoQ2xhc3NOYW1lKCdweS0yJyk7XG4gICAgICAgIGlmIChndWlFbnRpdHlNb2RlbC5lbnRpdHlOYW1lKSB7XG4gICAgICAgICAgICBkZXNjLndpdGhUaXRsZShndWlFbnRpdHlNb2RlbC5lbnRpdHlOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlc2MuYWRkQ29sdW1uKCdyZXZUeXBlJykud2l0aFRpdGxlKCdNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZVN0YXRlLnByb3BlcnRpZXMucmV2VHlwZScpLmFzRW51bShNbmdSZXZpc2lvblR5cGVEdG8pO1xuXG4gICAgICAgIGlmIChndWlFbnRpdHlNb2RlbC5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBBdWRpdFV0aWwuYWRkQ29sdW1uc0Zyb21Nb2RlbChkZXNjLCBndWlFbnRpdHlNb2RlbC5wcm9wZXJ0aWVzLCB1bmRlZmluZWQsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXNjLndpdGhSb3dDbGFzc05hbWUodW5kZWZpbmVkLCAoXywgaXRlbSkgPT4gKGl0ZW0gPyAoaXRlbS5jb2xvciA9PT0gJ2dyZWVuJyA/ICdhdWRpdC1yb3ctYWRkZWQnIDogJ2F1ZGl0LXJvdy1kZWxldGVkJykgOiAnJykpO1xuICAgICAgICBkZXNjLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgaWYgKGNoYW5nZWRGaWVsZHMubGVuZ3RoID4gMCAmJiBjaGFuZ2VkRmllbGRzLnNvbWUodmFsID0+IGNvbC5wcm9wZXJ0eSA9PT0gdmFsKSkge1xuICAgICAgICAgICAgICAgIGNvbC53aXRoQ2xhc3NOYW1lKCdhdWRpdC1jZWxsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2Mud2l0aFBhZ2luYXRpb25Nb2RlKFRhYmxlUGFnaW5hdGlvbk1vZGVFbnVtLlBhZ2luYXRpb24pO1xuICAgICAgICBkZXNjLndpdGhDdXJyZW50Q29sdW1uc1Jlb3JkZXJhYmxlKCk7XG4gICAgICAgIGRlc2Mud2l0aEN1cnJlbnRDb2x1bW5zVG9nZ2xlYWJsZSgpO1xuICAgICAgICBkZXNjLndpdGhEYXRhS2V5KGBFbnRpdHlDaGFuZ2VGaWVsZF8ke2VudGl0eUNoYW5nZXMuZW50aXR5VHlwZSA/PyAnZGVmYXVsdCd9YCk7XG5cbiAgICAgICAgcmV0dXJuIGRlc2M7XG4gICAgfVxufVxuIiwiPGRpdiAqbmdJZj1cIm1vZGVsRmV0Y2hlZCB8IGFzeW5jOyBlbHNlIGxvYWRpbmdcIj5cbiAgICA8bW5nLXRhYmxlICpuZ0Zvcj1cImxldCBlYyBvZiBlbnRpdHlDaGFuZ2VzXCIgW2l0ZW1zXT1cImVjLml0ZW1zXCIgW2Rlc2NyaXB0b3JdPVwiY3JlYXRlRGVzY3JpcHRvcihlYylcIj48L21uZy10YWJsZT5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNsb2FkaW5nPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNwaW4gcGktc3Bpbm5lclwiIHN0eWxlPVwiZm9udC1zaXplOiAycmVtXCI+PC9pPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { RouterOutlet } from '@angular/router';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class MngAuditPageComponent {
|
|
5
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MngAuditPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6
|
+
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"] }] }); }
|
|
7
|
+
}
|
|
8
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MngAuditPageComponent, decorators: [{
|
|
9
|
+
type: Component,
|
|
10
|
+
args: [{ standalone: true, selector: 'mng-audit-page', imports: [RouterOutlet], template: "<router-outlet></router-outlet>\n" }]
|
|
11
|
+
}] });
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtcGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcGFnZXMvYXVkaXQvYXVkaXQtcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcGFnZXMvYXVkaXQvYXVkaXQtcGFnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7QUFRN0MsTUFBTSxPQUFPLHFCQUFxQjs4R0FBckIscUJBQXFCO2tHQUFyQixxQkFBcUIsMEVDVGxDLG1DQUNBLDRDREtjLFlBQVk7OzJGQUdiLHFCQUFxQjtrQkFOakMsU0FBUztpQ0FDTSxJQUFJLFlBQ04sZ0JBQWdCLFdBQ2pCLENBQUMsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJPdXRsZXR9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdtbmctYXVkaXQtcGFnZScsXG4gICAgaW1wb3J0czogW1JvdXRlck91dGxldF0sXG4gICAgdGVtcGxhdGVVcmw6ICdhdWRpdC1wYWdlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBNbmdBdWRpdFBhZ2VDb21wb25lbnQge31cbiIsIjxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cbiJdfQ==
|
package/esm2022/lib/components/pages/entity-revisions/audit-entity-revisions-page.component.mjs
CHANGED
|
@@ -1,43 +1,133 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AsyncPipe, NgIf } from '@angular/common';
|
|
2
|
+
import { Component, DestroyRef, inject, signal } from '@angular/core';
|
|
3
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
|
+
import { FormsModule } from '@angular/forms';
|
|
5
|
+
import { Router } from '@angular/router';
|
|
6
|
+
import { FormlyModule } from '@ngx-formly/core';
|
|
7
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
8
|
+
import { combineLatest, throwError } from 'rxjs';
|
|
2
9
|
import { map } from 'rxjs/operators';
|
|
3
|
-
import { AMngTableviewRouteComponent, ActionDataProviderUtil,
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
10
|
+
import { AMngTableviewRouteComponent, ActionDataProviderUtil, ActionEditorDescriptor, ActionEditorSubmitDescriptor, ActionEditorSubmitTypeEnum, ActionPositionEnum, LookupDataProvider, MediusQueryResult, MngDropdownComponent, MngErrorInternal, MngTableviewRouteComponent, TableviewActionDefaultCategories, TableviewDataProvider, TableviewDescriptor } from '@mediusinc/mng-commons';
|
|
11
|
+
import { MngGuiEntityModelDto } from '../../../api/models/guiEntityModel';
|
|
12
|
+
import { MngAuditRevisionsApiService } from '../../../api/services/audit-revisions-api.service';
|
|
13
|
+
import { MngAuditService } from '../../../api/services/audit.service';
|
|
14
|
+
import { MngRevEntityWithId } from '../../../models/revEntityWithId.model';
|
|
15
|
+
import { AuditUtil } from '../../../utils/audit.util';
|
|
6
16
|
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "
|
|
8
|
-
import * as i2 from "
|
|
9
|
-
|
|
10
|
-
|
|
17
|
+
import * as i1 from "@angular/router";
|
|
18
|
+
import * as i2 from "@angular/forms";
|
|
19
|
+
import * as i3 from "@ngx-translate/core";
|
|
20
|
+
export class MngAuditEntityRevisionsPageComponent extends AMngTableviewRouteComponent {
|
|
21
|
+
constructor(router) {
|
|
11
22
|
super();
|
|
12
|
-
this.
|
|
13
|
-
this.
|
|
14
|
-
this.
|
|
23
|
+
this.router = router;
|
|
24
|
+
this.destroyRef = inject(DestroyRef);
|
|
25
|
+
this.auditService = inject(MngAuditService);
|
|
26
|
+
this.revisisonsApiService = inject(MngAuditRevisionsApiService);
|
|
27
|
+
this.showTableview = signal(false);
|
|
28
|
+
this.revisionEntitiesLookupProvider = new LookupDataProvider(MngGuiEntityModelDto).withLookup(() => this.auditService.auditModel$.pipe(map(model => model.sort((m1, m2) => {
|
|
29
|
+
if (m1.entityName && m2.entityName) {
|
|
30
|
+
return m1.entityName.localeCompare(m2.entityName);
|
|
31
|
+
}
|
|
32
|
+
else if (m1.entityName && !m2.entityName) {
|
|
33
|
+
return 1;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
return -1;
|
|
37
|
+
}
|
|
38
|
+
}))));
|
|
15
39
|
}
|
|
16
|
-
|
|
17
|
-
|
|
40
|
+
ngOnInit() {
|
|
41
|
+
this.route.paramMap.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {
|
|
42
|
+
const entityClass = params.get('entityClass');
|
|
43
|
+
if (entityClass) {
|
|
44
|
+
combineLatest([this.auditService.auditModel$, this.auditService.revModel$]).subscribe(([entities, revModel]) => {
|
|
45
|
+
this.revModel = revModel;
|
|
46
|
+
for (const e of entities) {
|
|
47
|
+
if (e.entityName === entityClass) {
|
|
48
|
+
this.selectedRevisionEntity = e;
|
|
49
|
+
super.ngOnInit();
|
|
50
|
+
setTimeout(() => this.showTableview.set(true));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
onRevisionEntityChange() {
|
|
58
|
+
this.showTableview.set(false);
|
|
59
|
+
if (this.selectedRevisionEntity) {
|
|
60
|
+
this.router.navigate(['/audit/entity-revisions/' + this.selectedRevisionEntity.entityName]);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.router.navigate(['/audit/entity-revisions/']);
|
|
64
|
+
}
|
|
18
65
|
}
|
|
19
66
|
createTableviewDescriptor() {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
67
|
+
if (!this.revModel || !this.selectedRevisionEntity?.entityName) {
|
|
68
|
+
throw new MngErrorInternal('No revision model or revision entity is provided for tableview.');
|
|
69
|
+
}
|
|
70
|
+
const desc = new TableviewDescriptor(MngRevEntityWithId, 'mergedId', undefined, this.selectedRevisionEntity.entityName);
|
|
71
|
+
AuditUtil.buildDescriptorForEntityRevision(desc, this.revModel, this.selectedRevisionEntity);
|
|
72
|
+
desc.table.withColumnsResizable();
|
|
73
|
+
desc.table.withCurrentColumnsReorderable();
|
|
74
|
+
desc.table.withCurrentColumnsToggleable();
|
|
75
|
+
desc.table.withDataKey(`EntityRevisionsPage_${this.selectedRevisionEntity.entityName}`);
|
|
76
|
+
return desc;
|
|
77
|
+
}
|
|
78
|
+
createTableviewDataProvider() {
|
|
79
|
+
if (!this.revModel || !this.selectedRevisionEntity?.entityName) {
|
|
80
|
+
throw new MngErrorInternal('No revision model or revision entity is provided for tableview.');
|
|
81
|
+
}
|
|
82
|
+
const entityName = this.selectedRevisionEntity.entityName;
|
|
83
|
+
return new TableviewDataProvider(MngRevEntityWithId).withGetAll(qp => this.selectedRevisionEntity?.entityName
|
|
84
|
+
? combineLatest([
|
|
85
|
+
this.revisisonsApiService.countRevisionsWithStateForEntityType(qp, entityName),
|
|
86
|
+
this.revisisonsApiService.listRevisionsWithStateForEntityType(qp, entityName)
|
|
87
|
+
]).pipe(map(([count, values]) => {
|
|
88
|
+
const revEntityWithStateAndIdList = [];
|
|
89
|
+
for (const revEntityWithState of values) {
|
|
90
|
+
const revEntityWithStateAndId = new MngRevEntityWithId();
|
|
91
|
+
revEntityWithStateAndId.mergedId = revEntityWithState.revEntity?.['rev'] + '_' + revEntityWithState.entityState?.['id'];
|
|
92
|
+
revEntityWithStateAndId.revType = revEntityWithState.revType;
|
|
93
|
+
revEntityWithStateAndId.revEntity = revEntityWithState.revEntity;
|
|
94
|
+
revEntityWithStateAndId.entityState = revEntityWithState.entityState;
|
|
95
|
+
revEntityWithStateAndId.entityClassName = revEntityWithState.entityClassName;
|
|
96
|
+
revEntityWithStateAndIdList.push(revEntityWithStateAndId);
|
|
97
|
+
}
|
|
98
|
+
return MediusQueryResult.fromArray(revEntityWithStateAndIdList, count);
|
|
99
|
+
}))
|
|
100
|
+
: throwError(() => new MngErrorInternal('No revision entity is provided for list.')));
|
|
23
101
|
}
|
|
24
102
|
createActionDescriptors() {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
103
|
+
if (!this.revModel || !this.selectedRevisionEntity?.entityName) {
|
|
104
|
+
throw new MngErrorInternal('No revision model or revision entity is provided for tableview.');
|
|
105
|
+
}
|
|
106
|
+
const entityName = this.selectedRevisionEntity.entityName;
|
|
107
|
+
const detailsAction = new ActionEditorDescriptor(this.descriptor.detailsEditor, 'entity-revision-details')
|
|
108
|
+
.withPosition(ActionPositionEnum.RowClick)
|
|
109
|
+
.withRouteTrigger(':itemId')
|
|
110
|
+
.withFetchFunction(ActionDataProviderUtil.runFetchOrFail)
|
|
111
|
+
.withTableviewCategory(TableviewActionDefaultCategories.DETAILS)
|
|
112
|
+
.withFetchFunction(ctx => {
|
|
113
|
+
if (!entityName) {
|
|
114
|
+
return throwError(() => new MngErrorInternal('No revision entity is provided for details.'));
|
|
115
|
+
}
|
|
116
|
+
if (!ctx.parameters.itemId) {
|
|
117
|
+
return throwError(() => new MngErrorInternal('No item id for revision entity details is provided.'));
|
|
118
|
+
}
|
|
119
|
+
const revId = ctx.parameters.itemId.toString().split('_')[0];
|
|
120
|
+
const itemId = ctx.parameters.itemId.toString().split('_')[1];
|
|
121
|
+
return this.revisisonsApiService.fetchRevisionsWithStateForEntityType(entityName, revId, itemId);
|
|
122
|
+
});
|
|
123
|
+
detailsAction.withEditorActions([new ActionEditorSubmitDescriptor(detailsAction, ActionEditorSubmitTypeEnum.Cancel)]);
|
|
124
|
+
return [detailsAction];
|
|
35
125
|
}
|
|
36
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
37
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type:
|
|
126
|
+
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 }); }
|
|
127
|
+
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 }] }); }
|
|
38
128
|
}
|
|
39
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
129
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MngAuditEntityRevisionsPageComponent, decorators: [{
|
|
40
130
|
type: Component,
|
|
41
|
-
args: [{ standalone: true, selector: 'mng-audit-entity-revisions-page', imports: [
|
|
42
|
-
}], ctorParameters: function () { return [{ type: i1.
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtZW50aXR5LXJldmlzaW9ucy1wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wYWdlcy9lbnRpdHktcmV2aXNpb25zL2F1ZGl0LWVudGl0eS1yZXZpc2lvbnMtcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcGFnZXMvZW50aXR5LXJldmlzaW9ucy9hdWRpdC1lbnRpdHktcmV2aXNpb25zLXBhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV4QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUNILDJCQUEyQixFQUMzQixzQkFBc0IsRUFFdEIsNEJBQTRCLEVBRTVCLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUV2QiwwQkFBMEIsRUFDN0IsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxPQUFPLEVBQUMsaUNBQWlDLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUMzRyxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQzs7OztBQVE3RSxNQUFNLE9BQU8saUNBQWtDLFNBQVEsMkJBQXVFO0lBQzFILFlBQW9CLFlBQXlDLEVBQVUsaUNBQW9FO1FBQ3ZJLEtBQUssRUFBRSxDQUFDO1FBRFEsaUJBQVksR0FBWixZQUFZLENBQTZCO1FBQVUsc0NBQWlDLEdBQWpDLGlDQUFpQyxDQUFtQztRQUV2SSxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRWtCLDJCQUEyQjtRQUMxQyxPQUFPLElBQUksNEJBQTRCLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlLLENBQUM7SUFFa0IseUJBQXlCO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLElBQUksMEJBQTBCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDMUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hJLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFa0IsdUJBQXVCO1FBQ3RDLE9BQU87WUFDSCxJQUFJLENBQUMsZ0NBQWdDLEVBQUc7aUJBQ25DLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQixNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDL0osaUJBQWlCLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDaEgsR0FBRyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDekQsT0FBTyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9HLENBQUMsQ0FBQztpQkFDRCxlQUFlLENBQUMsNkJBQTZCLEVBQUUsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsRUFBQyxDQUFDO1NBQzdHLENBQUM7SUFDTixDQUFDOzhHQTNCUSxpQ0FBaUM7a0dBQWpDLGlDQUFpQyxrSEMzQjlDLHFIQUNBLDRDRHdCYyxxQkFBcUI7OzJGQUV0QixpQ0FBaUM7a0JBTjdDLFNBQVM7aUNBQ00sSUFBSSxZQUNOLGlDQUFpQyxXQUVsQyxDQUFDLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIEFNbmdUYWJsZXZpZXdSb3V0ZUNvbXBvbmVudCxcbiAgICBBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLFxuICAgIEFjdGlvbkRlc2NyaXB0b3IsXG4gICAgRHluYW1pY1RhYmxldmlld0RhdGFQcm92aWRlcixcbiAgICBJVGFibGV2aWV3RGF0YVByb3ZpZGVyLFxuICAgIE1lZGl1c0ZpbHRlck1hdGNoVHlwZSxcbiAgICBNZWRpdXNRdWVyeVBhcmFtQnVpbGRlcixcbiAgICBNbmdUYWJsZXZpZXdDb21wb25lbnQsXG4gICAgVGFibGVQYWdpbmF0aW9uTW9kZUVudW0sXG4gICAgVGFibGV2aWV3RGVzY3JpcHRvcixcbiAgICBUYWJsZXZpZXdEeW5hbWljRGVzY3JpcHRvclxufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zJztcblxuaW1wb3J0IHtNbmdBdWRpdEVudGl0eVJldmlzaW9uc0FwaVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2FwaS9zZXJ2aWNlcy9hdWRpdC1lbnRpdHktcmV2aXNpb25zLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7RW50aXR5RHJvcGRvd25QYWdlQ29tcG9uZW50fSBmcm9tICcuL2VudGl0eS1kcm9wZG93bi1wYWdlLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdtbmctYXVkaXQtZW50aXR5LXJldmlzaW9ucy1wYWdlJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2F1ZGl0LWVudGl0eS1yZXZpc2lvbnMtcGFnZS5jb21wb25lbnQuaHRtbCcsXG4gICAgaW1wb3J0czogW01uZ1RhYmxldmlld0NvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgQXVkaXRFbnRpdHlSZXZpc2lvbnNQYWdlQ29tcG9uZW50IGV4dGVuZHMgQU1uZ1RhYmxldmlld1JvdXRlQ29tcG9uZW50PHVua25vd24sIE1uZ0F1ZGl0RW50aXR5UmV2aXNpb25zQXBpU2VydmljZT4ge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZHJvcGRvd25QYWdlOiBFbnRpdHlEcm9wZG93blBhZ2VDb21wb25lbnQsIHByaXZhdGUgbW5nQXVkaXRFbnRpdHlSZXZpc2lvbnNBcGlTZXJ2aWNlOiBNbmdBdWRpdEVudGl0eVJldmlzaW9uc0FwaVNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5kcm9wZG93blBhZ2Uuc2VsZWN0ZWRSZXZpc2lvbkVudGl0eSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydlbnRpdHlDbGFzcyddO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBjcmVhdGVUYWJsZXZpZXdEYXRhUHJvdmlkZXIoKTogSVRhYmxldmlld0RhdGFQcm92aWRlcjx1bmtub3duLCBNbmdBdWRpdEVudGl0eVJldmlzaW9uc0FwaVNlcnZpY2U+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEeW5hbWljVGFibGV2aWV3RGF0YVByb3ZpZGVyKCkud2l0aEdldEFsbChxcCA9PiB0aGlzLm1uZ0F1ZGl0RW50aXR5UmV2aXNpb25zQXBpU2VydmljZS5nZXRBbGxSZXZpc2lvbnNGb3JFbnRpdHkodGhpcy5kcm9wZG93blBhZ2Uuc2VsZWN0ZWRSZXZpc2lvbkVudGl0eSwgcXApKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY3JlYXRlVGFibGV2aWV3RGVzY3JpcHRvcigpOiBUYWJsZXZpZXdEZXNjcmlwdG9yPHVua25vd24+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBUYWJsZXZpZXdEeW5hbWljRGVzY3JpcHRvcigncmV2JywgJ3JldicsIHRoaXMuZHJvcGRvd25QYWdlLnNlbGVjdGVkUmV2aXNpb25FbnRpdHkpO1xuICAgICAgICBkZXNjcmlwdG9yLnRhYmxlLndpdGhEZWZhdWx0U29ydCgncmV2Jykud2l0aENvbHVtbnNFeGNsdWRlZChbJ3JldkRhdGUnXSkud2l0aFBhZ2luYXRpb25Nb2RlKFRhYmxlUGFnaW5hdGlvbk1vZGVFbnVtLlBhZ2luYXRpb24pO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY3JlYXRlQWN0aW9uRGVzY3JpcHRvcnMoKTogQXJyYXk8QWN0aW9uRGVzY3JpcHRvcjx1bmtub3duPj4ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVBY3Rpb25EZXNjcmlwdG9yRm9yRGV0YWlscygpIVxuICAgICAgICAgICAgICAgIC53aXRoRmV0Y2hGdW5jdGlvbihjdHggPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtQnVpbGRlciA9IGN0eC5wYXJhbWV0ZXJzLnF1ZXJ5UGFyYW0gPyBNZWRpdXNRdWVyeVBhcmFtQnVpbGRlci5jcmVhdGVGcm9tRXhpc3RpbmcoY3R4LnBhcmFtZXRlcnMucXVlcnlQYXJhbSkgOiBNZWRpdXNRdWVyeVBhcmFtQnVpbGRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbUJ1aWxkZXIud2l0aEZpbHRlcigncmV2JywgY3R4LnBhcmFtZXRlcnMuaXRlbUlkLCBjdHgucGFyYW1ldGVycy5pdGVtSWQsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5FcXVhbHMpO1xuICAgICAgICAgICAgICAgICAgICBjdHgucGFyYW1ldGVycy53aXRoUXVlcnlQYXJhbShxdWVyeVBhcmFtQnVpbGRlci5idWlsZCgpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFjdGlvbkRhdGFQcm92aWRlclV0aWwucnVuR2V0QWxsT3JGYWlsKGN0eCkucGlwZShtYXAocmVzID0+IChyZXMucGFnZURhdGEgPyByZXMucGFnZURhdGFbMF0gOiB7fSkpKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoRWRpdG9yVGl0bGUoJ2VudGl0eVJldmlzaW9uRGV0YWlscy50aXRsZScsIHtyZXZFbnRpdHk6IHRoaXMuZHJvcGRvd25QYWdlLnNlbGVjdGVkUmV2aXNpb25FbnRpdHl9KVxuICAgICAgICBdO1xuICAgIH1cbn1cbiIsIjxtbmctdGFibGV2aWV3IFtkZXNjcmlwdG9yXT1cImRlc2NyaXB0b3JcIiBbZGF0YVByb3ZpZGVyXT1cImRhdGFQcm92aWRlclwiIFthY3Rpb25zXT1cImFjdGlvbnNcIj48L21uZy10YWJsZXZpZXc+XG4iXX0=
|
|
131
|
+
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" }]
|
|
132
|
+
}], ctorParameters: function () { return [{ type: i1.Router }]; } });
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtZW50aXR5LXJldmlzaW9ucy1wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wYWdlcy9lbnRpdHktcmV2aXNpb25zL2F1ZGl0LWVudGl0eS1yZXZpc2lvbnMtcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcGFnZXMvZW50aXR5LXJldmlzaW9ucy9hdWRpdC1lbnRpdHktcmV2aXNpb25zLXBhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBMEIsTUFBTSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRW5DLE9BQU8sRUFDSCwyQkFBMkIsRUFDM0Isc0JBQXNCLEVBRXRCLHNCQUFzQixFQUN0Qiw0QkFBNEIsRUFDNUIsMEJBQTBCLEVBQzFCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFD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LENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUQsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsb0NBQW9DLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRyxDQUFDLENBQUMsQ0FBQztRQUNQLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksNEJBQTRCLENBQUMsYUFBYSxFQUFFLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0SCxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0IsQ0FBQzs4R0FqSVEsb0NBQW9DO2tHQUFwQyxvQ0FBb0Msa0hDekNqRCw4eEJBaUJBLDRDRHFCYyxvQkFBb0IsaVZBQUUsMEJBQTBCLGtIQUFFLFdBQVcsK1ZBQWEsSUFBSSw0RkFBRSxlQUFlLDJGQUFFLFlBQVk7OzJGQUc5RyxvQ0FBb0M7a0JBTmhELFNBQVM7aUNBQ00sSUFBSSxZQUNOLGlDQUFpQyxXQUNsQyxDQUFDLG9CQUFvQixFQUFFLDBCQUEwQixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FzeW5jUGlwZSwgTmdJZn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q29tcG9uZW50LCBEZXN0cm95UmVmLCBPbkluaXQsIFdyaXRhYmxlU2lnbmFsLCBpbmplY3QsIHNpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7Rm9ybWx5TW9kdWxlfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Y29tYmluZUxhdGVzdCwgdGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIEFNbmdUYWJsZXZpZXdSb3V0ZUNvbXBvbmVudCxcbiAgICBBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLFxuICAgIEFjdGlvbkRlc2NyaXB0b3IsXG4gICAgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcixcbiAgICBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yLFxuICAgIEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLFxuICAgIEFjdGlvblBvc2l0aW9uRW51bSxcbiAgICBMb29rdXBEYXRhUHJvdmlkZXIsXG4gICAgTWVkaXVzUXVlcnlSZXN1bHQsXG4gICAgTW5nRHJvcGRvd25Db21wb25lbnQsXG4gICAgTW5nRXJyb3JJbnRlcm5hbCxcbiAgICBNbmdUYWJsZXZpZXdSb3V0ZUNvbXBvbmVudCxcbiAgICBUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcyxcbiAgICBUYWJsZXZpZXdEYXRhUHJvdmlkZXIsXG4gICAgVGFibGV2aWV3RGVzY3JpcHRvclxufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zJztcblxuaW1wb3J0IHtNbmdHdWlFbnRpdHlNb2RlbER0b30gZnJvbSAnLi4vLi4vLi4vYXBpL21vZGVscy9ndWlFbnRpdHlNb2RlbCc7XG5pbXBvcnQge01uZ0F1ZGl0UmV2aXNpb25zQXBpU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vYXBpL3NlcnZpY2VzL2F1ZGl0LXJldmlzaW9ucy1hcGkuc2VydmljZSc7XG5pbXBvcnQge01uZ0F1ZGl0U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vYXBpL3NlcnZpY2VzL2F1ZGl0LnNlcnZpY2UnO1xuaW1wb3J0IHtNbmdSZXZFbnRpdHlXaXRoSWR9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yZXZFbnRpdHlXaXRoSWQubW9kZWwnO1xuaW1wb3J0IHtBdWRpdFV0aWx9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2F1ZGl0LnV0aWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWF1ZGl0LWVudGl0eS1yZXZpc2lvbnMtcGFnZScsXG4gICAgaW1wb3J0czogW01uZ0Ryb3Bkb3duQ29tcG9uZW50LCBNbmdUYWJsZXZpZXdSb3V0ZUNvbXBvbmVudCwgRm9ybXNNb2R1bGUsIEFzeW5jUGlwZSwgTmdJZiwgVHJhbnNsYXRlTW9kdWxlLCBGb3JtbHlNb2R1bGVdLFxuICAgIHRlbXBsYXRlVXJsOiAnYXVkaXQtZW50aXR5LXJldmlzaW9ucy1wYWdlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBNbmdBdWRpdEVudGl0eVJldmlzaW9uc1BhZ2VDb21wb25lbnQgZXh0ZW5kcyBBTW5nVGFibGV2aWV3Um91dGVDb21wb25lbnQ8TW5nUmV2RW50aXR5V2l0aElkLCB1bmtub3duPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIHByaXZhdGUgYXVkaXRTZXJ2aWNlID0gaW5qZWN0KE1uZ0F1ZGl0U2VydmljZSk7XG4gICAgcHJpdmF0ZSByZXZpc2lzb25zQXBpU2VydmljZSA9IGluamVjdChNbmdBdWRpdFJldmlzaW9uc0FwaVNlcnZpY2UpO1xuXG4gICAgcHVibGljIHJldk1vZGVsPzogTW5nR3VpRW50aXR5TW9kZWxEdG87XG4gICAgcHVibGljIHNlbGVjdGVkUmV2aXNpb25FbnRpdHk/OiBNbmdHdWlFbnRpdHlNb2RlbER0bztcbiAgICBwdWJsaWMgcmV2aXNpb25FbnRpdGllc0xvb2t1cFByb3ZpZGVyPzogTG9va3VwRGF0YVByb3ZpZGVyPE1uZ0d1aUVudGl0eU1vZGVsRHRvLCBuZXZlcj47XG5cbiAgICBwdWJsaWMgc2hvd1RhYmxldmlldzogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnJldmlzaW9uRW50aXRpZXNMb29rdXBQcm92aWRlciA9IG5ldyBMb29rdXBEYXRhUHJvdmlkZXI8TW5nR3VpRW50aXR5TW9kZWxEdG8sIG5ldmVyPihNbmdHdWlFbnRpdHlNb2RlbER0bykud2l0aExvb2t1cCgoKSA9PlxuICAgICAgICAgICAgdGhpcy5hdWRpdFNlcnZpY2UuYXVkaXRNb2RlbCQucGlwZShcbiAgICAgICAgICAgICAgICBtYXAobW9kZWwgPT5cbiAgICAgICAgICAgICAgICAgICAgbW9kZWwuc29ydCgobTEsIG0yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobTEuZW50aXR5TmFtZSAmJiBtMi5lbnRpdHlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0xLmVudGl0eU5hbWUubG9jYWxlQ29tcGFyZShtMi5lbnRpdHlOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobTEuZW50aXR5TmFtZSAmJiAhbTIuZW50aXR5TmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJvdXRlLnBhcmFtTWFwLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5Q2xhc3MgPSBwYXJhbXMuZ2V0KCdlbnRpdHlDbGFzcycpO1xuICAgICAgICAgICAgaWYgKGVudGl0eUNsYXNzKSB7XG4gICAgICAgICAgICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5hdWRpdFNlcnZpY2UuYXVkaXRNb2RlbCQsIHRoaXMuYXVkaXRTZXJ2aWNlLnJldk1vZGVsJF0pLnN1YnNjcmliZSgoW2VudGl0aWVzLCByZXZNb2RlbF0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXZNb2RlbCA9IHJldk1vZGVsO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRpdGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuZW50aXR5TmFtZSA9PT0gZW50aXR5Q2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmV2aXNpb25FbnRpdHkgPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNob3dUYWJsZXZpZXcuc2V0KHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25SZXZpc2lvbkVudGl0eUNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5zaG93VGFibGV2aWV3LnNldChmYWxzZSk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUmV2aXNpb25FbnRpdHkpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2F1ZGl0L2VudGl0eS1yZXZpc2lvbnMvJyArIHRoaXMuc2VsZWN0ZWRSZXZpc2lvbkVudGl0eS5lbnRpdHlOYW1lXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hdWRpdC9lbnRpdHktcmV2aXNpb25zLyddKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBjcmVhdGVUYWJsZXZpZXdEZXNjcmlwdG9yKCkge1xuICAgICAgICBpZiAoIXRoaXMucmV2TW9kZWwgfHwgIXRoaXMuc2VsZWN0ZWRSZXZpc2lvbkVudGl0eT8uZW50aXR5TmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1uZ0Vycm9ySW50ZXJuYWwoJ05vIHJldmlzaW9uIG1vZGVsIG9yIHJldmlzaW9uIGVudGl0eSBpcyBwcm92aWRlZCBmb3IgdGFibGV2aWV3LicpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVzYyA9IG5ldyBUYWJsZXZpZXdEZXNjcmlwdG9yKE1uZ1JldkVudGl0eVdpdGhJZCwgJ21lcmdlZElkJywgdW5kZWZpbmVkLCB0aGlzLnNlbGVjdGVkUmV2aXNpb25FbnRpdHkuZW50aXR5TmFtZSk7XG5cbiAgICAgICAgQXVkaXRVdGlsLmJ1aWxkRGVzY3JpcHRvckZvckVudGl0eVJldmlzaW9uKGRlc2MsIHRoaXMucmV2TW9kZWwsIHRoaXMuc2VsZWN0ZWRSZXZpc2lvbkVudGl0eSk7XG5cbiAgICAgICAgZGVzYy50YWJsZS53aXRoQ29sdW1uc1Jlc2l6YWJsZSgpO1xuICAgICAgICBkZXNjLnRhYmxlLndpdGhDdXJyZW50Q29sdW1uc1Jlb3JkZXJhYmxlKCk7XG4gICAgICAgIGRlc2MudGFibGUud2l0aEN1cnJlbnRDb2x1bW5zVG9nZ2xlYWJsZSgpO1xuICAgICAgICBkZXNjLnRhYmxlLndpdGhEYXRhS2V5KGBFbnRpdHlSZXZpc2lvbnNQYWdlXyR7dGhpcy5zZWxlY3RlZFJldmlzaW9uRW50aXR5LmVudGl0eU5hbWV9YCk7XG5cbiAgICAgICAgcmV0dXJuIGRlc2M7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVRhYmxldmlld0RhdGFQcm92aWRlcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJldk1vZGVsIHx8ICF0aGlzLnNlbGVjdGVkUmV2aXNpb25FbnRpdHk/LmVudGl0eU5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNbmdFcnJvckludGVybmFsKCdObyByZXZpc2lvbiBtb2RlbCBvciByZXZpc2lvbiBlbnRpdHkgaXMgcHJvdmlkZWQgZm9yIHRhYmxldmlldy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVudGl0eU5hbWUgPSB0aGlzLnNlbGVjdGVkUmV2aXNpb25FbnRpdHkuZW50aXR5TmFtZTtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZXZpZXdEYXRhUHJvdmlkZXIoTW5nUmV2RW50aXR5V2l0aElkKS53aXRoR2V0QWxsKHFwID0+XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmV2aXNpb25FbnRpdHk/LmVudGl0eU5hbWVcbiAgICAgICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmV2aXNpc29uc0FwaVNlcnZpY2UuY291bnRSZXZpc2lvbnNXaXRoU3RhdGVGb3JFbnRpdHlUeXBlKHFwLCBlbnRpdHlOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJldmlzaXNvbnNBcGlTZXJ2aWNlLmxpc3RSZXZpc2lvbnNXaXRoU3RhdGVGb3JFbnRpdHlUeXBlKHFwLCBlbnRpdHlOYW1lKVxuICAgICAgICAgICAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICBtYXAoKFtjb3VudCwgdmFsdWVzXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZFbnRpdHlXaXRoU3RhdGVBbmRJZExpc3QgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByZXZFbnRpdHlXaXRoU3RhdGUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZFbnRpdHlXaXRoU3RhdGVBbmRJZCA9IG5ldyBNbmdSZXZFbnRpdHlXaXRoSWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldkVudGl0eVdpdGhTdGF0ZUFuZElkLm1lcmdlZElkID0gcmV2RW50aXR5V2l0aFN0YXRlLnJldkVudGl0eT8uWydyZXYnXSArICdfJyArIHJldkVudGl0eVdpdGhTdGF0ZS5lbnRpdHlTdGF0ZT8uWydpZCddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2RW50aXR5V2l0aFN0YXRlQW5kSWQucmV2VHlwZSA9IHJldkVudGl0eVdpdGhTdGF0ZS5yZXZUeXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2RW50aXR5V2l0aFN0YXRlQW5kSWQucmV2RW50aXR5ID0gcmV2RW50aXR5V2l0aFN0YXRlLnJldkVudGl0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldkVudGl0eVdpdGhTdGF0ZUFuZElkLmVudGl0eVN0YXRlID0gcmV2RW50aXR5V2l0aFN0YXRlLmVudGl0eVN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2RW50aXR5V2l0aFN0YXRlQW5kSWQuZW50aXR5Q2xhc3NOYW1lID0gcmV2RW50aXR5V2l0aFN0YXRlLmVudGl0eUNsYXNzTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldkVudGl0eVdpdGhTdGF0ZUFuZElkTGlzdC5wdXNoKHJldkVudGl0eVdpdGhTdGF0ZUFuZElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWVkaXVzUXVlcnlSZXN1bHQuZnJvbUFycmF5KHJldkVudGl0eVdpdGhTdGF0ZUFuZElkTGlzdCwgY291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiB0aHJvd0Vycm9yKCgpID0+IG5ldyBNbmdFcnJvckludGVybmFsKCdObyByZXZpc2lvbiBlbnRpdHkgaXMgcHJvdmlkZWQgZm9yIGxpc3QuJykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGNyZWF0ZUFjdGlvbkRlc2NyaXB0b3JzKCk6IEFycmF5PEFjdGlvbkRlc2NyaXB0b3I8TW5nUmV2RW50aXR5V2l0aElkPj4ge1xuICAgICAgICBpZiAoIXRoaXMucmV2TW9kZWwgfHwgIXRoaXMuc2VsZWN0ZWRSZXZpc2lvbkVudGl0eT8uZW50aXR5TmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1uZ0Vycm9ySW50ZXJuYWwoJ05vIHJldmlzaW9uIG1vZGVsIG9yIHJldmlzaW9uIGVudGl0eSBpcyBwcm92aWRlZCBmb3IgdGFibGV2aWV3LicpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW50aXR5TmFtZSA9IHRoaXMuc2VsZWN0ZWRSZXZpc2lvbkVudGl0eS5lbnRpdHlOYW1lO1xuICAgICAgICBjb25zdCBkZXRhaWxzQWN0aW9uID0gbmV3IEFjdGlvbkVkaXRvckRlc2NyaXB0b3IodGhpcy5kZXNjcmlwdG9yLmRldGFpbHNFZGl0b3IsICdlbnRpdHktcmV2aXNpb24tZGV0YWlscycpXG4gICAgICAgICAgICAud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Sb3dDbGljaylcbiAgICAgICAgICAgIC53aXRoUm91dGVUcmlnZ2VyKCc6aXRlbUlkJylcbiAgICAgICAgICAgIC53aXRoRmV0Y2hGdW5jdGlvbihBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLnJ1bkZldGNoT3JGYWlsKVxuICAgICAgICAgICAgLndpdGhUYWJsZXZpZXdDYXRlZ29yeShUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5ERVRBSUxTKVxuICAgICAgICAgICAgLndpdGhGZXRjaEZ1bmN0aW9uKGN0eCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlbnRpdHlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBNbmdFcnJvckludGVybmFsKCdObyByZXZpc2lvbiBlbnRpdHkgaXMgcHJvdmlkZWQgZm9yIGRldGFpbHMuJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWN0eC5wYXJhbWV0ZXJzLml0ZW1JZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgTW5nRXJyb3JJbnRlcm5hbCgnTm8gaXRlbSBpZCBmb3IgcmV2aXNpb24gZW50aXR5IGRldGFpbHMgaXMgcHJvdmlkZWQuJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXZJZCA9IGN0eC5wYXJhbWV0ZXJzLml0ZW1JZC50b1N0cmluZygpLnNwbGl0KCdfJylbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUlkID0gY3R4LnBhcmFtZXRlcnMuaXRlbUlkLnRvU3RyaW5nKCkuc3BsaXQoJ18nKVsxXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXZpc2lzb25zQXBpU2VydmljZS5mZXRjaFJldmlzaW9uc1dpdGhTdGF0ZUZvckVudGl0eVR5cGUoZW50aXR5TmFtZSwgcmV2SWQsIGl0ZW1JZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgZGV0YWlsc0FjdGlvbi53aXRoRWRpdG9yQWN0aW9ucyhbbmV3IEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3IoZGV0YWlsc0FjdGlvbiwgQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uQ2FuY2VsKV0pO1xuICAgICAgICByZXR1cm4gW2RldGFpbHNBY3Rpb25dO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYXJkXCI+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkIG1iLTBcIj5cbiAgICAgICAgPG1uZy1kcm9wZG93blxuICAgICAgICAgICAgaWQ9XCJyZXZpc2lvbkVudGl0eURyb3Bkb3duXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIncGFnZXMuZW50aXR5UmV2aXNpb25zLmRyb3Bkb3duLnBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbaXRlbXNMYWJlbFByb3BlcnR5XT1cIidlbnRpdHlOYW1lJ1wiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkUmV2aXNpb25FbnRpdHlcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUmV2aXNpb25FbnRpdHlDaGFuZ2UoKVwiXG4gICAgICAgICAgICBbZGF0YVByb3ZpZGVyXT1cInJldmlzaW9uRW50aXRpZXNMb29rdXBQcm92aWRlclwiPjwvbW5nLWRyb3Bkb3duPlxuICAgICAgICA8c21hbGwgKm5nSWY9XCIhc2VsZWN0ZWRSZXZpc2lvbkVudGl0eVwiIGNsYXNzPVwiYmxvY2tcIj5cbiAgICAgICAgICAgIHt7ICdwYWdlcy5lbnRpdHlSZXZpc2lvbnMuZHJvcGRvd24uaGVscFRleHQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvc21hbGw+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJzaG93VGFibGV2aWV3KClcIj5cbiAgICA8bW5nLXRhYmxldmlldy1yb3V0ZSBbZGVzY3JpcHRvcl09XCJkZXNjcmlwdG9yXCIgW2RhdGFQcm92aWRlcl09XCJkYXRhUHJvdmlkZXJcIiBbYWN0aW9uc109XCJhY3Rpb25zXCI+PC9tbmctdGFibGV2aWV3LXJvdXRlPlxuPC9kaXY+XG4iXX0=
|