@cauca-911/management 13.0.0 → 13.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.
Files changed (54) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +4 -4
  3. package/assets/i18n/cauca/en-management.json +16 -16
  4. package/assets/i18n/cauca/fr-management.json +16 -16
  5. package/bundles/cauca-911-management.umd.js +703 -0
  6. package/bundles/cauca-911-management.umd.js.map +1 -0
  7. package/bundles/cauca-911-management.umd.min.js +2 -0
  8. package/bundles/cauca-911-management.umd.min.js.map +1 -0
  9. package/{esm2020/cauca-911-management.mjs → esm2015/cauca-911-management.js} +1 -1
  10. package/esm2015/lib/cauca-management-group/cauca-management-group.component.js +298 -0
  11. package/esm2015/lib/cauca-management-user/cauca-management-user.component.js +106 -0
  12. package/esm2015/lib/cauca-management.component.js +27 -0
  13. package/esm2015/lib/cauca-management.module.js +56 -0
  14. package/esm2015/lib/cauca-management.service.js +14 -0
  15. package/esm2015/lib/shared/models/group-model.js +8 -0
  16. package/esm2015/lib/shared/models/group-permission-model.js +9 -0
  17. package/esm2015/lib/shared/models/permission-model.js +8 -0
  18. package/esm2015/lib/shared/models/user-group-model.js +8 -0
  19. package/esm2015/lib/shared/models/user-model.js +12 -0
  20. package/esm2015/lib/shared/models/user-permission-model.js +9 -0
  21. package/esm2015/lib/shared/services/management-group.service.js +34 -0
  22. package/esm2015/lib/shared/services/management-permission.service.js +31 -0
  23. package/esm2015/lib/shared/services/management-user.service.js +49 -0
  24. package/{esm2020/public-api.mjs → esm2015/public-api.js} +1 -1
  25. package/fesm2015/cauca-911-management.js +634 -0
  26. package/fesm2015/cauca-911-management.js.map +1 -0
  27. package/lib/cauca-management-group/cauca-management-group.component.d.ts +2 -2
  28. package/lib/cauca-management-user/cauca-management-user.component.d.ts +2 -2
  29. package/lib/cauca-management.component.d.ts +2 -2
  30. package/lib/cauca-management.module.d.ts +2 -3
  31. package/lib/cauca-management.service.d.ts +2 -2
  32. package/lib/shared/models/user-model.d.ts +1 -0
  33. package/lib/shared/services/management-group.service.d.ts +2 -2
  34. package/lib/shared/services/management-permission.service.d.ts +2 -2
  35. package/lib/shared/services/management-user.service.d.ts +2 -2
  36. package/package.json +8 -21
  37. package/esm2020/lib/cauca-management-group/cauca-management-group.component.mjs +0 -285
  38. package/esm2020/lib/cauca-management-user/cauca-management-user.component.mjs +0 -96
  39. package/esm2020/lib/cauca-management.component.mjs +0 -23
  40. package/esm2020/lib/cauca-management.module.mjs +0 -57
  41. package/esm2020/lib/cauca-management.service.mjs +0 -14
  42. package/esm2020/lib/shared/models/group-model.mjs +0 -8
  43. package/esm2020/lib/shared/models/group-permission-model.mjs +0 -9
  44. package/esm2020/lib/shared/models/permission-model.mjs +0 -8
  45. package/esm2020/lib/shared/models/user-group-model.mjs +0 -8
  46. package/esm2020/lib/shared/models/user-model.mjs +0 -11
  47. package/esm2020/lib/shared/models/user-permission-model.mjs +0 -9
  48. package/esm2020/lib/shared/services/management-group.service.mjs +0 -34
  49. package/esm2020/lib/shared/services/management-permission.service.mjs +0 -31
  50. package/esm2020/lib/shared/services/management-user.service.mjs +0 -49
  51. package/fesm2015/cauca-911-management.mjs +0 -649
  52. package/fesm2015/cauca-911-management.mjs.map +0 -1
  53. package/fesm2020/cauca-911-management.mjs +0 -613
  54. package/fesm2020/cauca-911-management.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cauca-911-management.js","sources":["../../projects/cauca-management/src/lib/cauca-management.service.ts","../../projects/cauca-management/src/lib/cauca-management.component.ts","../../projects/cauca-management/src/lib/cauca-management.component.html","../esm2015/projects/cauca-management/src/lib/shared/services/management-group.service.ts","../esm2015/projects/cauca-management/src/lib/shared/services/management-user.service.ts","../esm2015/projects/cauca-management/src/lib/shared/services/management-permission.service.ts","../projects/cauca-management/src/lib/cauca-management-group/cauca-management-group.component.html","../projects/cauca-management/src/lib/cauca-management-group/cauca-management-group.component.ts","../esm2015/projects/cauca-management/src/lib/shared/models/user-model.ts","../projects/cauca-management/src/lib/cauca-management-user/cauca-management-user.component.ts","../projects/cauca-management/src/lib/cauca-management-user/cauca-management-user.component.html","../../projects/cauca-management/src/lib/cauca-management.module.ts","../esm2015/projects/cauca-management/src/lib/shared/models/user-group-model.ts","../esm2015/projects/cauca-management/src/lib/shared/models/user-permission-model.ts","../esm2015/projects/cauca-management/src/lib/shared/models/group-model.ts","../esm2015/projects/cauca-management/src/lib/shared/models/group-permission-model.ts","../../../projects/cauca-management/src/public-api.ts","../../../projects/cauca-management/src/cauca-911-management.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CaucaManagementService {\n\n public constructor() { }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'cauca-management',\n templateUrl: './cauca-management.component.html',\n styles: []\n})\nexport class CaucaManagementComponent implements OnInit {\n\n public constructor() { }\n\n public ngOnInit(): void {\n }\n\n}\n","<div>{{'core.noGenericComponentOnThisLibrary' | translate}}</div>","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { Configuration, CaucaCoreService } from '@cauca-911/core';\nimport { GroupModel } from '../models/group-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ManagementGroupService {\n private config: Configuration;\n\n public constructor(\n coreService: CaucaCoreService,\n private http: HttpClient,\n ) {\n this.config = coreService.getConfig();\n }\n\n public getAll(): Observable<GroupModel[]> {\n return this.http.get<GroupModel[]>(`${this.config.apiUrl}GroupManagement`);\n }\n\n public get(idGroup: string): Observable<GroupModel> {\n return this.http.get<GroupModel>(`${this.config.apiUrl}GroupManagement/${idGroup}`);\n }\n\n public save(group: GroupModel): Observable<any> {\n return this.http.post(`${this.config.apiUrl}GroupManagement`, group);\n }\n\n public delete(idGroup: string): Observable<any> {\n return this.http.delete(`${this.config.apiUrl}GroupManagement/${idGroup}`);\n }\n\n public hasExistingGroupName(group: GroupModel): Observable<boolean> {\n return this.http.post<boolean>(`${this.config.apiUrl}GroupManagement/GroupNameAlreadyExist`, group);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { Configuration, CaucaCoreService } from '@cauca-911/core';\nimport { UserGroupModel } from '../models/user-group-model';\nimport { UserPermissionModel } from '../models/user-permission-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ManagementUserService {\n private config: Configuration;\n\n public constructor(\n coreService: CaucaCoreService,\n protected http: HttpClient,\n ) {\n this.config = coreService.getConfig();\n }\n\n public getAll<TUser>(): Observable<TUser[]> {\n return this.http.get<TUser[]>(`${this.config.apiUrl}UserManagement`);\n }\n\n public get<TUser>(idUser: string): Observable<TUser> {\n return this.http.get<TUser>(`${this.config.apiUrl}UserManagement/${idUser}`);\n }\n\n public getGroup(idUser: string): Observable<any> {\n return this.http.get(`${this.config.apiUrl}UserManagement/${idUser}/groups`);\n }\n\n public addGroup(userGroup: UserGroupModel): Observable<any> {\n return this.http.post(`${this.config.apiUrl}UserManagement/group`, userGroup);\n }\n\n public deleteGroup(idUserGroup: string): Observable<any> {\n return this.http.delete(`${this.config.apiUrl}UserManagement/groups/${idUserGroup}`);\n }\n\n public addPermission(userPermission: UserPermissionModel): Observable<any> {\n return this.http.post(`${this.config.apiUrl}UserManagement/permission`, userPermission);\n }\n\n public deletePermission(idUserPermission: string): Observable<any> {\n return this.http.delete(`${this.config.apiUrl}UserManagement/groups/${idUserPermission}`);\n }\n\n public save<TUser>(user: TUser): Observable<any> {\n return this.http.post(`${this.config.apiUrl}UserManagement`, user);\n }\n\n public delete(idUser: string): Observable<any> {\n return this.http.delete(`${this.config.apiUrl}UserManagement/${idUser}`);\n }\n\n public hasExistingUserName<TUser>(user: TUser): Observable<boolean> {\n return this.http.post<boolean>(`${this.config.apiUrl}UserManagement/UserNameAlreadyExist`, user);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { Configuration, CaucaCoreService } from '@cauca-911/core';\nimport { PermissionModel } from '../models/permission-model';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ManagementPermissionService {\n private config: Configuration;\n\n public constructor(\n coreService: CaucaCoreService,\n private http: HttpClient,\n ) {\n this.config = coreService.getConfig();\n }\n\n public getAll(): Observable<PermissionModel[]> {\n return this.http.get<PermissionModel[]>(`${this.config.apiUrl}PermissionManagement`);\n }\n\n public get(idPermission: string): Observable<PermissionModel> {\n return this.http.get<PermissionModel>(`${this.config.apiUrl}PermissionManagement/${idPermission}`);\n }\n\n public save(permission: PermissionModel): Observable<any> {\n return this.http.post(`${this.config.apiUrl}PermissionManagement`, permission);\n }\n\n public delete(idPermission: string): Observable<any> {\n return this.http.delete(`${this.config.apiUrl}PermissionManagement/${idPermission}`);\n }\n}\n","<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>","import { Component, Input, OnInit } from '@angular/core';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { map } from 'rxjs/operators';\nimport { UserModel } from '../shared/models/user-model';\nimport { UserGroupModel } from '../shared/models/user-group-model';\nimport { GroupModel } from '../shared/models/group-model';\nimport { GroupPermissionModel } from '../shared/models/group-permission-model';\nimport { ManagementGroupService } from '../shared/services/management-group.service';\nimport { ManagementUserService } from '../shared/services/management-user.service';\nimport { PermissionModel } from '../shared/models/permission-model';\nimport { ManagementPermissionService } from '../shared/services/management-permission.service';\n\n@Component({\n selector: 'cauca-management-group',\n templateUrl: './cauca-management-group.component.html',\n styleUrls: ['./cauca-management-group.component.scss']\n})\nexport class CaucaManagementGroupComponent implements OnInit {\n @Input()\n public showPrintButton: boolean = true;\n @Input()\n public hoverStatePermission = true;\n\n public groups: GroupModel[] = [];\n public users: UserModel[] = [];\n public permissions: PermissionModel[] = [];\n public userFullName: any = {};\n public showColumn = true;\n public showColumnXS = true;\n public translations: any = [];\n\n private groupUsers: any;\n\n public constructor(\n private managementGroupService: ManagementGroupService,\n private managementUserService: ManagementUserService,\n private managementPermissionService: ManagementPermissionService,\n breakpointObserver: BreakpointObserver,\n ) {\n breakpointObserver.observe(['(max-width: 1000px)']).subscribe((result: any) => {\n this.showColumn = !result.matches;\n });\n breakpointObserver.observe(['(max-width: 600px)']).subscribe((result: any) => {\n this.showColumnXS = !result.matches;\n });\n }\n\n public ngOnInit(): void {\n this.managementUserService.getAll<UserModel>().subscribe((data: UserModel[]) => {\n this.users = data;\n this.users.forEach((user: UserModel) => {\n if (user.isActive) {\n if (user.firstName !== '' && user.lastName !== '') {\n this.userFullName[user.id] = `${user.firstName} ${user.lastName}`;\n }\n }\n });\n });\n this.managementPermissionService.getAll().subscribe((permissions: PermissionModel[]) => {\n const permissionIndex = permissions.findIndex((c: PermissionModel) => c.tag === 'CanAccessPermissions');\n if (permissionIndex !== -1) {\n permissions.splice(permissionIndex, 1);\n }\n permissions.sort((a: PermissionModel, b: PermissionModel) => {\n if (a.name < b.name) {\n return -1;\n }\n if (a.name > b.name) {\n return 1;\n }\n return 0;\n });\n this.permissions = permissions;\n });\n this.getGroups();\n }\n\n public fullName(data: any): string {\n if (!data) {\n return '';\n }\n\n return `${data.firstName} ${data.lastName}`;\n }\n\n public getGroupUser(field: any, e: any): void {\n const users: string[] = [];\n if (this.groupUsers) {\n this.groupUsers.forEach((user: any) => {\n users.push(user.idUser);\n });\n }\n e.component.option('value', users);\n }\n\n public setGroupUser(field: any, e: any): void {\n const groupUser: UserGroupModel[] = [];\n\n e.value.forEach((idUser: string) => {\n const groupIndex = (field.data.users || []).findIndex((g: any) => g.idUser === idUser);\n\n if (groupIndex === -1) {\n groupUser.push({ idUser, } as UserGroupModel);\n } else {\n groupUser.push(field.data.users[groupIndex]);\n }\n });\n\n field.setValue(JSON.parse(JSON.stringify(groupUser)));\n }\n\n public setGroupPermission(field: any, e: any): void {\n const groupUser: UserGroupModel[] = [];\n\n e.value.forEach((idUser: string) => {\n groupUser.push({\n idUser,\n } as UserGroupModel);\n });\n\n field.setValue(JSON.parse(JSON.stringify(groupUser)));\n }\n\n public getPermissionStatus(field: any, permission: any, e: any): void {\n const groupPermission = (field.value || []).find((p: any) => p.idModulePermission === permission.id);\n\n if (groupPermission) {\n e.component.option('value', groupPermission.isAllowed);\n } else {\n e.component.option('value', undefined);\n }\n }\n\n public checkBoxToggled(field: any, permission: any, e: any): void {\n if (e.component.skipOnValueChanged) {\n e.component.skipOnValueChanged = false;\n return;\n }\n if (e.component.setUndefinedNextTime) {\n e.component.setUndefinedNextTime = false;\n e.component.skipOnValueChanged = true;\n e.component.option('value', undefined);\n this.setPermissionStatus(field, permission, undefined);\n return;\n }\n if (e.value === false) {\n e.component.setUndefinedNextTime = true;\n }\n\n this.setPermissionStatus(field, permission, e.value);\n }\n\n public onRowInserted(e: any): void {\n this.saveGroup(e.data as GroupModel);\n }\n\n public onRowUpdated(e: any): void {\n this.saveGroup(e.data as GroupModel);\n }\n\n public onRowRemoved(e: any): void {\n const group = (e.data as GroupModel);\n this.managementGroupService.delete(group.id).subscribe(() => {\n this.getGroups();\n });\n }\n\n public calculateUsersCellValue = (e: any): string => {\n const users = (e.users ? e.users as UserGroupModel[] : []);\n let usersNames: any[] = [];\n users.forEach((user: UserGroupModel) => {\n const userGroup = this.users.filter((u: UserModel) => u.id === user.idUser);\n if (userGroup && userGroup[0]) {\n usersNames.push(userGroup[0].firstName + ' ' + userGroup[0].lastName);\n }\n });\n usersNames = usersNames.sort((one: string, two: string) => (one < two ? -1 : 1));\n return usersNames.join(', ');\n };\n\n public onEditingStart(e: any): void {\n this.groupUsers = e.data.users;\n }\n\n public onInitNewRow(): void {\n this.groupUsers = [];\n }\n\n public groupNameAlreadyUsedValidation = (e: any): Promise<boolean> => this.managementGroupService.hasExistingGroupName(e.data).pipe(\n map((exist: boolean) => !exist)\n ).toPromise();\n\n private setPermissionStatus(field: any, permission: any, value: any): void {\n const groupPermissions = field.value || [];\n const groupIndex = groupPermissions.findIndex((p: GroupPermissionModel) => p.idModulePermission === permission.id);\n\n if (groupIndex > -1) {\n groupPermissions[groupIndex].isAllowed = value;\n } else {\n groupPermissions.push({\n idModulePermission: permission.id,\n isAllowed: value,\n } as GroupPermissionModel);\n }\n\n field.setValue(JSON.parse(JSON.stringify(groupPermissions)));\n }\n\n private saveGroup(group: GroupModel): void {\n this.removePermissionUndefined(group);\n if (group.users) {\n group.users.forEach((userGroup: UserGroupModel) => {\n userGroup.idGroup = group.id;\n });\n }\n if (group.permissions) {\n group.permissions.forEach((groupPermission: GroupPermissionModel) => {\n groupPermission.idGroup = group.id;\n });\n }\n this.managementGroupService.save(group).subscribe(() => {\n this.getGroups();\n });\n this.groupUsers = [];\n }\n\n private removePermissionUndefined(group: GroupModel): void {\n group.permissions = group.permissions.filter((permission: GroupPermissionModel) => permission.isAllowed !== undefined);\n }\n\n private getGroups(): void {\n this.managementGroupService.getAll().subscribe((data: any) => this.groups = data);\n }\n}\n","import { UserGroupModel } from './user-group-model';\nimport { UserPermissionModel } from './user-permission-model';\n\nexport class UserModel {\n public id: string;\n public userName = '';\n public firstName = '';\n public lastName = '';\n public password = '';\n public email = '';\n public isActive = true;\n public groups: UserGroupModel[];\n public permissions: UserPermissionModel[];\n public twoFactorAuthenticatorEnabled = false;\n\n public constructor() { }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { UserModel } from '../shared/models/user-model';\nimport { ManagementUserService } from '../shared/services/management-user.service';\nimport { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';\nimport { map } from 'rxjs/operators';\n\n@Component({\n selector: 'cauca-management-user',\n templateUrl: './cauca-management-user.component.html',\n styleUrls: ['./cauca-management-user.component.scss']\n})\nexport class CaucaManagementUserComponent implements OnInit {\n public users: UserModel[] = [\n new UserModel()\n ];\n public showColumnXS = true;\n\n public constructor(\n private managementUserService: ManagementUserService,\n breakpointObserver: BreakpointObserver,\n ) {\n breakpointObserver.observe(['(max-width: 600px)']).subscribe((result: BreakpointState) => {\n this.showColumnXS = !result.matches;\n });\n }\n\n public ngOnInit(): void {\n this.getUsers();\n }\n\n public onRowInserted(e: any): void {\n this.saveGroup(e.data as UserModel);\n }\n\n public onRowUpdated(e: any): void {\n this.saveGroup(e.key as UserModel);\n }\n\n public onRowRemoved(e: any): void {\n const user = (e.data as UserModel);\n this.managementUserService.delete(user.id).subscribe((data: any) => {\n this.getUsers();\n });\n }\n\n public userNameAlreadyUsedValidation = (e): Promise<boolean> => this.managementUserService.hasExistingUserName(e.data).pipe(\n map((exist: boolean) => !exist)\n ).toPromise();\n\n private saveGroup(user: UserModel): void {\n this.managementUserService.save<UserModel>(user).subscribe(() => {\n this.getUsers();\n });\n }\n\n private getUsers(): void {\n this.managementUserService.getAll<UserModel>().subscribe((data: any) => this.users = data);\n }\n}\n","<cauca-dx-data-grid\r\n keyExpr=\"id\"\r\n [dataSource]=\"users\"\r\n (onRowInserted)=\"onRowInserted($event)\"\r\n (onRowUpdated)=\"onRowUpdated($event)\"\r\n (onRowRemoved)=\"onRowRemoved($event)\">\r\n\r\n <dxi-column dataField=\"userName\" [caption]=\"'management.userName' | translate\">\r\n <dxi-validation-rule type=\"async\" [message]=\"'management.userNameAlreadyUsed' | translate\" [validationCallback]=\"userNameAlreadyUsedValidation\"></dxi-validation-rule>\r\n </dxi-column>\r\n <dxi-column dataField=\"isActive\" [caption]=\"'management.isActive' | translate\" [visible]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"firstName\" [caption]=\"'management.firstName' | translate\"></dxi-column>\r\n <dxi-column dataField=\"lastName\" [caption]=\"'management.lastName' | translate\"></dxi-column>\r\n <dxi-column dataField=\"groups\" [caption]=\"'management.group' | translate\"></dxi-column>\r\n\r\n <dxo-editing mode=\"popup\" [allowAdding]=\"true\" [allowUpdating]=\"true\" [allowDeleting]=\"true\" [useIcons]=\"true\">\r\n <dxo-popup [showTitle]=\"true\" [title]=\"'management.group' | translate\"></dxo-popup>\r\n <dxo-form colCount=\"2\" [labelLocation]=\"showColumnXS ? 'left' : 'top'\">\r\n <dxi-item dataField=\"userName\" [isRequired]=\"true\"></dxi-item>\r\n <dxi-item dataField=\"isActive\"></dxi-item>\r\n <dxi-item dataField=\"firstName\"></dxi-item>\r\n <dxi-item dataField=\"lastName\"></dxi-item>\r\n <dxi-item dataField=\"group\"></dxi-item>\r\n </dxo-form>\r\n </dxo-editing>\r\n</cauca-dx-data-grid>\r\n","import { NgModule } from '@angular/core';\r\nimport { DxCheckBoxModule } from 'devextreme-angular/ui/check-box';\r\nimport { DxListModule } from 'devextreme-angular/ui/list';\r\nimport { DxTagBoxModule } from 'devextreme-angular/ui/tag-box';\r\nimport { CaucaCoreForChildModule } from '@cauca-911/core';\r\nimport { CaucaDevextremeModule } from '@cauca-911/devextreme';\r\nimport { CaucaManagementComponent } from './cauca-management.component';\r\nimport { CaucaManagementGroupComponent } from './cauca-management-group/cauca-management-group.component';\r\nimport { CaucaManagementUserComponent } from './cauca-management-user/cauca-management-user.component';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@NgModule({\r\n declarations: [\r\n CaucaManagementComponent,\r\n CaucaManagementGroupComponent,\r\n CaucaManagementUserComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n DxCheckBoxModule,\r\n DxListModule,\r\n DxTagBoxModule,\r\n CaucaCoreForChildModule,\r\n CaucaDevextremeModule,\r\n ],\r\n exports: [\r\n CaucaManagementComponent,\r\n CaucaManagementUserComponent,\r\n CaucaManagementGroupComponent,\r\n ]\r\n})\r\nexport class CaucaManagementModule { }\r\n","export class UserGroupModel {\n public idUserGroup = '';\n public idGroup = '';\n public idUser = '';\n\n public constructor() { }\n}\n","export class UserPermissionModel {\n public idUserPermission = '';\n public isAllowed = false;\n public idUser = '';\n public idModulePermission = '';\n\n public constructor() { }\n}\n","import {GroupPermissionModel} from './group-permission-model';\nimport {UserGroupModel} from './user-group-model';\n\nexport class GroupModel {\n public id: string;\n public name = '';\n public users: UserGroupModel[] = [];\n public permissions: GroupPermissionModel[] = [];\n\n public constructor() { }\n}\n","export class GroupPermissionModel {\n public idGroupPermission = '';\n public isAllowed = false;\n public idGroup = '';\n public idModulePermission = '';\n\n public constructor() { }\n}\n","/*\r\n * Public API Surface of cauca-management\r\n */\r\n\r\nexport * from './lib/cauca-management.service';\r\nexport * from './lib/cauca-management.component';\r\nexport * from './lib/cauca-management.module';\r\nexport * from './lib/cauca-management-group/cauca-management-group.component';\r\nexport * from './lib/cauca-management-user/cauca-management-user.component';\r\n\r\nexport { ManagementUserService } from './lib/shared/services/management-user.service';\r\nexport { ManagementGroupService } from './lib/shared/services/management-group.service';\r\nexport { UserModel } from './lib/shared/models/user-model';\r\nexport { UserGroupModel } from './lib/shared/models/user-group-model';\r\nexport { UserPermissionModel } from './lib/shared/models/user-permission-model';\r\nexport { GroupModel } from './lib/shared/models/group-model';\r\nexport { GroupPermissionModel } from './lib/shared/models/group-permission-model';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i0.ɵɵelementStart","i0.ɵɵtext","i0.ɵɵelementEnd","i0.ɵɵadvance","i0.ɵɵtextInterpolate","i0.ɵɵlistener","i0.ɵɵproperty","i0.ɵɵtemplate","i0.ɵɵelement"],"mappings":"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"}
@@ -40,6 +40,6 @@ export declare class CaucaManagementGroupComponent implements OnInit {
40
40
  private saveGroup;
41
41
  private removePermissionUndefined;
42
42
  private getGroups;
43
- static ɵfac: i0.ɵɵFactoryDeclaration<CaucaManagementGroupComponent, never>;
44
- static ɵcmp: i0.ɵɵComponentDeclaration<CaucaManagementGroupComponent, "cauca-management-group", never, { "showPrintButton": "showPrintButton"; "hoverStatePermission": "hoverStatePermission"; }, {}, never, never>;
43
+ static ɵfac: i0.ɵɵFactoryDef<CaucaManagementGroupComponent, never>;
44
+ static ɵcmp: i0.ɵɵComponentDefWithMeta<CaucaManagementGroupComponent, "cauca-management-group", never, { "showPrintButton": "showPrintButton"; "hoverStatePermission": "hoverStatePermission"; }, {}, never, never>;
45
45
  }
@@ -15,6 +15,6 @@ export declare class CaucaManagementUserComponent implements OnInit {
15
15
  userNameAlreadyUsedValidation: (e: any) => Promise<boolean>;
16
16
  private saveGroup;
17
17
  private getUsers;
18
- static ɵfac: i0.ɵɵFactoryDeclaration<CaucaManagementUserComponent, never>;
19
- static ɵcmp: i0.ɵɵComponentDeclaration<CaucaManagementUserComponent, "cauca-management-user", never, {}, {}, never, never>;
18
+ static ɵfac: i0.ɵɵFactoryDef<CaucaManagementUserComponent, never>;
19
+ static ɵcmp: i0.ɵɵComponentDefWithMeta<CaucaManagementUserComponent, "cauca-management-user", never, {}, {}, never, never>;
20
20
  }
@@ -3,6 +3,6 @@ import * as i0 from "@angular/core";
3
3
  export declare class CaucaManagementComponent implements OnInit {
4
4
  constructor();
5
5
  ngOnInit(): void;
6
- static ɵfac: i0.ɵɵFactoryDeclaration<CaucaManagementComponent, never>;
7
- static ɵcmp: i0.ɵɵComponentDeclaration<CaucaManagementComponent, "cauca-management", never, {}, {}, never, never>;
6
+ static ɵfac: i0.ɵɵFactoryDef<CaucaManagementComponent, never>;
7
+ static ɵcmp: i0.ɵɵComponentDefWithMeta<CaucaManagementComponent, "cauca-management", never, {}, {}, never, never>;
8
8
  }
@@ -9,7 +9,6 @@ import * as i7 from "devextreme-angular/ui/tag-box";
9
9
  import * as i8 from "@cauca-911/core";
10
10
  import * as i9 from "@cauca-911/devextreme";
11
11
  export declare class CaucaManagementModule {
12
- static ɵfac: i0.ɵɵFactoryDeclaration<CaucaManagementModule, never>;
13
- static ɵmod: i0.ɵɵNgModuleDeclaration<CaucaManagementModule, [typeof i1.CaucaManagementComponent, typeof i2.CaucaManagementGroupComponent, typeof i3.CaucaManagementUserComponent], [typeof i4.CommonModule, typeof i5.DxCheckBoxModule, typeof i6.DxListModule, typeof i7.DxTagBoxModule, typeof i8.CaucaCoreForChildModule, typeof i9.CaucaDevextremeModule], [typeof i1.CaucaManagementComponent, typeof i3.CaucaManagementUserComponent, typeof i2.CaucaManagementGroupComponent]>;
14
- static ɵinj: i0.ɵɵInjectorDeclaration<CaucaManagementModule>;
12
+ static ɵmod: i0.ɵɵNgModuleDefWithMeta<CaucaManagementModule, [typeof i1.CaucaManagementComponent, typeof i2.CaucaManagementGroupComponent, typeof i3.CaucaManagementUserComponent], [typeof i4.CommonModule, typeof i5.DxCheckBoxModule, typeof i6.DxListModule, typeof i7.DxTagBoxModule, typeof i8.CaucaCoreForChildModule, typeof i9.CaucaDevextremeModule], [typeof i1.CaucaManagementComponent, typeof i3.CaucaManagementUserComponent, typeof i2.CaucaManagementGroupComponent]>;
13
+ static ɵinj: i0.ɵɵInjectorDef<CaucaManagementModule>;
15
14
  }
@@ -1,6 +1,6 @@
1
1
  import * as i0 from "@angular/core";
2
2
  export declare class CaucaManagementService {
3
3
  constructor();
4
- static ɵfac: i0.ɵɵFactoryDeclaration<CaucaManagementService, never>;
5
- static ɵprov: i0.ɵɵInjectableDeclaration<CaucaManagementService>;
4
+ static ɵfac: i0.ɵɵFactoryDef<CaucaManagementService, never>;
5
+ static ɵprov: i0.ɵɵInjectableDef<CaucaManagementService>;
6
6
  }
@@ -10,5 +10,6 @@ export declare class UserModel {
10
10
  isActive: boolean;
11
11
  groups: UserGroupModel[];
12
12
  permissions: UserPermissionModel[];
13
+ twoFactorAuthenticatorEnabled: boolean;
13
14
  constructor();
14
15
  }
@@ -12,6 +12,6 @@ export declare class ManagementGroupService {
12
12
  save(group: GroupModel): Observable<any>;
13
13
  delete(idGroup: string): Observable<any>;
14
14
  hasExistingGroupName(group: GroupModel): Observable<boolean>;
15
- static ɵfac: i0.ɵɵFactoryDeclaration<ManagementGroupService, never>;
16
- static ɵprov: i0.ɵɵInjectableDeclaration<ManagementGroupService>;
15
+ static ɵfac: i0.ɵɵFactoryDef<ManagementGroupService, never>;
16
+ static ɵprov: i0.ɵɵInjectableDef<ManagementGroupService>;
17
17
  }
@@ -11,6 +11,6 @@ export declare class ManagementPermissionService {
11
11
  get(idPermission: string): Observable<PermissionModel>;
12
12
  save(permission: PermissionModel): Observable<any>;
13
13
  delete(idPermission: string): Observable<any>;
14
- static ɵfac: i0.ɵɵFactoryDeclaration<ManagementPermissionService, never>;
15
- static ɵprov: i0.ɵɵInjectableDeclaration<ManagementPermissionService>;
14
+ static ɵfac: i0.ɵɵFactoryDef<ManagementPermissionService, never>;
15
+ static ɵprov: i0.ɵɵInjectableDef<ManagementPermissionService>;
16
16
  }
@@ -18,6 +18,6 @@ export declare class ManagementUserService {
18
18
  save<TUser>(user: TUser): Observable<any>;
19
19
  delete(idUser: string): Observable<any>;
20
20
  hasExistingUserName<TUser>(user: TUser): Observable<boolean>;
21
- static ɵfac: i0.ɵɵFactoryDeclaration<ManagementUserService, never>;
22
- static ɵprov: i0.ɵɵInjectableDeclaration<ManagementUserService>;
21
+ static ɵfac: i0.ɵɵFactoryDef<ManagementUserService, never>;
22
+ static ɵprov: i0.ɵɵInjectableDef<ManagementUserService>;
23
23
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cauca-911/management",
3
- "version": "13.0.0",
3
+ "version": "13.0.1",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.2.0",
6
6
  "@angular/core": "^13.2.0",
@@ -17,27 +17,14 @@
17
17
  "cauca-911/management",
18
18
  "management"
19
19
  ],
20
- "module": "fesm2015/cauca-911-management.mjs",
21
- "es2020": "fesm2020/cauca-911-management.mjs",
22
- "esm2020": "esm2020/cauca-911-management.mjs",
23
- "fesm2020": "fesm2020/cauca-911-management.mjs",
24
- "fesm2015": "fesm2015/cauca-911-management.mjs",
20
+ "main": "bundles/cauca-911-management.umd.js",
21
+ "module": "fesm2015/cauca-911-management.js",
22
+ "es2015": "fesm2015/cauca-911-management.js",
23
+ "esm2015": "esm2015/cauca-911-management.js",
24
+ "fesm2015": "fesm2015/cauca-911-management.js",
25
25
  "typings": "cauca-911-management.d.ts",
26
- "exports": {
27
- "./package.json": {
28
- "default": "./package.json"
29
- },
30
- ".": {
31
- "types": "./cauca-911-management.d.ts",
32
- "esm2020": "./esm2020/cauca-911-management.mjs",
33
- "es2020": "./fesm2020/cauca-911-management.mjs",
34
- "es2015": "./fesm2015/cauca-911-management.mjs",
35
- "node": "./fesm2015/cauca-911-management.mjs",
36
- "default": "./fesm2020/cauca-911-management.mjs"
37
- }
38
- },
39
26
  "sideEffects": false,
40
27
  "scripts": {
41
- "prepublishOnly": "node --eval \"console.error('ERROR: Trying to publish a package that has been compiled by Ivy in full compilation mode. This is not allowed.\\nPlease delete and rebuild the package with Ivy partial compilation mode, before attempting to publish.\\n')\" && exit 1"
28
+ "prepublishOnly": "node --eval \"console.error('ERROR: Trying to publish a package that has been compiled by Ivy. This is not allowed.\\nPlease delete and rebuild the package, without compiling with Ivy, before attempting to publish.\\n')\" && exit 1"
42
29
  }
43
- }
30
+ }
@@ -1,285 +0,0 @@
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_17_Template(rf, ctx) { if (rf & 1) {
16
- const _r4 = i0.ɵɵgetCurrentView();
17
- i0.ɵɵelementStart(0, "div")(1, "dx-tag-box", 13);
18
- i0.ɵɵlistener("onInitialized", function CaucaManagementGroupComponent_div_17_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_17_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_18_div_2_Template(rf, ctx) { if (rf & 1) {
26
- const _r11 = i0.ɵɵgetCurrentView();
27
- i0.ɵɵelementStart(0, "div")(1, "dx-check-box", 15);
28
- i0.ɵɵlistener("onInitialized", function CaucaManagementGroupComponent_div_18_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_18_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_18_Template(rf, ctx) { if (rf & 1) {
37
- i0.ɵɵelementStart(0, "div")(1, "dx-list", 14);
38
- i0.ɵɵtemplate(2, CaucaManagementGroupComponent_div_18_div_2_Template, 2, 1, "div", 12);
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: 19, vars: 31, consts: [["keyExpr", "id", 3, "allowPrint", "dataSource", "onRowInserted", "onInitNewRow", "onRowUpdated", "onEditingStart", "onRowRemoved"], ["dataField", "name", 3, "caption"], ["type", "async", 3, "message", "validationCallback"], ["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"], [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, "dxo-export", 5);
243
- i0.ɵɵelementStart(10, "dxo-editing", 6);
244
- i0.ɵɵelement(11, "dxo-popup", 7);
245
- i0.ɵɵpipe(12, "translate");
246
- i0.ɵɵelementStart(13, "dxo-form", 8);
247
- i0.ɵɵelement(14, "dxi-item", 9)(15, "dxi-item", 10)(16, "dxi-item", 11);
248
- i0.ɵɵelementEnd()();
249
- i0.ɵɵtemplate(17, CaucaManagementGroupComponent_div_17_Template, 2, 4, "div", 12);
250
- i0.ɵɵtemplate(18, CaucaManagementGroupComponent_div_18_Template, 3, 6, "div", 12);
251
- i0.ɵɵelementEnd();
252
- } if (rf & 2) {
253
- i0.ɵɵproperty("allowPrint", ctx.showPrintButton)("dataSource", ctx.groups);
254
- i0.ɵɵadvance(1);
255
- i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(2, 21, "management.name"));
256
- i0.ɵɵadvance(2);
257
- i0.ɵɵproperty("message", i0.ɵɵpipeBind1(4, 23, "management.groupNameAlreadyUsed"))("validationCallback", ctx.groupNameAlreadyUsedValidation);
258
- i0.ɵɵadvance(2);
259
- i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(6, 25, "management.users"))("calculateCellValue", ctx.calculateUsersCellValue);
260
- i0.ɵɵadvance(2);
261
- i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(8, 27, "management.permissions"))("visible", false);
262
- i0.ɵɵadvance(2);
263
- i0.ɵɵproperty("enabled", false);
264
- i0.ɵɵadvance(1);
265
- i0.ɵɵproperty("allowAdding", true)("allowUpdating", true)("allowDeleting", true)("useIcons", true);
266
- i0.ɵɵadvance(1);
267
- i0.ɵɵproperty("showTitle", true)("title", i0.ɵɵpipeBind1(12, 29, "management.group"))("fullScreen", !ctx.showColumn);
268
- i0.ɵɵadvance(2);
269
- i0.ɵɵproperty("labelLocation", ctx.showColumnXS ? "left" : "top");
270
- i0.ɵɵadvance(1);
271
- i0.ɵɵproperty("isRequired", true);
272
- i0.ɵɵadvance(3);
273
- i0.ɵɵproperty("dxTemplateOf", "usersEditTemplate");
274
- i0.ɵɵadvance(1);
275
- i0.ɵɵproperty("dxTemplateOf", "permissionsEditTemplate");
276
- } }, 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: [""] });
277
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaucaManagementGroupComponent, [{
278
- type: Component,
279
- 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=\"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>", styles: [""] }]
280
- }], function () { return [{ type: i1.ManagementGroupService }, { type: i2.ManagementUserService }, { type: i3.ManagementPermissionService }, { type: i4.BreakpointObserver }]; }, { showPrintButton: [{
281
- type: Input
282
- }], hoverStatePermission: [{
283
- type: Input
284
- }] }); })();
285
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F1Y2EtbWFuYWdlbWVudC1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYXVjYS1tYW5hZ2VtZW50L3NyYy9saWIvY2F1Y2EtbWFuYWdlbWVudC1ncm91cC9jYXVjYS1tYW5hZ2VtZW50LWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhdWNhLW1hbmFnZW1lbnQvc3JjL2xpYi9jYXVjYS1tYW5hZ2VtZW50LWdyb3VwL2NhdWNhLW1hbmFnZW1lbnQtZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7SUNzQmpDLDJCQUFvRCxxQkFBQTtJQUVwQixpUUFBaUIscUNBQTJCLElBQUMsc1BBQ25ELHFDQUEyQixJQUR3QjtJQUV6RSxpQkFBYSxFQUFBOzs7SUFIYyxlQUF3QjtJQUF4Qiw2Q0FBd0IsNEJBQUEsdUJBQUEsK0JBQUE7Ozs7SUFRL0MsMkJBQW1ELHVCQUFBO0lBQ1IsOFRBQWlCLDJEQUE4QyxJQUFDLG9UQUNqRix3REFBMEMsSUFEdUM7SUFFdkcsaUJBQWUsRUFBQTs7O0lBRkQsZUFBd0I7SUFBeEIseUNBQXdCOzs7O0lBSmxELDJCQUEwRCxrQkFBQTtJQUdsRCxzRkFJTTtJQUNWLGlCQUFVLEVBQUE7OztJQVBELGVBQTBCO0lBQTFCLCtDQUEwQix1QkFBQSwwQ0FBQSxrREFBQTtJQUVFLGVBQWdCO0lBQWhCLDRDQUFnQjs7QURoQjdELE1BQU0sT0FBTyw2QkFBNkI7SUFnQnRDLFlBQ1ksc0JBQThDLEVBQzlDLHFCQUE0QyxFQUM1QywyQkFBd0QsRUFDaEUsa0JBQXNDO1FBSDlCLDJCQUFzQixHQUF0QixzQkFBc0Is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QyxtREFBQTtRQUdwQyxlQUFnRDtRQUFoRCx5RUFBZ0Qsa0JBQUE7UUFHeEUsZUFBaUI7UUFBakIsK0JBQWlCO1FBQ0gsZUFBb0I7UUFBcEIsa0NBQW9CLHVCQUFBLHVCQUFBLGtCQUFBO1FBQy9CLGVBQWtCO1FBQWxCLGdDQUFrQixxREFBQSwrQkFBQTtRQUNOLGVBQStDO1FBQS9DLGlFQUErQztRQUN2QyxlQUFtQjtRQUFuQixpQ0FBbUI7UUFNMUIsZUFBc0I7UUFBdEIsa0RBQXNCO1FBTXRCLGVBQTRCO1FBQTVCLHdEQUE0Qjs7dUZEYi9DLDZCQUE2QjtjQUx6QyxTQUFTOzJCQUNJLHdCQUF3Qjt3TEFNM0IsZUFBZTtrQkFEckIsS0FBSztZQUdDLG9CQUFvQjtrQkFEMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBVc2VyTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL3VzZXItbW9kZWwnO1xuaW1wb3J0IHsgVXNlckdyb3VwTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL3VzZXItZ3JvdXAtbW9kZWwnO1xuaW1wb3J0IHsgR3JvdXBNb2RlbCB9IGZyb20gJy4uL3NoYXJlZC9tb2RlbHMvZ3JvdXAtbW9kZWwnO1xuaW1wb3J0IHsgR3JvdXBQZXJtaXNzaW9uTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL2dyb3VwLXBlcm1pc3Npb24tbW9kZWwnO1xuaW1wb3J0IHsgTWFuYWdlbWVudEdyb3VwU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9tYW5hZ2VtZW50LWdyb3VwLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFuYWdlbWVudFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL3NlcnZpY2VzL21hbmFnZW1lbnQtdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcm1pc3Npb25Nb2RlbCB9IGZyb20gJy4uL3NoYXJlZC9tb2RlbHMvcGVybWlzc2lvbi1tb2RlbCc7XG5pbXBvcnQgeyBNYW5hZ2VtZW50UGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvc2VydmljZXMvbWFuYWdlbWVudC1wZXJtaXNzaW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2NhdWNhLW1hbmFnZW1lbnQtZ3JvdXAnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXVjYS1tYW5hZ2VtZW50LWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jYXVjYS1tYW5hZ2VtZW50LWdyb3VwLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2F1Y2FNYW5hZ2VtZW50R3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dQcmludEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaG92ZXJTdGF0ZVBlcm1pc3Npb24gPSB0cnVlO1xuXG4gICAgcHVibGljIGdyb3VwczogR3JvdXBNb2RlbFtdID0gW107XG4gICAgcHVibGljIHVzZXJzOiBVc2VyTW9kZWxbXSA9IFtdO1xuICAgIHB1YmxpYyBwZXJtaXNzaW9uczogUGVybWlzc2lvbk1vZGVsW10gPSBbXTtcbiAgICBwdWJsaWMgdXNlckZ1bGxOYW1lOiBhbnkgPSB7fTtcbiAgICBwdWJsaWMgc2hvd0NvbHVtbiA9IHRydWU7XG4gICAgcHVibGljIHNob3dDb2x1bW5YUyA9IHRydWU7XG4gICAgcHVibGljIHRyYW5zbGF0aW9uczogYW55ID0gW107XG5cbiAgICBwcml2YXRlIGdyb3VwVXNlcnM6IGFueTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBtYW5hZ2VtZW50R3JvdXBTZXJ2aWNlOiBNYW5hZ2VtZW50R3JvdXBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG1hbmFnZW1lbnRVc2VyU2VydmljZTogTWFuYWdlbWVudFVzZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG1hbmFnZW1lbnRQZXJtaXNzaW9uU2VydmljZTogTWFuYWdlbWVudFBlcm1pc3Npb25TZXJ2aWNlLFxuICAgICAgICBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlcixcbiAgICApIHtcbiAgICAgICAgYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoWycobWF4LXdpZHRoOiAxMDAwcHgpJ10pLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbHVtbiA9ICFyZXN1bHQubWF0Y2hlcztcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFsnKG1heC13aWR0aDogNjAwcHgpJ10pLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbHVtblhTID0gIXJlc3VsdC5tYXRjaGVzO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWFuYWdlbWVudFVzZXJTZXJ2aWNlLmdldEFsbDxVc2VyTW9kZWw+KCkuc3Vic2NyaWJlKChkYXRhOiBVc2VyTW9kZWxbXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy51c2VycyA9IGRhdGE7XG4gICAgICAgICAgICB0aGlzLnVzZXJzLmZvckVhY2goKHVzZXI6IFVzZXJNb2RlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh1c2VyLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1c2VyLmZpcnN0TmFtZSAhPT0gJycgJiYgdXNlci5sYXN0TmFtZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlckZ1bGxOYW1lW3VzZXIuaWRdICA9IGAke3VzZXIuZmlyc3ROYW1lfSAke3VzZXIubGFzdE5hbWV9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tYW5hZ2VtZW50UGVybWlzc2lvblNlcnZpY2UuZ2V0QWxsKCkuc3Vic2NyaWJlKChwZXJtaXNzaW9uczogUGVybWlzc2lvbk1vZGVsW10pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25JbmRleCA9IHBlcm1pc3Npb25zLmZpbmRJbmRleCgoYzogUGVybWlzc2lvbk1vZGVsKSA9PiBjLnRhZyA9PT0gJ0NhbkFjY2Vzc1Blcm1pc3Npb25zJyk7XG4gICAgICAgICAgICBpZiAocGVybWlzc2lvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zLnNwbGljZShwZXJtaXNzaW9uSW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGVybWlzc2lvbnMuc29ydCgoYTogUGVybWlzc2lvbk1vZGVsLCBiOiBQZXJtaXNzaW9uTW9kZWwpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYS5uYW1lIDwgYi5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGEubmFtZSA+IGIubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ2V0R3JvdXBzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGZ1bGxOYW1lKGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke2RhdGEuZmlyc3ROYW1lfSAke2RhdGEubGFzdE5hbWV9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0R3JvdXBVc2VyKGZpZWxkOiBhbnksIGU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCB1c2Vyczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBVc2Vycykge1xuICAgICAgICAgICAgdGhpcy5ncm91cFVzZXJzLmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHVzZXJzLnB1c2godXNlci5pZFVzZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZS5jb21wb25lbnQub3B0aW9uKCd2YWx1ZScsIHVzZXJzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0R3JvdXBVc2VyKGZpZWxkOiBhbnksIGU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBncm91cFVzZXI6IFVzZXJHcm91cE1vZGVsW10gPSBbXTtcblxuICAgICAgICBlLnZhbHVlLmZvckVhY2goKGlkVXNlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cEluZGV4ID0gKGZpZWxkLmRhdGEudXNlcnMgfHwgW10pLmZpbmRJbmRleCgoZzogYW55KSA9PiBnLmlkVXNlciA9PT0gaWRVc2VyKTtcblxuICAgICAgICAgICAgaWYgKGdyb3VwSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBVc2VyLnB1c2goeyBpZFVzZXIsIH0gYXMgVXNlckdyb3VwTW9kZWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBncm91cFVzZXIucHVzaChmaWVsZC5kYXRhLnVzZXJzW2dyb3VwSW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZmllbGQuc2V0VmFsdWUoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShncm91cFVzZXIpKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEdyb3VwUGVybWlzc2lvbihmaWVsZDogYW55LCBlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZ3JvdXBVc2VyOiBVc2VyR3JvdXBNb2RlbFtdID0gW107XG5cbiAgICAgICAgZS52YWx1ZS5mb3JFYWNoKChpZFVzZXI6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgZ3JvdXBVc2VyLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkVXNlcixcbiAgICAgICAgICAgIH0gYXMgVXNlckdyb3VwTW9kZWwpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmaWVsZC5zZXRWYWx1ZShKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdyb3VwVXNlcikpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGVybWlzc2lvblN0YXR1cyhmaWVsZDogYW55LCBwZXJtaXNzaW9uOiBhbnksIGU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBncm91cFBlcm1pc3Npb24gPSAoZmllbGQudmFsdWUgfHwgW10pLmZpbmQoKHA6IGFueSkgPT4gcC5pZE1vZHVsZVBlcm1pc3Npb24gPT09IHBlcm1pc3Npb24uaWQpO1xuXG4gICAgICAgIGlmIChncm91cFBlcm1pc3Npb24pIHtcbiAgICAgICAgICAgIGUuY29tcG9uZW50Lm9wdGlvbigndmFsdWUnLCBncm91cFBlcm1pc3Npb24uaXNBbGxvd2VkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGUuY29tcG9uZW50Lm9wdGlvbigndmFsdWUnLCB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNoZWNrQm94VG9nZ2xlZChmaWVsZDogYW55LCBwZXJtaXNzaW9uOiBhbnksIGU6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoZS5jb21wb25lbnQuc2tpcE9uVmFsdWVDaGFuZ2VkKSB7XG4gICAgICAgICAgICBlLmNvbXBvbmVudC5za2lwT25WYWx1ZUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZS5jb21wb25lbnQuc2V0VW5kZWZpbmVkTmV4dFRpbWUpIHtcbiAgICAgICAgICAgIGUuY29tcG9uZW50LnNldFVuZGVmaW5lZE5leHRUaW1lID0gZmFsc2U7XG4gICAgICAgICAgICBlLmNvbXBvbmVudC5za2lwT25WYWx1ZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgZS5jb21wb25lbnQub3B0aW9uKCd2YWx1ZScsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB0aGlzLnNldFBlcm1pc3Npb25TdGF0dXMoZmllbGQsIHBlcm1pc3Npb24sIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGUudmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBlLmNvbXBvbmVudC5zZXRVbmRlZmluZWROZXh0VGltZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFBlcm1pc3Npb25TdGF0dXMoZmllbGQsIHBlcm1pc3Npb24sIGUudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJvd0luc2VydGVkKGU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNhdmVHcm91cChlLmRhdGEgYXMgR3JvdXBNb2RlbCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUm93VXBkYXRlZChlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zYXZlR3JvdXAoZS5kYXRhIGFzIEdyb3VwTW9kZWwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJvd1JlbW92ZWQoZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gKGUuZGF0YSBhcyBHcm91cE1vZGVsKTtcbiAgICAgICAgdGhpcy5tYW5hZ2VtZW50R3JvdXBTZXJ2aWNlLmRlbGV0ZShncm91cC5pZCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JvdXBzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYWxjdWxhdGVVc2Vyc0NlbGxWYWx1ZSA9IChlOiBhbnkpOiBzdHJpbmcgPT4ge1xuICAgICAgICBjb25zdCB1c2VycyA9IChlLnVzZXJzID8gZS51c2VycyBhcyBVc2VyR3JvdXBNb2RlbFtdIDogW10pO1xuICAgICAgICBsZXQgdXNlcnNOYW1lczogYW55W10gPSBbXTtcbiAgICAgICAgdXNlcnMuZm9yRWFjaCgodXNlcjogVXNlckdyb3VwTW9kZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJHcm91cCA9IHRoaXMudXNlcnMuZmlsdGVyKCh1OiBVc2VyTW9kZWwpID0+IHUuaWQgPT09IHVzZXIuaWRVc2VyKTtcbiAgICAgICAgICAgIGlmICh1c2VyR3JvdXAgJiYgdXNlckdyb3VwWzBdKSB7XG4gICAgICAgICAgICAgICAgdXNlcnNOYW1lcy5wdXNoKHVzZXJHcm91cFswXS5maXJzdE5hbWUgKyAnICcgKyB1c2VyR3JvdXBbMF0ubGFzdE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdXNlcnNOYW1lcyA9IHVzZXJzTmFtZXMuc29ydCgob25lOiBzdHJpbmcsIHR3bzogc3RyaW5nKSA9PiAob25lIDwgdHdvID8gLTEgOiAxKSk7XG4gICAgICAgIHJldHVybiB1c2Vyc05hbWVzLmpvaW4oJywgJyk7XG4gICAgfTtcblxuICAgIHB1YmxpYyBvbkVkaXRpbmdTdGFydChlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ncm91cFVzZXJzID0gZS5kYXRhLnVzZXJzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkluaXROZXdSb3coKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ3JvdXBVc2VycyA9IFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBncm91cE5hbWVBbHJlYWR5VXNlZFZhbGlkYXRpb24gPSAoZTogYW55KTogUHJvbWlzZTxib29sZWFuPiA9PiB0aGlzLm1hbmFnZW1lbnRHcm91cFNlcnZpY2UuaGFzRXhpc3RpbmdHcm91cE5hbWUoZS5kYXRhKS5waXBlKFxuICAgICAgICAgICAgbWFwKChleGlzdDogYm9vbGVhbikgPT4gIWV4aXN0KVxuICAgICAgICApLnRvUHJvbWlzZSgpO1xuXG4gICAgcHJpdmF0ZSBzZXRQZXJtaXNzaW9uU3RhdHVzKGZpZWxkOiBhbnksIHBlcm1pc3Npb246IGFueSwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBncm91cFBlcm1pc3Npb25zID0gZmllbGQudmFsdWUgfHwgW107XG4gICAgICAgIGNvbnN0IGdyb3VwSW5kZXggPSBncm91cFBlcm1pc3Npb25zLmZpbmRJbmRleCgocDogR3JvdXBQZXJtaXNzaW9uTW9kZWwpID0+IHAuaWRNb2R1bGVQZXJtaXNzaW9uID09PSBwZXJtaXNzaW9uLmlkKTtcblxuICAgICAgICBpZiAoZ3JvdXBJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBncm91cFBlcm1pc3Npb25zW2dyb3VwSW5kZXhdLmlzQWxsb3dlZCA9IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZE1vZHVsZVBlcm1pc3Npb246IHBlcm1pc3Npb24uaWQsXG4gICAgICAgICAgICAgICAgaXNBbGxvd2VkOiB2YWx1ZSxcbiAgICAgICAgICAgIH0gYXMgR3JvdXBQZXJtaXNzaW9uTW9kZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgZmllbGQuc2V0VmFsdWUoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShncm91cFBlcm1pc3Npb25zKSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2F2ZUdyb3VwKGdyb3VwOiBHcm91cE1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlUGVybWlzc2lvblVuZGVmaW5lZChncm91cCk7XG4gICAgICAgIGlmIChncm91cC51c2Vycykge1xuICAgICAgICAgICAgZ3JvdXAudXNlcnMuZm9yRWFjaCgodXNlckdyb3VwOiBVc2VyR3JvdXBNb2RlbCkgPT4ge1xuICAgICAgICAgICAgICAgIHVzZXJHcm91cC5pZEdyb3VwID0gZ3JvdXAuaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ3JvdXAucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGdyb3VwLnBlcm1pc3Npb25zLmZvckVhY2goKGdyb3VwUGVybWlzc2lvbjogR3JvdXBQZXJtaXNzaW9uTW9kZWwpID0+IHtcbiAgICAgICAgICAgICAgICBncm91cFBlcm1pc3Npb24uaWRHcm91cCA9IGdyb3VwLmlkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYW5hZ2VtZW50R3JvdXBTZXJ2aWNlLnNhdmUoZ3JvdXApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldEdyb3VwcygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ncm91cFVzZXJzID0gW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVQZXJtaXNzaW9uVW5kZWZpbmVkKGdyb3VwOiBHcm91cE1vZGVsKTogdm9pZCB7XG4gICAgICAgIGdyb3VwLnBlcm1pc3Npb25zID0gZ3JvdXAucGVybWlzc2lvbnMuZmlsdGVyKChwZXJtaXNzaW9uOiBHcm91cFBlcm1pc3Npb25Nb2RlbCkgPT4gcGVybWlzc2lvbi5pc0FsbG93ZWQgIT09IHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRHcm91cHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWFuYWdlbWVudEdyb3VwU2VydmljZS5nZXRBbGwoKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4gdGhpcy5ncm91cHMgPSBkYXRhKTtcbiAgICB9XG59XG4iLCI8Y2F1Y2EtZHgtZGF0YS1ncmlkIFthbGxvd1ByaW50XT1cInNob3dQcmludEJ1dHRvblwiIGtleUV4cHI9XCJpZFwiIFtkYXRhU291cmNlXT1cImdyb3Vwc1wiXG4gICAgKG9uUm93SW5zZXJ0ZWQpPVwib25Sb3dJbnNlcnRlZCgkZXZlbnQpXCIgKG9uSW5pdE5ld1Jvdyk9XCJvbkluaXROZXdSb3coKVwiIChvblJvd1VwZGF0ZWQpPVwib25Sb3dVcGRhdGVkKCRldmVudClcIlxuICAgIChvbkVkaXRpbmdTdGFydCk9XCJvbkVkaXRpbmdTdGFydCgkZXZlbnQpXCIgKG9uUm93UmVtb3ZlZCk9XCJvblJvd1JlbW92ZWQoJGV2ZW50KVwiPlxuXG4gICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwibmFtZVwiIFtjYXB0aW9uXT1cIidtYW5hZ2VtZW50Lm5hbWUnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgIDxkeGktdmFsaWRhdGlvbi1ydWxlIHR5cGU9XCJhc3luY1wiIFttZXNzYWdlXT1cIidtYW5hZ2VtZW50Lmdyb3VwTmFtZUFscmVhZHlVc2VkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbdmFsaWRhdGlvbkNhbGxiYWNrXT1cImdyb3VwTmFtZUFscmVhZHlVc2VkVmFsaWRhdGlvblwiPjwvZHhpLXZhbGlkYXRpb24tcnVsZT5cbiAgICA8L2R4aS1jb2x1bW4+XG4gICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwidXNlcnNcIiBbY2FwdGlvbl09XCInbWFuYWdlbWVudC51c2VycycgfCB0cmFuc2xhdGVcIiBlZGl0Q2VsbFRlbXBsYXRlPVwidXNlcnNFZGl0VGVtcGxhdGVcIlxuICAgICAgICBbY2FsY3VsYXRlQ2VsbFZhbHVlXT1cImNhbGN1bGF0ZVVzZXJzQ2VsbFZhbHVlXCI+XG4gICAgPC9keGktY29sdW1uPlxuICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInBlcm1pc3Npb25zXCIgW2NhcHRpb25dPVwiJ21hbmFnZW1lbnQucGVybWlzc2lvbnMnIHwgdHJhbnNsYXRlXCIgW3Zpc2libGVdPVwiZmFsc2VcIlxuICAgICAgICBlZGl0Q2VsbFRlbXBsYXRlPVwicGVybWlzc2lvbnNFZGl0VGVtcGxhdGVcIj5cbiAgICA8L2R4aS1jb2x1bW4+XG4gICAgPGR4by1leHBvcnQgW2VuYWJsZWRdPVwiZmFsc2VcIj48L2R4by1leHBvcnQ+XG4gICAgPGR4by1lZGl0aW5nIG1vZGU9XCJwb3B1cFwiIFthbGxvd0FkZGluZ109XCJ0cnVlXCIgW2FsbG93VXBkYXRpbmddPVwidHJ1ZVwiIFthbGxvd0RlbGV0aW5nXT1cInRydWVcIiBbdXNlSWNvbnNdPVwidHJ1ZVwiPlxuICAgICAgICA8ZHhvLXBvcHVwIFtzaG93VGl0bGVdPVwidHJ1ZVwiIFt0aXRsZV09XCInbWFuYWdlbWVudC5ncm91cCcgfCB0cmFuc2xhdGVcIiBbZnVsbFNjcmVlbl09XCIhc2hvd0NvbHVtblwiPjwvZHhvLXBvcHVwPlxuICAgICAgICA8ZHhvLWZvcm0gY29sQ291bnQ9XCIxXCIgW2xhYmVsTG9jYXRpb25dPVwic2hvd0NvbHVtblhTID8gJ2xlZnQnIDogJ3RvcCdcIj5cbiAgICAgICAgICAgIDxkeGktaXRlbSBkYXRhRmllbGQ9XCJuYW1lXCIgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICA8ZHhpLWl0ZW0gZGF0YUZpZWxkPVwidXNlcnNcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgPGR4aS1pdGVtIGRhdGFGaWVsZD1cInBlcm1pc3Npb25zXCI+PC9keGktaXRlbT5cbiAgICAgICAgPC9keG8tZm9ybT5cbiAgICA8L2R4by1lZGl0aW5nPlxuXG4gICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBmaWVsZCBvZiAndXNlcnNFZGl0VGVtcGxhdGUnXCI+XG4gICAgICAgIDxkeC10YWctYm94IHZhbHVlRXhwcj1cImlkXCIgW2Rpc3BsYXlFeHByXT1cImZ1bGxOYW1lXCIgW2RhdGFTb3VyY2VdPVwidXNlcnNcIiBbc2VhcmNoRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzZWFyY2hFeHByXT1cImZ1bGxOYW1lXCIgKG9uSW5pdGlhbGl6ZWQpPVwiZ2V0R3JvdXBVc2VyKGZpZWxkLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJzZXRHcm91cFVzZXIoZmllbGQsICRldmVudClcIj5cbiAgICAgICAgPC9keC10YWctYm94PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZmllbGQgb2YgJ3Blcm1pc3Npb25zRWRpdFRlbXBsYXRlJ1wiPlxuICAgICAgICA8ZHgtbGlzdCBbZGF0YVNvdXJjZV09XCJwZXJtaXNzaW9uc1wiIGl0ZW1UZW1wbGF0ZT1cInJvd1RlbXBsYXRlXCIgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2VhcmNoRXhwcl09XCJbJ25hbWUnLCAndGFnJ11cIiBbaG92ZXJTdGF0ZUVuYWJsZWRdPVwiaG92ZXJTdGF0ZVBlcm1pc3Npb25cIj5cbiAgICAgICAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgcGVybWlzc2lvbiBvZiAncm93VGVtcGxhdGUnXCI+XG4gICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBbdGV4dF09XCJwZXJtaXNzaW9uLm5hbWVcIiAob25Jbml0aWFsaXplZCk9XCJnZXRQZXJtaXNzaW9uU3RhdHVzKGZpZWxkLCBwZXJtaXNzaW9uLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImNoZWNrQm94VG9nZ2xlZChmaWVsZCwgcGVybWlzc2lvbiwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvZHgtY2hlY2stYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZHgtbGlzdD5cbiAgICA8L2Rpdj5cbjwvY2F1Y2EtZHgtZGF0YS1ncmlkPiJdfQ==