@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.
- package/README.md +89 -1
- package/dist/lib/application-management/application-management.component.d.ts +59 -0
- package/dist/lib/application-management/application-management.component.d.ts.map +1 -0
- package/dist/lib/application-management/application-management.component.js +540 -0
- package/dist/lib/application-management/application-management.component.js.map +1 -0
- package/dist/lib/entity-permissions/entity-permissions.component.d.ts +71 -0
- package/dist/lib/entity-permissions/entity-permissions.component.d.ts.map +1 -0
- package/dist/lib/entity-permissions/entity-permissions.component.js +667 -0
- package/dist/lib/entity-permissions/entity-permissions.component.js.map +1 -0
- package/dist/lib/module.d.ts +19 -23
- package/dist/lib/module.d.ts.map +1 -1
- package/dist/lib/module.js +13 -38
- package/dist/lib/module.js.map +1 -1
- package/dist/lib/role-management/role-management.component.d.ts +56 -0
- package/dist/lib/role-management/role-management.component.d.ts.map +1 -0
- package/dist/lib/role-management/role-management.component.js +464 -0
- package/dist/lib/role-management/role-management.component.js.map +1 -0
- package/dist/lib/settings/settings.component.d.ts +42 -51
- package/dist/lib/settings/settings.component.d.ts.map +1 -1
- package/dist/lib/settings/settings.component.js +432 -198
- package/dist/lib/settings/settings.component.js.map +1 -1
- package/dist/lib/shared/components/settings-card/settings-card.component.d.ts +27 -0
- package/dist/lib/shared/components/settings-card/settings-card.component.d.ts.map +1 -0
- package/dist/lib/shared/components/settings-card/settings-card.component.js +167 -0
- package/dist/lib/shared/components/settings-card/settings-card.component.js.map +1 -0
- package/dist/lib/shared/settings-card.component.d.ts +11 -0
- package/dist/lib/shared/settings-card.component.d.ts.map +1 -0
- package/dist/lib/shared/settings-card.component.js +73 -0
- package/dist/lib/shared/settings-card.component.js.map +1 -0
- package/dist/lib/shared/shared-settings.module.d.ts +9 -0
- package/dist/lib/shared/shared-settings.module.d.ts.map +1 -0
- package/dist/lib/shared/shared-settings.module.js +25 -0
- package/dist/lib/shared/shared-settings.module.js.map +1 -0
- package/dist/lib/sql-logging/sql-logging.component.d.ts +176 -0
- package/dist/lib/sql-logging/sql-logging.component.d.ts.map +1 -0
- package/dist/lib/sql-logging/sql-logging.component.js +946 -0
- package/dist/lib/sql-logging/sql-logging.component.js.map +1 -0
- package/dist/lib/user-management/user-management.component.d.ts +65 -0
- package/dist/lib/user-management/user-management.component.d.ts.map +1 -0
- package/dist/lib/user-management/user-management.component.js +643 -0
- package/dist/lib/user-management/user-management.component.js.map +1 -0
- package/dist/public-api.d.ts +1 -5
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -5
- package/dist/public-api.js.map +1 -1
- package/package.json +13 -13
- package/dist/lib/application-entities-grid/application-entities-grid.component.d.ts +0 -50
- package/dist/lib/application-entities-grid/application-entities-grid.component.d.ts.map +0 -1
- package/dist/lib/application-entities-grid/application-entities-grid.component.js +0 -342
- package/dist/lib/application-entities-grid/application-entities-grid.component.js.map +0 -1
- package/dist/lib/single-application/single-application.component.d.ts +0 -22
- package/dist/lib/single-application/single-application.component.d.ts.map +0 -1
- package/dist/lib/single-application/single-application.component.js +0 -130
- package/dist/lib/single-application/single-application.component.js.map +0 -1
- package/dist/lib/single-role/single-role.component.d.ts +0 -36
- package/dist/lib/single-role/single-role.component.d.ts.map +0 -1
- package/dist/lib/single-role/single-role.component.js +0 -188
- package/dist/lib/single-role/single-role.component.js.map +0 -1
- package/dist/lib/single-user/single-user.component.d.ts +0 -24
- package/dist/lib/single-user/single-user.component.d.ts.map +0 -1
- package/dist/lib/single-user/single-user.component.js +0 -176
- package/dist/lib/single-user/single-user.component.js.map +0 -1
- package/dist/lib/user-roles-grid/user-roles-grid.component.d.ts +0 -42
- package/dist/lib/user-roles-grid/user-roles-grid.component.d.ts.map +0 -1
- package/dist/lib/user-roles-grid/user-roles-grid.component.js +0 -326
- 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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"}
|