@memberjunction/ng-explorer-settings 2.49.0 → 2.51.0

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 (66) hide show
  1. package/README.md +89 -1
  2. package/dist/lib/application-management/application-management.component.d.ts +59 -0
  3. package/dist/lib/application-management/application-management.component.d.ts.map +1 -0
  4. package/dist/lib/application-management/application-management.component.js +540 -0
  5. package/dist/lib/application-management/application-management.component.js.map +1 -0
  6. package/dist/lib/entity-permissions/entity-permissions.component.d.ts +71 -0
  7. package/dist/lib/entity-permissions/entity-permissions.component.d.ts.map +1 -0
  8. package/dist/lib/entity-permissions/entity-permissions.component.js +667 -0
  9. package/dist/lib/entity-permissions/entity-permissions.component.js.map +1 -0
  10. package/dist/lib/module.d.ts +19 -23
  11. package/dist/lib/module.d.ts.map +1 -1
  12. package/dist/lib/module.js +13 -38
  13. package/dist/lib/module.js.map +1 -1
  14. package/dist/lib/role-management/role-management.component.d.ts +56 -0
  15. package/dist/lib/role-management/role-management.component.d.ts.map +1 -0
  16. package/dist/lib/role-management/role-management.component.js +464 -0
  17. package/dist/lib/role-management/role-management.component.js.map +1 -0
  18. package/dist/lib/settings/settings.component.d.ts +42 -51
  19. package/dist/lib/settings/settings.component.d.ts.map +1 -1
  20. package/dist/lib/settings/settings.component.js +432 -198
  21. package/dist/lib/settings/settings.component.js.map +1 -1
  22. package/dist/lib/shared/components/settings-card/settings-card.component.d.ts +27 -0
  23. package/dist/lib/shared/components/settings-card/settings-card.component.d.ts.map +1 -0
  24. package/dist/lib/shared/components/settings-card/settings-card.component.js +167 -0
  25. package/dist/lib/shared/components/settings-card/settings-card.component.js.map +1 -0
  26. package/dist/lib/shared/settings-card.component.d.ts +11 -0
  27. package/dist/lib/shared/settings-card.component.d.ts.map +1 -0
  28. package/dist/lib/shared/settings-card.component.js +73 -0
  29. package/dist/lib/shared/settings-card.component.js.map +1 -0
  30. package/dist/lib/shared/shared-settings.module.d.ts +9 -0
  31. package/dist/lib/shared/shared-settings.module.d.ts.map +1 -0
  32. package/dist/lib/shared/shared-settings.module.js +25 -0
  33. package/dist/lib/shared/shared-settings.module.js.map +1 -0
  34. package/dist/lib/sql-logging/sql-logging.component.d.ts +176 -0
  35. package/dist/lib/sql-logging/sql-logging.component.d.ts.map +1 -0
  36. package/dist/lib/sql-logging/sql-logging.component.js +946 -0
  37. package/dist/lib/sql-logging/sql-logging.component.js.map +1 -0
  38. package/dist/lib/user-management/user-management.component.d.ts +65 -0
  39. package/dist/lib/user-management/user-management.component.d.ts.map +1 -0
  40. package/dist/lib/user-management/user-management.component.js +643 -0
  41. package/dist/lib/user-management/user-management.component.js.map +1 -0
  42. package/dist/public-api.d.ts +1 -5
  43. package/dist/public-api.d.ts.map +1 -1
  44. package/dist/public-api.js +1 -5
  45. package/dist/public-api.js.map +1 -1
  46. package/package.json +13 -13
  47. package/dist/lib/application-entities-grid/application-entities-grid.component.d.ts +0 -50
  48. package/dist/lib/application-entities-grid/application-entities-grid.component.d.ts.map +0 -1
  49. package/dist/lib/application-entities-grid/application-entities-grid.component.js +0 -342
  50. package/dist/lib/application-entities-grid/application-entities-grid.component.js.map +0 -1
  51. package/dist/lib/single-application/single-application.component.d.ts +0 -22
  52. package/dist/lib/single-application/single-application.component.d.ts.map +0 -1
  53. package/dist/lib/single-application/single-application.component.js +0 -130
  54. package/dist/lib/single-application/single-application.component.js.map +0 -1
  55. package/dist/lib/single-role/single-role.component.d.ts +0 -36
  56. package/dist/lib/single-role/single-role.component.d.ts.map +0 -1
  57. package/dist/lib/single-role/single-role.component.js +0 -188
  58. package/dist/lib/single-role/single-role.component.js.map +0 -1
  59. package/dist/lib/single-user/single-user.component.d.ts +0 -24
  60. package/dist/lib/single-user/single-user.component.d.ts.map +0 -1
  61. package/dist/lib/single-user/single-user.component.js +0 -176
  62. package/dist/lib/single-user/single-user.component.js.map +0 -1
  63. package/dist/lib/user-roles-grid/user-roles-grid.component.d.ts +0 -42
  64. package/dist/lib/user-roles-grid/user-roles-grid.component.d.ts.map +0 -1
  65. package/dist/lib/user-roles-grid/user-roles-grid.component.js +0 -326
  66. package/dist/lib/user-roles-grid/user-roles-grid.component.js.map +0 -1
@@ -1,42 +0,0 @@
1
- import { OnInit, SimpleChanges, OnChanges } from '@angular/core';
2
- import { RoleEntity, UserEntity } from '@memberjunction/core-entities';
3
- import { Router } from '@angular/router';
4
- import { UserRoleEntity_Ext } from '../single-role/single-role.component';
5
- import * as i0 from "@angular/core";
6
- export declare class UserRolesGridComponent implements OnInit, OnChanges {
7
- private router;
8
- /**
9
- * The name of the role we are working with, required if Mode is 'Roles'
10
- */
11
- RoleID: string;
12
- /**
13
- * The ID of the user we are working with, required if Mode is 'Users'
14
- */
15
- UserID: string;
16
- isLoading: boolean;
17
- userRoles: UserRoleEntity_Ext[];
18
- Mode: 'Users' | 'Roles';
19
- /**
20
- * The role record we are working with, required if Mode is 'Roles'
21
- */
22
- RoleRecord: RoleEntity | null;
23
- /**
24
- * The user record we are working with, required if Mode is 'Users'
25
- */
26
- UserRecord: UserEntity | null;
27
- constructor(router: Router);
28
- get RoleName(): string;
29
- ngOnInit(): void;
30
- ngOnChanges(changes: SimpleChanges): void;
31
- Refresh(): Promise<void>;
32
- getRoleName(roleID: string): string;
33
- saveUserRoles(): Promise<void>;
34
- cancelEdit(): void;
35
- flipAll(): void;
36
- get NumDirty(): number;
37
- protected IsReallyDirty(ur: UserRoleEntity_Ext): boolean;
38
- flipState($event: MouseEvent | undefined, ur: UserRoleEntity_Ext, flipState: boolean): void;
39
- static ɵfac: i0.ɵɵFactoryDeclaration<UserRolesGridComponent, never>;
40
- static ɵcmp: i0.ɵɵComponentDeclaration<UserRolesGridComponent, "mj-user-roles-grid", never, { "RoleID": { "alias": "RoleID"; "required": false; }; "UserID": { "alias": "UserID"; "required": false; }; "Mode": { "alias": "Mode"; "required": false; }; "RoleRecord": { "alias": "RoleRecord"; "required": false; }; "UserRecord": { "alias": "UserRecord"; "required": false; }; }, {}, never, never, false, never>;
41
- }
42
- //# sourceMappingURL=user-roles-grid.component.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-roles-grid.component.d.ts","sourceRoot":"","sources":["../../../src/lib/user-roles-grid/user-roles-grid.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAS,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGnF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;;AAG1E,qBAKa,sBAAuB,YAAW,MAAM,EAAE,SAAS;IAsBlD,OAAO,CAAC,MAAM;IArB1B;;OAEG;IACM,MAAM,EAAG,MAAM,CAAC;IACvB;;OAEG;IACI,MAAM,EAAG,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAS;IAC3B,SAAS,EAAE,kBAAkB,EAAE,CAAM;IAC5B,IAAI,EAAE,OAAO,GAAG,OAAO,CAAW;IAElD;;OAEG;IACM,UAAU,EAAE,UAAU,GAAG,IAAI,CAAQ;IAC9C;;OAEG;IACM,UAAU,EAAE,UAAU,GAAG,IAAI,CAAQ;gBAE1B,MAAM,EAAE,MAAM;IAGlC,IAAW,QAAQ,IAAI,MAAM,CAI5B;IACD,QAAQ,IAAI,IAAI;IAIhB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAInC,OAAO;IAmFN,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAM7B,aAAa;IAkCnB,UAAU;IAWV,OAAO;IAmBd,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED,SAAS,CAAC,aAAa,CAAC,EAAE,EAAE,kBAAkB,GAAG,OAAO;IAYjD,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,EAAE,EAAE,EAAE,kBAAkB,EAAE,SAAS,EAAE,OAAO;yCA/MhF,sBAAsB;2CAAtB,sBAAsB;CAqNlC"}
@@ -1,326 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { Metadata, RunView } from '@memberjunction/core';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/router";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "@angular/forms";
7
- import * as i4 from "@progress/kendo-angular-buttons";
8
- import * as i5 from "@progress/kendo-angular-indicators";
9
- function UserRolesGridComponent_div_0_Template(rf, ctx) { if (rf & 1) {
10
- i0.ɵɵelementStart(0, "div");
11
- i0.ɵɵelement(1, "kendo-loader");
12
- i0.ɵɵelementEnd();
13
- } }
14
- function UserRolesGridComponent_div_1_table_5_th_3_Template(rf, ctx) { if (rf & 1) {
15
- i0.ɵɵelementStart(0, "th");
16
- i0.ɵɵtext(1, "User");
17
- i0.ɵɵelementEnd();
18
- } }
19
- function UserRolesGridComponent_div_1_table_5_th_4_Template(rf, ctx) { if (rf & 1) {
20
- i0.ɵɵelementStart(0, "th");
21
- i0.ɵɵtext(1, "Role");
22
- i0.ɵɵelementEnd();
23
- } }
24
- function UserRolesGridComponent_div_1_table_5_tr_8_td_1_Template(rf, ctx) { if (rf & 1) {
25
- i0.ɵɵelementStart(0, "td");
26
- i0.ɵɵtext(1);
27
- i0.ɵɵelementEnd();
28
- } if (rf & 2) {
29
- const ur_r5 = i0.ɵɵnextContext().$implicit;
30
- i0.ɵɵadvance();
31
- i0.ɵɵtextInterpolate(ur_r5.User);
32
- } }
33
- function UserRolesGridComponent_div_1_table_5_tr_8_td_2_Template(rf, ctx) { if (rf & 1) {
34
- i0.ɵɵelementStart(0, "td");
35
- i0.ɵɵtext(1);
36
- i0.ɵɵelementEnd();
37
- } if (rf & 2) {
38
- const ur_r5 = i0.ɵɵnextContext().$implicit;
39
- const ctx_r1 = i0.ɵɵnextContext(3);
40
- i0.ɵɵadvance();
41
- i0.ɵɵtextInterpolate(ctx_r1.getRoleName(ur_r5.RoleID));
42
- } }
43
- function UserRolesGridComponent_div_1_table_5_tr_8_Template(rf, ctx) { if (rf & 1) {
44
- const _r4 = i0.ɵɵgetCurrentView();
45
- i0.ɵɵelementStart(0, "tr");
46
- i0.ɵɵtemplate(1, UserRolesGridComponent_div_1_table_5_tr_8_td_1_Template, 2, 1, "td", 0)(2, UserRolesGridComponent_div_1_table_5_tr_8_td_2_Template, 2, 1, "td", 0);
47
- i0.ɵɵelementStart(3, "td", 6);
48
- i0.ɵɵlistener("click", function UserRolesGridComponent_div_1_table_5_tr_8_Template_td_click_3_listener($event) { const ur_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.flipState($event, ur_r5, true)); });
49
- i0.ɵɵelementStart(4, "input", 8);
50
- i0.ɵɵtwoWayListener("ngModelChange", function UserRolesGridComponent_div_1_table_5_tr_8_Template_input_ngModelChange_4_listener($event) { const ur_r5 = i0.ɵɵrestoreView(_r4).$implicit; i0.ɵɵtwoWayBindingSet(ur_r5.Selected, $event) || (ur_r5.Selected = $event); return i0.ɵɵresetView($event); });
51
- i0.ɵɵlistener("click", function UserRolesGridComponent_div_1_table_5_tr_8_Template_input_click_4_listener($event) { const ur_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.flipState($event, ur_r5, false)); });
52
- i0.ɵɵelementEnd()()();
53
- } if (rf & 2) {
54
- const ur_r5 = ctx.$implicit;
55
- const ctx_r1 = i0.ɵɵnextContext(3);
56
- i0.ɵɵadvance();
57
- i0.ɵɵproperty("ngIf", ctx_r1.Mode === "Roles");
58
- i0.ɵɵadvance();
59
- i0.ɵɵproperty("ngIf", ctx_r1.Mode === "Users");
60
- i0.ɵɵadvance(2);
61
- i0.ɵɵtwoWayProperty("ngModel", ur_r5.Selected);
62
- } }
63
- function UserRolesGridComponent_div_1_table_5_Template(rf, ctx) { if (rf & 1) {
64
- const _r3 = i0.ɵɵgetCurrentView();
65
- i0.ɵɵelementStart(0, "table", 5)(1, "thead")(2, "tr");
66
- i0.ɵɵtemplate(3, UserRolesGridComponent_div_1_table_5_th_3_Template, 2, 0, "th", 0)(4, UserRolesGridComponent_div_1_table_5_th_4_Template, 2, 0, "th", 0);
67
- i0.ɵɵelementStart(5, "th", 6);
68
- i0.ɵɵlistener("click", function UserRolesGridComponent_div_1_table_5_Template_th_click_5_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.flipAll()); });
69
- i0.ɵɵtext(6, "In Role");
70
- i0.ɵɵelementEnd()()();
71
- i0.ɵɵelementStart(7, "tbody");
72
- i0.ɵɵtemplate(8, UserRolesGridComponent_div_1_table_5_tr_8_Template, 5, 3, "tr", 7);
73
- i0.ɵɵelementEnd()();
74
- } if (rf & 2) {
75
- const ctx_r1 = i0.ɵɵnextContext(2);
76
- i0.ɵɵadvance(3);
77
- i0.ɵɵproperty("ngIf", ctx_r1.Mode === "Roles");
78
- i0.ɵɵadvance();
79
- i0.ɵɵproperty("ngIf", ctx_r1.Mode === "Users");
80
- i0.ɵɵadvance(4);
81
- i0.ɵɵproperty("ngForOf", ctx_r1.userRoles);
82
- } }
83
- function UserRolesGridComponent_div_1_Template(rf, ctx) { if (rf & 1) {
84
- const _r1 = i0.ɵɵgetCurrentView();
85
- i0.ɵɵelementStart(0, "div", 2)(1, "button", 3);
86
- i0.ɵɵlistener("click", function UserRolesGridComponent_div_1_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.saveUserRoles()); });
87
- i0.ɵɵtext(2, "Save");
88
- i0.ɵɵelementEnd();
89
- i0.ɵɵelementStart(3, "button", 3);
90
- i0.ɵɵlistener("click", function UserRolesGridComponent_div_1_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.cancelEdit()); });
91
- i0.ɵɵtext(4, "Cancel");
92
- i0.ɵɵelementEnd();
93
- i0.ɵɵtemplate(5, UserRolesGridComponent_div_1_table_5_Template, 9, 3, "table", 4);
94
- i0.ɵɵelementEnd();
95
- } if (rf & 2) {
96
- const ctx_r1 = i0.ɵɵnextContext();
97
- i0.ɵɵadvance();
98
- i0.ɵɵproperty("disabled", ctx_r1.NumDirty === 0);
99
- i0.ɵɵadvance(2);
100
- i0.ɵɵproperty("disabled", ctx_r1.NumDirty === 0);
101
- i0.ɵɵadvance(2);
102
- i0.ɵɵproperty("ngIf", !ctx_r1.isLoading);
103
- } }
104
- export class UserRolesGridComponent {
105
- router;
106
- /**
107
- * The name of the role we are working with, required if Mode is 'Roles'
108
- */
109
- RoleID;
110
- /**
111
- * The ID of the user we are working with, required if Mode is 'Users'
112
- */
113
- UserID;
114
- isLoading = false;
115
- userRoles = [];
116
- Mode = 'Users';
117
- /**
118
- * The role record we are working with, required if Mode is 'Roles'
119
- */
120
- RoleRecord = null;
121
- /**
122
- * The user record we are working with, required if Mode is 'Users'
123
- */
124
- UserRecord = null;
125
- constructor(router) {
126
- this.router = router;
127
- }
128
- get RoleName() {
129
- const md = new Metadata();
130
- const role = md.Roles.find(r => r.ID === this.RoleID);
131
- return role ? role.Name : '';
132
- }
133
- ngOnInit() {
134
- this.Refresh();
135
- }
136
- ngOnChanges(changes) {
137
- if (changes && (changes.RoleRecord || changes.UserRecord))
138
- this.Refresh();
139
- }
140
- async Refresh() {
141
- if (this.Mode === 'Roles')
142
- if (!this.RoleID || this.RoleID.length === 0 || !this.RoleRecord)
143
- throw new Error("RoleID and RoleRecord are required when Mode is 'Roles'");
144
- if (this.Mode === 'Users')
145
- if (!this.UserID || !this.UserRecord)
146
- throw new Error("UserID and UserRecord are required when Mode is 'Users'");
147
- const md = new Metadata();
148
- this.isLoading = true;
149
- const rv = new RunView();
150
- const filter = this.Mode === 'Roles' ? `RoleID='${this.RoleID}'` : `UserID='${this.UserID}'`;
151
- const result = await rv.RunView({
152
- EntityName: 'User Roles',
153
- ExtraFilter: filter,
154
- ResultType: 'entity_object'
155
- });
156
- if (result.Success) {
157
- // we have all of the saved permissions now
158
- // the post-process we need to do now is to see if there are any roles that don't have any existing permissions and if so, we need to create
159
- // new permission records for them. We won't actually consider those "Dirty" and save those unless the user actually selects one or more
160
- // to turn on, we are just doing this to make the grid easy to manage from the user perspective.
161
- const existingUserRoles = result.Results;
162
- existingUserRoles.forEach(ur => {
163
- ur.Selected = true; // flip this on for all records that come from the DB
164
- ur.SavedUserID = ur.UserID; // stash this in an extra property so we can later set it if we have a delete operation
165
- ur.SavedUserName = ur.User; // stash this in an extra property so we can later set it if we have a delete operation
166
- ur.SavedRoleID = ur.RoleID; // stash this in an extra property so we can later set it if we have a delete operation
167
- });
168
- if (this.Mode === 'Roles') {
169
- // for the mode of Roles, we want to bring in all of the possible users and then add any that are not in the existingUserRoles array
170
- const userResult = await rv.RunView({
171
- EntityName: 'Users',
172
- ExtraFilter: 'IsActive=1',
173
- ResultType: 'entity_object'
174
- });
175
- if (userResult.Success) {
176
- const users = userResult.Results;
177
- const usersNotInRole = users.filter(u => !existingUserRoles.some(p => p.UserID === u.ID));
178
- for (const u of usersNotInRole) {
179
- const ur = await md.GetEntityObject('User Roles');
180
- ur.NewRecord();
181
- ur.RoleID = this.RoleID;
182
- ur.SavedRoleID = this.RoleID; // stash this in an extra property so we can later set it if we have a delete operation
183
- ur.UserID = u.ID;
184
- ur.Set('User', u.Name); // use weak typing to get around the readonly property
185
- ur.SavedUserName = u.Name; // stash this in an extra property so we can later set it if we have a delete operation
186
- ur.SavedUserID = u.ID; // stash this in an extra property so we can later set it if we have a delete operation
187
- ur.Selected = false;
188
- existingUserRoles.push(ur);
189
- }
190
- }
191
- // finally sort the array
192
- this.userRoles = existingUserRoles.sort((a, b) => a.User.localeCompare(b.User));
193
- }
194
- else {
195
- // for the mode of Users, we want to bring in all of the possible roles and then add any that are not in the existingUserRoles array
196
- const roles = md.Roles;
197
- const rolesNotInUser = roles.filter(r => !existingUserRoles.some(p => p.RoleID === r.ID));
198
- for (const r of rolesNotInUser) {
199
- const ur = await md.GetEntityObject('User Roles');
200
- ur.NewRecord();
201
- ur.RoleID = r.ID;
202
- ur.UserID = this.UserID;
203
- ur.Set('User', this.UserRecord.Name); // use weak typing to get around the readonly property
204
- ur.SavedUserName = this.UserRecord.Name; // stash this in an extra property so we can later set it if we have a delete operation
205
- ur.SavedUserID = this.UserID; // stash this in an extra property so we can later set it if we have a delete operation
206
- ur.SavedRoleID = r.ID; // stash this in an extra property so we can later set it if we have a delete operation
207
- ur.Selected = false;
208
- existingUserRoles.push(ur);
209
- }
210
- // finally sort the array
211
- this.userRoles = existingUserRoles;
212
- }
213
- }
214
- else {
215
- throw new Error("Error loading user roles: " + result.ErrorMessage);
216
- }
217
- this.isLoading = false;
218
- }
219
- getRoleName(roleID) {
220
- const md = new Metadata();
221
- const role = md.Roles.find(r => r.ID === roleID);
222
- return role ? role.Name : '';
223
- }
224
- async saveUserRoles() {
225
- // iterate through each permisison and for the ones that are dirty, add to transaction group then commit at once
226
- const md = new Metadata();
227
- const tg = await md.CreateTransactionGroup();
228
- let itemCount = 0;
229
- for (const ur of this.userRoles) {
230
- if (this.IsReallyDirty(ur)) {
231
- ur.TransactionGroup = tg;
232
- itemCount++;
233
- // now, we have to determine if we are going to save the record or delete it
234
- // if ur.Selected === false and we are in the database, we need to delete
235
- // otherwise, we need to save
236
- if (ur.Selected)
237
- await ur.Save();
238
- else
239
- await ur.Delete();
240
- }
241
- }
242
- if (itemCount > 0) {
243
- if (await tg.Submit()) {
244
- // for any items in the above that were deleted, we would have had the User property wiped out so we need to go check to see if we have a null ID and if so, copy the UserName back into the User property
245
- this.userRoles.forEach(ur => {
246
- if (ur.User === null) {
247
- ur.Set('User', ur.SavedUserName); // get around the read-only property
248
- ur.UserID = ur.SavedUserID;
249
- ur.RoleID = this.Mode === 'Roles' ? this.RoleID : ur.SavedRoleID;
250
- }
251
- });
252
- }
253
- }
254
- }
255
- cancelEdit() {
256
- if (this.NumDirty > 0) {
257
- // go through and revert each permission that is REALLY dirty
258
- this.userRoles.forEach(ur => {
259
- if (this.IsReallyDirty(ur)) {
260
- ur.Selected = !ur.Selected; // flip the state so we can revert
261
- }
262
- });
263
- }
264
- }
265
- flipAll() {
266
- // first, figure out what we have the majority of, if we have more ON, then we will flip to OFF, otherwise we will flip to ON
267
- let onCount = 0;
268
- let offCount = 0;
269
- this.userRoles.forEach(ur => {
270
- if (ur.Selected)
271
- onCount++;
272
- else
273
- offCount++;
274
- });
275
- const value = offCount > onCount;
276
- // now set the permission for each permission record
277
- for (const ur of this.userRoles) {
278
- ur.Selected = value;
279
- this.flipState(undefined, ur, false); // call this function but tell it to NOT actually flip the permission, just to fire the event
280
- }
281
- }
282
- get NumDirty() {
283
- return this.userRoles.filter(ur => this.IsReallyDirty(ur)).length;
284
- }
285
- IsReallyDirty(ur) {
286
- // logic is simple, if we are in the database, but the checkbox is not checked (or vice versa), then we are dirty
287
- if (ur.Selected && ur.IsSaved)
288
- return false; // if we are in the database and the checkbox is checked, we are not dirty
289
- else if (!ur.Selected && ur.IsSaved)
290
- return true; // if we are in the database and the checkbox is not checked, we are dirty because we'd have to be removed
291
- else if (ur.Selected)
292
- return true; // if we are NOT in the database and the checkbox is checked, we are dirty because we'd have to be added
293
- else
294
- return false;
295
- }
296
- flipState($event, ur, flipState) {
297
- if (flipState)
298
- ur.Selected = !ur.Selected;
299
- else if ($event)
300
- $event.stopPropagation();
301
- }
302
- static ɵfac = function UserRolesGridComponent_Factory(t) { return new (t || UserRolesGridComponent)(i0.ɵɵdirectiveInject(i1.Router)); };
303
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UserRolesGridComponent, selectors: [["mj-user-roles-grid"]], inputs: { RoleID: "RoleID", UserID: "UserID", Mode: "Mode", RoleRecord: "RoleRecord", UserRecord: "UserRecord" }, features: [i0.ɵɵNgOnChangesFeature], decls: 2, vars: 2, consts: [[4, "ngIf"], ["class", "content", 4, "ngIf"], [1, "content"], ["kendoButton", "", 3, "click", "disabled"], ["class", "grid", 4, "ngIf"], [1, "grid"], [3, "click"], [4, "ngFor", "ngForOf"], ["type", "checkbox", "kendoCheckBox", "", 3, "ngModelChange", "click", "ngModel"]], template: function UserRolesGridComponent_Template(rf, ctx) { if (rf & 1) {
304
- i0.ɵɵtemplate(0, UserRolesGridComponent_div_0_Template, 2, 0, "div", 0)(1, UserRolesGridComponent_div_1_Template, 6, 3, "div", 1);
305
- } if (rf & 2) {
306
- i0.ɵɵproperty("ngIf", ctx.isLoading);
307
- i0.ɵɵadvance();
308
- i0.ɵɵproperty("ngIf", !ctx.isLoading);
309
- } }, dependencies: [i2.NgForOf, i2.NgIf, i3.CheckboxControlValueAccessor, i3.NgControlStatus, i3.NgModel, i4.ButtonComponent, i5.LoaderComponent], styles: ["button[_ngcontent-%COMP%] {\n margin-left: 5px;\n margin-top: 5px;\n width: 125px;\n}\n\n\n\n.grid[_ngcontent-%COMP%] {\n margin-left: 5px;\n margin-top: 5px;\n border-collapse: collapse;\n}\n\n\n\n.grid[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background-color: #f2f2f2;\n color: black;\n font-weight: bold;\n text-align: center;\n border: 1px solid gray;\n padding: 0 8px;\n cursor: pointer;\n}\n\n\n\n.grid[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n border: 1px solid gray;\n height: 36px;\n text-align: center;\n padding: 0 8px;\n}\n\n\n\n.grid[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:first-child, \n.grid[_ngcontent-%COMP%] td[_ngcontent-%COMP%]:first-child {\n min-width: 150px;\n text-align: left;\n}\n\n\n\n.grid[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:not(:first-child), \n.grid[_ngcontent-%COMP%] td[_ngcontent-%COMP%]:not(:first-child) {\n width: 100px;\n}\n\n\n\n.grid[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:nth-child(odd) {\n background-color: white;\n}\n\n.grid[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:nth-child(even) {\n background-color: #e7f4ff;\n}"] });
310
- }
311
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UserRolesGridComponent, [{
312
- type: Component,
313
- args: [{ selector: 'mj-user-roles-grid', template: "<div *ngIf=\"isLoading\"><kendo-loader></kendo-loader></div>\n<div class=\"content\" *ngIf=\"!isLoading\">\n <button [disabled]=\"NumDirty === 0\" kendoButton (click)=\"saveUserRoles()\">Save</button>\n <button [disabled]=\"NumDirty === 0\" kendoButton (click)=\"cancelEdit()\">Cancel</button>\n <table *ngIf=\"!isLoading\" class=\"grid\">\n <thead>\n <tr>\n <th *ngIf=\"Mode === 'Roles'\">User</th>\n <th *ngIf=\"Mode === 'Users'\">Role</th>\n <th (click)=\"flipAll()\">In Role</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let ur of userRoles\">\n <td *ngIf=\"Mode === 'Roles'\">{{ ur.User }}</td>\n <td *ngIf=\"Mode === 'Users'\">{{ getRoleName(ur.RoleID) }}</td>\n <td (click)=\"flipState($event, ur, true)\">\n <input type=\"checkbox\" kendoCheckBox [(ngModel)]=\"ur.Selected\" (click)=\"flipState($event, ur, false)\">\n </td>\n </tr>\n </tbody>\n </table> \n</div>", styles: ["button {\n margin-left: 5px;\n margin-top: 5px;\n width: 125px;\n}\n\n/* Styles for the table with the 'grid' class */\n.grid {\n margin-left: 5px;\n margin-top: 5px;\n border-collapse: collapse;\n}\n\n/* Styles for th elements within the table with the 'grid' class */\n.grid th {\n background-color: #f2f2f2;\n color: black;\n font-weight: bold;\n text-align: center;\n border: 1px solid gray;\n padding: 0 8px;\n cursor: pointer;\n}\n\n/* Styles for td elements within the table with the 'grid' class */\n.grid td {\n border: 1px solid gray;\n height: 36px;\n text-align: center;\n padding: 0 8px;\n}\n\n/* Styles for the first child th and td within the table with the 'grid' class */\n.grid th:first-child,\n.grid td:first-child {\n min-width: 150px;\n text-align: left;\n}\n\n/* Styles for non-first-child th and td elements within the table with the 'grid' class */\n.grid th:not(:first-child),\n.grid td:not(:first-child) {\n width: 100px;\n}\n\n/* Alternating row background colors for the table with the 'grid' class */\n.grid tr:nth-child(odd) {\n background-color: white;\n}\n\n.grid tr:nth-child(even) {\n background-color: #e7f4ff;\n}\n\n"] }]
314
- }], () => [{ type: i1.Router }], { RoleID: [{
315
- type: Input
316
- }], UserID: [{
317
- type: Input
318
- }], Mode: [{
319
- type: Input
320
- }], RoleRecord: [{
321
- type: Input
322
- }], UserRecord: [{
323
- type: Input
324
- }] }); })();
325
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(UserRolesGridComponent, { className: "UserRolesGridComponent", filePath: "src/lib/user-roles-grid/user-roles-grid.component.ts", lineNumber: 15 }); })();
326
- //# sourceMappingURL=user-roles-grid.component.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-roles-grid.component.js","sourceRoot":"","sources":["../../../src/lib/user-roles-grid/user-roles-grid.component.ts","../../../src/lib/user-roles-grid/user-roles-grid.component.html"],"names":[],"mappings":"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"}