@cauca-911/management 13.0.1 → 13.0.4
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/LICENSE +20 -20
- package/README.md +4 -4
- package/assets/i18n/cauca/en-management.json +17 -16
- package/assets/i18n/cauca/es-management.json +17 -0
- package/assets/i18n/cauca/fr-management.json +17 -16
- package/{esm2015/cauca-911-management.js → esm2020/cauca-911-management.mjs} +1 -1
- package/esm2020/lib/cauca-management-group/cauca-management-group.component.mjs +289 -0
- package/esm2020/lib/cauca-management-user/cauca-management-user.component.mjs +96 -0
- package/esm2020/lib/cauca-management.component.mjs +23 -0
- package/esm2020/lib/cauca-management.module.mjs +57 -0
- package/esm2020/lib/cauca-management.service.mjs +14 -0
- package/esm2020/lib/shared/models/group-model.mjs +8 -0
- package/esm2020/lib/shared/models/group-permission-model.mjs +9 -0
- package/esm2020/lib/shared/models/permission-model.mjs +8 -0
- package/esm2020/lib/shared/models/user-group-model.mjs +8 -0
- package/esm2020/lib/shared/models/user-model.mjs +12 -0
- package/esm2020/lib/shared/models/user-permission-model.mjs +9 -0
- package/esm2020/lib/shared/services/management-group.service.mjs +34 -0
- package/esm2020/lib/shared/services/management-permission.service.mjs +31 -0
- package/esm2020/lib/shared/services/management-user.service.mjs +49 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +1 -1
- package/fesm2015/cauca-911-management.mjs +654 -0
- package/fesm2015/cauca-911-management.mjs.map +1 -0
- package/fesm2020/cauca-911-management.mjs +618 -0
- package/fesm2020/cauca-911-management.mjs.map +1 -0
- package/lib/cauca-management-group/cauca-management-group.component.d.ts +2 -2
- package/lib/cauca-management-user/cauca-management-user.component.d.ts +2 -2
- package/lib/cauca-management.component.d.ts +2 -2
- package/lib/cauca-management.module.d.ts +3 -2
- package/lib/cauca-management.service.d.ts +2 -2
- package/lib/shared/models/group-model.d.ts +1 -0
- package/lib/shared/services/management-group.service.d.ts +2 -2
- package/lib/shared/services/management-permission.service.d.ts +2 -2
- package/lib/shared/services/management-user.service.d.ts +2 -2
- package/package.json +21 -8
- package/bundles/cauca-911-management.umd.js +0 -703
- package/bundles/cauca-911-management.umd.js.map +0 -1
- package/bundles/cauca-911-management.umd.min.js +0 -2
- package/bundles/cauca-911-management.umd.min.js.map +0 -1
- package/esm2015/lib/cauca-management-group/cauca-management-group.component.js +0 -298
- package/esm2015/lib/cauca-management-user/cauca-management-user.component.js +0 -106
- package/esm2015/lib/cauca-management.component.js +0 -27
- package/esm2015/lib/cauca-management.module.js +0 -56
- package/esm2015/lib/cauca-management.service.js +0 -14
- package/esm2015/lib/shared/models/group-model.js +0 -8
- package/esm2015/lib/shared/models/group-permission-model.js +0 -9
- package/esm2015/lib/shared/models/permission-model.js +0 -8
- package/esm2015/lib/shared/models/user-group-model.js +0 -8
- package/esm2015/lib/shared/models/user-model.js +0 -12
- package/esm2015/lib/shared/models/user-permission-model.js +0 -9
- package/esm2015/lib/shared/services/management-group.service.js +0 -34
- package/esm2015/lib/shared/services/management-permission.service.js +0 -31
- package/esm2015/lib/shared/services/management-user.service.js +0 -49
- package/fesm2015/cauca-911-management.js +0 -634
- package/fesm2015/cauca-911-management.js.map +0 -1
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2018 CAUCA 9-1-1 inc
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2018 CAUCA 9-1-1 inc
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
# @cauca-911/management
|
|
2
|
-
|
|
3
|
-
Run `npm install @cauca-911/management --save` to add this library to your project
|
|
4
|
-
|
|
1
|
+
# @cauca-911/management
|
|
2
|
+
|
|
3
|
+
Run `npm install @cauca-911/management --save` to add this library to your project
|
|
4
|
+
|
|
5
5
|
## To use this library, you need to import the module with specific configuration
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
{
|
|
2
|
-
"management": {
|
|
3
|
-
"description": "The \"@cauca-911/management\" library add component to management user and permission",
|
|
4
|
-
"userName": "Username",
|
|
5
|
-
"isActive": "Active",
|
|
6
|
-
"firstName": "First name",
|
|
7
|
-
"lastName": "Last name",
|
|
8
|
-
"group": "Group",
|
|
9
|
-
"name": "Name",
|
|
10
|
-
"users": "Users",
|
|
11
|
-
"groups": "Groups",
|
|
12
|
-
"permissions": "Permissions",
|
|
13
|
-
"userNameAlreadyUsed": "This user name is already used",
|
|
14
|
-
"groupNameAlreadyUsed": "This group name is already used"
|
|
15
|
-
|
|
16
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"management": {
|
|
3
|
+
"description": "The \"@cauca-911/management\" library add component to management user and permission",
|
|
4
|
+
"userName": "Username",
|
|
5
|
+
"isActive": "Active",
|
|
6
|
+
"firstName": "First name",
|
|
7
|
+
"lastName": "Last name",
|
|
8
|
+
"group": "Group",
|
|
9
|
+
"name": "Name",
|
|
10
|
+
"users": "Users",
|
|
11
|
+
"groups": "Groups",
|
|
12
|
+
"permissions": "Permissions",
|
|
13
|
+
"userNameAlreadyUsed": "This user name is already used",
|
|
14
|
+
"groupNameAlreadyUsed": "This group name is already used",
|
|
15
|
+
"assignableByAllUsers": "Assignable by all users"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"management": {
|
|
3
|
+
"description": "La librería \"@cauca-911/management\" agrega componentes para administrar usuarios y permisos",
|
|
4
|
+
"userName": "Nombre del usuario",
|
|
5
|
+
"isActive": "Activo",
|
|
6
|
+
"firstName": "Nombre de pila",
|
|
7
|
+
"lastName": "Apellido",
|
|
8
|
+
"group": "Banda",
|
|
9
|
+
"name": "Apellido",
|
|
10
|
+
"users": "Usuarios",
|
|
11
|
+
"groups": "Grupos",
|
|
12
|
+
"permissions": "Permisos",
|
|
13
|
+
"userNameAlreadyUsed": "El nombre de usuario ya esta siendo usado",
|
|
14
|
+
"groupNameAlreadyUsed": "Este nombre de grupo ya está en uso",
|
|
15
|
+
"assignableByAllUsers": "Asignable por todos los usuarios"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
{
|
|
2
|
-
"management": {
|
|
3
|
-
"description": "
|
|
4
|
-
"userName": "Nom d'utilisateur",
|
|
5
|
-
"isActive": "Actif",
|
|
6
|
-
"firstName": "Prénom",
|
|
7
|
-
"lastName": "Nom",
|
|
8
|
-
"group": "Groupe",
|
|
9
|
-
"name": "Nom",
|
|
10
|
-
"users": "Utilisateurs",
|
|
11
|
-
"groups": "Groupes",
|
|
12
|
-
"permissions": "Permissions",
|
|
13
|
-
"userNameAlreadyUsed": "Ce nom d'utilisateur est déjà utilisé",
|
|
14
|
-
"groupNameAlreadyUsed": "Ce nom de groupe est déjà utilisé"
|
|
15
|
-
|
|
16
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"management": {
|
|
3
|
+
"description": "La librairie \"@cauca-911/management\" ajoute des composants pour gérer les utilisateurs et les permissions",
|
|
4
|
+
"userName": "Nom d'utilisateur",
|
|
5
|
+
"isActive": "Actif",
|
|
6
|
+
"firstName": "Prénom",
|
|
7
|
+
"lastName": "Nom",
|
|
8
|
+
"group": "Groupe",
|
|
9
|
+
"name": "Nom",
|
|
10
|
+
"users": "Utilisateurs",
|
|
11
|
+
"groups": "Groupes",
|
|
12
|
+
"permissions": "Permissions",
|
|
13
|
+
"userNameAlreadyUsed": "Ce nom d'utilisateur est déjà utilisé",
|
|
14
|
+
"groupNameAlreadyUsed": "Ce nom de groupe est déjà utilisé",
|
|
15
|
+
"assignableByAllUsers": "Assignable par tous les utilisateurs"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
* Generated bundle index. Do not edit.
|
|
3
3
|
*/
|
|
4
4
|
export * from './public-api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F1Y2EtOTExLW1hbmFnZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9jYXVjYS1tYW5hZ2VtZW50L3NyYy9jYXVjYS05MTEtbWFuYWdlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { map } from 'rxjs/operators';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../shared/services/management-group.service";
|
|
5
|
+
import * as i2 from "../shared/services/management-user.service";
|
|
6
|
+
import * as i3 from "../shared/services/management-permission.service";
|
|
7
|
+
import * as i4 from "@angular/cdk/layout";
|
|
8
|
+
import * as i5 from "@cauca-911/devextreme";
|
|
9
|
+
import * as i6 from "devextreme-angular/ui/nested";
|
|
10
|
+
import * as i7 from "devextreme-angular/core";
|
|
11
|
+
import * as i8 from "devextreme-angular/ui/tag-box";
|
|
12
|
+
import * as i9 from "devextreme-angular/ui/list";
|
|
13
|
+
import * as i10 from "devextreme-angular/ui/check-box";
|
|
14
|
+
import * as i11 from "@ngx-translate/core";
|
|
15
|
+
function CaucaManagementGroupComponent_div_20_Template(rf, ctx) { if (rf & 1) {
|
|
16
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
17
|
+
i0.ɵɵelementStart(0, "div")(1, "dx-tag-box", 15);
|
|
18
|
+
i0.ɵɵlistener("onInitialized", function CaucaManagementGroupComponent_div_20_Template_dx_tag_box_onInitialized_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r4); const field_r2 = restoredCtx.$implicit; const ctx_r3 = i0.ɵɵnextContext(); return ctx_r3.getGroupUser(field_r2, $event); })("onValueChanged", function CaucaManagementGroupComponent_div_20_Template_dx_tag_box_onValueChanged_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r4); const field_r2 = restoredCtx.$implicit; const ctx_r5 = i0.ɵɵnextContext(); return ctx_r5.setGroupUser(field_r2, $event); });
|
|
19
|
+
i0.ɵɵelementEnd()();
|
|
20
|
+
} if (rf & 2) {
|
|
21
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
22
|
+
i0.ɵɵadvance(1);
|
|
23
|
+
i0.ɵɵproperty("displayExpr", ctx_r0.fullName)("dataSource", ctx_r0.users)("searchEnabled", true)("searchExpr", ctx_r0.fullName);
|
|
24
|
+
} }
|
|
25
|
+
function CaucaManagementGroupComponent_div_21_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
26
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
27
|
+
i0.ɵɵelementStart(0, "div")(1, "dx-check-box", 17);
|
|
28
|
+
i0.ɵɵlistener("onInitialized", function CaucaManagementGroupComponent_div_21_div_2_Template_dx_check_box_onInitialized_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r11); const permission_r8 = restoredCtx.$implicit; const field_r6 = i0.ɵɵnextContext().$implicit; const ctx_r9 = i0.ɵɵnextContext(); return ctx_r9.getPermissionStatus(field_r6, permission_r8, $event); })("onValueChanged", function CaucaManagementGroupComponent_div_21_div_2_Template_dx_check_box_onValueChanged_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r11); const permission_r8 = restoredCtx.$implicit; const field_r6 = i0.ɵɵnextContext().$implicit; const ctx_r12 = i0.ɵɵnextContext(); return ctx_r12.checkBoxToggled(field_r6, permission_r8, $event); });
|
|
29
|
+
i0.ɵɵelementEnd()();
|
|
30
|
+
} if (rf & 2) {
|
|
31
|
+
const permission_r8 = ctx.$implicit;
|
|
32
|
+
i0.ɵɵadvance(1);
|
|
33
|
+
i0.ɵɵproperty("text", permission_r8.name);
|
|
34
|
+
} }
|
|
35
|
+
const _c0 = function () { return ["name", "tag"]; };
|
|
36
|
+
function CaucaManagementGroupComponent_div_21_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
+
i0.ɵɵelementStart(0, "div")(1, "dx-list", 16);
|
|
38
|
+
i0.ɵɵtemplate(2, CaucaManagementGroupComponent_div_21_div_2_Template, 2, 1, "div", 14);
|
|
39
|
+
i0.ɵɵelementEnd()();
|
|
40
|
+
} if (rf & 2) {
|
|
41
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
42
|
+
i0.ɵɵadvance(1);
|
|
43
|
+
i0.ɵɵproperty("dataSource", ctx_r1.permissions)("searchEnabled", true)("searchExpr", i0.ɵɵpureFunction0(5, _c0))("hoverStateEnabled", ctx_r1.hoverStatePermission);
|
|
44
|
+
i0.ɵɵadvance(1);
|
|
45
|
+
i0.ɵɵproperty("dxTemplateOf", "rowTemplate");
|
|
46
|
+
} }
|
|
47
|
+
export class CaucaManagementGroupComponent {
|
|
48
|
+
constructor(managementGroupService, managementUserService, managementPermissionService, breakpointObserver) {
|
|
49
|
+
this.managementGroupService = managementGroupService;
|
|
50
|
+
this.managementUserService = managementUserService;
|
|
51
|
+
this.managementPermissionService = managementPermissionService;
|
|
52
|
+
this.showPrintButton = true;
|
|
53
|
+
this.hoverStatePermission = true;
|
|
54
|
+
this.groups = [];
|
|
55
|
+
this.users = [];
|
|
56
|
+
this.permissions = [];
|
|
57
|
+
this.userFullName = {};
|
|
58
|
+
this.showColumn = true;
|
|
59
|
+
this.showColumnXS = true;
|
|
60
|
+
this.translations = [];
|
|
61
|
+
this.calculateUsersCellValue = (e) => {
|
|
62
|
+
const users = (e.users ? e.users : []);
|
|
63
|
+
let usersNames = [];
|
|
64
|
+
users.forEach((user) => {
|
|
65
|
+
const userGroup = this.users.filter((u) => u.id === user.idUser);
|
|
66
|
+
if (userGroup && userGroup[0]) {
|
|
67
|
+
usersNames.push(userGroup[0].firstName + ' ' + userGroup[0].lastName);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
usersNames = usersNames.sort((one, two) => (one < two ? -1 : 1));
|
|
71
|
+
return usersNames.join(', ');
|
|
72
|
+
};
|
|
73
|
+
this.groupNameAlreadyUsedValidation = (e) => this.managementGroupService.hasExistingGroupName(e.data).pipe(map((exist) => !exist)).toPromise();
|
|
74
|
+
breakpointObserver.observe(['(max-width: 1000px)']).subscribe((result) => {
|
|
75
|
+
this.showColumn = !result.matches;
|
|
76
|
+
});
|
|
77
|
+
breakpointObserver.observe(['(max-width: 600px)']).subscribe((result) => {
|
|
78
|
+
this.showColumnXS = !result.matches;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
ngOnInit() {
|
|
82
|
+
this.managementUserService.getAll().subscribe((data) => {
|
|
83
|
+
this.users = data;
|
|
84
|
+
this.users.forEach((user) => {
|
|
85
|
+
if (user.isActive) {
|
|
86
|
+
if (user.firstName !== '' && user.lastName !== '') {
|
|
87
|
+
this.userFullName[user.id] = `${user.firstName} ${user.lastName}`;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
this.managementPermissionService.getAll().subscribe((permissions) => {
|
|
93
|
+
const permissionIndex = permissions.findIndex((c) => c.tag === 'CanAccessPermissions');
|
|
94
|
+
if (permissionIndex !== -1) {
|
|
95
|
+
permissions.splice(permissionIndex, 1);
|
|
96
|
+
}
|
|
97
|
+
permissions.sort((a, b) => {
|
|
98
|
+
if (a.name < b.name) {
|
|
99
|
+
return -1;
|
|
100
|
+
}
|
|
101
|
+
if (a.name > b.name) {
|
|
102
|
+
return 1;
|
|
103
|
+
}
|
|
104
|
+
return 0;
|
|
105
|
+
});
|
|
106
|
+
this.permissions = permissions;
|
|
107
|
+
});
|
|
108
|
+
this.getGroups();
|
|
109
|
+
}
|
|
110
|
+
fullName(data) {
|
|
111
|
+
if (!data) {
|
|
112
|
+
return '';
|
|
113
|
+
}
|
|
114
|
+
return `${data.firstName} ${data.lastName}`;
|
|
115
|
+
}
|
|
116
|
+
getGroupUser(field, e) {
|
|
117
|
+
const users = [];
|
|
118
|
+
if (this.groupUsers) {
|
|
119
|
+
this.groupUsers.forEach((user) => {
|
|
120
|
+
users.push(user.idUser);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
e.component.option('value', users);
|
|
124
|
+
}
|
|
125
|
+
setGroupUser(field, e) {
|
|
126
|
+
const groupUser = [];
|
|
127
|
+
e.value.forEach((idUser) => {
|
|
128
|
+
const groupIndex = (field.data.users || []).findIndex((g) => g.idUser === idUser);
|
|
129
|
+
if (groupIndex === -1) {
|
|
130
|
+
groupUser.push({ idUser, });
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
groupUser.push(field.data.users[groupIndex]);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
field.setValue(JSON.parse(JSON.stringify(groupUser)));
|
|
137
|
+
}
|
|
138
|
+
setGroupPermission(field, e) {
|
|
139
|
+
const groupUser = [];
|
|
140
|
+
e.value.forEach((idUser) => {
|
|
141
|
+
groupUser.push({
|
|
142
|
+
idUser,
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
field.setValue(JSON.parse(JSON.stringify(groupUser)));
|
|
146
|
+
}
|
|
147
|
+
getPermissionStatus(field, permission, e) {
|
|
148
|
+
const groupPermission = (field.value || []).find((p) => p.idModulePermission === permission.id);
|
|
149
|
+
if (groupPermission) {
|
|
150
|
+
e.component.option('value', groupPermission.isAllowed);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
e.component.option('value', undefined);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
checkBoxToggled(field, permission, e) {
|
|
157
|
+
if (e.component.skipOnValueChanged) {
|
|
158
|
+
e.component.skipOnValueChanged = false;
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (e.component.setUndefinedNextTime) {
|
|
162
|
+
e.component.setUndefinedNextTime = false;
|
|
163
|
+
e.component.skipOnValueChanged = true;
|
|
164
|
+
e.component.option('value', undefined);
|
|
165
|
+
this.setPermissionStatus(field, permission, undefined);
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
if (e.value === false) {
|
|
169
|
+
e.component.setUndefinedNextTime = true;
|
|
170
|
+
}
|
|
171
|
+
this.setPermissionStatus(field, permission, e.value);
|
|
172
|
+
}
|
|
173
|
+
onRowInserted(e) {
|
|
174
|
+
this.saveGroup(e.data);
|
|
175
|
+
}
|
|
176
|
+
onRowUpdated(e) {
|
|
177
|
+
this.saveGroup(e.data);
|
|
178
|
+
}
|
|
179
|
+
onRowRemoved(e) {
|
|
180
|
+
const group = e.data;
|
|
181
|
+
this.managementGroupService.delete(group.id).subscribe(() => {
|
|
182
|
+
this.getGroups();
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
onEditingStart(e) {
|
|
186
|
+
this.groupUsers = e.data.users;
|
|
187
|
+
}
|
|
188
|
+
onInitNewRow() {
|
|
189
|
+
this.groupUsers = [];
|
|
190
|
+
}
|
|
191
|
+
setPermissionStatus(field, permission, value) {
|
|
192
|
+
const groupPermissions = field.value || [];
|
|
193
|
+
const groupIndex = groupPermissions.findIndex((p) => p.idModulePermission === permission.id);
|
|
194
|
+
if (groupIndex > -1) {
|
|
195
|
+
groupPermissions[groupIndex].isAllowed = value;
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
groupPermissions.push({
|
|
199
|
+
idModulePermission: permission.id,
|
|
200
|
+
isAllowed: value,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
field.setValue(JSON.parse(JSON.stringify(groupPermissions)));
|
|
204
|
+
}
|
|
205
|
+
saveGroup(group) {
|
|
206
|
+
this.removePermissionUndefined(group);
|
|
207
|
+
if (group.users) {
|
|
208
|
+
group.users.forEach((userGroup) => {
|
|
209
|
+
userGroup.idGroup = group.id;
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
if (group.permissions) {
|
|
213
|
+
group.permissions.forEach((groupPermission) => {
|
|
214
|
+
groupPermission.idGroup = group.id;
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
this.managementGroupService.save(group).subscribe(() => {
|
|
218
|
+
this.getGroups();
|
|
219
|
+
});
|
|
220
|
+
this.groupUsers = [];
|
|
221
|
+
}
|
|
222
|
+
removePermissionUndefined(group) {
|
|
223
|
+
group.permissions = group.permissions.filter((permission) => permission.isAllowed !== undefined);
|
|
224
|
+
}
|
|
225
|
+
getGroups() {
|
|
226
|
+
this.managementGroupService.getAll().subscribe((data) => this.groups = data);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
CaucaManagementGroupComponent.ɵfac = function CaucaManagementGroupComponent_Factory(t) { return new (t || CaucaManagementGroupComponent)(i0.ɵɵdirectiveInject(i1.ManagementGroupService), i0.ɵɵdirectiveInject(i2.ManagementUserService), i0.ɵɵdirectiveInject(i3.ManagementPermissionService), i0.ɵɵdirectiveInject(i4.BreakpointObserver)); };
|
|
230
|
+
CaucaManagementGroupComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaucaManagementGroupComponent, selectors: [["cauca-management-group"]], inputs: { showPrintButton: "showPrintButton", hoverStatePermission: "hoverStatePermission" }, decls: 22, vars: 34, consts: [["keyExpr", "id", 3, "allowPrint", "dataSource", "onRowInserted", "onInitNewRow", "onRowUpdated", "onEditingStart", "onRowRemoved"], ["dataField", "name", 3, "caption"], ["type", "async", 3, "message", "validationCallback"], ["dataField", "assignableByAllUsers", "dataType", "boolean", 3, "caption"], ["dataField", "users", "editCellTemplate", "usersEditTemplate", 3, "caption", "calculateCellValue"], ["dataField", "permissions", "editCellTemplate", "permissionsEditTemplate", 3, "caption", "visible"], [3, "enabled"], ["mode", "popup", 3, "allowAdding", "allowUpdating", "allowDeleting", "useIcons"], [3, "showTitle", "title", "fullScreen"], ["colCount", "1", 3, "labelLocation"], ["dataField", "name", 3, "isRequired"], ["dataField", "users"], ["dataField", "permissions"], ["dataField", "assignableByAllUsers"], [4, "dxTemplate", "dxTemplateOf"], ["valueExpr", "id", 3, "displayExpr", "dataSource", "searchEnabled", "searchExpr", "onInitialized", "onValueChanged"], ["itemTemplate", "rowTemplate", 3, "dataSource", "searchEnabled", "searchExpr", "hoverStateEnabled"], [3, "text", "onInitialized", "onValueChanged"]], template: function CaucaManagementGroupComponent_Template(rf, ctx) { if (rf & 1) {
|
|
231
|
+
i0.ɵɵelementStart(0, "cauca-dx-data-grid", 0);
|
|
232
|
+
i0.ɵɵlistener("onRowInserted", function CaucaManagementGroupComponent_Template_cauca_dx_data_grid_onRowInserted_0_listener($event) { return ctx.onRowInserted($event); })("onInitNewRow", function CaucaManagementGroupComponent_Template_cauca_dx_data_grid_onInitNewRow_0_listener() { return ctx.onInitNewRow(); })("onRowUpdated", function CaucaManagementGroupComponent_Template_cauca_dx_data_grid_onRowUpdated_0_listener($event) { return ctx.onRowUpdated($event); })("onEditingStart", function CaucaManagementGroupComponent_Template_cauca_dx_data_grid_onEditingStart_0_listener($event) { return ctx.onEditingStart($event); })("onRowRemoved", function CaucaManagementGroupComponent_Template_cauca_dx_data_grid_onRowRemoved_0_listener($event) { return ctx.onRowRemoved($event); });
|
|
233
|
+
i0.ɵɵelementStart(1, "dxi-column", 1);
|
|
234
|
+
i0.ɵɵpipe(2, "translate");
|
|
235
|
+
i0.ɵɵelement(3, "dxi-validation-rule", 2);
|
|
236
|
+
i0.ɵɵpipe(4, "translate");
|
|
237
|
+
i0.ɵɵelementEnd();
|
|
238
|
+
i0.ɵɵelement(5, "dxi-column", 3);
|
|
239
|
+
i0.ɵɵpipe(6, "translate");
|
|
240
|
+
i0.ɵɵelement(7, "dxi-column", 4);
|
|
241
|
+
i0.ɵɵpipe(8, "translate");
|
|
242
|
+
i0.ɵɵelement(9, "dxi-column", 5);
|
|
243
|
+
i0.ɵɵpipe(10, "translate");
|
|
244
|
+
i0.ɵɵelement(11, "dxo-export", 6);
|
|
245
|
+
i0.ɵɵelementStart(12, "dxo-editing", 7);
|
|
246
|
+
i0.ɵɵelement(13, "dxo-popup", 8);
|
|
247
|
+
i0.ɵɵpipe(14, "translate");
|
|
248
|
+
i0.ɵɵelementStart(15, "dxo-form", 9);
|
|
249
|
+
i0.ɵɵelement(16, "dxi-item", 10)(17, "dxi-item", 11)(18, "dxi-item", 12)(19, "dxi-item", 13);
|
|
250
|
+
i0.ɵɵelementEnd()();
|
|
251
|
+
i0.ɵɵtemplate(20, CaucaManagementGroupComponent_div_20_Template, 2, 4, "div", 14);
|
|
252
|
+
i0.ɵɵtemplate(21, CaucaManagementGroupComponent_div_21_Template, 3, 6, "div", 14);
|
|
253
|
+
i0.ɵɵelementEnd();
|
|
254
|
+
} if (rf & 2) {
|
|
255
|
+
i0.ɵɵproperty("allowPrint", ctx.showPrintButton)("dataSource", ctx.groups);
|
|
256
|
+
i0.ɵɵadvance(1);
|
|
257
|
+
i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(2, 22, "management.name"));
|
|
258
|
+
i0.ɵɵadvance(2);
|
|
259
|
+
i0.ɵɵproperty("message", i0.ɵɵpipeBind1(4, 24, "management.groupNameAlreadyUsed"))("validationCallback", ctx.groupNameAlreadyUsedValidation);
|
|
260
|
+
i0.ɵɵadvance(2);
|
|
261
|
+
i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(6, 26, "management.assignableByAllUsers"));
|
|
262
|
+
i0.ɵɵadvance(2);
|
|
263
|
+
i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(8, 28, "management.users"))("calculateCellValue", ctx.calculateUsersCellValue);
|
|
264
|
+
i0.ɵɵadvance(2);
|
|
265
|
+
i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(10, 30, "management.permissions"))("visible", false);
|
|
266
|
+
i0.ɵɵadvance(2);
|
|
267
|
+
i0.ɵɵproperty("enabled", false);
|
|
268
|
+
i0.ɵɵadvance(1);
|
|
269
|
+
i0.ɵɵproperty("allowAdding", true)("allowUpdating", true)("allowDeleting", true)("useIcons", true);
|
|
270
|
+
i0.ɵɵadvance(1);
|
|
271
|
+
i0.ɵɵproperty("showTitle", true)("title", i0.ɵɵpipeBind1(14, 32, "management.group"))("fullScreen", !ctx.showColumn);
|
|
272
|
+
i0.ɵɵadvance(2);
|
|
273
|
+
i0.ɵɵproperty("labelLocation", ctx.showColumnXS ? "left" : "top");
|
|
274
|
+
i0.ɵɵadvance(1);
|
|
275
|
+
i0.ɵɵproperty("isRequired", true);
|
|
276
|
+
i0.ɵɵadvance(4);
|
|
277
|
+
i0.ɵɵproperty("dxTemplateOf", "usersEditTemplate");
|
|
278
|
+
i0.ɵɵadvance(1);
|
|
279
|
+
i0.ɵɵproperty("dxTemplateOf", "permissionsEditTemplate");
|
|
280
|
+
} }, directives: [i5.CaucaDataGridComponent, i6.DxiColumnComponent, i6.DxiValidationRuleComponent, i6.DxoExportComponent, i6.DxoEditingComponent, i6.DxoPopupComponent, i6.DxoFormComponent, i6.DxiItemComponent, i7.DxTemplateDirective, i8.DxTagBoxComponent, i9.DxListComponent, i10.DxCheckBoxComponent], pipes: [i11.TranslatePipe], styles: [""] });
|
|
281
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaucaManagementGroupComponent, [{
|
|
282
|
+
type: Component,
|
|
283
|
+
args: [{ selector: 'cauca-management-group', template: "<cauca-dx-data-grid [allowPrint]=\"showPrintButton\" keyExpr=\"id\" [dataSource]=\"groups\"\n (onRowInserted)=\"onRowInserted($event)\" (onInitNewRow)=\"onInitNewRow()\" (onRowUpdated)=\"onRowUpdated($event)\"\n (onEditingStart)=\"onEditingStart($event)\" (onRowRemoved)=\"onRowRemoved($event)\">\n\n <dxi-column dataField=\"name\" [caption]=\"'management.name' | translate\">\n <dxi-validation-rule type=\"async\" [message]=\"'management.groupNameAlreadyUsed' | translate\"\n [validationCallback]=\"groupNameAlreadyUsedValidation\"></dxi-validation-rule>\n </dxi-column>\n <dxi-column dataField=\"assignableByAllUsers\" [caption]=\"'management.assignableByAllUsers' | translate\"\n dataType=\"boolean\">\n </dxi-column>\n <dxi-column dataField=\"users\" [caption]=\"'management.users' | translate\" editCellTemplate=\"usersEditTemplate\"\n [calculateCellValue]=\"calculateUsersCellValue\">\n </dxi-column>\n <dxi-column dataField=\"permissions\" [caption]=\"'management.permissions' | translate\" [visible]=\"false\"\n editCellTemplate=\"permissionsEditTemplate\">\n </dxi-column>\n <dxo-export [enabled]=\"false\"></dxo-export>\n <dxo-editing mode=\"popup\" [allowAdding]=\"true\" [allowUpdating]=\"true\" [allowDeleting]=\"true\" [useIcons]=\"true\">\n <dxo-popup [showTitle]=\"true\" [title]=\"'management.group' | translate\" [fullScreen]=\"!showColumn\"></dxo-popup>\n <dxo-form colCount=\"1\" [labelLocation]=\"showColumnXS ? 'left' : 'top'\">\n <dxi-item dataField=\"name\" [isRequired]=\"true\"></dxi-item>\n <dxi-item dataField=\"users\"></dxi-item>\n <dxi-item dataField=\"permissions\"></dxi-item>\n <dxi-item dataField=\"assignableByAllUsers\"></dxi-item>\n </dxo-form>\n </dxo-editing>\n\n <div *dxTemplate=\"let field of 'usersEditTemplate'\">\n <dx-tag-box valueExpr=\"id\" [displayExpr]=\"fullName\" [dataSource]=\"users\" [searchEnabled]=\"true\"\n [searchExpr]=\"fullName\" (onInitialized)=\"getGroupUser(field, $event)\"\n (onValueChanged)=\"setGroupUser(field, $event)\">\n </dx-tag-box>\n </div>\n <div *dxTemplate=\"let field of 'permissionsEditTemplate'\">\n <dx-list [dataSource]=\"permissions\" itemTemplate=\"rowTemplate\" [searchEnabled]=\"true\"\n [searchExpr]=\"['name', 'tag']\" [hoverStateEnabled]=\"hoverStatePermission\">\n <div *dxTemplate=\"let permission of 'rowTemplate'\">\n <dx-check-box [text]=\"permission.name\" (onInitialized)=\"getPermissionStatus(field, permission, $event)\"\n (onValueChanged)=\"checkBoxToggled(field, permission, $event)\">\n </dx-check-box>\n </div>\n </dx-list>\n </div>\n</cauca-dx-data-grid>", styles: [""] }]
|
|
284
|
+
}], function () { return [{ type: i1.ManagementGroupService }, { type: i2.ManagementUserService }, { type: i3.ManagementPermissionService }, { type: i4.BreakpointObserver }]; }, { showPrintButton: [{
|
|
285
|
+
type: Input
|
|
286
|
+
}], hoverStatePermission: [{
|
|
287
|
+
type: Input
|
|
288
|
+
}] }); })();
|
|
289
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F1Y2EtbWFuYWdlbWVudC1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYXVjYS1tYW5hZ2VtZW50L3NyYy9saWIvY2F1Y2EtbWFuYWdlbWVudC1ncm91cC9jYXVjYS1tYW5hZ2VtZW50LWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhdWNhLW1hbmFnZW1lbnQvc3JjL2xpYi9jYXVjYS1tYW5hZ2VtZW50LWdyb3VwL2NhdWNhLW1hbmFnZW1lbnQtZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7SUMwQmpDLDJCQUFvRCxxQkFBQTtJQUVwQixpUUFBaUIscUNBQTJCLElBQUMsc1BBQ25ELHFDQUEyQixJQUR3QjtJQUV6RSxpQkFBYSxFQUFBOzs7SUFIYyxlQUF3QjtJQUF4Qiw2Q0FBd0IsNEJBQUEsdUJBQUEsK0JBQUE7Ozs7SUFRL0MsMkJBQW1ELHVCQUFBO0lBQ1IsOFRBQWlCLDJEQUE4QyxJQUFDLG9UQUNqRix3REFBMEMsSUFEdUM7SUFFdkcsaUJBQWUsRUFBQTs7O0lBRkQsZUFBd0I7SUFBeEIseUNBQXdCOzs7O0lBSmxELDJCQUEwRCxrQkFBQTtJQUdsRCxzRkFJTTtJQUNWLGlCQUFVLEVBQUE7OztJQVBELGVBQTBCO0lBQTFCLCtDQUEwQix1QkFBQSwwQ0FBQSxrREFBQTtJQUVFLGVBQWdCO0lBQWhCLDRDQUFnQjs7QURwQjdELE1BQU0sT0FBTyw2QkFBNkI7SUFnQnRDLFlBQ1ksc0JBQThDLEVBQzlDLHFCQUE0QyxFQUM1QywyQkFBd0QsRUFDaEUsa0JBQXNDO1FBSDlCLDJCQUFzQixHQUF0QixzQkFBc0Is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LGVBQXlEO1FBQXpELGtGQUF5RDtRQUd4RSxlQUEwQztRQUExQyxtRUFBMEMsbURBQUE7UUFHcEMsZUFBZ0Q7UUFBaEQsMEVBQWdELGtCQUFBO1FBR3hFLGVBQWlCO1FBQWpCLCtCQUFpQjtRQUNILGVBQW9CO1FBQXBCLGtDQUFvQix1QkFBQSx1QkFBQSxrQkFBQTtRQUMvQixlQUFrQjtRQUFsQixnQ0FBa0IscURBQUEsK0JBQUE7UUFDTixlQUErQztRQUEvQyxpRUFBK0M7UUFDdkMsZUFBbUI7UUFBbkIsaUNBQW1CO1FBTzFCLGVBQXNCO1FBQXRCLGtEQUFzQjtRQU10QixlQUE0QjtRQUE1Qix3REFBNEI7O3VGRGpCL0MsNkJBQTZCO2NBTHpDLFNBQVM7MkJBQ0ksd0JBQXdCO3dMQU0zQixlQUFlO2tCQURyQixLQUFLO1lBR0Msb0JBQW9CO2tCQUQxQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFVzZXJNb2RlbCB9IGZyb20gJy4uL3NoYXJlZC9tb2RlbHMvdXNlci1tb2RlbCc7XG5pbXBvcnQgeyBVc2VyR3JvdXBNb2RlbCB9IGZyb20gJy4uL3NoYXJlZC9tb2RlbHMvdXNlci1ncm91cC1tb2RlbCc7XG5pbXBvcnQgeyBHcm91cE1vZGVsIH0gZnJvbSAnLi4vc2hhcmVkL21vZGVscy9ncm91cC1tb2RlbCc7XG5pbXBvcnQgeyBHcm91cFBlcm1pc3Npb25Nb2RlbCB9IGZyb20gJy4uL3NoYXJlZC9tb2RlbHMvZ3JvdXAtcGVybWlzc2lvbi1tb2RlbCc7XG5pbXBvcnQgeyBNYW5hZ2VtZW50R3JvdXBTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL3NlcnZpY2VzL21hbmFnZW1lbnQtZ3JvdXAuc2VydmljZSc7XG5pbXBvcnQgeyBNYW5hZ2VtZW50VXNlclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvc2VydmljZXMvbWFuYWdlbWVudC11c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvbk1vZGVsIH0gZnJvbSAnLi4vc2hhcmVkL21vZGVscy9wZXJtaXNzaW9uLW1vZGVsJztcbmltcG9ydCB7IE1hbmFnZW1lbnRQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9tYW5hZ2VtZW50LXBlcm1pc3Npb24uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY2F1Y2EtbWFuYWdlbWVudC1ncm91cCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhdWNhLW1hbmFnZW1lbnQtZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhdWNhLW1hbmFnZW1lbnQtZ3JvdXAuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDYXVjYU1hbmFnZW1lbnRHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd1ByaW50QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBob3ZlclN0YXRlUGVybWlzc2lvbiA9IHRydWU7XG5cbiAgICBwdWJsaWMgZ3JvdXBzOiBHcm91cE1vZGVsW10gPSBbXTtcbiAgICBwdWJsaWMgdXNlcnM6IFVzZXJNb2RlbFtdID0gW107XG4gICAgcHVibGljIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uTW9kZWxbXSA9IFtdO1xuICAgIHB1YmxpYyB1c2VyRnVsbE5hbWU6IGFueSA9IHt9O1xuICAgIHB1YmxpYyBzaG93Q29sdW1uID0gdHJ1ZTtcbiAgICBwdWJsaWMgc2hvd0NvbHVtblhTID0gdHJ1ZTtcbiAgICBwdWJsaWMgdHJhbnNsYXRpb25zOiBhbnkgPSBbXTtcblxuICAgIHByaXZhdGUgZ3JvdXBVc2VyczogYW55O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIG1hbmFnZW1lbnRHcm91cFNlcnZpY2U6IE1hbmFnZW1lbnRHcm91cFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbWFuYWdlbWVudFVzZXJTZXJ2aWNlOiBNYW5hZ2VtZW50VXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbWFuYWdlbWVudFBlcm1pc3Npb25TZXJ2aWNlOiBNYW5hZ2VtZW50UGVybWlzc2lvblNlcnZpY2UsXG4gICAgICAgIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyLFxuICAgICkge1xuICAgICAgICBicmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZShbJyhtYXgtd2lkdGg6IDEwMDBweCknXSkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93Q29sdW1uID0gIXJlc3VsdC5tYXRjaGVzO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoWycobWF4LXdpZHRoOiA2MDBweCknXSkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93Q29sdW1uWFMgPSAhcmVzdWx0Lm1hdGNoZXM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tYW5hZ2VtZW50VXNlclNlcnZpY2UuZ2V0QWxsPFVzZXJNb2RlbD4oKS5zdWJzY3JpYmUoKGRhdGE6IFVzZXJNb2RlbFtdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVzZXJzID0gZGF0YTtcbiAgICAgICAgICAgIHRoaXMudXNlcnMuZm9yRWFjaCgodXNlcjogVXNlck1vZGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHVzZXIuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXIuZmlyc3ROYW1lICE9PSAnJyAmJiB1c2VyLmxhc3ROYW1lICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyRnVsbE5hbWVbdXNlci5pZF0gID0gYCR7dXNlci5maXJzdE5hbWV9ICR7dXNlci5sYXN0TmFtZX1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1hbmFnZW1lbnRQZXJtaXNzaW9uU2VydmljZS5nZXRBbGwoKS5zdWJzY3JpYmUoKHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uTW9kZWxbXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGVybWlzc2lvbkluZGV4ID0gcGVybWlzc2lvbnMuZmluZEluZGV4KChjOiBQZXJtaXNzaW9uTW9kZWwpID0+IGMudGFnID09PSAnQ2FuQWNjZXNzUGVybWlzc2lvbnMnKTtcbiAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbnMuc3BsaWNlKHBlcm1pc3Npb25JbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5zb3J0KChhOiBQZXJtaXNzaW9uTW9kZWwsIGI6IFBlcm1pc3Npb25Nb2RlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhLm5hbWUgPCBiLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYS5uYW1lID4gYi5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXRHcm91cHMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZnVsbE5hbWUoZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7ZGF0YS5maXJzdE5hbWV9ICR7ZGF0YS5sYXN0TmFtZX1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRHcm91cFVzZXIoZmllbGQ6IGFueSwgZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVzZXJzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5ncm91cFVzZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwVXNlcnMuZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdXNlcnMucHVzaCh1c2VyLmlkVXNlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlLmNvbXBvbmVudC5vcHRpb24oJ3ZhbHVlJywgdXNlcnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRHcm91cFVzZXIoZmllbGQ6IGFueSwgZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGdyb3VwVXNlcjogVXNlckdyb3VwTW9kZWxbXSA9IFtdO1xuXG4gICAgICAgIGUudmFsdWUuZm9yRWFjaCgoaWRVc2VyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwSW5kZXggPSAoZmllbGQuZGF0YS51c2VycyB8fCBbXSkuZmluZEluZGV4KChnOiBhbnkpID0+IGcuaWRVc2VyID09PSBpZFVzZXIpO1xuXG4gICAgICAgICAgICBpZiAoZ3JvdXBJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBncm91cFVzZXIucHVzaCh7IGlkVXNlciwgfSBhcyBVc2VyR3JvdXBNb2RlbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdyb3VwVXNlci5wdXNoKGZpZWxkLmRhdGEudXNlcnNbZ3JvdXBJbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBmaWVsZC5zZXRWYWx1ZShKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdyb3VwVXNlcikpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0R3JvdXBQZXJtaXNzaW9uKGZpZWxkOiBhbnksIGU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBncm91cFVzZXI6IFVzZXJHcm91cE1vZGVsW10gPSBbXTtcblxuICAgICAgICBlLnZhbHVlLmZvckVhY2goKGlkVXNlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBncm91cFVzZXIucHVzaCh7XG4gICAgICAgICAgICAgICAgaWRVc2VyLFxuICAgICAgICAgICAgfSBhcyBVc2VyR3JvdXBNb2RlbCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZpZWxkLnNldFZhbHVlKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ3JvdXBVc2VyKSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQZXJtaXNzaW9uU3RhdHVzKGZpZWxkOiBhbnksIHBlcm1pc3Npb246IGFueSwgZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGdyb3VwUGVybWlzc2lvbiA9IChmaWVsZC52YWx1ZSB8fCBbXSkuZmluZCgocDogYW55KSA9PiBwLmlkTW9kdWxlUGVybWlzc2lvbiA9PT0gcGVybWlzc2lvbi5pZCk7XG5cbiAgICAgICAgaWYgKGdyb3VwUGVybWlzc2lvbikge1xuICAgICAgICAgICAgZS5jb21wb25lbnQub3B0aW9uKCd2YWx1ZScsIGdyb3VwUGVybWlzc2lvbi5pc0FsbG93ZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZS5jb21wb25lbnQub3B0aW9uKCd2YWx1ZScsIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2hlY2tCb3hUb2dnbGVkKGZpZWxkOiBhbnksIHBlcm1pc3Npb246IGFueSwgZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChlLmNvbXBvbmVudC5za2lwT25WYWx1ZUNoYW5nZWQpIHtcbiAgICAgICAgICAgIGUuY29tcG9uZW50LnNraXBPblZhbHVlQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlLmNvbXBvbmVudC5zZXRVbmRlZmluZWROZXh0VGltZSkge1xuICAgICAgICAgICAgZS5jb21wb25lbnQuc2V0VW5kZWZpbmVkTmV4dFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIGUuY29tcG9uZW50LnNraXBPblZhbHVlQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICBlLmNvbXBvbmVudC5vcHRpb24oJ3ZhbHVlJywgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UGVybWlzc2lvblN0YXR1cyhmaWVsZCwgcGVybWlzc2lvbiwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZS52YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGUuY29tcG9uZW50LnNldFVuZGVmaW5lZE5leHRUaW1lID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0UGVybWlzc2lvblN0YXR1cyhmaWVsZCwgcGVybWlzc2lvbiwgZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUm93SW5zZXJ0ZWQoZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2F2ZUdyb3VwKGUuZGF0YSBhcyBHcm91cE1vZGVsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Sb3dVcGRhdGVkKGU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNhdmVHcm91cChlLmRhdGEgYXMgR3JvdXBNb2RlbCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUm93UmVtb3ZlZChlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSAoZS5kYXRhIGFzIEdyb3VwTW9kZWwpO1xuICAgICAgICB0aGlzLm1hbmFnZW1lbnRHcm91cFNlcnZpY2UuZGVsZXRlKGdyb3VwLmlkKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRHcm91cHMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNhbGN1bGF0ZVVzZXJzQ2VsbFZhbHVlID0gKGU6IGFueSk6IHN0cmluZyA9PiB7XG4gICAgICAgIGNvbnN0IHVzZXJzID0gKGUudXNlcnMgPyBlLnVzZXJzIGFzIFVzZXJHcm91cE1vZGVsW10gOiBbXSk7XG4gICAgICAgIGxldCB1c2Vyc05hbWVzOiBhbnlbXSA9IFtdO1xuICAgICAgICB1c2Vycy5mb3JFYWNoKCh1c2VyOiBVc2VyR3JvdXBNb2RlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdXNlckdyb3VwID0gdGhpcy51c2Vycy5maWx0ZXIoKHU6IFVzZXJNb2RlbCkgPT4gdS5pZCA9PT0gdXNlci5pZFVzZXIpO1xuICAgICAgICAgICAgaWYgKHVzZXJHcm91cCAmJiB1c2VyR3JvdXBbMF0pIHtcbiAgICAgICAgICAgICAgICB1c2Vyc05hbWVzLnB1c2godXNlckdyb3VwWzBdLmZpcnN0TmFtZSArICcgJyArIHVzZXJHcm91cFswXS5sYXN0TmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB1c2Vyc05hbWVzID0gdXNlcnNOYW1lcy5zb3J0KChvbmU6IHN0cmluZywgdHdvOiBzdHJpbmcpID0+IChvbmUgPCB0d28gPyAtMSA6IDEpKTtcbiAgICAgICAgcmV0dXJuIHVzZXJzTmFtZXMuam9pbignLCAnKTtcbiAgICB9O1xuXG4gICAgcHVibGljIG9uRWRpdGluZ1N0YXJ0KGU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmdyb3VwVXNlcnMgPSBlLmRhdGEudXNlcnM7XG4gICAgfVxuXG4gICAgcHVibGljIG9uSW5pdE5ld1JvdygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ncm91cFVzZXJzID0gW107XG4gICAgfVxuXG4gICAgcHVibGljIGdyb3VwTmFtZUFscmVhZHlVc2VkVmFsaWRhdGlvbiA9IChlOiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHRoaXMubWFuYWdlbWVudEdyb3VwU2VydmljZS5oYXNFeGlzdGluZ0dyb3VwTmFtZShlLmRhdGEpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGV4aXN0OiBib29sZWFuKSA9PiAhZXhpc3QpXG4gICAgICAgICkudG9Qcm9taXNlKCk7XG5cbiAgICBwcml2YXRlIHNldFBlcm1pc3Npb25TdGF0dXMoZmllbGQ6IGFueSwgcGVybWlzc2lvbjogYW55LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGdyb3VwUGVybWlzc2lvbnMgPSBmaWVsZC52YWx1ZSB8fCBbXTtcbiAgICAgICAgY29uc3QgZ3JvdXBJbmRleCA9IGdyb3VwUGVybWlzc2lvbnMuZmluZEluZGV4KChwOiBHcm91cFBlcm1pc3Npb25Nb2RlbCkgPT4gcC5pZE1vZHVsZVBlcm1pc3Npb24gPT09IHBlcm1pc3Npb24uaWQpO1xuXG4gICAgICAgIGlmIChncm91cEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNbZ3JvdXBJbmRleF0uaXNBbGxvd2VkID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBncm91cFBlcm1pc3Npb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkTW9kdWxlUGVybWlzc2lvbjogcGVybWlzc2lvbi5pZCxcbiAgICAgICAgICAgICAgICBpc0FsbG93ZWQ6IHZhbHVlLFxuICAgICAgICAgICAgfSBhcyBHcm91cFBlcm1pc3Npb25Nb2RlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBmaWVsZC5zZXRWYWx1ZShKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdyb3VwUGVybWlzc2lvbnMpKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzYXZlR3JvdXAoZ3JvdXA6IEdyb3VwTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVQZXJtaXNzaW9uVW5kZWZpbmVkKGdyb3VwKTtcbiAgICAgICAgaWYgKGdyb3VwLnVzZXJzKSB7XG4gICAgICAgICAgICBncm91cC51c2Vycy5mb3JFYWNoKCh1c2VyR3JvdXA6IFVzZXJHcm91cE1vZGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgdXNlckdyb3VwLmlkR3JvdXAgPSBncm91cC5pZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChncm91cC5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgZ3JvdXAucGVybWlzc2lvbnMuZm9yRWFjaCgoZ3JvdXBQZXJtaXNzaW9uOiBHcm91cFBlcm1pc3Npb25Nb2RlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbi5pZEdyb3VwID0gZ3JvdXAuaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hbmFnZW1lbnRHcm91cFNlcnZpY2Uuc2F2ZShncm91cCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JvdXBzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdyb3VwVXNlcnMgPSBbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVBlcm1pc3Npb25VbmRlZmluZWQoZ3JvdXA6IEdyb3VwTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgZ3JvdXAucGVybWlzc2lvbnMgPSBncm91cC5wZXJtaXNzaW9ucy5maWx0ZXIoKHBlcm1pc3Npb246IEdyb3VwUGVybWlzc2lvbk1vZGVsKSA9PiBwZXJtaXNzaW9uLmlzQWxsb3dlZCAhPT0gdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEdyb3VwcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tYW5hZ2VtZW50R3JvdXBTZXJ2aWNlLmdldEFsbCgpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB0aGlzLmdyb3VwcyA9IGRhdGEpO1xuICAgIH1cbn1cbiIsIjxjYXVjYS1keC1kYXRhLWdyaWQgW2FsbG93UHJpbnRdPVwic2hvd1ByaW50QnV0dG9uXCIga2V5RXhwcj1cImlkXCIgW2RhdGFTb3VyY2VdPVwiZ3JvdXBzXCJcbiAgICAob25Sb3dJbnNlcnRlZCk9XCJvblJvd0luc2VydGVkKCRldmVudClcIiAob25Jbml0TmV3Um93KT1cIm9uSW5pdE5ld1JvdygpXCIgKG9uUm93VXBkYXRlZCk9XCJvblJvd1VwZGF0ZWQoJGV2ZW50KVwiXG4gICAgKG9uRWRpdGluZ1N0YXJ0KT1cIm9uRWRpdGluZ1N0YXJ0KCRldmVudClcIiAob25Sb3dSZW1vdmVkKT1cIm9uUm93UmVtb3ZlZCgkZXZlbnQpXCI+XG5cbiAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJuYW1lXCIgW2NhcHRpb25dPVwiJ21hbmFnZW1lbnQubmFtZScgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgPGR4aS12YWxpZGF0aW9uLXJ1bGUgdHlwZT1cImFzeW5jXCIgW21lc3NhZ2VdPVwiJ21hbmFnZW1lbnQuZ3JvdXBOYW1lQWxyZWFkeVVzZWQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFt2YWxpZGF0aW9uQ2FsbGJhY2tdPVwiZ3JvdXBOYW1lQWxyZWFkeVVzZWRWYWxpZGF0aW9uXCI+PC9keGktdmFsaWRhdGlvbi1ydWxlPlxuICAgIDwvZHhpLWNvbHVtbj5cbiAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJhc3NpZ25hYmxlQnlBbGxVc2Vyc1wiIFtjYXB0aW9uXT1cIidtYW5hZ2VtZW50LmFzc2lnbmFibGVCeUFsbFVzZXJzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIGRhdGFUeXBlPVwiYm9vbGVhblwiPlxuICAgIDwvZHhpLWNvbHVtbj5cbiAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJ1c2Vyc1wiIFtjYXB0aW9uXT1cIidtYW5hZ2VtZW50LnVzZXJzJyB8IHRyYW5zbGF0ZVwiIGVkaXRDZWxsVGVtcGxhdGU9XCJ1c2Vyc0VkaXRUZW1wbGF0ZVwiXG4gICAgICAgIFtjYWxjdWxhdGVDZWxsVmFsdWVdPVwiY2FsY3VsYXRlVXNlcnNDZWxsVmFsdWVcIj5cbiAgICA8L2R4aS1jb2x1bW4+XG4gICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwicGVybWlzc2lvbnNcIiBbY2FwdGlvbl09XCInbWFuYWdlbWVudC5wZXJtaXNzaW9ucycgfCB0cmFuc2xhdGVcIiBbdmlzaWJsZV09XCJmYWxzZVwiXG4gICAgICAgIGVkaXRDZWxsVGVtcGxhdGU9XCJwZXJtaXNzaW9uc0VkaXRUZW1wbGF0ZVwiPlxuICAgIDwvZHhpLWNvbHVtbj5cbiAgICA8ZHhvLWV4cG9ydCBbZW5hYmxlZF09XCJmYWxzZVwiPjwvZHhvLWV4cG9ydD5cbiAgICA8ZHhvLWVkaXRpbmcgbW9kZT1cInBvcHVwXCIgW2FsbG93QWRkaW5nXT1cInRydWVcIiBbYWxsb3dVcGRhdGluZ109XCJ0cnVlXCIgW2FsbG93RGVsZXRpbmddPVwidHJ1ZVwiIFt1c2VJY29uc109XCJ0cnVlXCI+XG4gICAgICAgIDxkeG8tcG9wdXAgW3Nob3dUaXRsZV09XCJ0cnVlXCIgW3RpdGxlXT1cIidtYW5hZ2VtZW50Lmdyb3VwJyB8IHRyYW5zbGF0ZVwiIFtmdWxsU2NyZWVuXT1cIiFzaG93Q29sdW1uXCI+PC9keG8tcG9wdXA+XG4gICAgICAgIDxkeG8tZm9ybSBjb2xDb3VudD1cIjFcIiBbbGFiZWxMb2NhdGlvbl09XCJzaG93Q29sdW1uWFMgPyAnbGVmdCcgOiAndG9wJ1wiPlxuICAgICAgICAgICAgPGR4aS1pdGVtIGRhdGFGaWVsZD1cIm5hbWVcIiBbaXNSZXF1aXJlZF09XCJ0cnVlXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgIDxkeGktaXRlbSBkYXRhRmllbGQ9XCJ1c2Vyc1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICA8ZHhpLWl0ZW0gZGF0YUZpZWxkPVwicGVybWlzc2lvbnNcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgPGR4aS1pdGVtIGRhdGFGaWVsZD1cImFzc2lnbmFibGVCeUFsbFVzZXJzXCI+PC9keGktaXRlbT5cbiAgICAgICAgPC9keG8tZm9ybT5cbiAgICA8L2R4by1lZGl0aW5nPlxuXG4gICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBmaWVsZCBvZiAndXNlcnNFZGl0VGVtcGxhdGUnXCI+XG4gICAgICAgIDxkeC10YWctYm94IHZhbHVlRXhwcj1cImlkXCIgW2Rpc3BsYXlFeHByXT1cImZ1bGxOYW1lXCIgW2RhdGFTb3VyY2VdPVwidXNlcnNcIiBbc2VhcmNoRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzZWFyY2hFeHByXT1cImZ1bGxOYW1lXCIgKG9uSW5pdGlhbGl6ZWQpPVwiZ2V0R3JvdXBVc2VyKGZpZWxkLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJzZXRHcm91cFVzZXIoZmllbGQsICRldmVudClcIj5cbiAgICAgICAgPC9keC10YWctYm94PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZmllbGQgb2YgJ3Blcm1pc3Npb25zRWRpdFRlbXBsYXRlJ1wiPlxuICAgICAgICA8ZHgtbGlzdCBbZGF0YVNvdXJjZV09XCJwZXJtaXNzaW9uc1wiIGl0ZW1UZW1wbGF0ZT1cInJvd1RlbXBsYXRlXCIgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2VhcmNoRXhwcl09XCJbJ25hbWUnLCAndGFnJ11cIiBbaG92ZXJTdGF0ZUVuYWJsZWRdPVwiaG92ZXJTdGF0ZVBlcm1pc3Npb25cIj5cbiAgICAgICAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgcGVybWlzc2lvbiBvZiAncm93VGVtcGxhdGUnXCI+XG4gICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBbdGV4dF09XCJwZXJtaXNzaW9uLm5hbWVcIiAob25Jbml0aWFsaXplZCk9XCJnZXRQZXJtaXNzaW9uU3RhdHVzKGZpZWxkLCBwZXJtaXNzaW9uLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImNoZWNrQm94VG9nZ2xlZChmaWVsZCwgcGVybWlzc2lvbiwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvZHgtY2hlY2stYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZHgtbGlzdD5cbiAgICA8L2Rpdj5cbjwvY2F1Y2EtZHgtZGF0YS1ncmlkPiJdfQ==
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { UserModel } from '../shared/models/user-model';
|
|
3
|
+
import { map } from 'rxjs/operators';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../shared/services/management-user.service";
|
|
6
|
+
import * as i2 from "@angular/cdk/layout";
|
|
7
|
+
import * as i3 from "@cauca-911/devextreme";
|
|
8
|
+
import * as i4 from "devextreme-angular/ui/nested";
|
|
9
|
+
import * as i5 from "@ngx-translate/core";
|
|
10
|
+
export class CaucaManagementUserComponent {
|
|
11
|
+
constructor(managementUserService, breakpointObserver) {
|
|
12
|
+
this.managementUserService = managementUserService;
|
|
13
|
+
this.users = [
|
|
14
|
+
new UserModel()
|
|
15
|
+
];
|
|
16
|
+
this.showColumnXS = true;
|
|
17
|
+
this.userNameAlreadyUsedValidation = (e) => this.managementUserService.hasExistingUserName(e.data).pipe(map((exist) => !exist)).toPromise();
|
|
18
|
+
breakpointObserver.observe(['(max-width: 600px)']).subscribe((result) => {
|
|
19
|
+
this.showColumnXS = !result.matches;
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
ngOnInit() {
|
|
23
|
+
this.getUsers();
|
|
24
|
+
}
|
|
25
|
+
onRowInserted(e) {
|
|
26
|
+
this.saveGroup(e.data);
|
|
27
|
+
}
|
|
28
|
+
onRowUpdated(e) {
|
|
29
|
+
this.saveGroup(e.key);
|
|
30
|
+
}
|
|
31
|
+
onRowRemoved(e) {
|
|
32
|
+
const user = e.data;
|
|
33
|
+
this.managementUserService.delete(user.id).subscribe((data) => {
|
|
34
|
+
this.getUsers();
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
saveGroup(user) {
|
|
38
|
+
this.managementUserService.save(user).subscribe(() => {
|
|
39
|
+
this.getUsers();
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
getUsers() {
|
|
43
|
+
this.managementUserService.getAll().subscribe((data) => this.users = data);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
CaucaManagementUserComponent.ɵfac = function CaucaManagementUserComponent_Factory(t) { return new (t || CaucaManagementUserComponent)(i0.ɵɵdirectiveInject(i1.ManagementUserService), i0.ɵɵdirectiveInject(i2.BreakpointObserver)); };
|
|
47
|
+
CaucaManagementUserComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaucaManagementUserComponent, selectors: [["cauca-management-user"]], decls: 22, vars: 31, consts: [["keyExpr", "id", 3, "dataSource", "onRowInserted", "onRowUpdated", "onRowRemoved"], ["dataField", "userName", 3, "caption"], ["type", "async", 3, "message", "validationCallback"], ["dataField", "isActive", 3, "caption", "visible"], ["dataField", "firstName", 3, "caption"], ["dataField", "lastName", 3, "caption"], ["dataField", "groups", 3, "caption"], ["mode", "popup", 3, "allowAdding", "allowUpdating", "allowDeleting", "useIcons"], [3, "showTitle", "title"], ["colCount", "2", 3, "labelLocation"], ["dataField", "userName", 3, "isRequired"], ["dataField", "isActive"], ["dataField", "firstName"], ["dataField", "lastName"], ["dataField", "group"]], template: function CaucaManagementUserComponent_Template(rf, ctx) { if (rf & 1) {
|
|
48
|
+
i0.ɵɵelementStart(0, "cauca-dx-data-grid", 0);
|
|
49
|
+
i0.ɵɵlistener("onRowInserted", function CaucaManagementUserComponent_Template_cauca_dx_data_grid_onRowInserted_0_listener($event) { return ctx.onRowInserted($event); })("onRowUpdated", function CaucaManagementUserComponent_Template_cauca_dx_data_grid_onRowUpdated_0_listener($event) { return ctx.onRowUpdated($event); })("onRowRemoved", function CaucaManagementUserComponent_Template_cauca_dx_data_grid_onRowRemoved_0_listener($event) { return ctx.onRowRemoved($event); });
|
|
50
|
+
i0.ɵɵelementStart(1, "dxi-column", 1);
|
|
51
|
+
i0.ɵɵpipe(2, "translate");
|
|
52
|
+
i0.ɵɵelement(3, "dxi-validation-rule", 2);
|
|
53
|
+
i0.ɵɵpipe(4, "translate");
|
|
54
|
+
i0.ɵɵelementEnd();
|
|
55
|
+
i0.ɵɵelement(5, "dxi-column", 3);
|
|
56
|
+
i0.ɵɵpipe(6, "translate");
|
|
57
|
+
i0.ɵɵelement(7, "dxi-column", 4);
|
|
58
|
+
i0.ɵɵpipe(8, "translate");
|
|
59
|
+
i0.ɵɵelement(9, "dxi-column", 5);
|
|
60
|
+
i0.ɵɵpipe(10, "translate");
|
|
61
|
+
i0.ɵɵelement(11, "dxi-column", 6);
|
|
62
|
+
i0.ɵɵpipe(12, "translate");
|
|
63
|
+
i0.ɵɵelementStart(13, "dxo-editing", 7);
|
|
64
|
+
i0.ɵɵelement(14, "dxo-popup", 8);
|
|
65
|
+
i0.ɵɵpipe(15, "translate");
|
|
66
|
+
i0.ɵɵelementStart(16, "dxo-form", 9);
|
|
67
|
+
i0.ɵɵelement(17, "dxi-item", 10)(18, "dxi-item", 11)(19, "dxi-item", 12)(20, "dxi-item", 13)(21, "dxi-item", 14);
|
|
68
|
+
i0.ɵɵelementEnd()()();
|
|
69
|
+
} if (rf & 2) {
|
|
70
|
+
i0.ɵɵproperty("dataSource", ctx.users);
|
|
71
|
+
i0.ɵɵadvance(1);
|
|
72
|
+
i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(2, 17, "management.userName"));
|
|
73
|
+
i0.ɵɵadvance(2);
|
|
74
|
+
i0.ɵɵproperty("message", i0.ɵɵpipeBind1(4, 19, "management.userNameAlreadyUsed"))("validationCallback", ctx.userNameAlreadyUsedValidation);
|
|
75
|
+
i0.ɵɵadvance(2);
|
|
76
|
+
i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(6, 21, "management.isActive"))("visible", false);
|
|
77
|
+
i0.ɵɵadvance(2);
|
|
78
|
+
i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(8, 23, "management.firstName"));
|
|
79
|
+
i0.ɵɵadvance(2);
|
|
80
|
+
i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(10, 25, "management.lastName"));
|
|
81
|
+
i0.ɵɵadvance(2);
|
|
82
|
+
i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(12, 27, "management.group"));
|
|
83
|
+
i0.ɵɵadvance(2);
|
|
84
|
+
i0.ɵɵproperty("allowAdding", true)("allowUpdating", true)("allowDeleting", true)("useIcons", true);
|
|
85
|
+
i0.ɵɵadvance(1);
|
|
86
|
+
i0.ɵɵproperty("showTitle", true)("title", i0.ɵɵpipeBind1(15, 29, "management.group"));
|
|
87
|
+
i0.ɵɵadvance(2);
|
|
88
|
+
i0.ɵɵproperty("labelLocation", ctx.showColumnXS ? "left" : "top");
|
|
89
|
+
i0.ɵɵadvance(1);
|
|
90
|
+
i0.ɵɵproperty("isRequired", true);
|
|
91
|
+
} }, directives: [i3.CaucaDataGridComponent, i4.DxiColumnComponent, i4.DxiValidationRuleComponent, i4.DxoEditingComponent, i4.DxoPopupComponent, i4.DxoFormComponent, i4.DxiItemComponent], pipes: [i5.TranslatePipe], styles: [""] });
|
|
92
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaucaManagementUserComponent, [{
|
|
93
|
+
type: Component,
|
|
94
|
+
args: [{ selector: 'cauca-management-user', template: "<cauca-dx-data-grid\n keyExpr=\"id\"\n [dataSource]=\"users\"\n (onRowInserted)=\"onRowInserted($event)\"\n (onRowUpdated)=\"onRowUpdated($event)\"\n (onRowRemoved)=\"onRowRemoved($event)\">\n\n <dxi-column dataField=\"userName\" [caption]=\"'management.userName' | translate\">\n <dxi-validation-rule type=\"async\" [message]=\"'management.userNameAlreadyUsed' | translate\" [validationCallback]=\"userNameAlreadyUsedValidation\"></dxi-validation-rule>\n </dxi-column>\n <dxi-column dataField=\"isActive\" [caption]=\"'management.isActive' | translate\" [visible]=\"false\"></dxi-column>\n <dxi-column dataField=\"firstName\" [caption]=\"'management.firstName' | translate\"></dxi-column>\n <dxi-column dataField=\"lastName\" [caption]=\"'management.lastName' | translate\"></dxi-column>\n <dxi-column dataField=\"groups\" [caption]=\"'management.group' | translate\"></dxi-column>\n\n <dxo-editing mode=\"popup\" [allowAdding]=\"true\" [allowUpdating]=\"true\" [allowDeleting]=\"true\" [useIcons]=\"true\">\n <dxo-popup [showTitle]=\"true\" [title]=\"'management.group' | translate\"></dxo-popup>\n <dxo-form colCount=\"2\" [labelLocation]=\"showColumnXS ? 'left' : 'top'\">\n <dxi-item dataField=\"userName\" [isRequired]=\"true\"></dxi-item>\n <dxi-item dataField=\"isActive\"></dxi-item>\n <dxi-item dataField=\"firstName\"></dxi-item>\n <dxi-item dataField=\"lastName\"></dxi-item>\n <dxi-item dataField=\"group\"></dxi-item>\n </dxo-form>\n </dxo-editing>\n</cauca-dx-data-grid>\n", styles: [""] }]
|
|
95
|
+
}], function () { return [{ type: i1.ManagementUserService }, { type: i2.BreakpointObserver }]; }, null); })();
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F1Y2EtbWFuYWdlbWVudC11c2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhdWNhLW1hbmFnZW1lbnQvc3JjL2xpYi9jYXVjYS1tYW5hZ2VtZW50LXVzZXIvY2F1Y2EtbWFuYWdlbWVudC11c2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhdWNhLW1hbmFnZW1lbnQvc3JjL2xpYi9jYXVjYS1tYW5hZ2VtZW50LXVzZXIvY2F1Y2EtbWFuYWdlbWVudC11c2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBR3hELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQU9yQyxNQUFNLE9BQU8sNEJBQTRCO0lBTXJDLFlBQ1kscUJBQTRDLEVBQ3BELGtCQUFzQztRQUQ5QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBTmpELFVBQUssR0FBZ0I7WUFDeEIsSUFBSSxTQUFTLEVBQUU7U0FDbEIsQ0FBQztRQUNLLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBOEJwQixrQ0FBNkIsR0FBRyxDQUFDLENBQUMsRUFBb0IsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUNuSCxHQUFHLENBQUMsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQ2xDLENBQUMsU0FBUyxFQUFFLENBQUM7UUExQmQsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQXVCLEVBQUUsRUFBRTtZQUNyRixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxRQUFRO1FBQ1gsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFTSxhQUFhLENBQUMsQ0FBTTtRQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFpQixDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVNLFlBQVksQ0FBQyxDQUFNO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQWdCLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU0sWUFBWSxDQUFDLENBQU07UUFDdEIsTUFBTSxJQUFJLEdBQUksQ0FBQyxDQUFDLElBQWtCLENBQUM7UUFDbkMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDL0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQU1PLFNBQVMsQ0FBQyxJQUFlO1FBQzdCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQVksSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM1RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sUUFBUTtRQUNaLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDL0YsQ0FBQzs7d0dBOUNRLDRCQUE0QjsrRUFBNUIsNEJBQTRCO1FDWHpDLDZDQUs4QztRQUZ0QywySUFBaUIseUJBQXFCLElBQUMsNEhBQ3ZCLHdCQUFvQixJQURHLDRIQUV2Qix3QkFBb0IsSUFGRztRQUkzQyxxQ0FBK0U7O1FBQzNFLHlDQUFzSzs7UUFDMUssaUJBQWE7UUFDYixnQ0FBOEc7O1FBQzlHLGdDQUE4Rjs7UUFDOUYsZ0NBQTRGOztRQUM1RixpQ0FBdUY7O1FBRXZGLHVDQUErRztRQUMzRyxnQ0FBbUY7O1FBQ25GLG9DQUF1RTtRQUNuRSxnQ0FBOEQsb0JBQUEsb0JBQUEsb0JBQUEsb0JBQUE7UUFLbEUsaUJBQVcsRUFBQSxFQUFBOztRQXJCWCxzQ0FBb0I7UUFLUyxlQUE2QztRQUE3QyxzRUFBNkM7UUFDeEMsZUFBd0Q7UUFBeEQsaUZBQXdELHlEQUFBO1FBRTdELGVBQTZDO1FBQTdDLHNFQUE2QyxrQkFBQTtRQUM1QyxlQUE4QztRQUE5Qyx1RUFBOEM7UUFDL0MsZUFBNkM7UUFBN0MsdUVBQTZDO1FBQy9DLGVBQTBDO1FBQTFDLG9FQUEwQztRQUUvQyxlQUFvQjtRQUFwQixrQ0FBb0IsdUJBQUEsdUJBQUEsa0JBQUE7UUFDL0IsZUFBa0I7UUFBbEIsZ0NBQWtCLHFEQUFBO1FBQ04sZUFBK0M7UUFBL0MsaUVBQStDO1FBQ25DLGVBQW1CO1FBQW5CLGlDQUFtQjs7dUZEUGpELDRCQUE0QjtjQUx4QyxTQUFTOzJCQUNJLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVc2VyTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL3VzZXItbW9kZWwnO1xuaW1wb3J0IHsgTWFuYWdlbWVudFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL3NlcnZpY2VzL21hbmFnZW1lbnQtdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludFN0YXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY2F1Y2EtbWFuYWdlbWVudC11c2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2F1Y2EtbWFuYWdlbWVudC11c2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jYXVjYS1tYW5hZ2VtZW50LXVzZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDYXVjYU1hbmFnZW1lbnRVc2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBwdWJsaWMgdXNlcnM6IFVzZXJNb2RlbFtdID0gW1xuICAgICAgICBuZXcgVXNlck1vZGVsKClcbiAgICBdO1xuICAgIHB1YmxpYyBzaG93Q29sdW1uWFMgPSB0cnVlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIG1hbmFnZW1lbnRVc2VyU2VydmljZTogTWFuYWdlbWVudFVzZXJTZXJ2aWNlLFxuICAgICAgICBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlcixcbiAgICApIHtcbiAgICAgICAgYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoWycobWF4LXdpZHRoOiA2MDBweCknXSkuc3Vic2NyaWJlKChyZXN1bHQ6IEJyZWFrcG9pbnRTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93Q29sdW1uWFMgPSAhcmVzdWx0Lm1hdGNoZXM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRVc2VycygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJvd0luc2VydGVkKGU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNhdmVHcm91cChlLmRhdGEgYXMgVXNlck1vZGVsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Sb3dVcGRhdGVkKGU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNhdmVHcm91cChlLmtleSBhcyBVc2VyTW9kZWwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJvd1JlbW92ZWQoZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVzZXIgPSAoZS5kYXRhIGFzIFVzZXJNb2RlbCk7XG4gICAgICAgIHRoaXMubWFuYWdlbWVudFVzZXJTZXJ2aWNlLmRlbGV0ZSh1c2VyLmlkKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRVc2VycygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlck5hbWVBbHJlYWR5VXNlZFZhbGlkYXRpb24gPSAoZSk6IFByb21pc2U8Ym9vbGVhbj4gPT4gdGhpcy5tYW5hZ2VtZW50VXNlclNlcnZpY2UuaGFzRXhpc3RpbmdVc2VyTmFtZShlLmRhdGEpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGV4aXN0OiBib29sZWFuKSA9PiAhZXhpc3QpXG4gICAgICAgICkudG9Qcm9taXNlKCk7XG5cbiAgICBwcml2YXRlIHNhdmVHcm91cCh1c2VyOiBVc2VyTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tYW5hZ2VtZW50VXNlclNlcnZpY2Uuc2F2ZTxVc2VyTW9kZWw+KHVzZXIpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldFVzZXJzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VXNlcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWFuYWdlbWVudFVzZXJTZXJ2aWNlLmdldEFsbDxVc2VyTW9kZWw+KCkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHRoaXMudXNlcnMgPSBkYXRhKTtcbiAgICB9XG59XG4iLCI8Y2F1Y2EtZHgtZGF0YS1ncmlkXG4gICAgICAgIGtleUV4cHI9XCJpZFwiXG4gICAgICAgIFtkYXRhU291cmNlXT1cInVzZXJzXCJcbiAgICAgICAgKG9uUm93SW5zZXJ0ZWQpPVwib25Sb3dJbnNlcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgKG9uUm93VXBkYXRlZCk9XCJvblJvd1VwZGF0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChvblJvd1JlbW92ZWQpPVwib25Sb3dSZW1vdmVkKCRldmVudClcIj5cblxuICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInVzZXJOYW1lXCIgW2NhcHRpb25dPVwiJ21hbmFnZW1lbnQudXNlck5hbWUnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgIDxkeGktdmFsaWRhdGlvbi1ydWxlIHR5cGU9XCJhc3luY1wiIFttZXNzYWdlXT1cIidtYW5hZ2VtZW50LnVzZXJOYW1lQWxyZWFkeVVzZWQnIHwgdHJhbnNsYXRlXCIgW3ZhbGlkYXRpb25DYWxsYmFja109XCJ1c2VyTmFtZUFscmVhZHlVc2VkVmFsaWRhdGlvblwiPjwvZHhpLXZhbGlkYXRpb24tcnVsZT5cbiAgICA8L2R4aS1jb2x1bW4+XG4gICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiaXNBY3RpdmVcIiBbY2FwdGlvbl09XCInbWFuYWdlbWVudC5pc0FjdGl2ZScgfCB0cmFuc2xhdGVcIiBbdmlzaWJsZV09XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cbiAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJmaXJzdE5hbWVcIiBbY2FwdGlvbl09XCInbWFuYWdlbWVudC5maXJzdE5hbWUnIHwgdHJhbnNsYXRlXCI+PC9keGktY29sdW1uPlxuICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImxhc3ROYW1lXCIgW2NhcHRpb25dPVwiJ21hbmFnZW1lbnQubGFzdE5hbWUnIHwgdHJhbnNsYXRlXCI+PC9keGktY29sdW1uPlxuICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImdyb3Vwc1wiIFtjYXB0aW9uXT1cIidtYW5hZ2VtZW50Lmdyb3VwJyB8IHRyYW5zbGF0ZVwiPjwvZHhpLWNvbHVtbj5cblxuICAgIDxkeG8tZWRpdGluZyBtb2RlPVwicG9wdXBcIiBbYWxsb3dBZGRpbmddPVwidHJ1ZVwiIFthbGxvd1VwZGF0aW5nXT1cInRydWVcIiBbYWxsb3dEZWxldGluZ109XCJ0cnVlXCIgW3VzZUljb25zXT1cInRydWVcIj5cbiAgICAgICAgPGR4by1wb3B1cCBbc2hvd1RpdGxlXT1cInRydWVcIiBbdGl0bGVdPVwiJ21hbmFnZW1lbnQuZ3JvdXAnIHwgdHJhbnNsYXRlXCI+PC9keG8tcG9wdXA+XG4gICAgICAgIDxkeG8tZm9ybSBjb2xDb3VudD1cIjJcIiBbbGFiZWxMb2NhdGlvbl09XCJzaG93Q29sdW1uWFMgPyAnbGVmdCcgOiAndG9wJ1wiPlxuICAgICAgICAgICAgPGR4aS1pdGVtIGRhdGFGaWVsZD1cInVzZXJOYW1lXCIgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICA8ZHhpLWl0ZW0gZGF0YUZpZWxkPVwiaXNBY3RpdmVcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgPGR4aS1pdGVtIGRhdGFGaWVsZD1cImZpcnN0TmFtZVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICA8ZHhpLWl0ZW0gZGF0YUZpZWxkPVwibGFzdE5hbWVcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgPGR4aS1pdGVtIGRhdGFGaWVsZD1cImdyb3VwXCI+PC9keGktaXRlbT5cbiAgICAgICAgPC9keG8tZm9ybT5cbiAgICA8L2R4by1lZGl0aW5nPlxuPC9jYXVjYS1keC1kYXRhLWdyaWQ+XG4iXX0=
|