@memberjunction/ng-explorer-settings 1.4.0 → 1.5.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.
@@ -20,8 +20,9 @@ import * as i18 from "@memberjunction/ng-entity-form-dialog";
20
20
  import * as i19 from "@progress/kendo-angular-indicators";
21
21
  import * as i20 from "@memberjunction/ng-user-view-grid";
22
22
  import * as i21 from "@memberjunction/ng-simple-record-list";
23
+ import * as i22 from "@memberjunction/ng-join-grid";
23
24
  export declare class ExplorerSettingsModule {
24
25
  static ɵfac: i0.ɵɵFactoryDeclaration<ExplorerSettingsModule, never>;
25
- static ɵmod: i0.ɵɵNgModuleDeclaration<ExplorerSettingsModule, [typeof i1.SingleRoleComponent, typeof i2.SettingsComponent, typeof i3.UserRolesGridComponent, typeof i4.SingleUserComponent, typeof i5.SingleApplicationComponent, typeof i6.ApplicationEntitiesGridComponent], [typeof i7.CommonModule, typeof i8.GridModule, typeof i9.FormsModule, typeof i10.DialogsModule, typeof i11.ExcelExportModule, typeof i12.CompareRecordsModule, typeof i13.ContainerDirectivesModule, typeof i14.ButtonsModule, typeof i15.DropDownsModule, typeof i16.EntityPermissionsModule, typeof i17.MJTabStripModule, typeof i10.DialogsModule, typeof i18.EntityFormDialogModule, typeof i19.IndicatorsModule, typeof i20.UserViewGridModule, typeof i21.SimpleRecordListModule], [typeof i1.SingleRoleComponent, typeof i2.SettingsComponent, typeof i3.UserRolesGridComponent, typeof i4.SingleUserComponent, typeof i5.SingleApplicationComponent, typeof i6.ApplicationEntitiesGridComponent]>;
26
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ExplorerSettingsModule, [typeof i1.SingleRoleComponent, typeof i2.SettingsComponent, typeof i3.UserRolesGridComponent, typeof i4.SingleUserComponent, typeof i5.SingleApplicationComponent, typeof i6.ApplicationEntitiesGridComponent], [typeof i7.CommonModule, typeof i8.GridModule, typeof i9.FormsModule, typeof i10.DialogsModule, typeof i11.ExcelExportModule, typeof i12.CompareRecordsModule, typeof i13.ContainerDirectivesModule, typeof i14.ButtonsModule, typeof i15.DropDownsModule, typeof i16.EntityPermissionsModule, typeof i17.MJTabStripModule, typeof i10.DialogsModule, typeof i18.EntityFormDialogModule, typeof i19.IndicatorsModule, typeof i20.UserViewGridModule, typeof i21.SimpleRecordListModule, typeof i22.JoinGridModule], [typeof i1.SingleRoleComponent, typeof i2.SettingsComponent, typeof i3.UserRolesGridComponent, typeof i4.SingleUserComponent, typeof i5.SingleApplicationComponent, typeof i6.ApplicationEntitiesGridComponent]>;
26
27
  static ɵinj: i0.ɵɵInjectorDeclaration<ExplorerSettingsModule>;
27
28
  }
@@ -21,6 +21,7 @@ import { SingleUserComponent } from './single-user/single-user.component';
21
21
  import { SingleApplicationComponent } from './single-application/single-application.component';
22
22
  import { ApplicationEntitiesGridComponent } from './application-entities-grid/application-entities-grid.component';
23
23
  import { MJTabStripModule } from '@memberjunction/ng-tabstrip';
24
+ import { JoinGridModule } from '@memberjunction/ng-join-grid';
24
25
  import * as i0 from "@angular/core";
25
26
  import * as i1 from "@angular/common";
26
27
  import * as i2 from "@memberjunction/ng-container-directives";
@@ -47,7 +48,8 @@ ExplorerSettingsModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [C
47
48
  EntityFormDialogModule,
48
49
  IndicatorsModule,
49
50
  UserViewGridModule,
50
- SimpleRecordListModule] });
51
+ SimpleRecordListModule,
52
+ JoinGridModule] });
51
53
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ExplorerSettingsModule, [{
52
54
  type: NgModule,
53
55
  args: [{
@@ -75,7 +77,8 @@ ExplorerSettingsModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [C
75
77
  EntityFormDialogModule,
76
78
  IndicatorsModule,
77
79
  UserViewGridModule,
78
- SimpleRecordListModule
80
+ SimpleRecordListModule,
81
+ JoinGridModule
79
82
  ],
80
83
  exports: [
81
84
  SingleRoleComponent,
@@ -107,10 +110,11 @@ ExplorerSettingsModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [C
107
110
  EntityFormDialogModule,
108
111
  IndicatorsModule,
109
112
  UserViewGridModule,
110
- SimpleRecordListModule], exports: [SingleRoleComponent,
113
+ SimpleRecordListModule,
114
+ JoinGridModule], exports: [SingleRoleComponent,
111
115
  SettingsComponent,
112
116
  UserRolesGridComponent,
113
117
  SingleUserComponent,
114
118
  SingleApplicationComponent,
115
119
  ApplicationEntitiesGridComponent] }); })();
116
- i0.ɵɵsetComponentScope(SingleRoleComponent, [i1.NgIf, i2.FillContainer, i3.EntityPermissionsGridComponent, i4.MJTabStripComponent, i4.MJTabBodyComponent, i4.MJTabComponent, i5.EntityFormDialog, i6.LoaderComponent, UserRolesGridComponent], []);
120
+ i0.ɵɵsetComponentScope(SingleRoleComponent, [i1.NgIf, i2.FillContainer, i3.EntityPermissionsGridComponent, i4.MJTabStripComponent, i4.MJTabBodyComponent, i4.MJTabComponent, i5.EntityFormDialogComponent, i6.LoaderComponent, UserRolesGridComponent], []);
@@ -7,12 +7,13 @@ import * as i2 from "@angular/common";
7
7
  import * as i3 from "@memberjunction/ng-container-directives";
8
8
  import * as i4 from "@memberjunction/ng-entity-permissions";
9
9
  import * as i5 from "@memberjunction/ng-simple-record-list";
10
- import * as i6 from "../single-role/single-role.component";
11
- import * as i7 from "../single-user/single-user.component";
12
- import * as i8 from "../single-application/single-application.component";
10
+ import * as i6 from "@memberjunction/ng-join-grid";
11
+ import * as i7 from "../single-role/single-role.component";
12
+ import * as i8 from "../single-user/single-user.component";
13
+ import * as i9 from "../single-application/single-application.component";
13
14
  function SettingsComponent_div_2_Template(rf, ctx) { if (rf & 1) {
14
15
  const _r10 = i0.ɵɵgetCurrentView();
15
- i0.ɵɵelementStart(0, "div", 4);
16
+ i0.ɵɵelementStart(0, "div", 5);
16
17
  i0.ɵɵlistener("click", function SettingsComponent_div_2_Template_div_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r10); const o_r8 = restoredCtx.$implicit; const ctx_r9 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r9.selectItem(o_r8.value)); });
17
18
  i0.ɵɵtext(1);
18
19
  i0.ɵɵelementEnd();
@@ -23,49 +24,49 @@ function SettingsComponent_div_2_Template(rf, ctx) { if (rf & 1) {
23
24
  i0.ɵɵadvance();
24
25
  i0.ɵɵtextInterpolate(o_r8.label);
25
26
  } }
26
- function SettingsComponent_Case_4_Template(rf, ctx) { if (rf & 1) {
27
+ function SettingsComponent_Case_5_Template(rf, ctx) { if (rf & 1) {
27
28
  i0.ɵɵelement(0, "mj-entity-permissions-selector-with-grid");
28
29
  } }
29
30
  const _c0 = () => ["Name", "Email", "IsActive", "Type"];
30
- function SettingsComponent_Case_5_Template(rf, ctx) { if (rf & 1) {
31
+ function SettingsComponent_Case_6_Template(rf, ctx) { if (rf & 1) {
31
32
  const _r12 = i0.ɵɵgetCurrentView();
32
- i0.ɵɵelementStart(0, "mj-simple-record-list", 5);
33
- i0.ɵɵlistener("RecordSelected", function SettingsComponent_Case_5_Template_mj_simple_record_list_RecordSelected_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r11 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r11.selectUser($event)); });
33
+ i0.ɵɵelementStart(0, "mj-simple-record-list", 6);
34
+ i0.ɵɵlistener("RecordSelected", function SettingsComponent_Case_6_Template_mj_simple_record_list_RecordSelected_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r11 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r11.selectUser($event)); });
34
35
  i0.ɵɵelementEnd();
35
36
  } if (rf & 2) {
36
37
  i0.ɵɵproperty("Columns", i0.ɵɵpureFunction0(1, _c0));
37
38
  } }
38
- function SettingsComponent_Case_6_Template(rf, ctx) { if (rf & 1) {
39
- i0.ɵɵelement(0, "mj-single-user", 6);
39
+ function SettingsComponent_Case_7_Template(rf, ctx) { if (rf & 1) {
40
+ i0.ɵɵelement(0, "mj-single-user", 7);
40
41
  } if (rf & 2) {
41
42
  const ctx_r3 = i0.ɵɵnextContext();
42
43
  i0.ɵɵproperty("UserID", ctx_r3.selectedUserID);
43
44
  } }
44
45
  const _c1 = () => ["Name", "Description"];
45
- function SettingsComponent_Case_7_Template(rf, ctx) { if (rf & 1) {
46
+ function SettingsComponent_Case_8_Template(rf, ctx) { if (rf & 1) {
46
47
  const _r14 = i0.ɵɵgetCurrentView();
47
- i0.ɵɵelementStart(0, "mj-simple-record-list", 7);
48
- i0.ɵɵlistener("RecordSelected", function SettingsComponent_Case_7_Template_mj_simple_record_list_RecordSelected_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r13.selectRole($event)); });
48
+ i0.ɵɵelementStart(0, "mj-simple-record-list", 8);
49
+ i0.ɵɵlistener("RecordSelected", function SettingsComponent_Case_8_Template_mj_simple_record_list_RecordSelected_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r13.selectRole($event)); });
49
50
  i0.ɵɵelementEnd();
50
51
  } if (rf & 2) {
51
52
  i0.ɵɵproperty("Columns", i0.ɵɵpureFunction0(1, _c1));
52
53
  } }
53
- function SettingsComponent_Case_8_Template(rf, ctx) { if (rf & 1) {
54
- i0.ɵɵelement(0, "mj-single-role", 8);
54
+ function SettingsComponent_Case_9_Template(rf, ctx) { if (rf & 1) {
55
+ i0.ɵɵelement(0, "mj-single-role", 9);
55
56
  } if (rf & 2) {
56
57
  const ctx_r5 = i0.ɵɵnextContext();
57
58
  i0.ɵɵproperty("RoleName", ctx_r5.selectedRoleName);
58
59
  } }
59
- function SettingsComponent_Case_9_Template(rf, ctx) { if (rf & 1) {
60
+ function SettingsComponent_Case_10_Template(rf, ctx) { if (rf & 1) {
60
61
  const _r16 = i0.ɵɵgetCurrentView();
61
- i0.ɵɵelementStart(0, "mj-simple-record-list", 9);
62
- i0.ɵɵlistener("RecordSelected", function SettingsComponent_Case_9_Template_mj_simple_record_list_RecordSelected_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r15 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r15.selectApplication($event)); });
62
+ i0.ɵɵelementStart(0, "mj-simple-record-list", 10);
63
+ i0.ɵɵlistener("RecordSelected", function SettingsComponent_Case_10_Template_mj_simple_record_list_RecordSelected_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r15 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r15.selectApplication($event)); });
63
64
  i0.ɵɵelementEnd();
64
65
  } if (rf & 2) {
65
66
  i0.ɵɵproperty("Columns", i0.ɵɵpureFunction0(1, _c1));
66
67
  } }
67
- function SettingsComponent_Case_10_Template(rf, ctx) { if (rf & 1) {
68
- i0.ɵɵelement(0, "mj-single-application", 10);
68
+ function SettingsComponent_Case_11_Template(rf, ctx) { if (rf & 1) {
69
+ i0.ɵɵelement(0, "mj-single-application", 11);
69
70
  } if (rf & 2) {
70
71
  const ctx_r7 = i0.ɵɵnextContext();
71
72
  i0.ɵɵproperty("ApplicationName", ctx_r7.selectedApplicationName);
@@ -171,12 +172,13 @@ export class SettingsComponent {
171
172
  }
172
173
  }
173
174
  SettingsComponent.ɵfac = function SettingsComponent_Factory(t) { return new (t || SettingsComponent)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i1.ActivatedRoute)); };
174
- SettingsComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SettingsComponent, selectors: [["mj-settings"]], decls: 11, vars: 6, consts: [["mjFillContainer", "", 1, "container", 3, "bottomMargin", "rightMargin"], ["mjFillContainer", "", 1, "options-container", 3, "fillWidth"], ["class", "option-item", 3, "selected", "click", 4, "ngFor", "ngForOf"], ["mjFillContainer", "", 1, "display-container", 3, "fillWidth"], [1, "option-item", 3, "click"], ["EntityName", "Users", "SortBy", "Name", 3, "Columns", "RecordSelected"], [3, "UserID"], ["EntityName", "Roles", "SortBy", "Name", 3, "Columns", "RecordSelected"], ["mjFillContainer", "", 3, "RoleName"], ["EntityName", "Applications", "SortBy", "Name", 3, "Columns", "RecordSelected"], [3, "ApplicationName"]], template: function SettingsComponent_Template(rf, ctx) { if (rf & 1) {
175
+ SettingsComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SettingsComponent, selectors: [["mj-settings"]], decls: 12, vars: 6, consts: [["mjFillContainer", "", 1, "container", 3, "bottomMargin", "rightMargin"], ["mjFillContainer", "", 1, "options-container", 3, "fillWidth"], ["class", "option-item", 3, "selected", "click", 4, "ngFor", "ngForOf"], ["mjFillContainer", "", 1, "display-container", 3, "fillWidth"], ["RowsEntityName", "Entities", "RowsEntityDisplayField", "Name", "RowsEntityDataSource", "FullEntity", "RowsExtraFilter", "SchemaName <> '__mj' AND (Name like 'a%' or Name like 'p%')", "RowsOrderBy", "Name", "ColumnsEntityName", "Actions", "ColumnsEntityDisplayField", "Name", "ColumnsEntityDataSource", "FullEntity", "ColumnsMode", "Entity", "ColumnsExtraFilter", "Name like 'v%' or Name like 'd%' or Name like 'test%'", "ColumnsOrderBy", "Name", "JoinEntityName", "Entity Actions", "JoinEntityRowForeignKey", "EntityID", "JoinEntityColumnForeignKey", "ActionID", "CheckBoxValueMode", "RecordExists", 2, "height", "750px", "width", "800px"], [1, "option-item", 3, "click"], ["EntityName", "Users", "SortBy", "Name", 3, "Columns", "RecordSelected"], [3, "UserID"], ["EntityName", "Roles", "SortBy", "Name", 3, "Columns", "RecordSelected"], ["mjFillContainer", "", 3, "RoleName"], ["EntityName", "Applications", "SortBy", "Name", 3, "Columns", "RecordSelected"], [3, "ApplicationName"]], template: function SettingsComponent_Template(rf, ctx) { if (rf & 1) {
175
176
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
176
177
  i0.ɵɵtemplate(2, SettingsComponent_div_2_Template, 2, 3, "div", 2);
177
178
  i0.ɵɵelementEnd();
178
179
  i0.ɵɵelementStart(3, "div", 3);
179
- i0.ɵɵtemplate(4, SettingsComponent_Case_4_Template, 1, 0)(5, SettingsComponent_Case_5_Template, 1, 2)(6, SettingsComponent_Case_6_Template, 1, 1)(7, SettingsComponent_Case_7_Template, 1, 2)(8, SettingsComponent_Case_8_Template, 1, 1)(9, SettingsComponent_Case_9_Template, 1, 2)(10, SettingsComponent_Case_10_Template, 1, 1);
180
+ i0.ɵɵelement(4, "mj-join-grid", 4);
181
+ i0.ɵɵtemplate(5, SettingsComponent_Case_5_Template, 1, 0)(6, SettingsComponent_Case_6_Template, 1, 2)(7, SettingsComponent_Case_7_Template, 1, 1)(8, SettingsComponent_Case_8_Template, 1, 2)(9, SettingsComponent_Case_9_Template, 1, 1)(10, SettingsComponent_Case_10_Template, 1, 2)(11, SettingsComponent_Case_11_Template, 1, 1);
180
182
  i0.ɵɵelementEnd()();
181
183
  } if (rf & 2) {
182
184
  let SettingsComponent_contFlowTmp;
@@ -187,11 +189,11 @@ SettingsComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SettingsC
187
189
  i0.ɵɵproperty("ngForOf", ctx.options);
188
190
  i0.ɵɵadvance();
189
191
  i0.ɵɵproperty("fillWidth", false);
190
- i0.ɵɵadvance();
191
- i0.ɵɵconditional(4, (SettingsComponent_contFlowTmp = ctx.currentItem) === "EntityPermissions" ? 4 : SettingsComponent_contFlowTmp === "Users" ? 5 : SettingsComponent_contFlowTmp === "User" ? 6 : SettingsComponent_contFlowTmp === "Roles" ? 7 : SettingsComponent_contFlowTmp === "Role" ? 8 : SettingsComponent_contFlowTmp === "Applications" ? 9 : SettingsComponent_contFlowTmp === "Application" ? 10 : -1);
192
- } }, dependencies: [i2.NgForOf, i3.FillContainer, i4.EntityPermissionsSelectorWithGridComponent, i5.SimpleRecordListComponent, i6.SingleRoleComponent, i7.SingleUserComponent, i8.SingleApplicationComponent], styles: [".container[_ngcontent-%COMP%] {\n display: block;\n width: 100%;\n overflow: hidden; \n}\n\n.options-container[_ngcontent-%COMP%] {\n float: left; \n\n width: 150px; \n\n flex: 0 0 150px;\n padding: 10px;\n border-right: solid 1px lightgray;\n box-sizing: border-box; \n\n}\n\n.option-item[_ngcontent-%COMP%] {\n cursor: pointer;\n margin-bottom: 10px; \n\n padding: 5px 10px; \n\n border-radius: 4px; \n\n}\n\n.display-container[_ngcontent-%COMP%] {\n display: block; \n\n margin-left: 160px; \n\n padding: 10px;\n box-sizing: border-box; \n\n}\n\n.selected[_ngcontent-%COMP%] {\n background-color: #007bff; \n\n color: white; \n\n padding: 5px 10px; \n\n border-radius: 4px; \n\n}"] });
192
+ i0.ɵɵadvance(2);
193
+ i0.ɵɵconditional(5, (SettingsComponent_contFlowTmp = ctx.currentItem) === "EntityPermissions" ? 5 : SettingsComponent_contFlowTmp === "Users" ? 6 : SettingsComponent_contFlowTmp === "User" ? 7 : SettingsComponent_contFlowTmp === "Roles" ? 8 : SettingsComponent_contFlowTmp === "Role" ? 9 : SettingsComponent_contFlowTmp === "Applications" ? 10 : SettingsComponent_contFlowTmp === "Application" ? 11 : -1);
194
+ } }, dependencies: [i2.NgForOf, i3.FillContainer, i4.EntityPermissionsSelectorWithGridComponent, i5.SimpleRecordListComponent, i6.JoinGridComponent, i7.SingleRoleComponent, i8.SingleUserComponent, i9.SingleApplicationComponent], styles: [".container[_ngcontent-%COMP%] {\n display: block;\n width: 100%;\n overflow: hidden; \n}\n\n.options-container[_ngcontent-%COMP%] {\n float: left; \n\n width: 150px; \n\n flex: 0 0 150px;\n padding: 10px;\n border-right: solid 1px lightgray;\n box-sizing: border-box; \n\n}\n\n.option-item[_ngcontent-%COMP%] {\n cursor: pointer;\n margin-bottom: 10px; \n\n padding: 5px 10px; \n\n border-radius: 4px; \n\n}\n\n.display-container[_ngcontent-%COMP%] {\n display: block; \n\n margin-left: 160px; \n\n padding: 10px;\n box-sizing: border-box; \n\n}\n\n.selected[_ngcontent-%COMP%] {\n background-color: #007bff; \n\n color: white; \n\n padding: 5px 10px; \n\n border-radius: 4px; \n\n}"] });
193
195
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SettingsComponent, [{
194
196
  type: Component,
195
- args: [{ selector: 'mj-settings', template: "<div class=\"container\" mjFillContainer [bottomMargin]=\"5\" [rightMargin]=\"0\">\n <!-- Options container -->\n <div class=\"options-container\" mjFillContainer [fillWidth]=\"false\">\n <div *ngFor=\"let o of options\"\n class=\"option-item\"\n [class.selected]=\"leftNavItemSelected(o)\"\n (click)=\"selectItem(o.value)\"\n >{{o.label}}</div>\n </div>\n\n <!-- Display container -->\n <div class=\"display-container\" mjFillContainer [fillWidth]=\"false\">\n @switch (currentItem) {\n @case ('EntityPermissions') {\n <mj-entity-permissions-selector-with-grid></mj-entity-permissions-selector-with-grid>\n }\n @case ('Users') {\n <mj-simple-record-list\n EntityName=\"Users\"\n SortBy=\"Name\"\n [Columns]=\"['Name', 'Email', 'IsActive', 'Type']\"\n (RecordSelected)=\"selectUser($event)\"\n ></mj-simple-record-list>\n }\n @case ('User') {\n <mj-single-user [UserID]=\"selectedUserID\"></mj-single-user>\n }\n @case ('Roles') {\n <mj-simple-record-list\n EntityName=\"Roles\"\n SortBy=\"Name\"\n [Columns]=\"['Name', 'Description']\"\n (RecordSelected)=\"selectRole($event)\"\n ></mj-simple-record-list>\n }\n @case ('Role') {\n <mj-single-role [RoleName]=\"selectedRoleName\" mjFillContainer></mj-single-role>\n }\n @case ('Applications') {\n <mj-simple-record-list\n EntityName=\"Applications\"\n SortBy=\"Name\"\n [Columns]=\"['Name', 'Description']\"\n (RecordSelected)=\"selectApplication($event)\"\n ></mj-simple-record-list>\n }\n @case ('Application') {\n <mj-single-application [ApplicationName]=\"selectedApplicationName\"></mj-single-application>\n }\n }\n </div>\n</div>", styles: [".container {\n display: block;\n width: 100%;\n overflow: hidden; \n}\n\n.options-container {\n float: left; /* Float to the left */\n width: 150px; /* Fixed width as specified */\n flex: 0 0 150px;\n padding: 10px;\n border-right: solid 1px lightgray;\n box-sizing: border-box; /* Ensures padding is included in the width */\n}\n\n.option-item {\n cursor: pointer;\n margin-bottom: 10px; /* Adds space between the options for better readability */\n padding: 5px 10px; /* Optional: Adds some padding for a better visual appearance */\n border-radius: 4px; /* Optional: Adds rounded corners for a more polished look */\n}\n\n.display-container {\n display: block; /* Ensures it's treated as a block-level element */\n margin-left: 160px; /* Width of the options-container plus its padding */\n padding: 10px;\n box-sizing: border-box; /* Ensures padding doesn't add to the width */\n}\n\n.selected {\n background-color: #007bff; /* A blue background for selected item */\n color: white; /* White text color for better contrast */\n padding: 5px 10px; /* Optional: Adds some padding for a better visual appearance */\n border-radius: 4px; /* Optional: Adds rounded corners for a more polished look */\n}\n"] }]
197
+ args: [{ selector: 'mj-settings', template: "<div class=\"container\" mjFillContainer [bottomMargin]=\"5\" [rightMargin]=\"0\">\n <!-- Options container -->\n <div class=\"options-container\" mjFillContainer [fillWidth]=\"false\">\n <div *ngFor=\"let o of options\"\n class=\"option-item\"\n [class.selected]=\"leftNavItemSelected(o)\"\n (click)=\"selectItem(o.value)\"\n >{{o.label}}</div>\n </div>\n\n <!-- Display container -->\n <div class=\"display-container\" mjFillContainer [fillWidth]=\"false\">\n <mj-join-grid\n RowsEntityName=\"Entities\"\n RowsEntityDisplayField=\"Name\"\n RowsEntityDataSource=\"FullEntity\"\n RowsExtraFilter=\"SchemaName <> '__mj' AND (Name like 'a%' or Name like 'p%')\"\n RowsOrderBy=\"Name\"\n ColumnsEntityName=\"Actions\"\n ColumnsEntityDisplayField=\"Name\"\n ColumnsEntityDataSource= \"FullEntity\"\n ColumnsMode=\"Entity\"\n ColumnsExtraFilter=\"Name like 'v%' or Name like 'd%' or Name like 'test%'\"\n ColumnsOrderBy=\"Name\"\n JoinEntityName=\"Entity Actions\"\n JoinEntityRowForeignKey=\"EntityID\"\n JoinEntityColumnForeignKey=\"ActionID\"\n CheckBoxValueMode=\"RecordExists\"\n \n style=\"height: 750px; width: 800px;\"\n >\n <!-- [NewRecordDefaultValues]=\"{Status: 'Active'}\" -->\n\n </mj-join-grid>\n @switch (currentItem) {\n @case ('EntityPermissions') {\n <mj-entity-permissions-selector-with-grid></mj-entity-permissions-selector-with-grid>\n }\n @case ('Users') {\n <mj-simple-record-list\n EntityName=\"Users\"\n SortBy=\"Name\"\n [Columns]=\"['Name', 'Email', 'IsActive', 'Type']\"\n (RecordSelected)=\"selectUser($event)\"\n ></mj-simple-record-list>\n }\n @case ('User') {\n <mj-single-user [UserID]=\"selectedUserID\"></mj-single-user>\n }\n @case ('Roles') {\n <mj-simple-record-list\n EntityName=\"Roles\"\n SortBy=\"Name\"\n [Columns]=\"['Name', 'Description']\"\n (RecordSelected)=\"selectRole($event)\"\n ></mj-simple-record-list>\n }\n @case ('Role') {\n <mj-single-role [RoleName]=\"selectedRoleName\" mjFillContainer></mj-single-role>\n }\n @case ('Applications') {\n <mj-simple-record-list\n EntityName=\"Applications\"\n SortBy=\"Name\"\n [Columns]=\"['Name', 'Description']\"\n (RecordSelected)=\"selectApplication($event)\"\n ></mj-simple-record-list>\n }\n @case ('Application') {\n <mj-single-application [ApplicationName]=\"selectedApplicationName\"></mj-single-application>\n }\n }\n </div>\n</div>", styles: [".container {\n display: block;\n width: 100%;\n overflow: hidden; \n}\n\n.options-container {\n float: left; /* Float to the left */\n width: 150px; /* Fixed width as specified */\n flex: 0 0 150px;\n padding: 10px;\n border-right: solid 1px lightgray;\n box-sizing: border-box; /* Ensures padding is included in the width */\n}\n\n.option-item {\n cursor: pointer;\n margin-bottom: 10px; /* Adds space between the options for better readability */\n padding: 5px 10px; /* Optional: Adds some padding for a better visual appearance */\n border-radius: 4px; /* Optional: Adds rounded corners for a more polished look */\n}\n\n.display-container {\n display: block; /* Ensures it's treated as a block-level element */\n margin-left: 160px; /* Width of the options-container plus its padding */\n padding: 10px;\n box-sizing: border-box; /* Ensures padding doesn't add to the width */\n}\n\n.selected {\n background-color: #007bff; /* A blue background for selected item */\n color: white; /* White text color for better contrast */\n padding: 5px 10px; /* Optional: Adds some padding for a better visual appearance */\n border-radius: 4px; /* Optional: Adds rounded corners for a more polished look */\n}\n"] }]
196
198
  }], () => [{ type: i1.Router }, { type: i1.ActivatedRoute }], null); })();
197
199
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SettingsComponent, { className: "SettingsComponent", filePath: "src/lib/settings/settings.component.ts", lineNumber: 22 }); })();
@@ -1,11 +1,11 @@
1
1
  import { OnInit, ChangeDetectorRef } from '@angular/core';
2
2
  import { ApplicationEntity } from '@memberjunction/core-entities';
3
- import { EntityFormDialog } from '@memberjunction/ng-entity-form-dialog';
3
+ import { EntityFormDialogComponent } from '@memberjunction/ng-entity-form-dialog';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class SingleApplicationComponent implements OnInit {
6
6
  private cdRef;
7
7
  ApplicationName: string;
8
- entityFormComponent: EntityFormDialog;
8
+ entityFormComponent: EntityFormDialogComponent;
9
9
  gridHeight: number;
10
10
  isLoading: boolean;
11
11
  Record: ApplicationEntity | null;
@@ -107,12 +107,12 @@ SingleApplicationComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
107
107
  } if (rf & 2) {
108
108
  let _t;
109
109
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.entityFormComponent = _t.first);
110
- } }, inputs: { ApplicationName: "ApplicationName" }, decls: 5, vars: 8, consts: [["mjFillContainer", ""], ["SectionName", "details", "Mode", "section", 3, "Record", "Visible", "AutoRevertOnCancel", "HandleSave", "Width", "Height", "close"], ["entityForm", ""], [1, "info-table"], ["scope", "row"], [1, "edit-icon", "fa-solid", "fa-pen-to-square", 3, "click"], [3, "TabSelected"], ["Mode", "Applications", 3, "ApplicationName", "ApplicationRecord", 4, "ngIf"], ["Mode", "Applications", 3, "ApplicationName", "ApplicationRecord"]], template: function SingleApplicationComponent_Template(rf, ctx) { if (rf & 1) {
110
+ } }, inputs: { ApplicationName: "ApplicationName" }, decls: 5, vars: 8, consts: [["mjFillContainer", ""], ["SectionName", "details", "Mode", "section", 3, "Record", "Visible", "AutoRevertOnCancel", "HandleSave", "Width", "Height", "DialogClosed"], ["entityForm", ""], [1, "info-table"], ["scope", "row"], [1, "edit-icon", "fa-solid", "fa-pen-to-square", 3, "click"], [3, "TabSelected"], ["Mode", "Applications", 3, "ApplicationName", "ApplicationRecord", 4, "ngIf"], ["Mode", "Applications", 3, "ApplicationName", "ApplicationRecord"]], template: function SingleApplicationComponent_Template(rf, ctx) { if (rf & 1) {
111
111
  i0.ɵɵelementStart(0, "div", 0);
112
112
  i0.ɵɵtemplate(1, SingleApplicationComponent_Conditional_1_Template, 1, 0, "kendo-loader")(2, SingleApplicationComponent_Conditional_2_Template, 18, 4);
113
113
  i0.ɵɵelementEnd();
114
114
  i0.ɵɵelementStart(3, "mj-entity-form-dialog", 1, 2);
115
- i0.ɵɵlistener("close", function SingleApplicationComponent_Template_mj_entity_form_dialog_close_3_listener($event) { return ctx.onEntityFormClosed($event); });
115
+ i0.ɵɵlistener("DialogClosed", function SingleApplicationComponent_Template_mj_entity_form_dialog_DialogClosed_3_listener($event) { return ctx.onEntityFormClosed($event); });
116
116
  i0.ɵɵelementEnd();
117
117
  } if (rf & 2) {
118
118
  i0.ɵɵadvance();
@@ -121,10 +121,10 @@ SingleApplicationComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
121
121
  i0.ɵɵconditional(2, !ctx.isLoading && ctx.Record ? 2 : -1);
122
122
  i0.ɵɵadvance();
123
123
  i0.ɵɵproperty("Record", ctx.Record)("Visible", ctx.showEntityEditingForm)("AutoRevertOnCancel", true)("HandleSave", true)("Width", 550)("Height", 450);
124
- } }, dependencies: [i1.NgIf, i2.FillContainer, i3.MJTabStripComponent, i3.MJTabBodyComponent, i3.MJTabComponent, i4.EntityFormDialog, i5.LoaderComponent, i6.ApplicationEntitiesGridComponent], styles: ["button[_ngcontent-%COMP%] {\n margin-left: 5px;\n margin-top: 5px;\n width: 125px;\n}\n\n\n\n.name[_ngcontent-%COMP%] {\n font-weight: bold;\n font-size: 20px;\n margin-left: 5px;\n margin-top: 5px;\n}\n\n.info-table[_ngcontent-%COMP%] {\n width: 100%; \n\n border-collapse: collapse; \n\n margin-bottom: 10px;\n}\n\n.info-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n width: 150px; \n\n font-weight: bold; \n\n text-align: left; \n\n padding: 8px; \n\n border: none; \n\n background-color: transparent; \n\n}\n\n.info-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n text-align: left; \n\n padding: 8px; \n\n border: none; \n\n background-color: transparent; \n\n overflow: hidden; \n\n text-overflow: ellipsis; \n\n}\n\n\n\n.edit-icon[_ngcontent-%COMP%] {\n margin-left: 20px; \n vertical-align: middle;;\n cursor: pointer; \n\n}\n\n.edit-icon[_ngcontent-%COMP%]:hover {\n fill: #007bff; \n\n}"] });
124
+ } }, dependencies: [i1.NgIf, i2.FillContainer, i3.MJTabStripComponent, i3.MJTabBodyComponent, i3.MJTabComponent, i4.EntityFormDialogComponent, i5.LoaderComponent, i6.ApplicationEntitiesGridComponent], styles: ["button[_ngcontent-%COMP%] {\n margin-left: 5px;\n margin-top: 5px;\n width: 125px;\n}\n\n\n\n.name[_ngcontent-%COMP%] {\n font-weight: bold;\n font-size: 20px;\n margin-left: 5px;\n margin-top: 5px;\n}\n\n.info-table[_ngcontent-%COMP%] {\n width: 100%; \n\n border-collapse: collapse; \n\n margin-bottom: 10px;\n}\n\n.info-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n width: 150px; \n\n font-weight: bold; \n\n text-align: left; \n\n padding: 8px; \n\n border: none; \n\n background-color: transparent; \n\n}\n\n.info-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n text-align: left; \n\n padding: 8px; \n\n border: none; \n\n background-color: transparent; \n\n overflow: hidden; \n\n text-overflow: ellipsis; \n\n}\n\n\n\n.edit-icon[_ngcontent-%COMP%] {\n margin-left: 20px; \n vertical-align: middle;;\n cursor: pointer; \n\n}\n\n.edit-icon[_ngcontent-%COMP%]:hover {\n fill: #007bff; \n\n}"] });
125
125
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SingleApplicationComponent, [{
126
126
  type: Component,
127
- args: [{ selector: 'mj-single-application', template: "<div mjFillContainer>\n @if(isLoading) {\n <kendo-loader></kendo-loader>\n }\n @if(!isLoading && Record) {\n <table class=\"info-table\">\n <tbody>\n <tr>\n <th scope=\"row\">Application</th>\n <td>{{Record.Name}}\n <span class=\"edit-icon fa-solid fa-pen-to-square\" (click)=\"EditRecord()\"></span>\n </td>\n </tr>\n <tr>\n <th scope=\"row\">Description</th>\n <td>{{Record.Description}}</td>\n </tr>\n </tbody>\n </table> \n <mj-tabstrip mjFillContainer>\n <mj-tab [TabSelected]=\"true\">\n Entities\n </mj-tab>\n <mj-tab-body>\n <mj-application-entities-grid *ngIf=\"ApplicationName && Record\" Mode=\"Applications\" [ApplicationName]=\"ApplicationName\" [ApplicationRecord]=\"Record\"></mj-application-entities-grid>\n </mj-tab-body>\n </mj-tabstrip>\n }\n</div>\n\n\n<mj-entity-form-dialog #entityForm \n [Record]=\"Record\" \n SectionName=\"details\" \n Mode=\"section\" \n [Visible]=\"showEntityEditingForm\" \n [AutoRevertOnCancel]=\"true\"\n [HandleSave]=\"true\"\n [Width]=\"550\"\n [Height]=\"450\"\n (close)=\"onEntityFormClosed($event)\">\n</mj-entity-form-dialog>\n", styles: ["button {\n margin-left: 5px;\n margin-top: 5px;\n width: 125px;\n}\n\n\n\n.name {\n font-weight: bold;\n font-size: 20px;\n margin-left: 5px;\n margin-top: 5px;\n}\n\n.info-table {\n width: 100%; /* Take up the full width of the container */\n border-collapse: collapse; /* For a cleaner look */\n margin-bottom: 10px;\n}\n\n.info-table th {\n width: 150px; /* Adjust this fixed width as needed */\n font-weight: bold; /* Make header labels bold */\n text-align: left; /* Align text to the left */\n padding: 8px; /* Add some padding for spacing */\n border: none; /* Removes the borders */\n background-color: transparent; /* Removes any background color */\n}\n\n.info-table td {\n text-align: left; /* Align text to the left */\n padding: 8px; /* Add some padding for spacing */\n border: none; /* Removes the borders */\n background-color: transparent; /* Removes any background color */\n overflow: hidden; /* Prevents content from overflowing */\n text-overflow: ellipsis; /* Adds an ellipsis if the text overflows */\n}\n\n/* Style for SVG icon */\n.edit-icon {\n margin-left: 20px; \n vertical-align: middle;;\n cursor: pointer; /* Changes the cursor to a pointer */\n}\n\n.edit-icon:hover {\n fill: #007bff; /* Changes the color on hover, set to the color you prefer */\n}"] }]
127
+ args: [{ selector: 'mj-single-application', template: "<div mjFillContainer>\n @if(isLoading) {\n <kendo-loader></kendo-loader>\n }\n @if(!isLoading && Record) {\n <table class=\"info-table\">\n <tbody>\n <tr>\n <th scope=\"row\">Application</th>\n <td>{{Record.Name}}\n <span class=\"edit-icon fa-solid fa-pen-to-square\" (click)=\"EditRecord()\"></span>\n </td>\n </tr>\n <tr>\n <th scope=\"row\">Description</th>\n <td>{{Record.Description}}</td>\n </tr>\n </tbody>\n </table> \n <mj-tabstrip mjFillContainer>\n <mj-tab [TabSelected]=\"true\">\n Entities\n </mj-tab>\n <mj-tab-body>\n <mj-application-entities-grid *ngIf=\"ApplicationName && Record\" Mode=\"Applications\" [ApplicationName]=\"ApplicationName\" [ApplicationRecord]=\"Record\"></mj-application-entities-grid>\n </mj-tab-body>\n </mj-tabstrip>\n }\n</div>\n\n\n<mj-entity-form-dialog #entityForm \n [Record]=\"Record\" \n SectionName=\"details\" \n Mode=\"section\" \n [Visible]=\"showEntityEditingForm\" \n [AutoRevertOnCancel]=\"true\"\n [HandleSave]=\"true\"\n [Width]=\"550\"\n [Height]=\"450\"\n (DialogClosed)=\"onEntityFormClosed($event)\">\n</mj-entity-form-dialog>\n", styles: ["button {\n margin-left: 5px;\n margin-top: 5px;\n width: 125px;\n}\n\n\n\n.name {\n font-weight: bold;\n font-size: 20px;\n margin-left: 5px;\n margin-top: 5px;\n}\n\n.info-table {\n width: 100%; /* Take up the full width of the container */\n border-collapse: collapse; /* For a cleaner look */\n margin-bottom: 10px;\n}\n\n.info-table th {\n width: 150px; /* Adjust this fixed width as needed */\n font-weight: bold; /* Make header labels bold */\n text-align: left; /* Align text to the left */\n padding: 8px; /* Add some padding for spacing */\n border: none; /* Removes the borders */\n background-color: transparent; /* Removes any background color */\n}\n\n.info-table td {\n text-align: left; /* Align text to the left */\n padding: 8px; /* Add some padding for spacing */\n border: none; /* Removes the borders */\n background-color: transparent; /* Removes any background color */\n overflow: hidden; /* Prevents content from overflowing */\n text-overflow: ellipsis; /* Adds an ellipsis if the text overflows */\n}\n\n/* Style for SVG icon */\n.edit-icon {\n margin-left: 20px; \n vertical-align: middle;;\n cursor: pointer; /* Changes the cursor to a pointer */\n}\n\n.edit-icon:hover {\n fill: #007bff; /* Changes the color on hover, set to the color you prefer */\n}"] }]
128
128
  }], () => [{ type: i0.ChangeDetectorRef }], { ApplicationName: [{
129
129
  type: Input
130
130
  }], entityFormComponent: [{
@@ -1,6 +1,6 @@
1
1
  import { OnInit, ChangeDetectorRef } from '@angular/core';
2
2
  import { RoleEntity, UserRoleEntity } from '@memberjunction/core-entities';
3
- import { EntityFormDialog } from '@memberjunction/ng-entity-form-dialog';
3
+ import { EntityFormDialogComponent } from '@memberjunction/ng-entity-form-dialog';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class UserRoleEntity_Ext extends UserRoleEntity {
6
6
  private _selected;
@@ -19,7 +19,7 @@ export declare class UserRoleEntity_Ext extends UserRoleEntity {
19
19
  export declare class SingleRoleComponent implements OnInit {
20
20
  private cdRef;
21
21
  RoleName: string;
22
- entityFormComponent: EntityFormDialog;
22
+ entityFormComponent: EntityFormDialogComponent;
23
23
  gridHeight: number;
24
24
  isLoading: boolean;
25
25
  RoleRecord: RoleEntity | null;
@@ -168,12 +168,12 @@ SingleRoleComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SingleR
168
168
  } if (rf & 2) {
169
169
  let _t;
170
170
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.entityFormComponent = _t.first);
171
- } }, inputs: { RoleName: "RoleName" }, decls: 5, vars: 8, consts: [["mjFillContainer", "", 1, "wrapper"], ["SectionName", "details", "Mode", "section", 3, "Record", "Visible", "AutoRevertOnCancel", "HandleSave", "Width", "Height", "close"], ["entityForm", ""], [1, "role-info-table"], ["scope", "row"], [1, "fa-solid", "fa-pen-to-square", 3, "click"], ["mjFillContainer", "", 3, "bottomMargin"], ["Mode", "Roles", 3, "RoleName", "RoleRecord"], ["Mode", "Role", "mjFillContainer", "", 3, "RoleName", 4, "ngIf"], ["Mode", "Role", "mjFillContainer", "", 3, "RoleName"]], template: function SingleRoleComponent_Template(rf, ctx) { if (rf & 1) {
171
+ } }, inputs: { RoleName: "RoleName" }, decls: 5, vars: 8, consts: [["mjFillContainer", "", 1, "wrapper"], ["SectionName", "details", "Mode", "section", 3, "Record", "Visible", "AutoRevertOnCancel", "HandleSave", "Width", "Height", "DialogClosed"], ["entityForm", ""], [1, "role-info-table"], ["scope", "row"], [1, "fa-solid", "fa-pen-to-square", 3, "click"], ["mjFillContainer", "", 3, "bottomMargin"], ["Mode", "Roles", 3, "RoleName", "RoleRecord"], ["Mode", "Role", "mjFillContainer", "", 3, "RoleName", 4, "ngIf"], ["Mode", "Role", "mjFillContainer", "", 3, "RoleName"]], template: function SingleRoleComponent_Template(rf, ctx) { if (rf & 1) {
172
172
  i0.ɵɵelementStart(0, "div", 0);
173
173
  i0.ɵɵtemplate(1, SingleRoleComponent_Conditional_1_Template, 1, 0, "kendo-loader")(2, SingleRoleComponent_Conditional_2_Template, 32, 8);
174
174
  i0.ɵɵelementEnd();
175
175
  i0.ɵɵelementStart(3, "mj-entity-form-dialog", 1, 2);
176
- i0.ɵɵlistener("close", function SingleRoleComponent_Template_mj_entity_form_dialog_close_3_listener($event) { return ctx.onEntityFormClosed($event); });
176
+ i0.ɵɵlistener("DialogClosed", function SingleRoleComponent_Template_mj_entity_form_dialog_DialogClosed_3_listener($event) { return ctx.onEntityFormClosed($event); });
177
177
  i0.ɵɵelementEnd();
178
178
  } if (rf & 2) {
179
179
  i0.ɵɵadvance();
@@ -185,7 +185,7 @@ SingleRoleComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SingleR
185
185
  } }, styles: [".wrapper[_ngcontent-%COMP%] {\n display: block;\n}\n\nbutton[_ngcontent-%COMP%] {\n margin-left: 5px;\n margin-top: 5px;\n width: 125px;\n}\n\n\n\n.role-name[_ngcontent-%COMP%] {\n font-weight: bold;\n font-size: 20px;\n margin-left: 5px;\n margin-top: 5px;\n}\n\n.role-info-table[_ngcontent-%COMP%] {\n width: 100%; \n\n border-collapse: collapse; \n\n margin-bottom: 10px;\n}\n\n.role-info-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n width: 150px; \n\n font-weight: bold; \n\n text-align: left; \n\n padding: 8px; \n\n border: none; \n\n background-color: transparent; \n\n}\n\n.role-info-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n text-align: left; \n\n padding: 8px; \n\n border: none; \n\n background-color: transparent; \n\n overflow: hidden; \n\n text-overflow: ellipsis; \n\n}\n\n\n\n.edit-icon[_ngcontent-%COMP%] {\n margin-left: 20px; \n vertical-align: middle;;\n cursor: pointer; \n\n}\n\n.edit-icon[_ngcontent-%COMP%]:hover {\n fill: #007bff; \n\n}"] });
186
186
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SingleRoleComponent, [{
187
187
  type: Component,
188
- args: [{ selector: 'mj-single-role', template: "<div mjFillContainer class=\"wrapper\">\n @if(isLoading) {\n <kendo-loader></kendo-loader> \n }\n @if(!isLoading && RoleRecord) {\n <table class=\"role-info-table\">\n <tbody>\n <tr>\n <th scope=\"row\">Role</th>\n <td>\n {{RoleRecord.Name}}\n <span class=\"fa-solid fa-pen-to-square\" (click)=\"EditRecord()\"></span>\n </td>\n </tr>\n <tr>\n <th scope=\"row\">Description</th>\n <td>{{RoleRecord.Description}}</td>\n </tr>\n <tr>\n <th scope=\"row\">Directory ID</th>\n <td>{{RoleRecord.DirectoryID}}</td>\n </tr>\n <tr>\n <th scope=\"row\">SQL Name</th>\n <td>{{RoleRecord.SQLName}}</td>\n </tr>\n </tbody>\n </table> \n\n <mj-tabstrip mjFillContainer [bottomMargin]=\"150\">\n <mj-tab>\n Users\n </mj-tab>\n <mj-tab-body>\n <mj-user-roles-grid Mode=\"Roles\" [RoleName]=\"RoleName\" [RoleRecord]=\"RoleRecord\"></mj-user-roles-grid>\n </mj-tab-body>\n\n <mj-tab>\n Entity Permissions\n </mj-tab>\n <mj-tab-body>\n <mj-entity-permissions-grid *ngIf=\"RoleRecord && RoleRecord.Name\" Mode=\"Role\" [RoleName]=\"RoleRecord.Name\" mjFillContainer></mj-entity-permissions-grid>\n </mj-tab-body>\n </mj-tabstrip>\n }\n</div>\n \n<mj-entity-form-dialog #entityForm \n [Record]=\"RoleRecord\" \n SectionName=\"details\" \n Mode=\"section\" \n [Visible]=\"showEntityEditingForm\" \n [AutoRevertOnCancel]=\"true\"\n [HandleSave]=\"true\"\n [Width]=\"550\"\n [Height]=\"450\"\n (close)=\"onEntityFormClosed($event)\">\n</mj-entity-form-dialog>\n", styles: [".wrapper {\n display: block;\n}\n\nbutton {\n margin-left: 5px;\n margin-top: 5px;\n width: 125px;\n}\n\n\n\n.role-name {\n font-weight: bold;\n font-size: 20px;\n margin-left: 5px;\n margin-top: 5px;\n}\n\n.role-info-table {\n width: 100%; /* Take up the full width of the container */\n border-collapse: collapse; /* For a cleaner look */\n margin-bottom: 10px;\n}\n\n.role-info-table th {\n width: 150px; /* Adjust this fixed width as needed */\n font-weight: bold; /* Make header labels bold */\n text-align: left; /* Align text to the left */\n padding: 8px; /* Add some padding for spacing */\n border: none; /* Removes the borders */\n background-color: transparent; /* Removes any background color */\n}\n\n.role-info-table td {\n text-align: left; /* Align text to the left */\n padding: 8px; /* Add some padding for spacing */\n border: none; /* Removes the borders */\n background-color: transparent; /* Removes any background color */\n overflow: hidden; /* Prevents content from overflowing */\n text-overflow: ellipsis; /* Adds an ellipsis if the text overflows */\n}\n\n/* Style for SVG icon */\n.edit-icon {\n margin-left: 20px; \n vertical-align: middle;;\n cursor: pointer; /* Changes the cursor to a pointer */\n}\n\n.edit-icon:hover {\n fill: #007bff; /* Changes the color on hover, set to the color you prefer */\n}"] }]
188
+ args: [{ selector: 'mj-single-role', template: "<div mjFillContainer class=\"wrapper\">\n @if(isLoading) {\n <kendo-loader></kendo-loader> \n }\n @if(!isLoading && RoleRecord) {\n <table class=\"role-info-table\">\n <tbody>\n <tr>\n <th scope=\"row\">Role</th>\n <td>\n {{RoleRecord.Name}}\n <span class=\"fa-solid fa-pen-to-square\" (click)=\"EditRecord()\"></span>\n </td>\n </tr>\n <tr>\n <th scope=\"row\">Description</th>\n <td>{{RoleRecord.Description}}</td>\n </tr>\n <tr>\n <th scope=\"row\">Directory ID</th>\n <td>{{RoleRecord.DirectoryID}}</td>\n </tr>\n <tr>\n <th scope=\"row\">SQL Name</th>\n <td>{{RoleRecord.SQLName}}</td>\n </tr>\n </tbody>\n </table> \n\n <mj-tabstrip mjFillContainer [bottomMargin]=\"150\">\n <mj-tab>\n Users\n </mj-tab>\n <mj-tab-body>\n <mj-user-roles-grid Mode=\"Roles\" [RoleName]=\"RoleName\" [RoleRecord]=\"RoleRecord\"></mj-user-roles-grid>\n </mj-tab-body>\n\n <mj-tab>\n Entity Permissions\n </mj-tab>\n <mj-tab-body>\n <mj-entity-permissions-grid *ngIf=\"RoleRecord && RoleRecord.Name\" Mode=\"Role\" [RoleName]=\"RoleRecord.Name\" mjFillContainer></mj-entity-permissions-grid>\n </mj-tab-body>\n </mj-tabstrip>\n }\n</div>\n \n<mj-entity-form-dialog #entityForm \n [Record]=\"RoleRecord\" \n SectionName=\"details\" \n Mode=\"section\" \n [Visible]=\"showEntityEditingForm\" \n [AutoRevertOnCancel]=\"true\"\n [HandleSave]=\"true\"\n [Width]=\"550\"\n [Height]=\"450\"\n (DialogClosed)=\"onEntityFormClosed($event)\">\n</mj-entity-form-dialog>\n", styles: [".wrapper {\n display: block;\n}\n\nbutton {\n margin-left: 5px;\n margin-top: 5px;\n width: 125px;\n}\n\n\n\n.role-name {\n font-weight: bold;\n font-size: 20px;\n margin-left: 5px;\n margin-top: 5px;\n}\n\n.role-info-table {\n width: 100%; /* Take up the full width of the container */\n border-collapse: collapse; /* For a cleaner look */\n margin-bottom: 10px;\n}\n\n.role-info-table th {\n width: 150px; /* Adjust this fixed width as needed */\n font-weight: bold; /* Make header labels bold */\n text-align: left; /* Align text to the left */\n padding: 8px; /* Add some padding for spacing */\n border: none; /* Removes the borders */\n background-color: transparent; /* Removes any background color */\n}\n\n.role-info-table td {\n text-align: left; /* Align text to the left */\n padding: 8px; /* Add some padding for spacing */\n border: none; /* Removes the borders */\n background-color: transparent; /* Removes any background color */\n overflow: hidden; /* Prevents content from overflowing */\n text-overflow: ellipsis; /* Adds an ellipsis if the text overflows */\n}\n\n/* Style for SVG icon */\n.edit-icon {\n margin-left: 20px; \n vertical-align: middle;;\n cursor: pointer; /* Changes the cursor to a pointer */\n}\n\n.edit-icon:hover {\n fill: #007bff; /* Changes the color on hover, set to the color you prefer */\n}"] }]
189
189
  }], () => [{ type: i0.ChangeDetectorRef }], { RoleName: [{
190
190
  type: Input
191
191
  }], entityFormComponent: [{
@@ -1,12 +1,12 @@
1
1
  import { OnInit, ChangeDetectorRef } from '@angular/core';
2
2
  import { RunViewParams } from '@memberjunction/core';
3
3
  import { UserEntity } from '@memberjunction/core-entities';
4
- import { EntityFormDialog } from '@memberjunction/ng-entity-form-dialog';
4
+ import { EntityFormDialogComponent } from '@memberjunction/ng-entity-form-dialog';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class SingleUserComponent implements OnInit {
7
7
  private cdRef;
8
8
  UserID: number;
9
- entityFormComponent: EntityFormDialog;
9
+ entityFormComponent: EntityFormDialogComponent;
10
10
  gridHeight: number;
11
11
  isLoading: boolean;
12
12
  UserRecord: UserEntity | null;
@@ -152,12 +152,12 @@ SingleUserComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SingleU
152
152
  } if (rf & 2) {
153
153
  let _t;
154
154
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.entityFormComponent = _t.first);
155
- } }, inputs: { UserID: "UserID" }, decls: 5, vars: 8, consts: [["mjFillContainer", ""], [4, "ngIf"], ["SectionName", "details", "Mode", "section", 3, "Record", "Visible", "AutoRevertOnCancel", "HandleSave", "Width", "Height", "close"], ["entityForm", ""], [1, "info-table"], ["scope", "row"], [1, "fa-solid", "fa-pen-to-square", 3, "click"], [3, "TabSelected"], ["Mode", "Users", 3, "UserID", "UserRecord"], [1, "content"], [3, "Params", 4, "ngIf"], [3, "Params"]], template: function SingleUserComponent_Template(rf, ctx) { if (rf & 1) {
155
+ } }, inputs: { UserID: "UserID" }, decls: 5, vars: 8, consts: [["mjFillContainer", ""], [4, "ngIf"], ["SectionName", "details", "Mode", "section", 3, "Record", "Visible", "AutoRevertOnCancel", "HandleSave", "Width", "Height", "DialogClosed"], ["entityForm", ""], [1, "info-table"], ["scope", "row"], [1, "fa-solid", "fa-pen-to-square", 3, "click"], [3, "TabSelected"], ["Mode", "Users", 3, "UserID", "UserRecord"], [1, "content"], [3, "Params", 4, "ngIf"], [3, "Params"]], template: function SingleUserComponent_Template(rf, ctx) { if (rf & 1) {
156
156
  i0.ɵɵelementStart(0, "div", 0);
157
157
  i0.ɵɵtemplate(1, SingleUserComponent_div_1_Template, 2, 0, "div", 1)(2, SingleUserComponent_div_2_Template, 49, 11, "div", 1);
158
158
  i0.ɵɵelementEnd();
159
159
  i0.ɵɵelementStart(3, "mj-entity-form-dialog", 2, 3);
160
- i0.ɵɵlistener("close", function SingleUserComponent_Template_mj_entity_form_dialog_close_3_listener($event) { return ctx.onEntityFormClosed($event); });
160
+ i0.ɵɵlistener("DialogClosed", function SingleUserComponent_Template_mj_entity_form_dialog_DialogClosed_3_listener($event) { return ctx.onEntityFormClosed($event); });
161
161
  i0.ɵɵelementEnd();
162
162
  } if (rf & 2) {
163
163
  i0.ɵɵadvance();
@@ -166,10 +166,10 @@ SingleUserComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SingleU
166
166
  i0.ɵɵproperty("ngIf", !ctx.isLoading && ctx.UserRecord);
167
167
  i0.ɵɵadvance();
168
168
  i0.ɵɵproperty("Record", ctx.UserRecord)("Visible", ctx.showEntityEditingForm)("AutoRevertOnCancel", true)("HandleSave", true)("Width", 550)("Height", 450);
169
- } }, dependencies: [i1.NgIf, i2.FillContainer, i3.MJTabStripComponent, i3.MJTabBodyComponent, i3.MJTabComponent, i4.EntityFormDialog, i5.LoaderComponent, i6.UserViewGridComponent, i7.UserRolesGridComponent], styles: ["button[_ngcontent-%COMP%] {\n margin-left: 5px;\n margin-top: 5px;\n width: 125px;\n}\n\n\n\n.name[_ngcontent-%COMP%] {\n font-weight: bold;\n font-size: 20px;\n margin-left: 5px;\n margin-top: 5px;\n}\n\n.info-table[_ngcontent-%COMP%] {\n width: 100%; \n\n border-collapse: collapse; \n\n margin-bottom: 10px;\n}\n\n.info-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n width: 150px; \n\n font-weight: bold; \n\n text-align: left; \n\n padding: 8px; \n\n border: none; \n\n background-color: transparent; \n\n}\n\n.info-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n text-align: left; \n\n padding: 8px; \n\n border: none; \n\n background-color: transparent; \n\n overflow: hidden; \n\n text-overflow: ellipsis; \n\n}\n\n\n\n.edit-icon[_ngcontent-%COMP%] {\n margin-left: 20px; \n vertical-align: middle;;\n cursor: pointer; \n\n}\n\n.edit-icon[_ngcontent-%COMP%]:hover {\n fill: #007bff; \n\n}"] });
169
+ } }, dependencies: [i1.NgIf, i2.FillContainer, i3.MJTabStripComponent, i3.MJTabBodyComponent, i3.MJTabComponent, i4.EntityFormDialogComponent, i5.LoaderComponent, i6.UserViewGridComponent, i7.UserRolesGridComponent], styles: ["button[_ngcontent-%COMP%] {\n margin-left: 5px;\n margin-top: 5px;\n width: 125px;\n}\n\n\n\n.name[_ngcontent-%COMP%] {\n font-weight: bold;\n font-size: 20px;\n margin-left: 5px;\n margin-top: 5px;\n}\n\n.info-table[_ngcontent-%COMP%] {\n width: 100%; \n\n border-collapse: collapse; \n\n margin-bottom: 10px;\n}\n\n.info-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n width: 150px; \n\n font-weight: bold; \n\n text-align: left; \n\n padding: 8px; \n\n border: none; \n\n background-color: transparent; \n\n}\n\n.info-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n text-align: left; \n\n padding: 8px; \n\n border: none; \n\n background-color: transparent; \n\n overflow: hidden; \n\n text-overflow: ellipsis; \n\n}\n\n\n\n.edit-icon[_ngcontent-%COMP%] {\n margin-left: 20px; \n vertical-align: middle;;\n cursor: pointer; \n\n}\n\n.edit-icon[_ngcontent-%COMP%]:hover {\n fill: #007bff; \n\n}"] });
170
170
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SingleUserComponent, [{
171
171
  type: Component,
172
- args: [{ selector: 'mj-single-user', template: "<div mjFillContainer>\n <div *ngIf=\"isLoading\"><kendo-loader></kendo-loader></div>\n <div *ngIf=\"!isLoading && UserRecord\">\n <table class=\"info-table\">\n <tbody>\n <tr>\n <th scope=\"row\">User</th>\n <td>\n {{UserRecord.Name}}\n <span class=\"fa-solid fa-pen-to-square\" (click)=\"EditRecord()\"></span>\n </td>\n </tr>\n <tr>\n <th scope=\"row\">First Name</th>\n <td>{{UserRecord.FirstName}}</td>\n </tr>\n <tr>\n <th scope=\"row\">Last Name</th>\n <td>{{UserRecord.LastName}}</td>\n </tr>\n <tr>\n <th scope=\"row\">Title</th>\n <td>{{UserRecord.Title}}</td>\n </tr>\n <tr>\n <th scope=\"row\">Email</th>\n <td>{{UserRecord.Email}}</td>\n </tr>\n <tr>\n <th scope=\"row\">Type</th>\n <td>{{UserRecord.Type}}</td>\n </tr>\n <tr>\n <th scope=\"row\">Is Active</th>\n <td>{{UserRecord.IsActive}}</td>\n </tr>\n </tbody>\n </table> \n <mj-tabstrip>\n <mj-tab [TabSelected]=\"true\">\n Roles\n </mj-tab>\n <mj-tab-body>\n <mj-user-roles-grid Mode=\"Users\" [UserID]=\"UserID\" [UserRecord]=\"UserRecord\"></mj-user-roles-grid>\n </mj-tab-body>\n\n <mj-tab>\n Views\n </mj-tab> \n <mj-tab-body> \n <div class=\"content\">\n <mj-user-view-grid *ngIf=\"UserViewsParams\" [Params]=\"UserViewsParams\"></mj-user-view-grid>\n </div>\n </mj-tab-body>\n </mj-tabstrip>\n </div>\n</div>\n\n\n<mj-entity-form-dialog #entityForm \n [Record]=\"UserRecord\" \n SectionName=\"details\" \n Mode=\"section\" \n [Visible]=\"showEntityEditingForm\" \n [AutoRevertOnCancel]=\"true\"\n [HandleSave]=\"true\"\n [Width]=\"550\"\n [Height]=\"450\"\n (close)=\"onEntityFormClosed($event)\">\n</mj-entity-form-dialog>\n", styles: ["button {\n margin-left: 5px;\n margin-top: 5px;\n width: 125px;\n}\n\n\n\n.name {\n font-weight: bold;\n font-size: 20px;\n margin-left: 5px;\n margin-top: 5px;\n}\n\n.info-table {\n width: 100%; /* Take up the full width of the container */\n border-collapse: collapse; /* For a cleaner look */\n margin-bottom: 10px;\n}\n\n.info-table th {\n width: 150px; /* Adjust this fixed width as needed */\n font-weight: bold; /* Make header labels bold */\n text-align: left; /* Align text to the left */\n padding: 8px; /* Add some padding for spacing */\n border: none; /* Removes the borders */\n background-color: transparent; /* Removes any background color */\n}\n\n.info-table td {\n text-align: left; /* Align text to the left */\n padding: 8px; /* Add some padding for spacing */\n border: none; /* Removes the borders */\n background-color: transparent; /* Removes any background color */\n overflow: hidden; /* Prevents content from overflowing */\n text-overflow: ellipsis; /* Adds an ellipsis if the text overflows */\n}\n\n/* Style for SVG icon */\n.edit-icon {\n margin-left: 20px; \n vertical-align: middle;;\n cursor: pointer; /* Changes the cursor to a pointer */\n}\n\n.edit-icon:hover {\n fill: #007bff; /* Changes the color on hover, set to the color you prefer */\n}"] }]
172
+ args: [{ selector: 'mj-single-user', template: "<div mjFillContainer>\n <div *ngIf=\"isLoading\"><kendo-loader></kendo-loader></div>\n <div *ngIf=\"!isLoading && UserRecord\">\n <table class=\"info-table\">\n <tbody>\n <tr>\n <th scope=\"row\">User</th>\n <td>\n {{UserRecord.Name}}\n <span class=\"fa-solid fa-pen-to-square\" (click)=\"EditRecord()\"></span>\n </td>\n </tr>\n <tr>\n <th scope=\"row\">First Name</th>\n <td>{{UserRecord.FirstName}}</td>\n </tr>\n <tr>\n <th scope=\"row\">Last Name</th>\n <td>{{UserRecord.LastName}}</td>\n </tr>\n <tr>\n <th scope=\"row\">Title</th>\n <td>{{UserRecord.Title}}</td>\n </tr>\n <tr>\n <th scope=\"row\">Email</th>\n <td>{{UserRecord.Email}}</td>\n </tr>\n <tr>\n <th scope=\"row\">Type</th>\n <td>{{UserRecord.Type}}</td>\n </tr>\n <tr>\n <th scope=\"row\">Is Active</th>\n <td>{{UserRecord.IsActive}}</td>\n </tr>\n </tbody>\n </table> \n <mj-tabstrip>\n <mj-tab [TabSelected]=\"true\">\n Roles\n </mj-tab>\n <mj-tab-body>\n <mj-user-roles-grid Mode=\"Users\" [UserID]=\"UserID\" [UserRecord]=\"UserRecord\"></mj-user-roles-grid>\n </mj-tab-body>\n\n <mj-tab>\n Views\n </mj-tab> \n <mj-tab-body> \n <div class=\"content\">\n <mj-user-view-grid *ngIf=\"UserViewsParams\" [Params]=\"UserViewsParams\"></mj-user-view-grid>\n </div>\n </mj-tab-body>\n </mj-tabstrip>\n </div>\n</div>\n\n\n<mj-entity-form-dialog #entityForm \n [Record]=\"UserRecord\" \n SectionName=\"details\" \n Mode=\"section\" \n [Visible]=\"showEntityEditingForm\" \n [AutoRevertOnCancel]=\"true\"\n [HandleSave]=\"true\"\n [Width]=\"550\"\n [Height]=\"450\"\n (DialogClosed)=\"onEntityFormClosed($event)\">\n</mj-entity-form-dialog>\n", styles: ["button {\n margin-left: 5px;\n margin-top: 5px;\n width: 125px;\n}\n\n\n\n.name {\n font-weight: bold;\n font-size: 20px;\n margin-left: 5px;\n margin-top: 5px;\n}\n\n.info-table {\n width: 100%; /* Take up the full width of the container */\n border-collapse: collapse; /* For a cleaner look */\n margin-bottom: 10px;\n}\n\n.info-table th {\n width: 150px; /* Adjust this fixed width as needed */\n font-weight: bold; /* Make header labels bold */\n text-align: left; /* Align text to the left */\n padding: 8px; /* Add some padding for spacing */\n border: none; /* Removes the borders */\n background-color: transparent; /* Removes any background color */\n}\n\n.info-table td {\n text-align: left; /* Align text to the left */\n padding: 8px; /* Add some padding for spacing */\n border: none; /* Removes the borders */\n background-color: transparent; /* Removes any background color */\n overflow: hidden; /* Prevents content from overflowing */\n text-overflow: ellipsis; /* Adds an ellipsis if the text overflows */\n}\n\n/* Style for SVG icon */\n.edit-icon {\n margin-left: 20px; \n vertical-align: middle;;\n cursor: pointer; /* Changes the cursor to a pointer */\n}\n\n.edit-icon:hover {\n fill: #007bff; /* Changes the color on hover, set to the color you prefer */\n}"] }]
173
173
  }], () => [{ type: i0.ChangeDetectorRef }], { UserID: [{
174
174
  type: Input
175
175
  }], entityFormComponent: [{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/ng-explorer-settings",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "MemberJunction: Reusable Angular components for the settings section of the MJ Explorer App",
5
5
  "main": "./dist/public-api.js",
6
6
  "typings": "./dist/public-api.d.ts",
@@ -25,17 +25,18 @@
25
25
  "@angular/router": "~17.2.2"
26
26
  },
27
27
  "dependencies": {
28
- "@memberjunction/core-entities": "~1.4.0",
29
- "@memberjunction/global": "~1.4.0",
30
- "@memberjunction/core": "~1.4.0",
31
- "@memberjunction/ng-container-directives": "~1.4.0",
32
- "@memberjunction/ng-shared": "~1.4.0",
33
- "@memberjunction/ng-entity-permissions": "~1.4.0",
34
- "@memberjunction/ng-base-forms": "~1.4.0",
35
- "@memberjunction/ng-entity-form-dialog": "~1.4.0",
36
- "@memberjunction/ng-user-view-grid": "~1.4.0",
37
- "@memberjunction/ng-simple-record-list": "~1.4.0",
38
- "@memberjunction/ng-tabstrip": "~1.4.0",
28
+ "@memberjunction/core-entities": "~1.5.0",
29
+ "@memberjunction/global": "~1.5.0",
30
+ "@memberjunction/core": "~1.5.0",
31
+ "@memberjunction/ng-container-directives": "~1.5.0",
32
+ "@memberjunction/ng-shared": "~1.5.0",
33
+ "@memberjunction/ng-entity-permissions": "~1.5.0",
34
+ "@memberjunction/ng-base-forms": "~1.5.0",
35
+ "@memberjunction/ng-entity-form-dialog": "~1.5.0",
36
+ "@memberjunction/ng-user-view-grid": "~1.5.0",
37
+ "@memberjunction/ng-simple-record-list": "~1.5.0",
38
+ "@memberjunction/ng-tabstrip": "~1.5.0",
39
+ "@memberjunction/ng-join-grid": "~1.5.0",
39
40
  "@progress/kendo-angular-dropdowns": "~15.1.0",
40
41
  "@progress/kendo-angular-grid": "~15.1.0",
41
42
  "@progress/kendo-angular-buttons": "~15.1.0",