@memberjunction/ng-entity-permissions 5.30.1 → 5.32.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.d.ts +2 -2
- package/dist/lib/entity-selector-with-grid/entity-selector-with-grid.component.d.ts.map +1 -1
- package/dist/lib/entity-selector-with-grid/entity-selector-with-grid.component.js +6 -8
- package/dist/lib/entity-selector-with-grid/entity-selector-with-grid.component.js.map +1 -1
- package/dist/lib/grid/entity-permissions-grid.component.d.ts +2 -1
- package/dist/lib/grid/entity-permissions-grid.component.d.ts.map +1 -1
- package/dist/lib/grid/entity-permissions-grid.component.js +10 -8
- package/dist/lib/grid/entity-permissions-grid.component.js.map +1 -1
- package/package.json +9 -8
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { EventEmitter, OnInit } from '@angular/core';
|
|
2
2
|
import { EntityInfo } from '@memberjunction/core';
|
|
3
3
|
import { EntityPermissionChangedEvent } from '../grid/entity-permissions-grid.component';
|
|
4
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class EntityPermissionsSelectorWithGridComponent implements OnInit {
|
|
6
|
+
export declare class EntityPermissionsSelectorWithGridComponent extends BaseAngularComponent implements OnInit {
|
|
6
7
|
EntityName: string;
|
|
7
8
|
BottomMargin: number;
|
|
8
9
|
PermissionChanged: EventEmitter<EntityPermissionChangedEvent>;
|
|
9
10
|
CurrentEntity: EntityInfo | undefined;
|
|
10
|
-
private _md;
|
|
11
11
|
entityList: EntityInfo[];
|
|
12
12
|
ngOnInit(): void;
|
|
13
13
|
handlePermissionChanged(event: EntityPermissionChangedEvent): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-selector-with-grid.component.d.ts","sourceRoot":"","sources":["../../../src/lib/entity-selector-with-grid/entity-selector-with-grid.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,YAAY,EAAE,MAAM,EAAS,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,UAAU,EAAY,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC
|
|
1
|
+
{"version":3,"file":"entity-selector-with-grid.component.d.ts","sourceRoot":"","sources":["../../../src/lib/entity-selector-with-grid/entity-selector-with-grid.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,YAAY,EAAE,MAAM,EAAS,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,UAAU,EAAY,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AAIzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AACrE,qBAMa,0CAA2C,SAAQ,oBAAqB,YAAW,MAAM;IAC3F,UAAU,EAAG,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAK;IAExB,iBAAiB,6CAAoD;IAEtE,aAAa,EAAE,UAAU,GAAG,SAAS,CAAC;IAExC,UAAU,EAAE,UAAU,EAAE,CAAM;IAC9B,QAAQ,IAAI,IAAI;IAMhB,uBAAuB,CAAC,KAAK,EAAE,4BAA4B;yCAfvD,0CAA0C;2CAA1C,0CAA0C;CAqBtD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component, Output, EventEmitter, Input } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import * as i1 from "@angular/forms";
|
|
5
5
|
import * as i2 from "@memberjunction/ng-ui-components";
|
|
@@ -13,16 +13,14 @@ function EntityPermissionsSelectorWithGridComponent_Conditional_2_Template(rf, c
|
|
|
13
13
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
14
14
|
i0.ɵɵproperty("EntityName", ctx_r1.CurrentEntity.Name);
|
|
15
15
|
} }
|
|
16
|
-
export class EntityPermissionsSelectorWithGridComponent {
|
|
16
|
+
export class EntityPermissionsSelectorWithGridComponent extends BaseAngularComponent {
|
|
17
17
|
EntityName;
|
|
18
18
|
BottomMargin = 0;
|
|
19
19
|
PermissionChanged = new EventEmitter();
|
|
20
20
|
CurrentEntity;
|
|
21
|
-
_md;
|
|
22
21
|
entityList = [];
|
|
23
22
|
ngOnInit() {
|
|
24
|
-
this.
|
|
25
|
-
this.entityList = this._md.Entities.sort((a, b) => a.Name.localeCompare(b.Name));
|
|
23
|
+
this.entityList = this.ProviderToUse.Entities.sort((a, b) => a.Name.localeCompare(b.Name));
|
|
26
24
|
if (this.entityList?.length > 0)
|
|
27
25
|
this.CurrentEntity = this.entityList[0];
|
|
28
26
|
}
|
|
@@ -30,8 +28,8 @@ export class EntityPermissionsSelectorWithGridComponent {
|
|
|
30
28
|
// bubble up the event to our container component
|
|
31
29
|
this.PermissionChanged.emit(event);
|
|
32
30
|
}
|
|
33
|
-
static ɵfac = function EntityPermissionsSelectorWithGridComponent_Factory(__ngFactoryType__) { return
|
|
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) {
|
|
31
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵEntityPermissionsSelectorWithGridComponent_BaseFactory; return function EntityPermissionsSelectorWithGridComponent_Factory(__ngFactoryType__) { return (ɵEntityPermissionsSelectorWithGridComponent_BaseFactory || (ɵEntityPermissionsSelectorWithGridComponent_BaseFactory = i0.ɵɵgetInheritedFactory(EntityPermissionsSelectorWithGridComponent)))(__ngFactoryType__ || EntityPermissionsSelectorWithGridComponent); }; })();
|
|
32
|
+
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, features: [i0.ɵɵInheritDefinitionFeature], 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
33
|
i0.ɵɵelementStart(0, "div")(1, "mj-dropdown", 0);
|
|
36
34
|
i0.ɵɵtwoWayListener("ngModelChange", function EntityPermissionsSelectorWithGridComponent_Template_mj_dropdown_ngModelChange_1_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.CurrentEntity, $event) || (ctx.CurrentEntity = $event); return $event; });
|
|
37
35
|
i0.ɵɵelementEnd();
|
|
@@ -57,5 +55,5 @@ export class EntityPermissionsSelectorWithGridComponent {
|
|
|
57
55
|
}], CurrentEntity: [{
|
|
58
56
|
type: Input
|
|
59
57
|
}] }); })();
|
|
60
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntityPermissionsSelectorWithGridComponent, { className: "EntityPermissionsSelectorWithGridComponent", filePath: "src/lib/entity-selector-with-grid/entity-selector-with-grid.component.ts", lineNumber:
|
|
58
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntityPermissionsSelectorWithGridComponent, { className: "EntityPermissionsSelectorWithGridComponent", filePath: "src/lib/entity-selector-with-grid/entity-selector-with-grid.component.ts", lineNumber: 15 }); })();
|
|
61
59
|
//# sourceMappingURL=entity-selector-with-grid.component.js.map
|
|
@@ -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;
|
|
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;AAO/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;;;;;;ICIjE,qDAAuI;IAAtD,gQAAqB,sCAA+B,KAAC;IAAC,iBAA6B;;;IAArH,sDAAiC;;ADGpF,MAAM,OAAO,0CAA2C,SAAQ,oBAAoB;IACzE,UAAU,CAAU;IACpB,YAAY,GAAW,CAAC,CAAC;IAExB,iBAAiB,GAAG,IAAI,YAAY,EAAgC,CAAC;IAEtE,aAAa,CAAyB;IAExC,UAAU,GAAiB,EAAE,CAAC;IAC9B,QAAQ;QACb,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3F,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;qVApBU,0CAA0C,yBAA1C,0CAA0C;6DAA1C,0CAA0C;YCbrD,AADF,2BAAM,qBAQD;YADD,oPAA2B;YAE7B,iBAAc;YACd,mIAAqB;YAGvB,iBAAM;;YAXF,cAAmB;YAAnB,qCAAmB;YAKnB,iDAA2B;YAG7B,cAEC;YAFD,4CAEC;;;iFDEU,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 \nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\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 extends BaseAngularComponent 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 public entityList: EntityInfo[] = [];\n public ngOnInit(): void {\n this.entityList = this.ProviderToUse.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"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EventEmitter, OnInit, SimpleChanges, OnChanges } from '@angular/core';
|
|
2
2
|
import { MJEntityPermissionEntity } from '@memberjunction/core-entities';
|
|
3
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
export type EntityPermissionChangedEvent = {
|
|
5
6
|
EntityName: string;
|
|
@@ -8,7 +9,7 @@ export type EntityPermissionChangedEvent = {
|
|
|
8
9
|
Value: boolean;
|
|
9
10
|
Cancel: boolean;
|
|
10
11
|
};
|
|
11
|
-
export declare class EntityPermissionsGridComponent implements OnInit, OnChanges {
|
|
12
|
+
export declare class EntityPermissionsGridComponent extends BaseAngularComponent implements OnInit, OnChanges {
|
|
12
13
|
Mode: 'Entity' | 'Role';
|
|
13
14
|
EntityName: string;
|
|
14
15
|
RoleName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-permissions-grid.component.d.ts","sourceRoot":"","sources":["../../../src/lib/grid/entity-permissions-grid.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,YAAY,EAAE,MAAM,EAAS,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGzG,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC
|
|
1
|
+
{"version":3,"file":"entity-permissions-grid.component.d.ts","sourceRoot":"","sources":["../../../src/lib/grid/entity-permissions-grid.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,YAAY,EAAE,MAAM,EAAS,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGzG,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAIzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AACrE,MAAM,MAAM,4BAA4B,GAAG;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,qBAAqB,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAC9D,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,qBAMa,8BAA+B,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAC1F,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAY;IACnC,UAAU,EAAG,MAAM,CAAC;IACpB,QAAQ,EAAG,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAK;IAExB,iBAAiB,6CAAoD;IAExE,WAAW,EAAE,wBAAwB,EAAE,CAAM;IAC7C,UAAU,EAAE,MAAM,CAAO;IACzB,SAAS,EAAE,OAAO,CAAS;;IAMlC,QAAQ,IAAI,IAAI;IAIhB,WAAW,CAAC,OAAO,EAAE,aAAa;IAOlC,cAAc;IAMR,OAAO;IA6EN,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAM7B,eAAe;IAkBf,UAAU;IAWvB,IAAW,mBAAmB,IAAI,MAAM,CAEvC;IAED,SAAS,CAAC,uBAAuB,CAAC,CAAC,EAAE,wBAAwB,GAAG,OAAO;IAShE,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ;IAoDhE,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,wBAAwB;IAOjE,OAAO,CAAC,UAAU,EAAE,wBAAwB;IA0B5C,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,UAAU,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAAE,cAAc,EAAE,OAAO;yCAnPtJ,8BAA8B;2CAA9B,8BAA8B;CAiR1C"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Component, Output, EventEmitter, Input } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { RunView } from '@memberjunction/core';
|
|
3
3
|
import { UUIDsEqual } from '@memberjunction/global';
|
|
4
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
import * as i1 from "@angular/common";
|
|
6
7
|
import * as i2 from "@angular/forms";
|
|
@@ -130,7 +131,7 @@ function EntityPermissionsGridComponent_Conditional_6_Template(rf, ctx) { if (rf
|
|
|
130
131
|
i0.ɵɵadvance(10);
|
|
131
132
|
i0.ɵɵrepeater(ctx_r1.permissions);
|
|
132
133
|
} }
|
|
133
|
-
export class EntityPermissionsGridComponent {
|
|
134
|
+
export class EntityPermissionsGridComponent extends BaseAngularComponent {
|
|
134
135
|
Mode = 'Entity';
|
|
135
136
|
EntityName; // used when Mode is 'Entity'
|
|
136
137
|
RoleName; // used when Mode is 'Role'
|
|
@@ -140,6 +141,7 @@ export class EntityPermissionsGridComponent {
|
|
|
140
141
|
gridHeight = 750;
|
|
141
142
|
isLoading = false;
|
|
142
143
|
constructor() {
|
|
144
|
+
super();
|
|
143
145
|
}
|
|
144
146
|
ngOnInit() {
|
|
145
147
|
this.Refresh();
|
|
@@ -160,14 +162,14 @@ export class EntityPermissionsGridComponent {
|
|
|
160
162
|
this.ValidateInputs();
|
|
161
163
|
const startTime = new Date().getTime();
|
|
162
164
|
this.isLoading = true;
|
|
163
|
-
const md =
|
|
165
|
+
const md = this.ProviderToUse;
|
|
164
166
|
const entity = md.Entities.find(e => e.Name === this.EntityName);
|
|
165
167
|
if (this.Mode === 'Entity' && !entity)
|
|
166
168
|
throw new Error("Entity not found: " + this.EntityName);
|
|
167
169
|
const r = md.Roles.find(r => r.Name === this.RoleName);
|
|
168
170
|
if (this.Mode === 'Role' && !r)
|
|
169
171
|
throw new Error("Role not found: " + this.RoleName);
|
|
170
|
-
const rv =
|
|
172
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
171
173
|
const filter = this.Mode === 'Entity' ? `EntityID='${entity.ID}'` : `RoleName='${r?.Name}'`;
|
|
172
174
|
const result = await rv.RunView({
|
|
173
175
|
EntityName: 'MJ: Entity Permissions',
|
|
@@ -226,14 +228,14 @@ export class EntityPermissionsGridComponent {
|
|
|
226
228
|
this.isLoading = false;
|
|
227
229
|
}
|
|
228
230
|
getRoleName(roleID) {
|
|
229
|
-
const md =
|
|
231
|
+
const md = this.ProviderToUse;
|
|
230
232
|
const r = md.Roles.find(r => UUIDsEqual(r.ID, roleID));
|
|
231
233
|
return r ? r.Name : '';
|
|
232
234
|
}
|
|
233
235
|
async savePermissions() {
|
|
234
236
|
if (this.NumDirtyPermissions > 0) {
|
|
235
237
|
// iterate through each permisison and for the ones that are dirty, add to transaction group then commit at once
|
|
236
|
-
const md =
|
|
238
|
+
const md = this.ProviderToUse;
|
|
237
239
|
const tg = await md.CreateTransactionGroup();
|
|
238
240
|
let itemCount = 0;
|
|
239
241
|
for (const p of this.permissions) {
|
|
@@ -375,7 +377,7 @@ export class EntityPermissionsGridComponent {
|
|
|
375
377
|
event.stopPropagation();
|
|
376
378
|
}
|
|
377
379
|
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: [["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) {
|
|
380
|
+
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.ɵɵInheritDefinitionFeature, 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
381
|
i0.ɵɵelementStart(0, "div");
|
|
380
382
|
i0.ɵɵconditionalCreate(1, EntityPermissionsGridComponent_Conditional_1_Template, 2, 1, "div");
|
|
381
383
|
i0.ɵɵelementStart(2, "button", 0);
|
|
@@ -413,5 +415,5 @@ export class EntityPermissionsGridComponent {
|
|
|
413
415
|
}], PermissionChanged: [{
|
|
414
416
|
type: Output
|
|
415
417
|
}] }); })();
|
|
416
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntityPermissionsGridComponent, { className: "EntityPermissionsGridComponent", filePath: "src/lib/grid/entity-permissions-grid.component.ts", lineNumber:
|
|
418
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntityPermissionsGridComponent, { className: "EntityPermissionsGridComponent", filePath: "src/lib/grid/entity-permissions-grid.component.ts", lineNumber: 23 }); })();
|
|
417
419
|
//# sourceMappingURL=entity-permissions-grid.component.js.map
|
|
@@ -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\" 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"]}
|
|
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\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\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 extends BaseAngularComponent 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 super();\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 = this.ProviderToUse;\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 = RunView.FromMetadataProvider(this.ProviderToUse);\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 = this.ProviderToUse;\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 = this.ProviderToUse;\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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ng-entity-permissions",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.32.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,13 +25,14 @@
|
|
|
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-
|
|
32
|
-
"@memberjunction/ng-
|
|
33
|
-
"@memberjunction/ng-shared
|
|
34
|
-
"@memberjunction/ng-
|
|
28
|
+
"@memberjunction/core": "5.32.0",
|
|
29
|
+
"@memberjunction/core-entities": "5.32.0",
|
|
30
|
+
"@memberjunction/global": "5.32.0",
|
|
31
|
+
"@memberjunction/ng-base-types": "5.32.0",
|
|
32
|
+
"@memberjunction/ng-container-directives": "5.32.0",
|
|
33
|
+
"@memberjunction/ng-shared": "5.32.0",
|
|
34
|
+
"@memberjunction/ng-shared-generic": "5.32.0",
|
|
35
|
+
"@memberjunction/ng-ui-components": "5.32.0",
|
|
35
36
|
"tslib": "^2.8.1"
|
|
36
37
|
},
|
|
37
38
|
"sideEffects": false,
|