@memberjunction/ng-entity-permissions 5.22.0 → 5.24.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/dist/lib/entity-selector-with-grid/entity-selector-with-grid.component.js +10 -9
- package/dist/lib/entity-selector-with-grid/entity-selector-with-grid.component.js.map +1 -1
- package/dist/lib/grid/entity-permissions-grid.component.js +5 -5
- package/dist/lib/grid/entity-permissions-grid.component.js.map +1 -1
- package/dist/lib/module.d.ts +5 -10
- package/dist/lib/module.d.ts.map +1 -1
- package/dist/lib/module.js +9 -28
- package/dist/lib/module.js.map +1 -1
- package/package.json +8 -13
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Component, Output, EventEmitter, Input } from '@angular/core';
|
|
2
2
|
import { Metadata } from '@memberjunction/core';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@
|
|
5
|
-
import * as i2 from "
|
|
4
|
+
import * as i1 from "@angular/forms";
|
|
5
|
+
import * as i2 from "@memberjunction/ng-ui-components";
|
|
6
|
+
import * as i3 from "../grid/entity-permissions-grid.component";
|
|
6
7
|
function EntityPermissionsSelectorWithGridComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
7
8
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
8
9
|
i0.ɵɵelementStart(0, "mj-entity-permissions-grid", 2);
|
|
@@ -30,23 +31,23 @@ export class EntityPermissionsSelectorWithGridComponent {
|
|
|
30
31
|
this.PermissionChanged.emit(event);
|
|
31
32
|
}
|
|
32
33
|
static ɵfac = function EntityPermissionsSelectorWithGridComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || EntityPermissionsSelectorWithGridComponent)(); };
|
|
33
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntityPermissionsSelectorWithGridComponent, selectors: [["mj-entity-permissions-selector-with-grid"]], inputs: { EntityName: "EntityName", BottomMargin: "BottomMargin", CurrentEntity: "CurrentEntity" }, outputs: { PermissionChanged: "PermissionChanged" }, standalone: false, decls: 3, vars: 3, consts: [["
|
|
34
|
-
i0.ɵɵelementStart(0, "div")(1, "
|
|
35
|
-
i0.ɵɵtwoWayListener("
|
|
34
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntityPermissionsSelectorWithGridComponent, selectors: [["mj-entity-permissions-selector-with-grid"]], inputs: { EntityName: "EntityName", BottomMargin: "BottomMargin", CurrentEntity: "CurrentEntity" }, outputs: { PermissionChanged: "PermissionChanged" }, standalone: false, decls: 3, vars: 3, consts: [["TextField", "Name", "ValueField", "Name", "Placeholder", "Select an entity...", 1, "entity-selector", 3, "ngModelChange", "Data", "ngModel"], [1, "inner-grid", 3, "EntityName"], [1, "inner-grid", 3, "PermissionChanged", "EntityName"]], template: function EntityPermissionsSelectorWithGridComponent_Template(rf, ctx) { if (rf & 1) {
|
|
35
|
+
i0.ɵɵelementStart(0, "div")(1, "mj-dropdown", 0);
|
|
36
|
+
i0.ɵɵtwoWayListener("ngModelChange", function EntityPermissionsSelectorWithGridComponent_Template_mj_dropdown_ngModelChange_1_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.CurrentEntity, $event) || (ctx.CurrentEntity = $event); return $event; });
|
|
36
37
|
i0.ɵɵelementEnd();
|
|
37
38
|
i0.ɵɵconditionalCreate(2, EntityPermissionsSelectorWithGridComponent_Conditional_2_Template, 1, 1, "mj-entity-permissions-grid", 1);
|
|
38
39
|
i0.ɵɵelementEnd();
|
|
39
40
|
} if (rf & 2) {
|
|
40
41
|
i0.ɵɵadvance();
|
|
41
|
-
i0.ɵɵproperty("
|
|
42
|
-
i0.ɵɵtwoWayProperty("
|
|
42
|
+
i0.ɵɵproperty("Data", ctx.entityList);
|
|
43
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx.CurrentEntity);
|
|
43
44
|
i0.ɵɵadvance();
|
|
44
45
|
i0.ɵɵconditional(ctx.CurrentEntity ? 2 : -1);
|
|
45
|
-
} }, dependencies: [i1.
|
|
46
|
+
} }, dependencies: [i1.NgControlStatus, i1.NgModel, i2.MJDropdownComponent, i3.EntityPermissionsGridComponent], styles: [".entity-selector[_ngcontent-%COMP%] {\n min-width: 200px;\n max-width: 500px;\n}"] });
|
|
46
47
|
}
|
|
47
48
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EntityPermissionsSelectorWithGridComponent, [{
|
|
48
49
|
type: Component,
|
|
49
|
-
args: [{ standalone: false, selector: 'mj-entity-permissions-selector-with-grid', template: "<div >\n <
|
|
50
|
+
args: [{ standalone: false, selector: 'mj-entity-permissions-selector-with-grid', template: "<div >\n <mj-dropdown\n [Data]=\"entityList\"\n TextField=\"Name\"\n ValueField=\"Name\"\n Placeholder=\"Select an entity...\"\n class=\"entity-selector\"\n [(ngModel)]=\"CurrentEntity\"\n >\n </mj-dropdown>\n @if (CurrentEntity) {\n <mj-entity-permissions-grid class=\"inner-grid\" [EntityName]=\"CurrentEntity.Name\" (PermissionChanged)=\"handlePermissionChanged($event)\"></mj-entity-permissions-grid>\n }\n</div>\n", styles: [".entity-selector {\n min-width: 200px;\n max-width: 500px;\n}"] }]
|
|
50
51
|
}], null, { EntityName: [{
|
|
51
52
|
type: Input
|
|
52
53
|
}], BottomMargin: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-selector-with-grid.component.js","sourceRoot":"","sources":["../../../src/lib/entity-selector-with-grid/entity-selector-with-grid.component.ts","../../../src/lib/entity-selector-with-grid/entity-selector-with-grid.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAU,KAAK,EAAE,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAc,QAAQ,EAAE,MAAM,sBAAsB,CAAC
|
|
1
|
+
{"version":3,"file":"entity-selector-with-grid.component.js","sourceRoot":"","sources":["../../../src/lib/entity-selector-with-grid/entity-selector-with-grid.component.ts","../../../src/lib/entity-selector-with-grid/entity-selector-with-grid.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAU,KAAK,EAAE,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAc,QAAQ,EAAE,MAAM,sBAAsB,CAAC;;;;;;;ICSxD,qDAAuI;IAAtD,gQAAqB,sCAA+B,KAAC;IAAC,iBAA6B;;;IAArH,sDAAiC;;ADEpF,MAAM,OAAO,0CAA0C;IAC5C,UAAU,CAAU;IACpB,YAAY,GAAW,CAAC,CAAC;IAExB,iBAAiB,GAAG,IAAI,YAAY,EAAgC,CAAC;IAEtE,aAAa,CAAyB;IAEvC,GAAG,CAAuB;IAC3B,UAAU,GAAiB,EAAE,CAAC;IAC9B,QAAQ;QACb,IAAI,CAAC,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjF,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC;YAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAEM,uBAAuB,CAAC,KAAmC;QAChE,iDAAiD;QACjD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CACzB,KAAK,CACN,CAAC;IACJ,CAAC;oIAtBU,0CAA0C;6DAA1C,0CAA0C;YCZrD,AADF,2BAAM,qBAQD;YADD,oPAA2B;YAE7B,iBAAc;YACd,mIAAqB;YAGvB,iBAAM;;YAXF,cAAmB;YAAnB,qCAAmB;YAKnB,iDAA2B;YAG7B,cAEC;YAFD,4CAEC;;;iFDCU,0CAA0C;cANtD,SAAS;6BACI,KAAK,YACP,0CAA0C;;kBAKnD,KAAK;;kBACL,KAAK;;kBAEL,MAAM;;kBAEN,KAAK;;kFANK,0CAA0C","sourcesContent":["import { Component, Output, EventEmitter, OnInit, Input } from '@angular/core';\n\nimport { EntityInfo, Metadata } from '@memberjunction/core';\nimport { EntityPermissionChangedEvent } from '../grid/entity-permissions-grid.component';\n\n \n \n@Component({\n standalone: false,\n selector: 'mj-entity-permissions-selector-with-grid',\n templateUrl: './entity-selector-with-grid.component.html',\n styleUrls: ['./entity-selector-with-grid.component.css']\n})\nexport class EntityPermissionsSelectorWithGridComponent implements OnInit {\n @Input() EntityName!: string;\n @Input() BottomMargin: number = 0;\n\n @Output() PermissionChanged = new EventEmitter<EntityPermissionChangedEvent>();\n\n @Input() CurrentEntity: EntityInfo | undefined;\n\n private _md: Metadata | undefined;\n public entityList: EntityInfo[] = [];\n public ngOnInit(): void {\n this._md = new Metadata();\n this.entityList = this._md.Entities.sort((a, b) => a.Name.localeCompare(b.Name));\n if (this.entityList?.length > 0)\n this.CurrentEntity = this.entityList[0];\n }\n\n public handlePermissionChanged(event: EntityPermissionChangedEvent) {\n // bubble up the event to our container component\n this.PermissionChanged.emit(\n event\n );\n }\n}\n","<div >\n <mj-dropdown\n [Data]=\"entityList\"\n TextField=\"Name\"\n ValueField=\"Name\"\n Placeholder=\"Select an entity...\"\n class=\"entity-selector\"\n [(ngModel)]=\"CurrentEntity\"\n >\n </mj-dropdown>\n @if (CurrentEntity) {\n <mj-entity-permissions-grid class=\"inner-grid\" [EntityName]=\"CurrentEntity.Name\" (PermissionChanged)=\"handlePermissionChanged($event)\"></mj-entity-permissions-grid>\n }\n</div>\n"]}
|
|
@@ -4,8 +4,8 @@ import { UUIDsEqual } from '@memberjunction/global';
|
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@angular/common";
|
|
6
6
|
import * as i2 from "@angular/forms";
|
|
7
|
-
import * as i3 from "@
|
|
8
|
-
import * as i4 from "@memberjunction/ng-
|
|
7
|
+
import * as i3 from "@memberjunction/ng-shared-generic";
|
|
8
|
+
import * as i4 from "@memberjunction/ng-ui-components";
|
|
9
9
|
function EntityPermissionsGridComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
10
10
|
i0.ɵɵelementStart(0, "div");
|
|
11
11
|
i0.ɵɵelement(1, "mj-loading", 2);
|
|
@@ -375,7 +375,7 @@ export class EntityPermissionsGridComponent {
|
|
|
375
375
|
event.stopPropagation();
|
|
376
376
|
}
|
|
377
377
|
static ɵfac = function EntityPermissionsGridComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || EntityPermissionsGridComponent)(); };
|
|
378
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntityPermissionsGridComponent, selectors: [["mj-entity-permissions-grid"]], inputs: { Mode: "Mode", EntityName: "EntityName", RoleName: "RoleName", BottomMargin: "BottomMargin" }, outputs: { PermissionChanged: "PermissionChanged" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 7, vars: 4, consts: [["
|
|
378
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntityPermissionsGridComponent, selectors: [["mj-entity-permissions-grid"]], inputs: { Mode: "Mode", EntityName: "EntityName", RoleName: "RoleName", BottomMargin: "BottomMargin" }, outputs: { PermissionChanged: "PermissionChanged" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 7, vars: 4, consts: [["mjButton", "", 3, "click", "disabled"], [1, "grid"], ["size", "medium", 3, "showText"], [3, "click"], [3, "ngClass"], [1, "permission-left-col", 3, "click"], [1, "fa-solid", "fa-arrow-rotate-left"], ["type", "checkbox", 3, "ngModelChange", "click", "ngModel"], [1, "fa-solid", "fa-arrow-rotate-left", 3, "click"]], template: function EntityPermissionsGridComponent_Template(rf, ctx) { if (rf & 1) {
|
|
379
379
|
i0.ɵɵelementStart(0, "div");
|
|
380
380
|
i0.ɵɵconditionalCreate(1, EntityPermissionsGridComponent_Conditional_1_Template, 2, 1, "div");
|
|
381
381
|
i0.ɵɵelementStart(2, "button", 0);
|
|
@@ -397,11 +397,11 @@ export class EntityPermissionsGridComponent {
|
|
|
397
397
|
i0.ɵɵproperty("disabled", ctx.NumDirtyPermissions === 0);
|
|
398
398
|
i0.ɵɵadvance(2);
|
|
399
399
|
i0.ɵɵconditional(!ctx.isLoading ? 6 : -1);
|
|
400
|
-
} }, dependencies: [i1.NgClass, i2.CheckboxControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.
|
|
400
|
+
} }, dependencies: [i1.NgClass, i2.CheckboxControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.LoadingComponent, i4.MJButtonDirective], styles: ["\n\ntable[_ngcontent-%COMP%] {\n margin-left: 5px;\n margin-top: 5px;\n border-collapse: collapse; \n\n}\n\nbutton[_ngcontent-%COMP%] {\n margin-left: 5px;\n margin-top: 5px;\n width: 125px;\n}\n \ntable[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface-sunken); \n\n color: var(--mj-text-primary); \n\n font-weight: bold; \n\n cursor: pointer;\n}\n\n.permission-left-col[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n\n\ntable[_ngcontent-%COMP%] th[_ngcontent-%COMP%], table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default); \n\n height: 36px; \n\n text-align: center;\n padding: 0 8px; \n\n}\n\n\n\ntable[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:first-child, table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]:first-child {\n min-width: 150px; \n\n text-align: left;\n}\n\n\n\ntable[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:not(:first-child), table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]:not(:first-child) {\n width: 100px; \n\n}\n\n\n\ntable[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:nth-child(odd) {\n background-color: var(--mj-bg-surface); \n\n}\n\ntable[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:nth-child(even) {\n background-color: var(--mj-brand-primary-subtle); \n\n}\n\ntable[_ngcontent-%COMP%] tr.dirty-row[_ngcontent-%COMP%] {\n font-style: italic;\n background-color: var(--mj-status-error-subtle);\n}"] });
|
|
401
401
|
}
|
|
402
402
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EntityPermissionsGridComponent, [{
|
|
403
403
|
type: Component,
|
|
404
|
-
args: [{ standalone: false, selector: 'mj-entity-permissions-grid', template: "<div>\n @if (isLoading) {\n <div><mj-loading [showText]=\"false\" size=\"medium\"></mj-loading></div>\n }\n <button [disabled]=\"NumDirtyPermissions === 0\"
|
|
404
|
+
args: [{ standalone: false, selector: 'mj-entity-permissions-grid', template: "<div>\n @if (isLoading) {\n <div><mj-loading [showText]=\"false\" size=\"medium\"></mj-loading></div>\n }\n <button [disabled]=\"NumDirtyPermissions === 0\" mjButton (click)=\"savePermissions()\">Save</button>\n <button [disabled]=\"NumDirtyPermissions === 0\" mjButton (click)=\"cancelEdit()\">Cancel</button>\n @if (!isLoading) {\n <table class=\"grid\">\n <thead>\n <tr>\n @if (this.Mode==='Entity') {\n <th>Role</th>\n }\n @if (this.Mode==='Role') {\n <th>Entity</th>\n }\n <th (click)=\"flipAllPermissions('Read')\">Read</th>\n <th (click)=\"flipAllPermissions('Create')\">Create</th>\n <th (click)=\"flipAllPermissions('Update')\">Update</th>\n <th (click)=\"flipAllPermissions('Delete')\">Delete</th>\n </tr>\n </thead>\n <tbody>\n @for (permission of permissions; track permission) {\n <tr [ngClass]=\"IsPermissionReallyDirty(permission) ? 'dirty-row' : ''\">\n <td class=\"permission-left-col\" (click)=\"flipRow(permission)\">\n @if(this.Mode === 'Entity') {\n <span>\n {{ getRoleName(permission.RoleID) }}\n </span>\n }\n @else if(this.Mode === 'Role') {\n <span>\n {{ permission.Entity }}\n </span>\n }\n @if(IsPermissionReallyDirty(permission)) {\n <span class=\"fa-solid fa-arrow-rotate-left\" (click)=\"revertRow($event, permission)\"></span>\n }\n </td>\n <td (click)=\"flipPermission($event, permission, 'Read', true)\">\n <input type=\"checkbox\" [(ngModel)]=\"permission.CanRead\" (click)=\"flipPermission($event, permission, 'Read', false)\">\n </td>\n <td (click)=\"flipPermission($event, permission, 'Create', true)\">\n <input type=\"checkbox\" [(ngModel)]=\"permission.CanCreate\" (click)=\"flipPermission($event, permission, 'Create', false)\">\n </td>\n <td (click)=\"flipPermission($event, permission, 'Update', true)\">\n <input type=\"checkbox\" [(ngModel)]=\"permission.CanUpdate\" (click)=\"flipPermission($event, permission, 'Update', false)\">\n </td>\n <td (click)=\"flipPermission($event, permission, 'Delete', true)\">\n <input type=\"checkbox\" [(ngModel)]=\"permission.CanDelete\" (click)=\"flipPermission($event, permission, 'Delete', false)\">\n </td>\n </tr>\n }\n </tbody>\n </table>\n}\n</div>\n", styles: ["/* Style for the whole table */\ntable {\n margin-left: 5px;\n margin-top: 5px;\n border-collapse: collapse; /* Ensures border collapse for a cleaner look */\n}\n\nbutton {\n margin-left: 5px;\n margin-top: 5px;\n width: 125px;\n}\n \ntable th {\n background-color: var(--mj-bg-surface-sunken); /* Light gray background for headers */\n color: var(--mj-text-primary); /* Text color for headers */\n font-weight: bold; /* Bold font weight for headers */\n cursor: pointer;\n}\n\n.permission-left-col {\n cursor: pointer;\n}\n\n/* Style for all table cells */\ntable th, table td {\n border: 1px solid var(--mj-border-default); /* Gray border for cells */\n height: 36px; /* Fixed height for all rows */\n text-align: center;\n padding: 0 8px; /* Add some padding inside cells */\n}\n\n/* Specific styles for the first column */\ntable th:first-child, table td:first-child {\n min-width: 150px; /* Set width for the first column */\n text-align: left;\n}\n\n/* Specific styles for the \"Can\" columns */\ntable th:not(:first-child), table td:not(:first-child) {\n width: 100px; /* Set width for \"Can\" columns */\n}\n\n/* Alternating row background colors */\ntable tr:nth-child(odd) {\n background-color: var(--mj-bg-surface); /* Light color for odd rows */\n}\n\ntable tr:nth-child(even) {\n background-color: var(--mj-brand-primary-subtle); /* Light blue for even rows */\n}\n\ntable tr.dirty-row {\n font-style: italic;\n background-color: var(--mj-status-error-subtle);\n}\n\n"] }]
|
|
405
405
|
}], () => [], { Mode: [{
|
|
406
406
|
type: Input
|
|
407
407
|
}], EntityName: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-permissions-grid.component.js","sourceRoot":"","sources":["../../../src/lib/grid/entity-permissions-grid.component.ts","../../../src/lib/grid/entity-permissions-grid.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Output, EventEmitter, OnInit, Input, SimpleChanges, OnChanges } from '@angular/core';\n\nimport { Metadata, RunView } from '@memberjunction/core';\nimport { MJEntityPermissionEntity } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n\nexport type EntityPermissionChangedEvent = {\n EntityName: string,\n RoleID: string\n PermissionTypeChanged: 'Read' | 'Create' | 'Update' | 'Delete'\n Value: boolean\n Cancel: boolean\n}\n \n@Component({\n standalone: false,\n selector: 'mj-entity-permissions-grid',\n templateUrl: './entity-permissions-grid.component.html',\n styleUrls: ['./entity-permissions-grid.component.css']\n})\nexport class EntityPermissionsGridComponent implements OnInit, OnChanges {\n @Input() Mode: 'Entity' | 'Role' = 'Entity';\n @Input() EntityName!: string; // used when Mode is 'Entity'\n @Input() RoleName!: string; // used when Mode is 'Role'\n @Input() BottomMargin: number = 0;\n\n @Output() PermissionChanged = new EventEmitter<EntityPermissionChangedEvent>();\n\n public permissions: MJEntityPermissionEntity[] = [];\n public gridHeight: number = 750;\n public isLoading: boolean = false;\n\n constructor() { \n } \n\n ngOnInit(): void {\n this.Refresh()\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.EntityName && !changes.EntityName.isFirstChange()) {\n // If EntityName has changed and it's not the first change (initialization)\n this.Refresh();\n }\n }\n\n ValidateInputs() {\n if (this.Mode === 'Entity' && (!this.EntityName || this.EntityName.length === 0))\n throw new Error(\"EntityName is required when Mode is 'Entity'\")\n if (this.Mode === 'Role' && (!this.RoleName || this.RoleName.length === 0))\n throw new Error(\"RoleName is required when Mode is 'Role'\") \n }\n async Refresh() { \n this.ValidateInputs();\n const startTime = new Date().getTime();\n this.isLoading = true\n\n const md = new Metadata();\n const entity = md.Entities.find(e => e.Name === this.EntityName);\n if (this.Mode === 'Entity' && !entity)\n throw new Error(\"Entity not found: \" + this.EntityName)\n\n const r = md.Roles.find(r => r.Name === this.RoleName);\n if (this.Mode === 'Role' && !r)\n throw new Error(\"Role not found: \" + this.RoleName)\n\n const rv = new RunView();\n const filter: string = this.Mode === 'Entity' ? `EntityID='${entity!.ID}'` : `RoleName='${r?.Name}'`;\n const result = await rv.RunView({\n EntityName: 'MJ: Entity Permissions',\n ExtraFilter: filter,\n OrderBy: 'RoleName ASC, Entity ASC',\n ResultType: 'entity_object'\n })\n if (result.Success) {\n // we have all of the saved permissions now\n // 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 \n // new permission records for them. We won't actually consider those \"Dirty\" and save those unless the user actually selects one or more\n // to turn on, we are just doing this to make the grid easy to manage from the user perspective.\n const existingPermissions = <MJEntityPermissionEntity[]>result.Results;\n const roles = md.Roles;\n\n if (this.Mode === 'Entity') {\n const rolesWithNoPermissions = roles.filter(r => !existingPermissions.some(p => UUIDsEqual(p.RoleID, r.ID)));\n for (const r of rolesWithNoPermissions) {\n const p = await md.GetEntityObject<MJEntityPermissionEntity>('MJ: Entity Permissions')\n \n await p.LoadFromData({\n ID: null,\n Entity: entity!.Name,\n EntityID: entity!.ID,\n RoleID: r!.ID,\n CanRead: false,\n CanCreate: false,\n CanUpdate: false,\n CanDelete: false\n });\n existingPermissions.push(p);\n }\n this.permissions = existingPermissions;\n }\n else if (this.Mode === 'Role') {\n // for the mode of Role, that means we want to show all entities and their permissions for the given role\n const entitiesWithNoPermissions = md.Entities.filter(e => !existingPermissions.some(p => UUIDsEqual(p.EntityID, e.ID)));\n for (const e of entitiesWithNoPermissions) {\n const p = await md.GetEntityObject<MJEntityPermissionEntity>('MJ: Entity Permissions')\n \n await p.LoadFromData({\n ID: null,\n Entity: e.Name,\n EntityID: e.ID,\n RoleName: r!.Name,\n CanRead: false,\n CanCreate: false,\n CanUpdate: false,\n CanDelete: false\n });\n existingPermissions.push(p);\n }\n this.permissions = existingPermissions.sort((a, b) => a.Entity!.localeCompare(b.Entity!)); \n }\n }\n else {\n throw new Error(\"Error loading entity permissions: \" + result.ErrorMessage)\n }\n this.isLoading = false\n }\n \n\n public getRoleName(roleID: string): string {\n const md = new Metadata();\n const r = md.Roles.find(r => UUIDsEqual(r.ID, roleID));\n return r ? r.Name : '';\n }\n \n public async savePermissions() {\n if (this.NumDirtyPermissions > 0) {\n // iterate through each permisison and for the ones that are dirty, add to transaction group then commit at once\n const md = new Metadata();\n const tg = await md.CreateTransactionGroup();\n let itemCount: number = 0;\n for (const p of this.permissions) {\n if (this.IsPermissionReallyDirty(p)) {\n p.TransactionGroup = tg;\n itemCount++;\n await p.Save(); \n }\n }\n if (itemCount > 0)\n await tg.Submit();\n }\n }\n\n public async cancelEdit() {\n if (this.NumDirtyPermissions > 0) {\n // go through and revert each permission that is REALLY dirty\n this.permissions.forEach(p => {\n if (this.IsPermissionReallyDirty(p)) {\n p.Revert();\n }\n })\n }\n }\n\n public get NumDirtyPermissions(): number {\n return this.permissions.filter(p => this.IsPermissionReallyDirty(p)).length;\n }\n\n protected IsPermissionReallyDirty(p: MJEntityPermissionEntity): boolean {\n if (!p.Dirty)\n return false;\n else if (p.IsSaved)\n return true;\n else\n return p.CanRead || p.CanCreate || p.CanUpdate || p.CanDelete; // if we have a new record, only consider it dirty if at least one permission is true\n }\n\n public flipAllPermissions(type: 'Read' | 'Create' | 'Update' | 'Delete') {\n // 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\n let onCount = 0;\n let offCount = 0;\n this.permissions.forEach(p => {\n if (type === 'Read') {\n if (p.CanRead)\n onCount++;\n else\n offCount++;\n }\n else if (type === 'Create') {\n if (p.CanCreate)\n onCount++;\n else\n offCount++;\n }\n else if (type === 'Update') {\n if (p.CanUpdate)\n onCount++;\n else\n offCount++;\n }\n else if (type === 'Delete') {\n if (p.CanDelete)\n onCount++;\n else\n offCount++;\n }\n })\n const value = offCount > onCount;\n\n // now set the permission for each permission record\n for (const p of this.permissions) {\n switch (type) {\n case 'Read':\n p.CanRead = value;\n break;\n case 'Create':\n p.CanCreate = value;\n break;\n case 'Update':\n p.CanUpdate = value;\n break;\n case 'Delete':\n p.CanDelete = value;\n break;\n }\n this.flipPermission(undefined, p, type, false); // call this function but tell it to NOT actually flip the permission, just to fire the event\n }\n }\n\n public revertRow(event: MouseEvent, permission: MJEntityPermissionEntity) {\n if (this.IsPermissionReallyDirty(permission)) {\n permission.Revert();\n event.stopPropagation(); // don't bubble up to the parent row because that will do something else...\n }\n }\n\n public flipRow(permission: MJEntityPermissionEntity) {\n // if 2 or more are on, flip all to off, otherwise flip all to on\n const onCount = (permission.CanRead ? 1 : 0) + (permission.CanCreate ? 1 : 0) + (permission.CanUpdate ? 1 : 0) + (permission.CanDelete ? 1 : 0);\n const newValue = onCount < 2;\n\n if (permission.CanRead !== newValue) {\n permission.CanRead = newValue;\n this.flipPermission(undefined, permission, 'Read', false); // fire the event but don't actually flip the permission\n }\n\n if (permission.CanCreate !== newValue) {\n permission.CanCreate = newValue;\n this.flipPermission(undefined, permission, 'Create', false); // fire the event but don't actually flip the permission\n }\n\n if (permission.CanUpdate !== newValue) {\n permission.CanUpdate = newValue;\n this.flipPermission(undefined, permission, 'Update', false); // fire the event but don't actually flip the permission\n }\n\n if (permission.CanDelete !== newValue) {\n permission.CanDelete = newValue;\n this.flipPermission(undefined, permission, 'Delete', false); // fire the event but don't actually flip the permission\n }\n }\n\n public flipPermission(event: MouseEvent | undefined, permission: MJEntityPermissionEntity, type: 'Read' | 'Create' | 'Update' | 'Delete', flipPermission: boolean) {\n if (flipPermission) {\n switch (type) {\n case 'Read':\n permission.CanRead = !permission.CanRead;\n break;\n case 'Create':\n permission.CanCreate = !permission.CanCreate;\n break;\n case 'Update':\n permission.CanUpdate = !permission.CanUpdate;\n break;\n case 'Delete':\n permission.CanDelete = !permission.CanDelete;\n break;\n }\n }\n // always fire the event\n const value = type === 'Read' ? permission.CanRead : type === 'Create' ? permission.CanCreate : type === 'Update' ? permission.CanUpdate : permission.CanDelete;\n this.PermissionChanged.emit({\n EntityName: this.EntityName,\n RoleID: permission.RoleID!,\n PermissionTypeChanged: type,\n Value: value,\n Cancel: false\n })\n\n if (!flipPermission && event)\n event.stopPropagation();\n }\n}\n","<div>\n @if (isLoading) {\n <div><mj-loading [showText]=\"false\" size=\"medium\"></mj-loading></div>\n }\n <button [disabled]=\"NumDirtyPermissions === 0\" kendoButton (click)=\"savePermissions()\">Save</button>\n <button [disabled]=\"NumDirtyPermissions === 0\" kendoButton (click)=\"cancelEdit()\">Cancel</button>\n @if (!isLoading) {\n <table class=\"grid\">\n <thead>\n <tr>\n @if (this.Mode==='Entity') {\n <th>Role</th>\n }\n @if (this.Mode==='Role') {\n <th>Entity</th>\n }\n <th (click)=\"flipAllPermissions('Read')\">Read</th>\n <th (click)=\"flipAllPermissions('Create')\">Create</th>\n <th (click)=\"flipAllPermissions('Update')\">Update</th>\n <th (click)=\"flipAllPermissions('Delete')\">Delete</th>\n </tr>\n </thead>\n <tbody>\n @for (permission of permissions; track permission) {\n <tr [ngClass]=\"IsPermissionReallyDirty(permission) ? 'dirty-row' : ''\">\n <td class=\"permission-left-col\" (click)=\"flipRow(permission)\">\n @if(this.Mode === 'Entity') {\n <span>\n {{ getRoleName(permission.RoleID) }}\n </span>\n }\n @else if(this.Mode === 'Role') {\n <span>\n {{ permission.Entity }}\n </span>\n }\n @if(IsPermissionReallyDirty(permission)) {\n <span class=\"fa-solid fa-arrow-rotate-left\" (click)=\"revertRow($event, permission)\"></span>\n }\n </td>\n <td (click)=\"flipPermission($event, permission, 'Read', true)\">\n <input type=\"checkbox\" kendoCheckBox [(ngModel)]=\"permission.CanRead\" (click)=\"flipPermission($event, permission, 'Read', false)\">\n </td>\n <td (click)=\"flipPermission($event, permission, 'Create', true)\">\n <input type=\"checkbox\" kendoCheckBox [(ngModel)]=\"permission.CanCreate\" (click)=\"flipPermission($event, permission, 'Create', false)\">\n </td>\n <td (click)=\"flipPermission($event, permission, 'Update', true)\">\n <input type=\"checkbox\" kendoCheckBox [(ngModel)]=\"permission.CanUpdate\" (click)=\"flipPermission($event, permission, 'Update', false)\">\n </td>\n <td (click)=\"flipPermission($event, permission, 'Delete', true)\">\n <input type=\"checkbox\" kendoCheckBox [(ngModel)]=\"permission.CanDelete\" (click)=\"flipPermission($event, permission, 'Delete', false)\">\n </td>\n </tr>\n }\n </tbody>\n </table>\n}\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"entity-permissions-grid.component.js","sourceRoot":"","sources":["../../../src/lib/grid/entity-permissions-grid.component.ts","../../../src/lib/grid/entity-permissions-grid.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAU,KAAK,EAA4B,MAAM,eAAe,CAAC;AAEzG,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;;;;;;;ICFhD,2BAAK;IAAA,gCAA0D;IAAA,iBAAM;;IAApD,cAAkB;IAAlB,gCAAkB;;;IAS3B,0BAAI;IAAA,oBAAI;IAAA,iBAAK;;;IAGb,0BAAI;IAAA,sBAAM;IAAA,iBAAK;;;IAaX,4BAAM;IACJ,YACF;IAAA,iBAAO;;;;IADL,cACF;IADE,yEACF;;;IAGF,4BAAM;IACJ,YACF;IAAA,iBAAO;;;IADL,cACF;IADE,qDACF;;;;IAGA,+BAAoF;IAAxC,gRAAS,uCAA6B,KAAC;IAAC,iBAAO;;;;IAZ7F,AADF,6BAAuE,YACP;IAA9B,sOAAS,6BAAmB,KAAC;IAM3D,AALA,mHAA6B,6FAKG;IAKlC,sHAA0C;IAG5C,iBAAK;IACL,6BAA+D;IAA3D,4OAAS,6CAAmC,MAAM,EAAE,IAAI,CAAC,KAAC;IAC5D,gCAAoH;IAA7F,sUAAgC;IAAC,+OAAS,6CAAmC,MAAM,EAAE,KAAK,CAAC,KAAC;IACrH,AADE,iBAAoH,EACjH;IACL,6BAAiE;IAA7D,4OAAS,6CAAmC,QAAQ,EAAE,IAAI,CAAC,KAAC;IAC9D,gCAAwH;IAAjG,0UAAkC;IAAC,+OAAS,6CAAmC,QAAQ,EAAE,KAAK,CAAC,KAAC;IACzH,AADE,iBAAwH,EACrH;IACL,6BAAiE;IAA7D,4OAAS,6CAAmC,QAAQ,EAAE,IAAI,CAAC,KAAC;IAC9D,iCAAwH;IAAjG,2UAAkC;IAAC,gPAAS,6CAAmC,QAAQ,EAAE,KAAK,CAAC,KAAC;IACzH,AADE,iBAAwH,EACrH;IACL,8BAAiE;IAA7D,6OAAS,6CAAmC,QAAQ,EAAE,IAAI,CAAC,KAAC;IAC9D,iCAAwH;IAAjG,2UAAkC;IAAC,gPAAS,6CAAmC,QAAQ,EAAE,KAAK,CAAC,KAAC;IAE3H,AADE,AADE,iBAAwH,EACrH,EACF;;;;IA5BC,0FAAkE;IAElE,eASD;IATC,gFASD;IACD,eAEC;IAFD,wEAEC;IAGsB,eAAgC;IAAhC,qDAAgC;IAGhC,eAAkC;IAAlC,uDAAkC;IAGlC,eAAkC;IAAlC,uDAAkC;IAGlC,eAAkC;IAAlC,uDAAkC;;;;IAzC7D,AADF,AADF,gCAAoB,YACX,SACD;IACF,0GAA4B;IAG5B,0GAA0B;IAG1B,6BAAyC;IAArC,8LAAS,0BAAmB,MAAM,CAAC,KAAC;IAAC,oBAAI;IAAA,iBAAK;IAClD,6BAA2C;IAAvC,8LAAS,0BAAmB,QAAQ,CAAC,KAAC;IAAC,sBAAM;IAAA,iBAAK;IACtD,6BAA2C;IAAvC,8LAAS,0BAAmB,QAAQ,CAAC,KAAC;IAAC,uBAAM;IAAA,iBAAK;IACtD,8BAA2C;IAAvC,+LAAS,0BAAmB,QAAQ,CAAC,KAAC;IAAC,uBAAM;IAErD,AADE,AADmD,iBAAK,EACnD,EACC;IACR,8BAAO;IACL,mIA8BD;IAEL,AADE,iBAAQ,EACF;;;IA7CA,eAEC;IAFD,mDAEC;IACD,cAEC;IAFD,iDAEC;IAQH,gBA8BD;IA9BC,iCA8BD;;ADhCP,MAAM,OAAO,8BAA8B;IAChC,IAAI,GAAsB,QAAQ,CAAC;IACnC,UAAU,CAAU,CAAC,6BAA6B;IAClD,QAAQ,CAAU,CAAC,2BAA2B;IAC9C,YAAY,GAAW,CAAC,CAAC;IAExB,iBAAiB,GAAG,IAAI,YAAY,EAAgC,CAAC;IAExE,WAAW,GAA+B,EAAE,CAAC;IAC7C,UAAU,GAAW,GAAG,CAAC;IACzB,SAAS,GAAY,KAAK,CAAC;IAElC;IACA,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC;IAED,WAAW,CAAC,OAAsB;QAChC,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC;YAC9D,2EAA2E;YAC3E,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED,cAAc;QACZ,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC;YAC9E,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;QACjE,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC/D,CAAC;IACD,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QAErB,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM;YACnC,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA;QAEzD,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;QAErD,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,MAAM,GAAW,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,MAAO,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,IAAI,GAAG,CAAC;QACrG,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC;YAC9B,UAAU,EAAE,wBAAwB;YACpC,WAAW,EAAE,MAAM;YACnB,OAAO,EAAE,0BAA0B;YACnC,UAAU,EAAE,eAAe;SAC5B,CAAC,CAAA;QACF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,2CAA2C;YAC3C,6IAA6I;YAC7I,wIAAwI;YACxI,gGAAgG;YAChG,MAAM,mBAAmB,GAA+B,MAAM,CAAC,OAAO,CAAC;YACvE,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;YAEvB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,MAAM,sBAAsB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7G,KAAK,MAAM,CAAC,IAAI,sBAAsB,EAAE,CAAC;oBACvC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,eAAe,CAA2B,wBAAwB,CAAC,CAAA;oBAEtF,MAAM,CAAC,CAAC,YAAY,CAAC;wBACnB,EAAE,EAAE,IAAI;wBACR,MAAM,EAAE,MAAO,CAAC,IAAI;wBACpB,QAAQ,EAAE,MAAO,CAAC,EAAE;wBACpB,MAAM,EAAE,CAAE,CAAC,EAAE;wBACb,OAAO,EAAE,KAAK;wBACd,SAAS,EAAE,KAAK;wBAChB,SAAS,EAAE,KAAK;wBAChB,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;oBACH,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC9B,CAAC;gBACD,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC;YACzC,CAAC;iBACI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC9B,yGAAyG;gBACzG,MAAM,yBAAyB,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxH,KAAK,MAAM,CAAC,IAAI,yBAAyB,EAAE,CAAC;oBAC1C,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,eAAe,CAA2B,wBAAwB,CAAC,CAAA;oBAEtF,MAAM,CAAC,CAAC,YAAY,CAAC;wBACnB,EAAE,EAAE,IAAI;wBACR,MAAM,EAAE,CAAC,CAAC,IAAI;wBACd,QAAQ,EAAE,CAAC,CAAC,EAAE;wBACd,QAAQ,EAAE,CAAE,CAAC,IAAI;wBACjB,OAAO,EAAE,KAAK;wBACd,SAAS,EAAE,KAAK;wBAChB,SAAS,EAAE,KAAK;wBAChB,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;oBACH,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC9B,CAAC;gBACD,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAO,CAAC,aAAa,CAAC,CAAC,CAAC,MAAO,CAAC,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;aACI,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;QAC7E,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;IACxB,CAAC;IAGM,WAAW,CAAC,MAAc;QAC/B,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,eAAe;QAC1B,IAAI,IAAI,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC;YACjC,gHAAgH;YAChH,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,sBAAsB,EAAE,CAAC;YAC7C,IAAI,SAAS,GAAW,CAAC,CAAC;YAC1B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpC,CAAC,CAAC,gBAAgB,GAAG,EAAE,CAAC;oBACxB,SAAS,EAAE,CAAC;oBACZ,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjB,CAAC;YACH,CAAC;YACD,IAAI,SAAS,GAAG,CAAC;gBACf,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,IAAI,IAAI,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC;YACjC,6DAA6D;YAC7D,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAC3B,IAAI,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpC,CAAC,CAAC,MAAM,EAAE,CAAC;gBACb,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,IAAW,mBAAmB;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9E,CAAC;IAES,uBAAuB,CAAC,CAA2B;QAC3D,IAAI,CAAC,CAAC,CAAC,KAAK;YACV,OAAO,KAAK,CAAC;aACV,IAAI,CAAC,CAAC,OAAO;YAChB,OAAO,IAAI,CAAC;;YAEZ,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,qFAAqF;IACxJ,CAAC;IAEM,kBAAkB,CAAC,IAA6C;QACrE,6HAA6H;QAC7H,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAC3B,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,IAAI,CAAC,CAAC,OAAO;oBACX,OAAO,EAAE,CAAC;;oBAEV,QAAQ,EAAE,CAAC;YACf,CAAC;iBACI,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,IAAI,CAAC,CAAC,SAAS;oBACb,OAAO,EAAE,CAAC;;oBAEV,QAAQ,EAAE,CAAC;YACf,CAAC;iBACI,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,IAAI,CAAC,CAAC,SAAS;oBACb,OAAO,EAAE,CAAC;;oBAEV,QAAQ,EAAE,CAAC;YACf,CAAC;iBACI,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,IAAI,CAAC,CAAC,SAAS;oBACb,OAAO,EAAE,CAAC;;oBAEV,QAAQ,EAAE,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAA;QACF,MAAM,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;QAEjC,oDAAoD;QACpD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,MAAM;oBACT,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;oBAClB,MAAM;gBACR,KAAK,QAAQ;oBACX,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;oBACpB,MAAM;gBACR,KAAK,QAAQ;oBACX,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;oBACpB,MAAM;gBACR,KAAK,QAAQ;oBACX,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;oBACpB,MAAM;YACV,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,6FAA6F;QAC/I,CAAC;IACH,CAAC;IAEM,SAAS,CAAC,KAAiB,EAAE,UAAoC;QACtE,IAAI,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7C,UAAU,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,2EAA2E;QACtG,CAAC;IACH,CAAC;IAEM,OAAO,CAAC,UAAoC;QACjD,iEAAiE;QACjE,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChJ,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC;QAE7B,IAAI,UAAU,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACpC,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,wDAAwD;QACrH,CAAC;QAED,IAAI,UAAU,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACtC,UAAU,CAAC,SAAS,GAAG,QAAQ,CAAC;YAChC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,wDAAwD;QACvH,CAAC;QAED,IAAI,UAAU,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACtC,UAAU,CAAC,SAAS,GAAG,QAAQ,CAAC;YAChC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,wDAAwD;QACvH,CAAC;QAED,IAAI,UAAU,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACtC,UAAU,CAAC,SAAS,GAAG,QAAQ,CAAC;YAChC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,wDAAwD;QACvH,CAAC;IACH,CAAC;IAEM,cAAc,CAAC,KAA6B,EAAE,UAAoC,EAAE,IAA6C,EAAE,cAAuB;QAC/J,IAAI,cAAc,EAAE,CAAC;YACnB,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,MAAM;oBACT,UAAU,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;oBACzC,MAAM;gBACR,KAAK,QAAQ;oBACX,UAAU,CAAC,SAAS,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;oBAC7C,MAAM;gBACR,KAAK,QAAQ;oBACX,UAAU,CAAC,SAAS,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;oBAC7C,MAAM;gBACR,KAAK,QAAQ;oBACX,UAAU,CAAC,SAAS,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;oBAC7C,MAAM;YACV,CAAC;QACH,CAAC;QACD,wBAAwB;QACxB,MAAM,KAAK,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC;QAChK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC1B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,UAAU,CAAC,MAAO;YAC1B,qBAAqB,EAAE,IAAI;YAC3B,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,KAAK;SACd,CAAC,CAAA;QAEF,IAAI,CAAC,cAAc,IAAI,KAAK;YAC1B,KAAK,CAAC,eAAe,EAAE,CAAC;IAC5B,CAAC;wHA/QU,8BAA8B;6DAA9B,8BAA8B;YCrB3C,2BAAK;YACH,6FAAiB;YAGjB,iCAAoF;YAA5B,2GAAS,qBAAiB,IAAC;YAAC,oBAAI;YAAA,iBAAS;YACjG,iCAA+E;YAAvB,2GAAS,gBAAY,IAAC;YAAC,sBAAM;YAAA,iBAAS;YAC9F,mGAAkB;YAmDpB,iBAAM;;YAxDJ,cAEC;YAFD,wCAEC;YACO,cAAsC;YAAtC,wDAAsC;YACtC,eAAsC;YAAtC,wDAAsC;YAC9C,eAkDD;YAlDC,yCAkDD;;;iFDnCY,8BAA8B;cAN1C,SAAS;6BACI,KAAK,YACP,4BAA4B;;kBAKrC,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBAEL,MAAM;;kFANI,8BAA8B","sourcesContent":["import { Component, Output, EventEmitter, OnInit, Input, SimpleChanges, OnChanges } from '@angular/core';\n\nimport { Metadata, RunView } from '@memberjunction/core';\nimport { MJEntityPermissionEntity } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n\nexport type EntityPermissionChangedEvent = {\n EntityName: string,\n RoleID: string\n PermissionTypeChanged: 'Read' | 'Create' | 'Update' | 'Delete'\n Value: boolean\n Cancel: boolean\n}\n \n@Component({\n standalone: false,\n selector: 'mj-entity-permissions-grid',\n templateUrl: './entity-permissions-grid.component.html',\n styleUrls: ['./entity-permissions-grid.component.css']\n})\nexport class EntityPermissionsGridComponent implements OnInit, OnChanges {\n @Input() Mode: 'Entity' | 'Role' = 'Entity';\n @Input() EntityName!: string; // used when Mode is 'Entity'\n @Input() RoleName!: string; // used when Mode is 'Role'\n @Input() BottomMargin: number = 0;\n\n @Output() PermissionChanged = new EventEmitter<EntityPermissionChangedEvent>();\n\n public permissions: MJEntityPermissionEntity[] = [];\n public gridHeight: number = 750;\n public isLoading: boolean = false;\n\n constructor() { \n } \n\n ngOnInit(): void {\n this.Refresh()\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.EntityName && !changes.EntityName.isFirstChange()) {\n // If EntityName has changed and it's not the first change (initialization)\n this.Refresh();\n }\n }\n\n ValidateInputs() {\n if (this.Mode === 'Entity' && (!this.EntityName || this.EntityName.length === 0))\n throw new Error(\"EntityName is required when Mode is 'Entity'\")\n if (this.Mode === 'Role' && (!this.RoleName || this.RoleName.length === 0))\n throw new Error(\"RoleName is required when Mode is 'Role'\") \n }\n async Refresh() { \n this.ValidateInputs();\n const startTime = new Date().getTime();\n this.isLoading = true\n\n const md = new Metadata();\n const entity = md.Entities.find(e => e.Name === this.EntityName);\n if (this.Mode === 'Entity' && !entity)\n throw new Error(\"Entity not found: \" + this.EntityName)\n\n const r = md.Roles.find(r => r.Name === this.RoleName);\n if (this.Mode === 'Role' && !r)\n throw new Error(\"Role not found: \" + this.RoleName)\n\n const rv = new RunView();\n const filter: string = this.Mode === 'Entity' ? `EntityID='${entity!.ID}'` : `RoleName='${r?.Name}'`;\n const result = await rv.RunView({\n EntityName: 'MJ: Entity Permissions',\n ExtraFilter: filter,\n OrderBy: 'RoleName ASC, Entity ASC',\n ResultType: 'entity_object'\n })\n if (result.Success) {\n // we have all of the saved permissions now\n // 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 \n // new permission records for them. We won't actually consider those \"Dirty\" and save those unless the user actually selects one or more\n // to turn on, we are just doing this to make the grid easy to manage from the user perspective.\n const existingPermissions = <MJEntityPermissionEntity[]>result.Results;\n const roles = md.Roles;\n\n if (this.Mode === 'Entity') {\n const rolesWithNoPermissions = roles.filter(r => !existingPermissions.some(p => UUIDsEqual(p.RoleID, r.ID)));\n for (const r of rolesWithNoPermissions) {\n const p = await md.GetEntityObject<MJEntityPermissionEntity>('MJ: Entity Permissions')\n \n await p.LoadFromData({\n ID: null,\n Entity: entity!.Name,\n EntityID: entity!.ID,\n RoleID: r!.ID,\n CanRead: false,\n CanCreate: false,\n CanUpdate: false,\n CanDelete: false\n });\n existingPermissions.push(p);\n }\n this.permissions = existingPermissions;\n }\n else if (this.Mode === 'Role') {\n // for the mode of Role, that means we want to show all entities and their permissions for the given role\n const entitiesWithNoPermissions = md.Entities.filter(e => !existingPermissions.some(p => UUIDsEqual(p.EntityID, e.ID)));\n for (const e of entitiesWithNoPermissions) {\n const p = await md.GetEntityObject<MJEntityPermissionEntity>('MJ: Entity Permissions')\n \n await p.LoadFromData({\n ID: null,\n Entity: e.Name,\n EntityID: e.ID,\n RoleName: r!.Name,\n CanRead: false,\n CanCreate: false,\n CanUpdate: false,\n CanDelete: false\n });\n existingPermissions.push(p);\n }\n this.permissions = existingPermissions.sort((a, b) => a.Entity!.localeCompare(b.Entity!)); \n }\n }\n else {\n throw new Error(\"Error loading entity permissions: \" + result.ErrorMessage)\n }\n this.isLoading = false\n }\n \n\n public getRoleName(roleID: string): string {\n const md = new Metadata();\n const r = md.Roles.find(r => UUIDsEqual(r.ID, roleID));\n return r ? r.Name : '';\n }\n \n public async savePermissions() {\n if (this.NumDirtyPermissions > 0) {\n // iterate through each permisison and for the ones that are dirty, add to transaction group then commit at once\n const md = new Metadata();\n const tg = await md.CreateTransactionGroup();\n let itemCount: number = 0;\n for (const p of this.permissions) {\n if (this.IsPermissionReallyDirty(p)) {\n p.TransactionGroup = tg;\n itemCount++;\n await p.Save(); \n }\n }\n if (itemCount > 0)\n await tg.Submit();\n }\n }\n\n public async cancelEdit() {\n if (this.NumDirtyPermissions > 0) {\n // go through and revert each permission that is REALLY dirty\n this.permissions.forEach(p => {\n if (this.IsPermissionReallyDirty(p)) {\n p.Revert();\n }\n })\n }\n }\n\n public get NumDirtyPermissions(): number {\n return this.permissions.filter(p => this.IsPermissionReallyDirty(p)).length;\n }\n\n protected IsPermissionReallyDirty(p: MJEntityPermissionEntity): boolean {\n if (!p.Dirty)\n return false;\n else if (p.IsSaved)\n return true;\n else\n return p.CanRead || p.CanCreate || p.CanUpdate || p.CanDelete; // if we have a new record, only consider it dirty if at least one permission is true\n }\n\n public flipAllPermissions(type: 'Read' | 'Create' | 'Update' | 'Delete') {\n // 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\n let onCount = 0;\n let offCount = 0;\n this.permissions.forEach(p => {\n if (type === 'Read') {\n if (p.CanRead)\n onCount++;\n else\n offCount++;\n }\n else if (type === 'Create') {\n if (p.CanCreate)\n onCount++;\n else\n offCount++;\n }\n else if (type === 'Update') {\n if (p.CanUpdate)\n onCount++;\n else\n offCount++;\n }\n else if (type === 'Delete') {\n if (p.CanDelete)\n onCount++;\n else\n offCount++;\n }\n })\n const value = offCount > onCount;\n\n // now set the permission for each permission record\n for (const p of this.permissions) {\n switch (type) {\n case 'Read':\n p.CanRead = value;\n break;\n case 'Create':\n p.CanCreate = value;\n break;\n case 'Update':\n p.CanUpdate = value;\n break;\n case 'Delete':\n p.CanDelete = value;\n break;\n }\n this.flipPermission(undefined, p, type, false); // call this function but tell it to NOT actually flip the permission, just to fire the event\n }\n }\n\n public revertRow(event: MouseEvent, permission: MJEntityPermissionEntity) {\n if (this.IsPermissionReallyDirty(permission)) {\n permission.Revert();\n event.stopPropagation(); // don't bubble up to the parent row because that will do something else...\n }\n }\n\n public flipRow(permission: MJEntityPermissionEntity) {\n // if 2 or more are on, flip all to off, otherwise flip all to on\n const onCount = (permission.CanRead ? 1 : 0) + (permission.CanCreate ? 1 : 0) + (permission.CanUpdate ? 1 : 0) + (permission.CanDelete ? 1 : 0);\n const newValue = onCount < 2;\n\n if (permission.CanRead !== newValue) {\n permission.CanRead = newValue;\n this.flipPermission(undefined, permission, 'Read', false); // fire the event but don't actually flip the permission\n }\n\n if (permission.CanCreate !== newValue) {\n permission.CanCreate = newValue;\n this.flipPermission(undefined, permission, 'Create', false); // fire the event but don't actually flip the permission\n }\n\n if (permission.CanUpdate !== newValue) {\n permission.CanUpdate = newValue;\n this.flipPermission(undefined, permission, 'Update', false); // fire the event but don't actually flip the permission\n }\n\n if (permission.CanDelete !== newValue) {\n permission.CanDelete = newValue;\n this.flipPermission(undefined, permission, 'Delete', false); // fire the event but don't actually flip the permission\n }\n }\n\n public flipPermission(event: MouseEvent | undefined, permission: MJEntityPermissionEntity, type: 'Read' | 'Create' | 'Update' | 'Delete', flipPermission: boolean) {\n if (flipPermission) {\n switch (type) {\n case 'Read':\n permission.CanRead = !permission.CanRead;\n break;\n case 'Create':\n permission.CanCreate = !permission.CanCreate;\n break;\n case 'Update':\n permission.CanUpdate = !permission.CanUpdate;\n break;\n case 'Delete':\n permission.CanDelete = !permission.CanDelete;\n break;\n }\n }\n // always fire the event\n const value = type === 'Read' ? permission.CanRead : type === 'Create' ? permission.CanCreate : type === 'Update' ? permission.CanUpdate : permission.CanDelete;\n this.PermissionChanged.emit({\n EntityName: this.EntityName,\n RoleID: permission.RoleID!,\n PermissionTypeChanged: type,\n Value: value,\n Cancel: false\n })\n\n if (!flipPermission && event)\n event.stopPropagation();\n }\n}\n","<div>\n @if (isLoading) {\n <div><mj-loading [showText]=\"false\" size=\"medium\"></mj-loading></div>\n }\n <button [disabled]=\"NumDirtyPermissions === 0\" mjButton (click)=\"savePermissions()\">Save</button>\n <button [disabled]=\"NumDirtyPermissions === 0\" mjButton (click)=\"cancelEdit()\">Cancel</button>\n @if (!isLoading) {\n <table class=\"grid\">\n <thead>\n <tr>\n @if (this.Mode==='Entity') {\n <th>Role</th>\n }\n @if (this.Mode==='Role') {\n <th>Entity</th>\n }\n <th (click)=\"flipAllPermissions('Read')\">Read</th>\n <th (click)=\"flipAllPermissions('Create')\">Create</th>\n <th (click)=\"flipAllPermissions('Update')\">Update</th>\n <th (click)=\"flipAllPermissions('Delete')\">Delete</th>\n </tr>\n </thead>\n <tbody>\n @for (permission of permissions; track permission) {\n <tr [ngClass]=\"IsPermissionReallyDirty(permission) ? 'dirty-row' : ''\">\n <td class=\"permission-left-col\" (click)=\"flipRow(permission)\">\n @if(this.Mode === 'Entity') {\n <span>\n {{ getRoleName(permission.RoleID) }}\n </span>\n }\n @else if(this.Mode === 'Role') {\n <span>\n {{ permission.Entity }}\n </span>\n }\n @if(IsPermissionReallyDirty(permission)) {\n <span class=\"fa-solid fa-arrow-rotate-left\" (click)=\"revertRow($event, permission)\"></span>\n }\n </td>\n <td (click)=\"flipPermission($event, permission, 'Read', true)\">\n <input type=\"checkbox\" [(ngModel)]=\"permission.CanRead\" (click)=\"flipPermission($event, permission, 'Read', false)\">\n </td>\n <td (click)=\"flipPermission($event, permission, 'Create', true)\">\n <input type=\"checkbox\" [(ngModel)]=\"permission.CanCreate\" (click)=\"flipPermission($event, permission, 'Create', false)\">\n </td>\n <td (click)=\"flipPermission($event, permission, 'Update', true)\">\n <input type=\"checkbox\" [(ngModel)]=\"permission.CanUpdate\" (click)=\"flipPermission($event, permission, 'Update', false)\">\n </td>\n <td (click)=\"flipPermission($event, permission, 'Delete', true)\">\n <input type=\"checkbox\" [(ngModel)]=\"permission.CanDelete\" (click)=\"flipPermission($event, permission, 'Delete', false)\">\n </td>\n </tr>\n }\n </tbody>\n </table>\n}\n</div>\n"]}
|
package/dist/lib/module.d.ts
CHANGED
|
@@ -2,18 +2,13 @@ import * as i0 from "@angular/core";
|
|
|
2
2
|
import * as i1 from "./grid/entity-permissions-grid.component";
|
|
3
3
|
import * as i2 from "./entity-selector-with-grid/entity-selector-with-grid.component";
|
|
4
4
|
import * as i3 from "@angular/common";
|
|
5
|
-
import * as i4 from "@
|
|
6
|
-
import * as i5 from "@
|
|
7
|
-
import * as i6 from "@
|
|
8
|
-
import * as i7 from "@
|
|
9
|
-
import * as i8 from "@memberjunction/ng-container-directives";
|
|
10
|
-
import * as i9 from "@progress/kendo-angular-buttons";
|
|
11
|
-
import * as i10 from "@progress/kendo-angular-dropdowns";
|
|
12
|
-
import * as i11 from "@progress/kendo-angular-indicators";
|
|
13
|
-
import * as i12 from "@memberjunction/ng-shared-generic";
|
|
5
|
+
import * as i4 from "@angular/forms";
|
|
6
|
+
import * as i5 from "@memberjunction/ng-container-directives";
|
|
7
|
+
import * as i6 from "@memberjunction/ng-shared-generic";
|
|
8
|
+
import * as i7 from "@memberjunction/ng-ui-components";
|
|
14
9
|
export declare class EntityPermissionsModule {
|
|
15
10
|
static ɵfac: i0.ɵɵFactoryDeclaration<EntityPermissionsModule, never>;
|
|
16
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<EntityPermissionsModule, [typeof i1.EntityPermissionsGridComponent, typeof i2.EntityPermissionsSelectorWithGridComponent], [typeof i3.CommonModule, typeof i4.
|
|
11
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<EntityPermissionsModule, [typeof i1.EntityPermissionsGridComponent, typeof i2.EntityPermissionsSelectorWithGridComponent], [typeof i3.CommonModule, typeof i4.FormsModule, typeof i5.ContainerDirectivesModule, typeof i6.SharedGenericModule, typeof i7.MJButtonDirective, typeof i7.MJDropdownComponent], [typeof i1.EntityPermissionsGridComponent, typeof i2.EntityPermissionsSelectorWithGridComponent]>;
|
|
17
12
|
static ɵinj: i0.ɵɵInjectorDeclaration<EntityPermissionsModule>;
|
|
18
13
|
}
|
|
19
14
|
//# sourceMappingURL=module.d.ts.map
|
package/dist/lib/module.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/lib/module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/lib/module.ts"],"names":[],"mappings":";;;;;;;;AAUA,qBAkBa,uBAAuB;yCAAvB,uBAAuB;0CAAvB,uBAAuB;0CAAvB,uBAAuB;CAAI"}
|
package/dist/lib/module.js
CHANGED
|
@@ -1,31 +1,20 @@
|
|
|
1
1
|
import { NgModule } from '@angular/core';
|
|
2
2
|
import { EntityPermissionsGridComponent } from './grid/entity-permissions-grid.component';
|
|
3
3
|
import { CommonModule } from '@angular/common';
|
|
4
|
-
// Kendo UI Angular imports
|
|
5
|
-
import { GridModule } from '@progress/kendo-angular-grid';
|
|
6
|
-
import { ExcelExportModule } from '@progress/kendo-angular-excel-export';
|
|
7
|
-
import { DialogsModule } from "@progress/kendo-angular-dialog";
|
|
8
|
-
import { ButtonsModule } from '@progress/kendo-angular-buttons';
|
|
9
4
|
import { ContainerDirectivesModule } from '@memberjunction/ng-container-directives';
|
|
10
5
|
import { SharedGenericModule } from '@memberjunction/ng-shared-generic';
|
|
11
6
|
import { FormsModule } from '@angular/forms';
|
|
12
7
|
import { EntityPermissionsSelectorWithGridComponent } from './entity-selector-with-grid/entity-selector-with-grid.component';
|
|
13
|
-
import {
|
|
14
|
-
import { IndicatorsModule } from '@progress/kendo-angular-indicators';
|
|
8
|
+
import { MJButtonDirective, MJDropdownComponent } from '@memberjunction/ng-ui-components';
|
|
15
9
|
import * as i0 from "@angular/core";
|
|
16
10
|
export class EntityPermissionsModule {
|
|
17
11
|
static ɵfac = function EntityPermissionsModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || EntityPermissionsModule)(); };
|
|
18
12
|
static ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: EntityPermissionsModule });
|
|
19
13
|
static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [CommonModule,
|
|
20
|
-
GridModule,
|
|
21
14
|
FormsModule,
|
|
22
|
-
DialogsModule,
|
|
23
|
-
ExcelExportModule,
|
|
24
15
|
ContainerDirectivesModule,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
IndicatorsModule,
|
|
28
|
-
SharedGenericModule] });
|
|
16
|
+
SharedGenericModule,
|
|
17
|
+
MJDropdownComponent] });
|
|
29
18
|
}
|
|
30
19
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EntityPermissionsModule, [{
|
|
31
20
|
type: NgModule,
|
|
@@ -36,15 +25,11 @@ export class EntityPermissionsModule {
|
|
|
36
25
|
],
|
|
37
26
|
imports: [
|
|
38
27
|
CommonModule,
|
|
39
|
-
GridModule,
|
|
40
28
|
FormsModule,
|
|
41
|
-
DialogsModule,
|
|
42
|
-
ExcelExportModule,
|
|
43
29
|
ContainerDirectivesModule,
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
SharedGenericModule
|
|
30
|
+
SharedGenericModule,
|
|
31
|
+
MJButtonDirective,
|
|
32
|
+
MJDropdownComponent
|
|
48
33
|
],
|
|
49
34
|
exports: [
|
|
50
35
|
EntityPermissionsGridComponent,
|
|
@@ -54,14 +39,10 @@ export class EntityPermissionsModule {
|
|
|
54
39
|
}], null, null); })();
|
|
55
40
|
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(EntityPermissionsModule, { declarations: [EntityPermissionsGridComponent,
|
|
56
41
|
EntityPermissionsSelectorWithGridComponent], imports: [CommonModule,
|
|
57
|
-
GridModule,
|
|
58
42
|
FormsModule,
|
|
59
|
-
DialogsModule,
|
|
60
|
-
ExcelExportModule,
|
|
61
43
|
ContainerDirectivesModule,
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
SharedGenericModule], exports: [EntityPermissionsGridComponent,
|
|
44
|
+
SharedGenericModule,
|
|
45
|
+
MJButtonDirective,
|
|
46
|
+
MJDropdownComponent], exports: [EntityPermissionsGridComponent,
|
|
66
47
|
EntityPermissionsSelectorWithGridComponent] }); })();
|
|
67
48
|
//# sourceMappingURL=module.js.map
|
package/dist/lib/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/lib/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/lib/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,0CAA0C,EAAE,MAAM,iEAAiE,CAAC;AAC7H,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;;AAoB1F,MAAM,OAAO,uBAAuB;iHAAvB,uBAAuB;4DAAvB,uBAAuB;gEAZhC,YAAY;YACZ,WAAW;YACX,yBAAyB;YACzB,mBAAmB;YAEnB,mBAAmB;;iFAOV,uBAAuB;cAlBnC,QAAQ;eAAC;gBACR,YAAY,EAAE;oBACZ,8BAA8B;oBAC9B,0CAA0C;iBAC3C;gBACD,OAAO,EAAE;oBACP,YAAY;oBACZ,WAAW;oBACX,yBAAyB;oBACzB,mBAAmB;oBACnB,iBAAiB;oBACjB,mBAAmB;iBACpB;gBACD,OAAO,EAAE;oBACP,8BAA8B;oBAC9B,0CAA0C;iBAC3C;aACF;;wFACY,uBAAuB,mBAhBhC,8BAA8B;QAC9B,0CAA0C,aAG1C,YAAY;QACZ,WAAW;QACX,yBAAyB;QACzB,mBAAmB;QACnB,iBAAiB;QACjB,mBAAmB,aAGnB,8BAA8B;QAC9B,0CAA0C","sourcesContent":["import { NgModule } from '@angular/core';\nimport { EntityPermissionsGridComponent } from './grid/entity-permissions-grid.component';\nimport { CommonModule } from '@angular/common';\n\nimport { ContainerDirectivesModule } from '@memberjunction/ng-container-directives';\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\nimport { FormsModule } from '@angular/forms';\nimport { EntityPermissionsSelectorWithGridComponent } from './entity-selector-with-grid/entity-selector-with-grid.component';\nimport { MJButtonDirective, MJDropdownComponent } from '@memberjunction/ng-ui-components';\n\n@NgModule({\n declarations: [\n EntityPermissionsGridComponent,\n EntityPermissionsSelectorWithGridComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ContainerDirectivesModule,\n SharedGenericModule,\n MJButtonDirective,\n MJDropdownComponent\n ],\n exports: [\n EntityPermissionsGridComponent,\n EntityPermissionsSelectorWithGridComponent\n ]\n})\nexport class EntityPermissionsModule { }"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ng-entity-permissions",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.24.0",
|
|
4
4
|
"description": "MemberJunction: Angular components for displaying/editing permissions for an entity, and related components.",
|
|
5
5
|
"main": "./dist/public-api.js",
|
|
6
6
|
"typings": "./dist/public-api.d.ts",
|
|
@@ -25,18 +25,13 @@
|
|
|
25
25
|
"@angular/router": "21.1.3"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@memberjunction/core": "5.
|
|
29
|
-
"@memberjunction/core-entities": "5.
|
|
30
|
-
"@memberjunction/global": "5.
|
|
31
|
-
"@memberjunction/ng-container-directives": "5.
|
|
32
|
-
"@memberjunction/ng-shared": "5.
|
|
33
|
-
"@memberjunction/ng-shared-generic": "5.
|
|
34
|
-
"@
|
|
35
|
-
"@progress/kendo-angular-dialog": "22.0.1",
|
|
36
|
-
"@progress/kendo-angular-dropdowns": "22.0.1",
|
|
37
|
-
"@progress/kendo-angular-excel-export": "22.0.1",
|
|
38
|
-
"@progress/kendo-angular-grid": "22.0.1",
|
|
39
|
-
"@progress/kendo-angular-indicators": "22.0.1",
|
|
28
|
+
"@memberjunction/core": "5.24.0",
|
|
29
|
+
"@memberjunction/core-entities": "5.24.0",
|
|
30
|
+
"@memberjunction/global": "5.24.0",
|
|
31
|
+
"@memberjunction/ng-container-directives": "5.24.0",
|
|
32
|
+
"@memberjunction/ng-shared": "5.24.0",
|
|
33
|
+
"@memberjunction/ng-shared-generic": "5.24.0",
|
|
34
|
+
"@memberjunction/ng-ui-components": "5.24.0",
|
|
40
35
|
"tslib": "^2.8.1"
|
|
41
36
|
},
|
|
42
37
|
"sideEffects": false,
|