@cauca-911/management 3.0.1 → 11.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -20
- package/README.md +4 -4
- package/assets/i18n/cauca/en-management.json +16 -16
- package/assets/i18n/cauca/fr-management.json +16 -16
- package/bundles/cauca-911-management.umd.js +466 -465
- package/bundles/cauca-911-management.umd.js.map +1 -1
- package/bundles/cauca-911-management.umd.min.js +1 -1
- package/bundles/cauca-911-management.umd.min.js.map +1 -1
- package/cauca-911-management.d.ts +5 -5
- package/cauca-911-management.metadata.json +1 -1
- package/esm2015/cauca-911-management.js +6 -6
- package/esm2015/lib/cauca-management-group/cauca-management-group.component.js +212 -212
- package/esm2015/lib/cauca-management-user/cauca-management-user.component.js +57 -57
- package/esm2015/lib/cauca-management.component.js +14 -14
- package/esm2015/lib/cauca-management.module.js +35 -35
- package/esm2015/lib/cauca-management.service.js +13 -13
- package/esm2015/lib/shared/models/group-model.js +8 -8
- package/esm2015/lib/shared/models/group-permission-model.js +9 -9
- package/esm2015/lib/shared/models/permission-model.js +8 -8
- package/esm2015/lib/shared/models/user-group-model.js +8 -8
- package/esm2015/lib/shared/models/user-model.js +12 -11
- package/esm2015/lib/shared/models/user-permission-model.js +9 -9
- package/esm2015/lib/shared/services/management-group.service.js +38 -38
- package/esm2015/lib/shared/services/management-permission.service.js +35 -35
- package/esm2015/lib/shared/services/management-user.service.js +53 -53
- package/esm2015/public-api.js +16 -16
- package/fesm2015/cauca-911-management.js +439 -438
- package/fesm2015/cauca-911-management.js.map +1 -1
- package/lib/cauca-management-group/cauca-management-group.component.d.ts +42 -42
- package/lib/cauca-management-user/cauca-management-user.component.d.ts +17 -17
- package/lib/cauca-management.component.d.ts +5 -5
- package/lib/cauca-management.module.d.ts +2 -2
- package/lib/cauca-management.service.d.ts +3 -3
- package/lib/shared/models/group-model.d.ts +9 -9
- package/lib/shared/models/group-permission-model.d.ts +7 -7
- package/lib/shared/models/permission-model.d.ts +7 -7
- package/lib/shared/models/user-group-model.d.ts +6 -6
- package/lib/shared/models/user-model.d.ts +15 -14
- package/lib/shared/models/user-permission-model.d.ts +7 -7
- package/lib/shared/services/management-group.service.d.ts +14 -14
- package/lib/shared/services/management-permission.service.d.ts +13 -13
- package/lib/shared/services/management-user.service.d.ts +20 -20
- package/package.json +4 -4
- package/public-api.d.ts +12 -12
|
@@ -1,212 +1,212 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { BreakpointObserver } from '@angular/cdk/layout';
|
|
3
|
-
import { map } from 'rxjs/operators';
|
|
4
|
-
import { ManagementGroupService } from '../shared/services/management-group.service';
|
|
5
|
-
import { ManagementUserService } from '../shared/services/management-user.service';
|
|
6
|
-
import { ManagementPermissionService } from '../shared/services/management-permission.service';
|
|
7
|
-
export class CaucaManagementGroupComponent {
|
|
8
|
-
constructor(managementGroupService, managementUserService, managementPermissionService, breakpointObserver) {
|
|
9
|
-
this.managementGroupService = managementGroupService;
|
|
10
|
-
this.managementUserService = managementUserService;
|
|
11
|
-
this.managementPermissionService = managementPermissionService;
|
|
12
|
-
this.showPrintButton = true;
|
|
13
|
-
this.hoverStatePermission = true;
|
|
14
|
-
this.groups = [];
|
|
15
|
-
this.users = [];
|
|
16
|
-
this.permissions = [];
|
|
17
|
-
this.userFullName = {};
|
|
18
|
-
this.showColumn = true;
|
|
19
|
-
this.showColumnXS = true;
|
|
20
|
-
this.translations = [];
|
|
21
|
-
this.calculateUsersCellValue = (e) => {
|
|
22
|
-
const users = (e.users ? e.users : []);
|
|
23
|
-
let usersNames = [];
|
|
24
|
-
users.forEach(user => {
|
|
25
|
-
const userGroup = this.users.filter(u => u.id === user.idUser);
|
|
26
|
-
if (userGroup && userGroup[0]) {
|
|
27
|
-
usersNames.push(userGroup[0].firstName + ' ' + userGroup[0].lastName);
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
usersNames = usersNames.sort((one, two) => (one < two ? -1 : 1));
|
|
31
|
-
return usersNames.join(', ');
|
|
32
|
-
};
|
|
33
|
-
this.groupNameAlreadyUsedValidation = (e) => {
|
|
34
|
-
return this.managementGroupService.hasExistingGroupName(e.data).pipe(map((exist) => {
|
|
35
|
-
return !exist;
|
|
36
|
-
})).toPromise();
|
|
37
|
-
};
|
|
38
|
-
breakpointObserver.observe(['(max-width: 1000px)']).subscribe(result => {
|
|
39
|
-
this.showColumn = !result.matches;
|
|
40
|
-
});
|
|
41
|
-
breakpointObserver.observe(['(max-width: 600px)']).subscribe(result => {
|
|
42
|
-
this.showColumnXS = !result.matches;
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
ngOnInit() {
|
|
46
|
-
this.managementUserService.getAll().subscribe(data => {
|
|
47
|
-
this.users = data;
|
|
48
|
-
this.users.forEach(user => {
|
|
49
|
-
if (user.isActive) {
|
|
50
|
-
if (user.firstName !== '' && user.lastName !== '') {
|
|
51
|
-
this.userFullName[user.id] = `${user.firstName} ${user.lastName}`;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
this.managementPermissionService.getAll().subscribe(permissions => {
|
|
57
|
-
const permissionIndex = permissions.findIndex(c => {
|
|
58
|
-
return c.tag === 'CanAccessPermissions';
|
|
59
|
-
});
|
|
60
|
-
if (permissionIndex !== -1) {
|
|
61
|
-
permissions.splice(permissionIndex, 1);
|
|
62
|
-
}
|
|
63
|
-
permissions.sort((a, b) => {
|
|
64
|
-
if (a.name < b.name) {
|
|
65
|
-
return -1;
|
|
66
|
-
}
|
|
67
|
-
if (a.name > b.name) {
|
|
68
|
-
return 1;
|
|
69
|
-
}
|
|
70
|
-
return 0;
|
|
71
|
-
});
|
|
72
|
-
this.permissions = permissions;
|
|
73
|
-
});
|
|
74
|
-
this.getGroups();
|
|
75
|
-
}
|
|
76
|
-
fullName(data) {
|
|
77
|
-
if (!data) {
|
|
78
|
-
return '';
|
|
79
|
-
}
|
|
80
|
-
return `${data.firstName} ${data.lastName}`;
|
|
81
|
-
}
|
|
82
|
-
getGroupUser(field, e) {
|
|
83
|
-
const users = [];
|
|
84
|
-
if (this.groupUsers) {
|
|
85
|
-
this.groupUsers.forEach(user => {
|
|
86
|
-
users.push(user.idUser);
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
e.component.option('value', users);
|
|
90
|
-
}
|
|
91
|
-
setGroupUser(field, e) {
|
|
92
|
-
const groupUser = [];
|
|
93
|
-
e.value.forEach(idUser => {
|
|
94
|
-
const groupIndex = (field.data.users || []).findIndex(g => g.idUser === idUser);
|
|
95
|
-
if (groupIndex === -1) {
|
|
96
|
-
groupUser.push({ idUser, });
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
groupUser.push(field.data.users[groupIndex]);
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
field.setValue(JSON.parse(JSON.stringify(groupUser)));
|
|
103
|
-
}
|
|
104
|
-
setGroupPermission(field, e) {
|
|
105
|
-
const groupUser = [];
|
|
106
|
-
e.value.forEach(idUser => {
|
|
107
|
-
groupUser.push({
|
|
108
|
-
idUser,
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
field.setValue(JSON.parse(JSON.stringify(groupUser)));
|
|
112
|
-
}
|
|
113
|
-
getPermissionStatus(field, permission, e) {
|
|
114
|
-
const groupPermission = (field.value || []).find(p => p.idModulePermission === permission.id);
|
|
115
|
-
if (groupPermission) {
|
|
116
|
-
e.component.option('value', groupPermission.isAllowed);
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
e.component.option('value', undefined);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
checkBoxToggled(field, permission, e) {
|
|
123
|
-
if (e.component.skipOnValueChanged) {
|
|
124
|
-
e.component.skipOnValueChanged = false;
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
if (e.component.setUndefinedNextTime) {
|
|
128
|
-
e.component.setUndefinedNextTime = false;
|
|
129
|
-
e.component.skipOnValueChanged = true;
|
|
130
|
-
e.component.option('value', undefined);
|
|
131
|
-
this.setPermissionStatus(field, permission, undefined);
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
if (e.value === false) {
|
|
135
|
-
e.component.setUndefinedNextTime = true;
|
|
136
|
-
}
|
|
137
|
-
this.setPermissionStatus(field, permission, e.value);
|
|
138
|
-
}
|
|
139
|
-
onRowInserted(e) {
|
|
140
|
-
this.saveGroup(e.data);
|
|
141
|
-
}
|
|
142
|
-
onRowUpdated(e) {
|
|
143
|
-
this.saveGroup(e.data);
|
|
144
|
-
}
|
|
145
|
-
onRowRemoved(e) {
|
|
146
|
-
const group = e.data;
|
|
147
|
-
this.managementGroupService.delete(group.id).subscribe(data => {
|
|
148
|
-
this.getGroups();
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
onEditingStart(e) {
|
|
152
|
-
this.groupUsers = e.data.users;
|
|
153
|
-
}
|
|
154
|
-
onInitNewRow() {
|
|
155
|
-
this.groupUsers = [];
|
|
156
|
-
}
|
|
157
|
-
setPermissionStatus(field, permission, value) {
|
|
158
|
-
const groupPermissions = field.value || [];
|
|
159
|
-
const groupIndex = groupPermissions.findIndex(p => p.idModulePermission === permission.id);
|
|
160
|
-
if (groupIndex > -1) {
|
|
161
|
-
groupPermissions[groupIndex].isAllowed = value;
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
groupPermissions.push({
|
|
165
|
-
idModulePermission: permission.id,
|
|
166
|
-
isAllowed: value,
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
field.setValue(JSON.parse(JSON.stringify(groupPermissions)));
|
|
170
|
-
}
|
|
171
|
-
saveGroup(group) {
|
|
172
|
-
this.removePermissionUndefined(group);
|
|
173
|
-
if (group.users) {
|
|
174
|
-
group.users.forEach((userGroup) => {
|
|
175
|
-
userGroup.idGroup = group.id;
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
if (group.permissions) {
|
|
179
|
-
group.permissions.forEach((groupPermission) => {
|
|
180
|
-
groupPermission.idGroup = group.id;
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
this.managementGroupService.save(group).subscribe(() => {
|
|
184
|
-
this.getGroups();
|
|
185
|
-
});
|
|
186
|
-
this.groupUsers = [];
|
|
187
|
-
}
|
|
188
|
-
removePermissionUndefined(group) {
|
|
189
|
-
group.permissions = group.permissions.filter((permission) => permission.isAllowed !== undefined);
|
|
190
|
-
}
|
|
191
|
-
getGroups() {
|
|
192
|
-
this.managementGroupService.getAll().subscribe(data => this.groups = data);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
CaucaManagementGroupComponent.decorators = [
|
|
196
|
-
{ type: Component, args: [{
|
|
197
|
-
selector: 'cauca-management-group',
|
|
198
|
-
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=\"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 </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>",
|
|
199
|
-
styles: [""]
|
|
200
|
-
},] }
|
|
201
|
-
];
|
|
202
|
-
CaucaManagementGroupComponent.ctorParameters = () => [
|
|
203
|
-
{ type: ManagementGroupService },
|
|
204
|
-
{ type: ManagementUserService },
|
|
205
|
-
{ type: ManagementPermissionService },
|
|
206
|
-
{ type: BreakpointObserver }
|
|
207
|
-
];
|
|
208
|
-
CaucaManagementGroupComponent.propDecorators = {
|
|
209
|
-
showPrintButton: [{ type: Input }],
|
|
210
|
-
hoverStatePermission: [{ type: Input }]
|
|
211
|
-
};
|
|
212
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F1Y2EtbWFuYWdlbWVudC1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvbWljaGFlbC5qb2xpbi9Qcm9ncmFtbWF0aW9ucy9DQVVDQS9jYXVzZS1hbmd1bGFyLWxpYnJhcnkvcHJvamVjdHMvY2F1Y2EtbWFuYWdlbWVudC9zcmMvIiwic291cmNlcyI6WyJsaWIvY2F1Y2EtbWFuYWdlbWVudC1ncm91cC9jYXVjYS1tYW5hZ2VtZW50LWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLckMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDckYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFbkYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFPL0YsTUFBTSxPQUFPLDZCQUE2QjtJQWV0QyxZQUNZLHNCQUE4QyxFQUM5QyxxQkFBNEMsRUFDNUMsMkJBQXdELEVBQ2hFLGtCQUFzQztRQUg5QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMsZ0NBQTJCLEdBQTNCLDJCQUEyQixDQUE2QjtRQWQ3RCxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUVoQyx5QkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDNUIsV0FBTSxHQUFpQixFQUFFLENBQUM7UUFDMUIsVUFBSyxHQUFnQixFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FBc0IsRUFBRSxDQUFDO1FBQ3BDLGlCQUFZLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLGVBQVUsR0FBRyxJQUFJ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QUFDLFVBQWdDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDM0gsQ0FBQztJQUVPLFNBQVM7UUFDYixJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMvRSxDQUFDOzs7WUE3TkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSx3QkFBd0I7Z0JBQ2xDLG1rRkFBc0Q7O2FBRXpEOzs7WUFUUSxzQkFBc0I7WUFDdEIscUJBQXFCO1lBRXJCLDJCQUEyQjtZQVQzQixrQkFBa0I7Ozs4QkFtQnRCLEtBQUs7bUNBRUwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBVc2VyTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL3VzZXItbW9kZWwnO1xuaW1wb3J0IHsgVXNlckdyb3VwTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL3VzZXItZ3JvdXAtbW9kZWwnO1xuaW1wb3J0IHsgR3JvdXBNb2RlbCB9IGZyb20gJy4uL3NoYXJlZC9tb2RlbHMvZ3JvdXAtbW9kZWwnO1xuaW1wb3J0IHsgR3JvdXBQZXJtaXNzaW9uTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL2dyb3VwLXBlcm1pc3Npb24tbW9kZWwnO1xuaW1wb3J0IHsgTWFuYWdlbWVudEdyb3VwU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9tYW5hZ2VtZW50LWdyb3VwLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFuYWdlbWVudFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL3NlcnZpY2VzL21hbmFnZW1lbnQtdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcm1pc3Npb25Nb2RlbCB9IGZyb20gJy4uL3NoYXJlZC9tb2RlbHMvcGVybWlzc2lvbi1tb2RlbCc7XG5pbXBvcnQgeyBNYW5hZ2VtZW50UGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvc2VydmljZXMvbWFuYWdlbWVudC1wZXJtaXNzaW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2NhdWNhLW1hbmFnZW1lbnQtZ3JvdXAnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXVjYS1tYW5hZ2VtZW50LWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jYXVjYS1tYW5hZ2VtZW50LWdyb3VwLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2F1Y2FNYW5hZ2VtZW50R3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHByaXZhdGUgZ3JvdXBVc2VyczogYW55O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd1ByaW50QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBob3ZlclN0YXRlUGVybWlzc2lvbiA9IHRydWU7XG4gICAgcHVibGljIGdyb3VwczogR3JvdXBNb2RlbFtdID0gW107XG4gICAgcHVibGljIHVzZXJzOiBVc2VyTW9kZWxbXSA9IFtdO1xuICAgIHB1YmxpYyBwZXJtaXNzaW9uczogUGVybWlzc2lvbk1vZGVsW10gPSBbXTtcbiAgICBwdWJsaWMgdXNlckZ1bGxOYW1lOiBhbnkgPSB7fTtcbiAgICBwdWJsaWMgc2hvd0NvbHVtbiA9IHRydWU7XG4gICAgcHVibGljIHNob3dDb2x1bW5YUyA9IHRydWU7XG4gICAgcHVibGljIHRyYW5zbGF0aW9uczogYW55ID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBtYW5hZ2VtZW50R3JvdXBTZXJ2aWNlOiBNYW5hZ2VtZW50R3JvdXBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG1hbmFnZW1lbnRVc2VyU2VydmljZTogTWFuYWdlbWVudFVzZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG1hbmFnZW1lbnRQZXJtaXNzaW9uU2VydmljZTogTWFuYWdlbWVudFBlcm1pc3Npb25TZXJ2aWNlLFxuICAgICAgICBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlcixcbiAgICApIHtcbiAgICAgICAgYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoWycobWF4LXdpZHRoOiAxMDAwcHgpJ10pLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93Q29sdW1uID0gIXJlc3VsdC5tYXRjaGVzO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoWycobWF4LXdpZHRoOiA2MDBweCknXSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dDb2x1bW5YUyA9ICFyZXN1bHQubWF0Y2hlcztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1hbmFnZW1lbnRVc2VyU2VydmljZS5nZXRBbGw8VXNlck1vZGVsPigpLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMudXNlcnMgPSBkYXRhO1xuICAgICAgICAgICAgdGhpcy51c2Vycy5mb3JFYWNoKHVzZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh1c2VyLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1c2VyLmZpcnN0TmFtZSAhPT0gJycgJiYgdXNlci5sYXN0TmFtZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlckZ1bGxOYW1lW3VzZXIuaWRdICA9IGAke3VzZXIuZmlyc3ROYW1lfSAke3VzZXIubGFzdE5hbWV9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tYW5hZ2VtZW50UGVybWlzc2lvblNlcnZpY2UuZ2V0QWxsKCkuc3Vic2NyaWJlKHBlcm1pc3Npb25zID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25JbmRleCA9IHBlcm1pc3Npb25zLmZpbmRJbmRleChjID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYy50YWcgPT09ICdDYW5BY2Nlc3NQZXJtaXNzaW9ucyc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbnMuc3BsaWNlKHBlcm1pc3Npb25JbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5zb3J0KChhOiBQZXJtaXNzaW9uTW9kZWwsIGI6IFBlcm1pc3Npb25Nb2RlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhLm5hbWUgPCBiLm5hbWUpIHsgcmV0dXJuIC0xOyB9XG4gICAgICAgICAgICAgICAgaWYgKGEubmFtZSA+IGIubmFtZSkgeyByZXR1cm4gMTsgfVxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gcGVybWlzc2lvbnM7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdldEdyb3VwcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmdWxsTmFtZShkYXRhKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7ZGF0YS5maXJzdE5hbWV9ICR7ZGF0YS5sYXN0TmFtZX1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRHcm91cFVzZXIoZmllbGQsIGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdXNlcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGlmICh0aGlzLmdyb3VwVXNlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBVc2Vycy5mb3JFYWNoKCB1c2VyID0+IHtcbiAgICAgICAgICAgICAgICB1c2Vycy5wdXNoKHVzZXIuaWRVc2VyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGUuY29tcG9uZW50Lm9wdGlvbigndmFsdWUnLCB1c2Vycyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEdyb3VwVXNlcihmaWVsZCwgZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBncm91cFVzZXI6IFVzZXJHcm91cE1vZGVsW10gPSBbXTtcblxuICAgICAgICBlLnZhbHVlLmZvckVhY2goaWRVc2VyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwSW5kZXggPSAoZmllbGQuZGF0YS51c2VycyB8fCBbXSkuZmluZEluZGV4KGcgPT4gZy5pZFVzZXIgPT09IGlkVXNlcik7XG5cbiAgICAgICAgICAgIGlmIChncm91cEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGdyb3VwVXNlci5wdXNoKHsgaWRVc2VyLCB9IGFzIFVzZXJHcm91cE1vZGVsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBVc2VyLnB1c2goZmllbGQuZGF0YS51c2Vyc1tncm91cEluZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZpZWxkLnNldFZhbHVlKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ3JvdXBVc2VyKSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRHcm91cFBlcm1pc3Npb24oZmllbGQsIGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZ3JvdXBVc2VyOiBVc2VyR3JvdXBNb2RlbFtdID0gW107XG5cbiAgICAgICAgZS52YWx1ZS5mb3JFYWNoKGlkVXNlciA9PiB7XG4gICAgICAgICAgICBncm91cFVzZXIucHVzaCh7XG4gICAgICAgICAgICAgICAgaWRVc2VyLFxuICAgICAgICAgICAgfSBhcyBVc2VyR3JvdXBNb2RlbCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZpZWxkLnNldFZhbHVlKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ3JvdXBVc2VyKSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQZXJtaXNzaW9uU3RhdHVzKGZpZWxkLCBwZXJtaXNzaW9uLCBlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGdyb3VwUGVybWlzc2lvbiA9IChmaWVsZC52YWx1ZSB8fCBbXSkuZmluZChwID0+IHAuaWRNb2R1bGVQZXJtaXNzaW9uID09PSBwZXJtaXNzaW9uLmlkKTtcblxuICAgICAgICBpZiAoZ3JvdXBQZXJtaXNzaW9uKSB7XG4gICAgICAgICAgICBlLmNvbXBvbmVudC5vcHRpb24oJ3ZhbHVlJywgZ3JvdXBQZXJtaXNzaW9uLmlzQWxsb3dlZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlLmNvbXBvbmVudC5vcHRpb24oJ3ZhbHVlJywgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjaGVja0JveFRvZ2dsZWQoZmllbGQsIHBlcm1pc3Npb24sIGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKGUuY29tcG9uZW50LnNraXBPblZhbHVlQ2hhbmdlZCkge1xuICAgICAgICAgICAgZS5jb21wb25lbnQuc2tpcE9uVmFsdWVDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGUuY29tcG9uZW50LnNldFVuZGVmaW5lZE5leHRUaW1lKSB7XG4gICAgICAgICAgICBlLmNvbXBvbmVudC5zZXRVbmRlZmluZWROZXh0VGltZSA9IGZhbHNlO1xuICAgICAgICAgICAgZS5jb21wb25lbnQuc2tpcE9uVmFsdWVDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGUuY29tcG9uZW50Lm9wdGlvbigndmFsdWUnLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgdGhpcy5zZXRQZXJtaXNzaW9uU3RhdHVzKGZpZWxkLCBwZXJtaXNzaW9uLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlLnZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZS5jb21wb25lbnQuc2V0VW5kZWZpbmVkTmV4dFRpbWUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRQZXJtaXNzaW9uU3RhdHVzKGZpZWxkLCBwZXJtaXNzaW9uLCBlLnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Sb3dJbnNlcnRlZChlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2F2ZUdyb3VwKGUuZGF0YSBhcyBHcm91cE1vZGVsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Sb3dVcGRhdGVkKGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zYXZlR3JvdXAoZS5kYXRhIGFzIEdyb3VwTW9kZWwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJvd1JlbW92ZWQoZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBncm91cCA9IChlLmRhdGEgYXMgR3JvdXBNb2RlbCk7XG4gICAgICAgIHRoaXMubWFuYWdlbWVudEdyb3VwU2VydmljZS5kZWxldGUoZ3JvdXAuaWQpLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JvdXBzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYWxjdWxhdGVVc2Vyc0NlbGxWYWx1ZSA9IChlKTogc3RyaW5nID0+IHtcbiAgICAgICAgY29uc3QgdXNlcnMgPSAoZS51c2VycyA/IGUudXNlcnMgYXMgVXNlckdyb3VwTW9kZWxbXSA6IFtdKTtcbiAgICAgICAgbGV0IHVzZXJzTmFtZXM6IGFueVtdID0gW107XG4gICAgICAgIHVzZXJzLmZvckVhY2godXNlciA9PiB7XG4gICAgICAgICAgICBjb25zdCB1c2VyR3JvdXAgPSB0aGlzLnVzZXJzLmZpbHRlcih1ID0+IHUuaWQgPT09IHVzZXIuaWRVc2VyKTtcbiAgICAgICAgICAgIGlmICh1c2VyR3JvdXAgJiYgdXNlckdyb3VwWzBdKSB7XG4gICAgICAgICAgICAgICAgdXNlcnNOYW1lcy5wdXNoKHVzZXJHcm91cFswXS5maXJzdE5hbWUgKyAnICcgKyB1c2VyR3JvdXBbMF0ubGFzdE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdXNlcnNOYW1lcyA9IHVzZXJzTmFtZXMuc29ydCgob25lLCB0d28pID0+IChvbmUgPCB0d28gPyAtMSA6IDEpKTtcbiAgICAgICAgcmV0dXJuIHVzZXJzTmFtZXMuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25FZGl0aW5nU3RhcnQoZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ3JvdXBVc2VycyA9IGUuZGF0YS51c2VycztcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Jbml0TmV3Um93KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdyb3VwVXNlcnMgPSBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ3JvdXBOYW1lQWxyZWFkeVVzZWRWYWxpZGF0aW9uID0gKGUpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlbWVudEdyb3VwU2VydmljZS5oYXNFeGlzdGluZ0dyb3VwTmFtZShlLmRhdGEpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGV4aXN0OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFleGlzdDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQZXJtaXNzaW9uU3RhdHVzKGZpZWxkOiBhbnksIHBlcm1pc3Npb24sIHZhbHVlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGdyb3VwUGVybWlzc2lvbnMgPSBmaWVsZC52YWx1ZSB8fCBbXTtcbiAgICAgICAgY29uc3QgZ3JvdXBJbmRleCA9IGdyb3VwUGVybWlzc2lvbnMuZmluZEluZGV4KHAgPT4gcC5pZE1vZHVsZVBlcm1pc3Npb24gPT09IHBlcm1pc3Npb24uaWQpO1xuXG4gICAgICAgIGlmIChncm91cEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNbZ3JvdXBJbmRleF0uaXNBbGxvd2VkID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBncm91cFBlcm1pc3Npb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkTW9kdWxlUGVybWlzc2lvbjogcGVybWlzc2lvbi5pZCxcbiAgICAgICAgICAgICAgICBpc0FsbG93ZWQ6IHZhbHVlLFxuICAgICAgICAgICAgfSBhcyBHcm91cFBlcm1pc3Npb25Nb2RlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBmaWVsZC5zZXRWYWx1ZShKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdyb3VwUGVybWlzc2lvbnMpKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzYXZlR3JvdXAoZ3JvdXA6IEdyb3VwTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVQZXJtaXNzaW9uVW5kZWZpbmVkKGdyb3VwKTtcbiAgICAgICAgaWYgKGdyb3VwLnVzZXJzKSB7XG4gICAgICAgICAgICBncm91cC51c2Vycy5mb3JFYWNoKCh1c2VyR3JvdXA6IFVzZXJHcm91cE1vZGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgdXNlckdyb3VwLmlkR3JvdXAgPSBncm91cC5pZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChncm91cC5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgZ3JvdXAucGVybWlzc2lvbnMuZm9yRWFjaCgoZ3JvdXBQZXJtaXNzaW9uOiBHcm91cFBlcm1pc3Npb25Nb2RlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbi5pZEdyb3VwID0gZ3JvdXAuaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hbmFnZW1lbnRHcm91cFNlcnZpY2Uuc2F2ZShncm91cCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JvdXBzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdyb3VwVXNlcnMgPSBbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVBlcm1pc3Npb25VbmRlZmluZWQoZ3JvdXA6IEdyb3VwTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgZ3JvdXAucGVybWlzc2lvbnMgPSBncm91cC5wZXJtaXNzaW9ucy5maWx0ZXIoKHBlcm1pc3Npb246IEdyb3VwUGVybWlzc2lvbk1vZGVsKSA9PiBwZXJtaXNzaW9uLmlzQWxsb3dlZCAhPT0gdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEdyb3VwcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tYW5hZ2VtZW50R3JvdXBTZXJ2aWNlLmdldEFsbCgpLnN1YnNjcmliZShkYXRhID0+IHRoaXMuZ3JvdXBzID0gZGF0YSk7XG4gICAgfVxufVxuIl19
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { BreakpointObserver } from '@angular/cdk/layout';
|
|
3
|
+
import { map } from 'rxjs/operators';
|
|
4
|
+
import { ManagementGroupService } from '../shared/services/management-group.service';
|
|
5
|
+
import { ManagementUserService } from '../shared/services/management-user.service';
|
|
6
|
+
import { ManagementPermissionService } from '../shared/services/management-permission.service';
|
|
7
|
+
export class CaucaManagementGroupComponent {
|
|
8
|
+
constructor(managementGroupService, managementUserService, managementPermissionService, breakpointObserver) {
|
|
9
|
+
this.managementGroupService = managementGroupService;
|
|
10
|
+
this.managementUserService = managementUserService;
|
|
11
|
+
this.managementPermissionService = managementPermissionService;
|
|
12
|
+
this.showPrintButton = true;
|
|
13
|
+
this.hoverStatePermission = true;
|
|
14
|
+
this.groups = [];
|
|
15
|
+
this.users = [];
|
|
16
|
+
this.permissions = [];
|
|
17
|
+
this.userFullName = {};
|
|
18
|
+
this.showColumn = true;
|
|
19
|
+
this.showColumnXS = true;
|
|
20
|
+
this.translations = [];
|
|
21
|
+
this.calculateUsersCellValue = (e) => {
|
|
22
|
+
const users = (e.users ? e.users : []);
|
|
23
|
+
let usersNames = [];
|
|
24
|
+
users.forEach(user => {
|
|
25
|
+
const userGroup = this.users.filter(u => u.id === user.idUser);
|
|
26
|
+
if (userGroup && userGroup[0]) {
|
|
27
|
+
usersNames.push(userGroup[0].firstName + ' ' + userGroup[0].lastName);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
usersNames = usersNames.sort((one, two) => (one < two ? -1 : 1));
|
|
31
|
+
return usersNames.join(', ');
|
|
32
|
+
};
|
|
33
|
+
this.groupNameAlreadyUsedValidation = (e) => {
|
|
34
|
+
return this.managementGroupService.hasExistingGroupName(e.data).pipe(map((exist) => {
|
|
35
|
+
return !exist;
|
|
36
|
+
})).toPromise();
|
|
37
|
+
};
|
|
38
|
+
breakpointObserver.observe(['(max-width: 1000px)']).subscribe(result => {
|
|
39
|
+
this.showColumn = !result.matches;
|
|
40
|
+
});
|
|
41
|
+
breakpointObserver.observe(['(max-width: 600px)']).subscribe(result => {
|
|
42
|
+
this.showColumnXS = !result.matches;
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
ngOnInit() {
|
|
46
|
+
this.managementUserService.getAll().subscribe(data => {
|
|
47
|
+
this.users = data;
|
|
48
|
+
this.users.forEach(user => {
|
|
49
|
+
if (user.isActive) {
|
|
50
|
+
if (user.firstName !== '' && user.lastName !== '') {
|
|
51
|
+
this.userFullName[user.id] = `${user.firstName} ${user.lastName}`;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
this.managementPermissionService.getAll().subscribe(permissions => {
|
|
57
|
+
const permissionIndex = permissions.findIndex(c => {
|
|
58
|
+
return c.tag === 'CanAccessPermissions';
|
|
59
|
+
});
|
|
60
|
+
if (permissionIndex !== -1) {
|
|
61
|
+
permissions.splice(permissionIndex, 1);
|
|
62
|
+
}
|
|
63
|
+
permissions.sort((a, b) => {
|
|
64
|
+
if (a.name < b.name) {
|
|
65
|
+
return -1;
|
|
66
|
+
}
|
|
67
|
+
if (a.name > b.name) {
|
|
68
|
+
return 1;
|
|
69
|
+
}
|
|
70
|
+
return 0;
|
|
71
|
+
});
|
|
72
|
+
this.permissions = permissions;
|
|
73
|
+
});
|
|
74
|
+
this.getGroups();
|
|
75
|
+
}
|
|
76
|
+
fullName(data) {
|
|
77
|
+
if (!data) {
|
|
78
|
+
return '';
|
|
79
|
+
}
|
|
80
|
+
return `${data.firstName} ${data.lastName}`;
|
|
81
|
+
}
|
|
82
|
+
getGroupUser(field, e) {
|
|
83
|
+
const users = [];
|
|
84
|
+
if (this.groupUsers) {
|
|
85
|
+
this.groupUsers.forEach(user => {
|
|
86
|
+
users.push(user.idUser);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
e.component.option('value', users);
|
|
90
|
+
}
|
|
91
|
+
setGroupUser(field, e) {
|
|
92
|
+
const groupUser = [];
|
|
93
|
+
e.value.forEach(idUser => {
|
|
94
|
+
const groupIndex = (field.data.users || []).findIndex(g => g.idUser === idUser);
|
|
95
|
+
if (groupIndex === -1) {
|
|
96
|
+
groupUser.push({ idUser, });
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
groupUser.push(field.data.users[groupIndex]);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
field.setValue(JSON.parse(JSON.stringify(groupUser)));
|
|
103
|
+
}
|
|
104
|
+
setGroupPermission(field, e) {
|
|
105
|
+
const groupUser = [];
|
|
106
|
+
e.value.forEach(idUser => {
|
|
107
|
+
groupUser.push({
|
|
108
|
+
idUser,
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
field.setValue(JSON.parse(JSON.stringify(groupUser)));
|
|
112
|
+
}
|
|
113
|
+
getPermissionStatus(field, permission, e) {
|
|
114
|
+
const groupPermission = (field.value || []).find(p => p.idModulePermission === permission.id);
|
|
115
|
+
if (groupPermission) {
|
|
116
|
+
e.component.option('value', groupPermission.isAllowed);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
e.component.option('value', undefined);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
checkBoxToggled(field, permission, e) {
|
|
123
|
+
if (e.component.skipOnValueChanged) {
|
|
124
|
+
e.component.skipOnValueChanged = false;
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (e.component.setUndefinedNextTime) {
|
|
128
|
+
e.component.setUndefinedNextTime = false;
|
|
129
|
+
e.component.skipOnValueChanged = true;
|
|
130
|
+
e.component.option('value', undefined);
|
|
131
|
+
this.setPermissionStatus(field, permission, undefined);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (e.value === false) {
|
|
135
|
+
e.component.setUndefinedNextTime = true;
|
|
136
|
+
}
|
|
137
|
+
this.setPermissionStatus(field, permission, e.value);
|
|
138
|
+
}
|
|
139
|
+
onRowInserted(e) {
|
|
140
|
+
this.saveGroup(e.data);
|
|
141
|
+
}
|
|
142
|
+
onRowUpdated(e) {
|
|
143
|
+
this.saveGroup(e.data);
|
|
144
|
+
}
|
|
145
|
+
onRowRemoved(e) {
|
|
146
|
+
const group = e.data;
|
|
147
|
+
this.managementGroupService.delete(group.id).subscribe(data => {
|
|
148
|
+
this.getGroups();
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
onEditingStart(e) {
|
|
152
|
+
this.groupUsers = e.data.users;
|
|
153
|
+
}
|
|
154
|
+
onInitNewRow() {
|
|
155
|
+
this.groupUsers = [];
|
|
156
|
+
}
|
|
157
|
+
setPermissionStatus(field, permission, value) {
|
|
158
|
+
const groupPermissions = field.value || [];
|
|
159
|
+
const groupIndex = groupPermissions.findIndex(p => p.idModulePermission === permission.id);
|
|
160
|
+
if (groupIndex > -1) {
|
|
161
|
+
groupPermissions[groupIndex].isAllowed = value;
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
groupPermissions.push({
|
|
165
|
+
idModulePermission: permission.id,
|
|
166
|
+
isAllowed: value,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
field.setValue(JSON.parse(JSON.stringify(groupPermissions)));
|
|
170
|
+
}
|
|
171
|
+
saveGroup(group) {
|
|
172
|
+
this.removePermissionUndefined(group);
|
|
173
|
+
if (group.users) {
|
|
174
|
+
group.users.forEach((userGroup) => {
|
|
175
|
+
userGroup.idGroup = group.id;
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
if (group.permissions) {
|
|
179
|
+
group.permissions.forEach((groupPermission) => {
|
|
180
|
+
groupPermission.idGroup = group.id;
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
this.managementGroupService.save(group).subscribe(() => {
|
|
184
|
+
this.getGroups();
|
|
185
|
+
});
|
|
186
|
+
this.groupUsers = [];
|
|
187
|
+
}
|
|
188
|
+
removePermissionUndefined(group) {
|
|
189
|
+
group.permissions = group.permissions.filter((permission) => permission.isAllowed !== undefined);
|
|
190
|
+
}
|
|
191
|
+
getGroups() {
|
|
192
|
+
this.managementGroupService.getAll().subscribe(data => this.groups = data);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
CaucaManagementGroupComponent.decorators = [
|
|
196
|
+
{ type: Component, args: [{
|
|
197
|
+
selector: 'cauca-management-group',
|
|
198
|
+
template: "<cauca-dx-data-grid [allowPrint]=\"showPrintButton\" keyExpr=\"id\" [dataSource]=\"groups\"\r\n (onRowInserted)=\"onRowInserted($event)\" (onInitNewRow)=\"onInitNewRow()\" (onRowUpdated)=\"onRowUpdated($event)\"\r\n (onEditingStart)=\"onEditingStart($event)\" (onRowRemoved)=\"onRowRemoved($event)\">\r\n\r\n <dxi-column dataField=\"name\" [caption]=\"'management.name' | translate\">\r\n <dxi-validation-rule type=\"async\" [message]=\"'management.groupNameAlreadyUsed' | translate\"\r\n [validationCallback]=\"groupNameAlreadyUsedValidation\"></dxi-validation-rule>\r\n </dxi-column>\r\n <dxi-column dataField=\"users\" [caption]=\"'management.users' | translate\" editCellTemplate=\"usersEditTemplate\"\r\n [calculateCellValue]=\"calculateUsersCellValue\">\r\n </dxi-column>\r\n <dxi-column dataField=\"permissions\" [caption]=\"'management.permissions' | translate\" [visible]=\"false\"\r\n editCellTemplate=\"permissionsEditTemplate\">\r\n </dxi-column>\r\n <dxo-export [enabled]=\"false\"></dxo-export>\r\n <dxo-editing mode=\"popup\" [allowAdding]=\"true\" [allowUpdating]=\"true\" [allowDeleting]=\"true\" [useIcons]=\"true\">\r\n <dxo-popup [showTitle]=\"true\" [title]=\"'management.group' | translate\" [fullScreen]=\"!showColumn\"></dxo-popup>\r\n <dxo-form colCount=\"1\" [labelLocation]=\"showColumnXS ? 'left' : 'top'\">\r\n <dxi-item dataField=\"name\" [isRequired]=\"true\"></dxi-item>\r\n <dxi-item dataField=\"users\"></dxi-item>\r\n <dxi-item dataField=\"permissions\"></dxi-item>\r\n </dxo-form>\r\n </dxo-editing>\r\n\r\n <div *dxTemplate=\"let field of 'usersEditTemplate'\">\r\n <dx-tag-box valueExpr=\"id\" [displayExpr]=\"fullName\" [dataSource]=\"users\" [searchEnabled]=\"true\"\r\n [searchExpr]=\"fullName\" (onInitialized)=\"getGroupUser(field, $event)\"\r\n (onValueChanged)=\"setGroupUser(field, $event)\">\r\n </dx-tag-box>\r\n </div>\r\n <div *dxTemplate=\"let field of 'permissionsEditTemplate'\">\r\n <dx-list [dataSource]=\"permissions\" itemTemplate=\"rowTemplate\" [searchEnabled]=\"true\"\r\n [searchExpr]=\"['name', 'tag']\" [hoverStateEnabled]=\"hoverStatePermission\">\r\n <div *dxTemplate=\"let permission of 'rowTemplate'\">\r\n <dx-check-box [text]=\"permission.name\" (onInitialized)=\"getPermissionStatus(field, permission, $event)\"\r\n (onValueChanged)=\"checkBoxToggled(field, permission, $event)\">\r\n </dx-check-box>\r\n </div>\r\n </dx-list>\r\n </div>\r\n</cauca-dx-data-grid>",
|
|
199
|
+
styles: [""]
|
|
200
|
+
},] }
|
|
201
|
+
];
|
|
202
|
+
CaucaManagementGroupComponent.ctorParameters = () => [
|
|
203
|
+
{ type: ManagementGroupService },
|
|
204
|
+
{ type: ManagementUserService },
|
|
205
|
+
{ type: ManagementPermissionService },
|
|
206
|
+
{ type: BreakpointObserver }
|
|
207
|
+
];
|
|
208
|
+
CaucaManagementGroupComponent.propDecorators = {
|
|
209
|
+
showPrintButton: [{ type: Input }],
|
|
210
|
+
hoverStatePermission: [{ type: Input }]
|
|
211
|
+
};
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F1Y2EtbWFuYWdlbWVudC1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vcHJvamVjdHMvY2F1Y2EtbWFuYWdlbWVudC9zcmMvIiwic291cmNlcyI6WyJsaWIvY2F1Y2EtbWFuYWdlbWVudC1ncm91cC9jYXVjYS1tYW5hZ2VtZW50LWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLckMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDckYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFbkYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFPL0YsTUFBTSxPQUFPLDZCQUE2QjtJQWV0QyxZQUNZLHNCQUE4QyxFQUM5QyxxQkFBNEMsRUFDNUMsMkJBQXdELEVBQ2hFLGtCQUFzQztRQUg5QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMsZ0NBQTJCLEdBQTNCLDJCQUEyQixDQUE2QjtRQWQ3RCxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUVoQyx5QkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDNUIsV0FBTSxHQUFpQixFQUFFLENBQUM7UUFDMUIsVUFBSyxHQUFnQixFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FBc0IsRUFBRSxDQUFDO1FBQ3BDLGlCQUFZLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsaUJBQVksR0FBUSxFQUFF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LENBQUM7SUFDM0gsQ0FBQztJQUVPLFNBQVM7UUFDYixJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMvRSxDQUFDOzs7WUE3TkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSx3QkFBd0I7Z0JBQ2xDLG1wRkFBc0Q7O2FBRXpEOzs7WUFUUSxzQkFBc0I7WUFDdEIscUJBQXFCO1lBRXJCLDJCQUEyQjtZQVQzQixrQkFBa0I7Ozs4QkFtQnRCLEtBQUs7bUNBRUwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBVc2VyTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL3VzZXItbW9kZWwnO1xyXG5pbXBvcnQgeyBVc2VyR3JvdXBNb2RlbCB9IGZyb20gJy4uL3NoYXJlZC9tb2RlbHMvdXNlci1ncm91cC1tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL2dyb3VwLW1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBQZXJtaXNzaW9uTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL2dyb3VwLXBlcm1pc3Npb24tbW9kZWwnO1xyXG5pbXBvcnQgeyBNYW5hZ2VtZW50R3JvdXBTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL3NlcnZpY2VzL21hbmFnZW1lbnQtZ3JvdXAuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hbmFnZW1lbnRVc2VyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9tYW5hZ2VtZW50LXVzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25Nb2RlbCB9IGZyb20gJy4uL3NoYXJlZC9tb2RlbHMvcGVybWlzc2lvbi1tb2RlbCc7XHJcbmltcG9ydCB7IE1hbmFnZW1lbnRQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9tYW5hZ2VtZW50LXBlcm1pc3Npb24uc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY2F1Y2EtbWFuYWdlbWVudC1ncm91cCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2F1Y2EtbWFuYWdlbWVudC1ncm91cC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jYXVjYS1tYW5hZ2VtZW50LWdyb3VwLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENhdWNhTWFuYWdlbWVudEdyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIHByaXZhdGUgZ3JvdXBVc2VyczogYW55O1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvd1ByaW50QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaG92ZXJTdGF0ZVBlcm1pc3Npb24gPSB0cnVlO1xyXG4gICAgcHVibGljIGdyb3VwczogR3JvdXBNb2RlbFtdID0gW107XHJcbiAgICBwdWJsaWMgdXNlcnM6IFVzZXJNb2RlbFtdID0gW107XHJcbiAgICBwdWJsaWMgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25Nb2RlbFtdID0gW107XHJcbiAgICBwdWJsaWMgdXNlckZ1bGxOYW1lOiBhbnkgPSB7fTtcclxuICAgIHB1YmxpYyBzaG93Q29sdW1uID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBzaG93Q29sdW1uWFMgPSB0cnVlO1xyXG4gICAgcHVibGljIHRyYW5zbGF0aW9uczogYW55ID0gW107XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBtYW5hZ2VtZW50R3JvdXBTZXJ2aWNlOiBNYW5hZ2VtZW50R3JvdXBTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbWFuYWdlbWVudFVzZXJTZXJ2aWNlOiBNYW5hZ2VtZW50VXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtYW5hZ2VtZW50UGVybWlzc2lvblNlcnZpY2U6IE1hbmFnZW1lbnRQZXJtaXNzaW9uU2VydmljZSxcclxuICAgICAgICBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlcixcclxuICAgICkge1xyXG4gICAgICAgIGJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFsnKG1heC13aWR0aDogMTAwMHB4KSddKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q29sdW1uID0gIXJlc3VsdC5tYXRjaGVzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFsnKG1heC13aWR0aDogNjAwcHgpJ10pLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDb2x1bW5YUyA9ICFyZXN1bHQubWF0Y2hlcztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VtZW50VXNlclNlcnZpY2UuZ2V0QWxsPFVzZXJNb2RlbD4oKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlcnMgPSBkYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJzLmZvckVhY2godXNlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlci5pc0FjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1c2VyLmZpcnN0TmFtZSAhPT0gJycgJiYgdXNlci5sYXN0TmFtZSAhPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyRnVsbE5hbWVbdXNlci5pZF0gID0gYCR7dXNlci5maXJzdE5hbWV9ICR7dXNlci5sYXN0TmFtZX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VtZW50UGVybWlzc2lvblNlcnZpY2UuZ2V0QWxsKCkuc3Vic2NyaWJlKHBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcGVybWlzc2lvbkluZGV4ID0gcGVybWlzc2lvbnMuZmluZEluZGV4KGMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGMudGFnID09PSAnQ2FuQWNjZXNzUGVybWlzc2lvbnMnO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25JbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zLnNwbGljZShwZXJtaXNzaW9uSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnNvcnQoKGE6IFBlcm1pc3Npb25Nb2RlbCwgYjogUGVybWlzc2lvbk1vZGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYS5uYW1lIDwgYi5uYW1lKSB7IHJldHVybiAtMTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGEubmFtZSA+IGIubmFtZSkgeyByZXR1cm4gMTsgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gcGVybWlzc2lvbnM7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5nZXRHcm91cHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZnVsbE5hbWUoZGF0YSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBgJHtkYXRhLmZpcnN0TmFtZX0gJHtkYXRhLmxhc3ROYW1lfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEdyb3VwVXNlcihmaWVsZCwgZSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHVzZXJzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwVXNlcnMpIHtcclxuICAgICAgICAgICAgdGhpcy5ncm91cFVzZXJzLmZvckVhY2goIHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdXNlcnMucHVzaCh1c2VyLmlkVXNlcik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlLmNvbXBvbmVudC5vcHRpb24oJ3ZhbHVlJywgdXNlcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRHcm91cFVzZXIoZmllbGQsIGUpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBncm91cFVzZXI6IFVzZXJHcm91cE1vZGVsW10gPSBbXTtcclxuXHJcbiAgICAgICAgZS52YWx1ZS5mb3JFYWNoKGlkVXNlciA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwSW5kZXggPSAoZmllbGQuZGF0YS51c2VycyB8fCBbXSkuZmluZEluZGV4KGcgPT4gZy5pZFVzZXIgPT09IGlkVXNlcik7XHJcblxyXG4gICAgICAgICAgICBpZiAoZ3JvdXBJbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGdyb3VwVXNlci5wdXNoKHsgaWRVc2VyLCB9IGFzIFVzZXJHcm91cE1vZGVsKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGdyb3VwVXNlci5wdXNoKGZpZWxkLmRhdGEudXNlcnNbZ3JvdXBJbmRleF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGZpZWxkLnNldFZhbHVlKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ3JvdXBVc2VyKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRHcm91cFBlcm1pc3Npb24oZmllbGQsIGUpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBncm91cFVzZXI6IFVzZXJHcm91cE1vZGVsW10gPSBbXTtcclxuXHJcbiAgICAgICAgZS52YWx1ZS5mb3JFYWNoKGlkVXNlciA9PiB7XHJcbiAgICAgICAgICAgIGdyb3VwVXNlci5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkVXNlcixcclxuICAgICAgICAgICAgfSBhcyBVc2VyR3JvdXBNb2RlbCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGZpZWxkLnNldFZhbHVlKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ3JvdXBVc2VyKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQZXJtaXNzaW9uU3RhdHVzKGZpZWxkLCBwZXJtaXNzaW9uLCBlKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBQZXJtaXNzaW9uID0gKGZpZWxkLnZhbHVlIHx8IFtdKS5maW5kKHAgPT4gcC5pZE1vZHVsZVBlcm1pc3Npb24gPT09IHBlcm1pc3Npb24uaWQpO1xyXG5cclxuICAgICAgICBpZiAoZ3JvdXBQZXJtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgIGUuY29tcG9uZW50Lm9wdGlvbigndmFsdWUnLCBncm91cFBlcm1pc3Npb24uaXNBbGxvd2VkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlLmNvbXBvbmVudC5vcHRpb24oJ3ZhbHVlJywgdW5kZWZpbmVkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrQm94VG9nZ2xlZChmaWVsZCwgcGVybWlzc2lvbiwgZSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChlLmNvbXBvbmVudC5za2lwT25WYWx1ZUNoYW5nZWQpIHtcclxuICAgICAgICAgICAgZS5jb21wb25lbnQuc2tpcE9uVmFsdWVDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGUuY29tcG9uZW50LnNldFVuZGVmaW5lZE5leHRUaW1lKSB7XHJcbiAgICAgICAgICAgIGUuY29tcG9uZW50LnNldFVuZGVmaW5lZE5leHRUaW1lID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGUuY29tcG9uZW50LnNraXBPblZhbHVlQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGUuY29tcG9uZW50Lm9wdGlvbigndmFsdWUnLCB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFBlcm1pc3Npb25TdGF0dXMoZmllbGQsIHBlcm1pc3Npb24sIHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGUudmFsdWUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGUuY29tcG9uZW50LnNldFVuZGVmaW5lZE5leHRUaW1lID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UGVybWlzc2lvblN0YXR1cyhmaWVsZCwgcGVybWlzc2lvbiwgZS52YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uUm93SW5zZXJ0ZWQoZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2F2ZUdyb3VwKGUuZGF0YSBhcyBHcm91cE1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Sb3dVcGRhdGVkKGUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNhdmVHcm91cChlLmRhdGEgYXMgR3JvdXBNb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uUm93UmVtb3ZlZChlKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSAoZS5kYXRhIGFzIEdyb3VwTW9kZWwpO1xyXG4gICAgICAgIHRoaXMubWFuYWdlbWVudEdyb3VwU2VydmljZS5kZWxldGUoZ3JvdXAuaWQpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nZXRHcm91cHMoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FsY3VsYXRlVXNlcnNDZWxsVmFsdWUgPSAoZSk6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgY29uc3QgdXNlcnMgPSAoZS51c2VycyA/IGUudXNlcnMgYXMgVXNlckdyb3VwTW9kZWxbXSA6IFtdKTtcclxuICAgICAgICBsZXQgdXNlcnNOYW1lczogYW55W10gPSBbXTtcclxuICAgICAgICB1c2Vycy5mb3JFYWNoKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyR3JvdXAgPSB0aGlzLnVzZXJzLmZpbHRlcih1ID0+IHUuaWQgPT09IHVzZXIuaWRVc2VyKTtcclxuICAgICAgICAgICAgaWYgKHVzZXJHcm91cCAmJiB1c2VyR3JvdXBbMF0pIHtcclxuICAgICAgICAgICAgICAgIHVzZXJzTmFtZXMucHVzaCh1c2VyR3JvdXBbMF0uZmlyc3ROYW1lICsgJyAnICsgdXNlckdyb3VwWzBdLmxhc3ROYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHVzZXJzTmFtZXMgPSB1c2Vyc05hbWVzLnNvcnQoKG9uZSwgdHdvKSA9PiAob25lIDwgdHdvID8gLTEgOiAxKSk7XHJcbiAgICAgICAgcmV0dXJuIHVzZXJzTmFtZXMuam9pbignLCAnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25FZGl0aW5nU3RhcnQoZTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ncm91cFVzZXJzID0gZS5kYXRhLnVzZXJzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkluaXROZXdSb3coKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ncm91cFVzZXJzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdyb3VwTmFtZUFscmVhZHlVc2VkVmFsaWRhdGlvbiA9IChlKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlbWVudEdyb3VwU2VydmljZS5oYXNFeGlzdGluZ0dyb3VwTmFtZShlLmRhdGEpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoZXhpc3Q6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAhZXhpc3Q7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFBlcm1pc3Npb25TdGF0dXMoZmllbGQ6IGFueSwgcGVybWlzc2lvbiwgdmFsdWUpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBncm91cFBlcm1pc3Npb25zID0gZmllbGQudmFsdWUgfHwgW107XHJcbiAgICAgICAgY29uc3QgZ3JvdXBJbmRleCA9IGdyb3VwUGVybWlzc2lvbnMuZmluZEluZGV4KHAgPT4gcC5pZE1vZHVsZVBlcm1pc3Npb24gPT09IHBlcm1pc3Npb24uaWQpO1xyXG5cclxuICAgICAgICBpZiAoZ3JvdXBJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNbZ3JvdXBJbmRleF0uaXNBbGxvd2VkID0gdmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkTW9kdWxlUGVybWlzc2lvbjogcGVybWlzc2lvbi5pZCxcclxuICAgICAgICAgICAgICAgIGlzQWxsb3dlZDogdmFsdWUsXHJcbiAgICAgICAgICAgIH0gYXMgR3JvdXBQZXJtaXNzaW9uTW9kZWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZmllbGQuc2V0VmFsdWUoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShncm91cFBlcm1pc3Npb25zKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2F2ZUdyb3VwKGdyb3VwOiBHcm91cE1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVQZXJtaXNzaW9uVW5kZWZpbmVkKGdyb3VwKTtcclxuICAgICAgICBpZiAoZ3JvdXAudXNlcnMpIHtcclxuICAgICAgICAgICAgZ3JvdXAudXNlcnMuZm9yRWFjaCgodXNlckdyb3VwOiBVc2VyR3JvdXBNb2RlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdXNlckdyb3VwLmlkR3JvdXAgPSBncm91cC5pZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChncm91cC5wZXJtaXNzaW9ucykge1xyXG4gICAgICAgICAgICBncm91cC5wZXJtaXNzaW9ucy5mb3JFYWNoKChncm91cFBlcm1pc3Npb246IEdyb3VwUGVybWlzc2lvbk1vZGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBncm91cFBlcm1pc3Npb24uaWRHcm91cCA9IGdyb3VwLmlkO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VtZW50R3JvdXBTZXJ2aWNlLnNhdmUoZ3JvdXApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JvdXBzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5ncm91cFVzZXJzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZW1vdmVQZXJtaXNzaW9uVW5kZWZpbmVkKGdyb3VwOiBHcm91cE1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgZ3JvdXAucGVybWlzc2lvbnMgPSBncm91cC5wZXJtaXNzaW9ucy5maWx0ZXIoKHBlcm1pc3Npb246IEdyb3VwUGVybWlzc2lvbk1vZGVsKSA9PiBwZXJtaXNzaW9uLmlzQWxsb3dlZCAhPT0gdW5kZWZpbmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEdyb3VwcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1hbmFnZW1lbnRHcm91cFNlcnZpY2UuZ2V0QWxsKCkuc3Vic2NyaWJlKGRhdGEgPT4gdGhpcy5ncm91cHMgPSBkYXRhKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|