@memberjunction/ng-resource-permissions 6.1.4 → 6.2.0-edge.1
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/available-resources.component.d.ts +24 -4
- package/dist/lib/available-resources.component.d.ts.map +1 -1
- package/dist/lib/available-resources.component.js +54 -14
- package/dist/lib/available-resources.component.js.map +1 -1
- package/dist/lib/request-access.component.d.ts +2 -0
- package/dist/lib/request-access.component.d.ts.map +1 -1
- package/dist/lib/request-access.component.js +5 -1
- package/dist/lib/request-access.component.js.map +1 -1
- package/dist/lib/resource-permissions.component.d.ts +16 -2
- package/dist/lib/resource-permissions.component.d.ts.map +1 -1
- package/dist/lib/resource-permissions.component.js +44 -16
- package/dist/lib/resource-permissions.component.js.map +1 -1
- package/dist/lib/resource-share-adapter.d.ts +20 -0
- package/dist/lib/resource-share-adapter.d.ts.map +1 -1
- package/dist/lib/resource-share-adapter.js.map +1 -1
- package/dist/lib/resource-share-dialog.component.d.ts +65 -12
- package/dist/lib/resource-share-dialog.component.d.ts.map +1 -1
- package/dist/lib/resource-share-dialog.component.js +340 -148
- package/dist/lib/resource-share-dialog.component.js.map +1 -1
- package/dist/lib/user-sharing-center.component.d.ts +29 -0
- package/dist/lib/user-sharing-center.component.d.ts.map +1 -1
- package/dist/lib/user-sharing-center.component.js +51 -5
- package/dist/lib/user-sharing-center.component.js.map +1 -1
- package/package.json +12 -12
|
@@ -19,17 +19,37 @@ export declare class AvailableResourcesComponent extends BaseAngularComponent im
|
|
|
19
19
|
ExtraColumns: string;
|
|
20
20
|
SelectedResources: ResourceData[];
|
|
21
21
|
SelectionChanged: EventEmitter<ResourceData[]>;
|
|
22
|
-
|
|
22
|
+
GridExtraColumns: EntityFieldInfo[];
|
|
23
|
+
/** @deprecated Use {@link GridExtraColumns}. */
|
|
24
|
+
get gridExtraColumns(): EntityFieldInfo[];
|
|
25
|
+
/** @deprecated Use {@link GridExtraColumns}. */
|
|
26
|
+
set gridExtraColumns(value: EntityFieldInfo[]);
|
|
23
27
|
ColumnDefs: ColDef[];
|
|
24
28
|
DefaultColDef: ColDef;
|
|
25
29
|
RowSelectionConfig: RowSelectionOptions;
|
|
26
30
|
GridTheme: Theme;
|
|
27
31
|
private gridApi;
|
|
28
|
-
|
|
32
|
+
GetRowId: (params: GetRowIdParams<ResourceData>) => string;
|
|
33
|
+
/** @deprecated Use {@link GetRowId}. */
|
|
34
|
+
get getRowId(): (params: GetRowIdParams<ResourceData>) => string;
|
|
35
|
+
/** @deprecated Use {@link GetRowId}. */
|
|
36
|
+
set getRowId(value: (params: GetRowIdParams<ResourceData>) => string);
|
|
37
|
+
OnGridReady(event: GridReadyEvent): void;
|
|
38
|
+
/** @deprecated Use {@link OnGridReady}. */
|
|
29
39
|
onGridReady(event: GridReadyEvent): void;
|
|
40
|
+
OnSelectionChange(event: SelectionChangedEvent): void;
|
|
41
|
+
/** @deprecated Use {@link OnSelectionChange}. */
|
|
30
42
|
onSelectionChange(event: SelectionChangedEvent): void;
|
|
31
|
-
|
|
32
|
-
|
|
43
|
+
ResourcePermissions: MJResourcePermissionEntity[];
|
|
44
|
+
/** @deprecated Use {@link ResourcePermissions}. */
|
|
45
|
+
get resourcePermissions(): MJResourcePermissionEntity[];
|
|
46
|
+
/** @deprecated Use {@link ResourcePermissions}. */
|
|
47
|
+
set resourcePermissions(value: MJResourcePermissionEntity[]);
|
|
48
|
+
Resources: ResourceData[];
|
|
49
|
+
/** @deprecated Use {@link Resources}. */
|
|
50
|
+
get resources(): ResourceData[];
|
|
51
|
+
/** @deprecated Use {@link Resources}. */
|
|
52
|
+
set resources(value: ResourceData[]);
|
|
33
53
|
ngAfterViewInit(): Promise<void>;
|
|
34
54
|
/**
|
|
35
55
|
* This method will refresh the contents of the component based on the current state of the component.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"available-resources.component.d.ts","sourceRoot":"","sources":["../../src/lib/available-resources.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAa,YAAY,EAAiB,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,eAAe,EAAW,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAA4B,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAErG,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAGrE,OAAO,EACL,MAAM,EACN,cAAc,EAEd,cAAc,EAGd,mBAAmB,EACnB,qBAAqB,EAErB,KAAK,KAAK,EACX,MAAM,mBAAmB,CAAC;;AAK3B;;GAEG;AACH,qBAMa,2BAA6B,SAAQ,oBAAqB,YAAW,aAAa;IAClF,IAAI,EAAG,QAAQ,CAAC;IAChB,cAAc,EAAG,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,QAAQ,GAAG,UAAU,CAAY;IAEzD;;OAEG;IACM,YAAY,EAAE,MAAM,CAAM;IAE1B,iBAAiB,EAAE,YAAY,EAAE,CAAM;IACtC,gBAAgB,+BAAsC;IAEzD,gBAAgB,EAAE,eAAe,EAAE,CAAM;
|
|
1
|
+
{"version":3,"file":"available-resources.component.d.ts","sourceRoot":"","sources":["../../src/lib/available-resources.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAa,YAAY,EAAiB,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,eAAe,EAAW,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAA4B,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAErG,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAGrE,OAAO,EACL,MAAM,EACN,cAAc,EAEd,cAAc,EAGd,mBAAmB,EACnB,qBAAqB,EAErB,KAAK,KAAK,EACX,MAAM,mBAAmB,CAAC;;AAK3B;;GAEG;AACH,qBAMa,2BAA6B,SAAQ,oBAAqB,YAAW,aAAa;IAClF,IAAI,EAAG,QAAQ,CAAC;IAChB,cAAc,EAAG,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,QAAQ,GAAG,UAAU,CAAY;IAEzD;;OAEG;IACM,YAAY,EAAE,MAAM,CAAM;IAE1B,iBAAiB,EAAE,YAAY,EAAE,CAAM;IACtC,gBAAgB,+BAAsC;IAEzD,gBAAgB,EAAE,eAAe,EAAE,CAAM;IAEhD,gDAAgD;IAChD,IAAW,gBAAgB,IAAI,eAAe,EAAE,CAE/C;IACD,gDAAgD;IAChD,IAAW,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,EAEnD;IAGM,UAAU,EAAE,MAAM,EAAE,CAAM;IAC1B,aAAa,EAAE,MAAM,CAI1B;IACK,kBAAkB,EAAE,mBAAmB,CAI5C;IAGK,SAAS,EAAE,KAAK,CAAmD;IAC1E,OAAO,CAAC,OAAO,CAAwB;IAEhC,QAAQ,GAAI,QAAQ,cAAc,CAAC,YAAY,CAAC,KAAG,MAAM,CAE9D;IAEF,wCAAwC;IACxC,IAAW,QAAQ,aALQ,cAAc,CAAC,YAAY,CAAC,KAAG,MAAM,CAO/D;IACD,wCAAwC;IACxC,IAAW,QAAQ,CAAC,KAAK,WATE,cAAc,CAAC,YAAY,CAAC,KAAG,MASjC,EAExB;IAEM,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAK/C,2CAA2C;IACpC,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAIxC,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAW5D,iDAAiD;IAC1C,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAIrD,mBAAmB,EAAE,0BAA0B,EAAE,CAAM;IAE9D,mDAAmD;IACnD,IAAW,mBAAmB,IAAI,0BAA0B,EAAE,CAE7D;IACD,mDAAmD;IACnD,IAAW,mBAAmB,CAAC,KAAK,EAAE,0BAA0B,EAAE,EAEjE;IACM,SAAS,EAAE,YAAY,EAAE,CAAM;IAEtC,yCAAyC;IACzC,IAAW,SAAS,IAAI,YAAY,EAAE,CAErC;IACD,yCAAyC;IACzC,IAAW,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE,EAEzC;IACK,eAAe;IAIrB;;OAEG;IACU,OAAO;IAmEpB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,iBAAiB;yCAhMhB,2BAA2B;2CAA3B,2BAA2B;CA2MvC"}
|
|
@@ -34,7 +34,15 @@ export class AvailableResourcesComponent extends BaseAngularComponent {
|
|
|
34
34
|
ExtraColumns = "";
|
|
35
35
|
SelectedResources = [];
|
|
36
36
|
SelectionChanged = new EventEmitter();
|
|
37
|
-
|
|
37
|
+
GridExtraColumns = [];
|
|
38
|
+
/** @deprecated Use {@link GridExtraColumns}. */
|
|
39
|
+
get gridExtraColumns() {
|
|
40
|
+
return this.GridExtraColumns;
|
|
41
|
+
}
|
|
42
|
+
/** @deprecated Use {@link GridExtraColumns}. */
|
|
43
|
+
set gridExtraColumns(value) {
|
|
44
|
+
this.GridExtraColumns = value;
|
|
45
|
+
}
|
|
38
46
|
// AG Grid configuration
|
|
39
47
|
ColumnDefs = [];
|
|
40
48
|
DefaultColDef = {
|
|
@@ -51,14 +59,26 @@ export class AvailableResourcesComponent extends BaseAngularComponent {
|
|
|
51
59
|
// the org brand overlay, matching the main entity/query grids.
|
|
52
60
|
GridTheme = themeAlpine.withParams(MJ_AG_GRID_THEME_PARAMS);
|
|
53
61
|
gridApi = null;
|
|
54
|
-
|
|
62
|
+
GetRowId = (params) => {
|
|
55
63
|
return params.data.ResourceRecordID;
|
|
56
64
|
};
|
|
57
|
-
|
|
65
|
+
/** @deprecated Use {@link GetRowId}. */
|
|
66
|
+
get getRowId() {
|
|
67
|
+
return this.GetRowId;
|
|
68
|
+
}
|
|
69
|
+
/** @deprecated Use {@link GetRowId}. */
|
|
70
|
+
set getRowId(value) {
|
|
71
|
+
this.GetRowId = value;
|
|
72
|
+
}
|
|
73
|
+
OnGridReady(event) {
|
|
58
74
|
this.gridApi = event.api;
|
|
59
75
|
this.applyPreselection();
|
|
60
76
|
}
|
|
61
|
-
|
|
77
|
+
/** @deprecated Use {@link OnGridReady}. */
|
|
78
|
+
onGridReady(event) {
|
|
79
|
+
return this.OnGridReady(event);
|
|
80
|
+
}
|
|
81
|
+
OnSelectionChange(event) {
|
|
62
82
|
const selectedRows = event.api.getSelectedRows();
|
|
63
83
|
this.SelectedResources.splice(0, this.SelectedResources.length); // empty the array
|
|
64
84
|
selectedRows.forEach((item) => {
|
|
@@ -67,8 +87,28 @@ export class AvailableResourcesComponent extends BaseAngularComponent {
|
|
|
67
87
|
// now bubble up the event
|
|
68
88
|
this.SelectionChanged.emit(this.SelectedResources);
|
|
69
89
|
}
|
|
70
|
-
|
|
71
|
-
|
|
90
|
+
/** @deprecated Use {@link OnSelectionChange}. */
|
|
91
|
+
onSelectionChange(event) {
|
|
92
|
+
return this.OnSelectionChange(event);
|
|
93
|
+
}
|
|
94
|
+
ResourcePermissions = [];
|
|
95
|
+
/** @deprecated Use {@link ResourcePermissions}. */
|
|
96
|
+
get resourcePermissions() {
|
|
97
|
+
return this.ResourcePermissions;
|
|
98
|
+
}
|
|
99
|
+
/** @deprecated Use {@link ResourcePermissions}. */
|
|
100
|
+
set resourcePermissions(value) {
|
|
101
|
+
this.ResourcePermissions = value;
|
|
102
|
+
}
|
|
103
|
+
Resources = [];
|
|
104
|
+
/** @deprecated Use {@link Resources}. */
|
|
105
|
+
get resources() {
|
|
106
|
+
return this.Resources;
|
|
107
|
+
}
|
|
108
|
+
/** @deprecated Use {@link Resources}. */
|
|
109
|
+
set resources(value) {
|
|
110
|
+
this.Resources = value;
|
|
111
|
+
}
|
|
72
112
|
async ngAfterViewInit() {
|
|
73
113
|
await this.Refresh();
|
|
74
114
|
}
|
|
@@ -80,9 +120,9 @@ export class AvailableResourcesComponent extends BaseAngularComponent {
|
|
|
80
120
|
throw new Error('User is a required property for the AvailableResourcesDialogComponent');
|
|
81
121
|
}
|
|
82
122
|
// now we can get the permissions for the specified resource
|
|
83
|
-
this.
|
|
84
|
-
if (this.
|
|
85
|
-
this.
|
|
123
|
+
this.ResourcePermissions = ResourcePermissionEngine.Instance.GetUserAvailableResources(this.User, this.ResourceTypeID);
|
|
124
|
+
if (this.ResourcePermissions.length === 0) {
|
|
125
|
+
this.Resources = [];
|
|
86
126
|
}
|
|
87
127
|
else {
|
|
88
128
|
const rt = ResourcePermissionEngine.Instance.ResourceTypes.find(rt => UUIDsEqual(rt.ID, this.ResourceTypeID));
|
|
@@ -97,11 +137,11 @@ export class AvailableResourcesComponent extends BaseAngularComponent {
|
|
|
97
137
|
if (this.ExtraColumns && this.ExtraColumns.length > 0) {
|
|
98
138
|
/// split the comma delim string and for each item find it in the EntityFields collection
|
|
99
139
|
const extraColumns = this.ExtraColumns.split(',');
|
|
100
|
-
this.
|
|
140
|
+
this.GridExtraColumns = [];
|
|
101
141
|
extraColumns.forEach((ec) => {
|
|
102
142
|
const field = entity.Fields.find((f) => f.Name.trim().toLowerCase() === ec.trim().toLowerCase());
|
|
103
143
|
if (field)
|
|
104
|
-
this.
|
|
144
|
+
this.GridExtraColumns.push(field);
|
|
105
145
|
});
|
|
106
146
|
}
|
|
107
147
|
// Build column definitions after we know the extra columns
|
|
@@ -109,13 +149,13 @@ export class AvailableResourcesComponent extends BaseAngularComponent {
|
|
|
109
149
|
const extraFilter = this.ResourceExtraFilter ? ` AND (${this.ResourceExtraFilter})` : '';
|
|
110
150
|
const result = await rv.RunView({
|
|
111
151
|
EntityName: entity.Name,
|
|
112
|
-
ExtraFilter: `(ID in (${this.
|
|
152
|
+
ExtraFilter: `(ID in (${this.ResourcePermissions.map((r) => `'${r.ResourceRecordID}'`).join(',')})${extraFilter})`,
|
|
113
153
|
OrderBy: nameField.Name
|
|
114
154
|
});
|
|
115
155
|
if (!result || !result.Success)
|
|
116
156
|
throw new Error(`Error running view for entity ${entity.Name}`);
|
|
117
157
|
// only return rows where we have a record in result.Results
|
|
118
|
-
this.
|
|
158
|
+
this.Resources = result.Results.map((r) => {
|
|
119
159
|
return new ResourceData({
|
|
120
160
|
ResourceRecordID: r.ID,
|
|
121
161
|
Name: r[nameField.Name],
|
|
@@ -138,7 +178,7 @@ export class AvailableResourcesComponent extends BaseAngularComponent {
|
|
|
138
178
|
const cols = [
|
|
139
179
|
{ field: 'Name', headerName: 'Name', width: 225 }
|
|
140
180
|
];
|
|
141
|
-
for (const col of this.
|
|
181
|
+
for (const col of this.GridExtraColumns) {
|
|
142
182
|
cols.push({
|
|
143
183
|
headerName: col.DisplayNameOrName,
|
|
144
184
|
valueGetter: (params) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"available-resources.component.js","sourceRoot":"","sources":["../../src/lib/available-resources.component.ts","../../src/lib/available-resources.component.html"],"names":[],"mappings":"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","sourcesContent":["import { AfterViewInit, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { EntityFieldInfo, RunView, UserInfo } from '@memberjunction/core';\nimport { ResourcePermissionEngine, MJResourcePermissionEntity } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { MJ_AG_GRID_THEME_PARAMS } from '@memberjunction/ng-shared-generic';\nimport { FormatSimpleRowCell } from './format-cell';\nimport {\n ColDef,\n GridReadyEvent,\n GridApi,\n GetRowIdParams,\n ModuleRegistry,\n AllCommunityModule,\n RowSelectionOptions,\n SelectionChangedEvent,\n themeAlpine,\n type Theme\n} from 'ag-grid-community';\n\n// Register AG Grid modules\nModuleRegistry.registerModules([AllCommunityModule]);\n\n/**\n * This component displays a list of available resources for a user for a specific Resource Type.\n */\n@Component({\n standalone: false,\n selector: 'mj-available-resources',\n templateUrl: './available-resources.component.html',\n styleUrls: ['./available-resources.component.css']\n})\nexport class AvailableResourcesComponent extends BaseAngularComponent implements AfterViewInit {\n @Input() User!: UserInfo;\n @Input() ResourceTypeID!: string;\n @Input() ResourceExtraFilter?: string;\n @Input() SelectionMode: 'Single' | 'Multiple' = 'Single';\n\n /**\n * Optional, comma-delimited list of field names to provide extra columns here to display in the grid. These columns will be displayed after the Name of the resource\n */\n @Input() ExtraColumns: string = \"\";\n\n @Input() SelectedResources: ResourceData[] = [];\n @Output() SelectionChanged = new EventEmitter<ResourceData[]>();\n\n public gridExtraColumns: EntityFieldInfo[] = [];\n\n // AG Grid configuration\n public ColumnDefs: ColDef[] = [];\n public DefaultColDef: ColDef = {\n sortable: true,\n resizable: true,\n filter: false\n };\n public RowSelectionConfig: RowSelectionOptions = {\n mode: 'singleRow',\n checkboxes: false,\n enableClickSelection: true\n };\n // Themed from the shared --mj-* token params so this grid follows light/dark and\n // the org brand overlay, matching the main entity/query grids.\n public GridTheme: Theme = themeAlpine.withParams(MJ_AG_GRID_THEME_PARAMS);\n private gridApi: GridApi | null = null;\n\n public getRowId = (params: GetRowIdParams<ResourceData>): string => {\n return params.data.ResourceRecordID;\n };\n\n public onGridReady(event: GridReadyEvent): void {\n this.gridApi = event.api;\n this.applyPreselection();\n }\n\n public onSelectionChange(event: SelectionChangedEvent): void {\n const selectedRows = event.api.getSelectedRows() as ResourceData[];\n this.SelectedResources.splice(0, this.SelectedResources.length); // empty the array\n selectedRows.forEach((item) => {\n this.SelectedResources.push(item);\n });\n\n // now bubble up the event\n this.SelectionChanged.emit(this.SelectedResources);\n }\n\n public resourcePermissions: MJResourcePermissionEntity[] = [];\n public resources: ResourceData[] = [];\n async ngAfterViewInit() {\n await this.Refresh();\n }\n\n /**\n * This method will refresh the contents of the component based on the current state of the component.\n */\n public async Refresh() {\n if (!this.User) {\n throw new Error('User is a required property for the AvailableResourcesDialogComponent');\n }\n\n // now we can get the permissions for the specified resource\n this.resourcePermissions = ResourcePermissionEngine.Instance.GetUserAvailableResources(this.User, this.ResourceTypeID);\n if (this.resourcePermissions.length === 0) {\n this.resources = [];\n }\n else {\n const rt = ResourcePermissionEngine.Instance.ResourceTypes.find(rt => UUIDsEqual(rt.ID, this.ResourceTypeID));\n if (!rt || !rt.EntityID)\n throw new Error(`Resource Type ${this.ResourceTypeID} not found`);\n\n const p = this.ProviderToUse;\n const entity = p.Entities.find(e => UUIDsEqual(e.ID, rt.EntityID));\n if (!entity || !entity.NameField)\n throw new Error(`Entity ${rt.EntityID} not found, or no Name field defined`);\n const rv = new RunView(this.RunViewToUse);\n const nameField = entity.NameField;\n if (this.ExtraColumns && this.ExtraColumns.length > 0) {\n /// split the comma delim string and for each item find it in the EntityFields collection\n const extraColumns = this.ExtraColumns.split(',');\n this.gridExtraColumns = [];\n extraColumns.forEach((ec) => {\n const field = entity.Fields.find((f) => f.Name.trim().toLowerCase() === ec.trim().toLowerCase());\n if (field)\n this.gridExtraColumns.push(field);\n });\n }\n\n // Build column definitions after we know the extra columns\n this.buildColumnDefs();\n\n const extraFilter = this.ResourceExtraFilter ? ` AND (${this.ResourceExtraFilter})` : '';\n const result = await rv.RunView({\n EntityName: entity.Name,\n ExtraFilter: `(ID in (${this.resourcePermissions.map((r) => `'${r.ResourceRecordID}'`).join(',')})${extraFilter})`,\n OrderBy: nameField.Name\n })\n if (!result || !result.Success)\n throw new Error(`Error running view for entity ${entity.Name}`);\n\n // only return rows where we have a record in result.Results\n this.resources = result.Results.map((r) => {\n return new ResourceData({\n ResourceRecordID: r.ID,\n Name: r[nameField.Name],\n ResourceTypeID: this.ResourceTypeID,\n ResourceType: rt.Name,\n Configuration: r // pass the whole resource record into configuration so it is accessible as desired\n });\n });\n\n // Update selection mode based on input\n this.RowSelectionConfig = {\n mode: this.SelectionMode.toLowerCase() === 'single' ? 'singleRow' : 'multiRow',\n checkboxes: false,\n enableClickSelection: true\n };\n\n // Re-apply preselection after data loads\n this.applyPreselection();\n }\n }\n\n private buildColumnDefs(): void {\n const cols: ColDef[] = [\n { field: 'Name', headerName: 'Name', width: 225 }\n ];\n\n for (const col of this.gridExtraColumns) {\n cols.push({\n headerName: col.DisplayNameOrName,\n valueGetter: (params) => {\n return FormatSimpleRowCell(params.data?.Configuration?.[col.Name]);\n }\n });\n }\n\n this.ColumnDefs = cols;\n }\n\n private applyPreselection(): void {\n if (!this.gridApi || this.SelectedResources.length === 0) return;\n this.gridApi.forEachNode((node) => {\n const isSelected = this.SelectedResources.some(\n (r) => UUIDsEqual(r.ResourceRecordID, node.data?.ResourceRecordID)\n );\n if (isSelected) {\n node.setSelected(true);\n }\n });\n }\n}\n","<div class=\"container\">\n @if (User) {\n <ag-grid-angular\n class=\"resources-grid\"\n [theme]=\"GridTheme\"\n [rowData]=\"resources\"\n [columnDefs]=\"ColumnDefs\"\n [defaultColDef]=\"DefaultColDef\"\n [rowSelection]=\"RowSelectionConfig\"\n [getRowId]=\"getRowId\"\n (selectionChanged)=\"onSelectionChange($event)\"\n (gridReady)=\"onGridReady($event)\"\n style=\"width: 100%; height: 400px;\">\n </ag-grid-angular>\n }\n </div>\n"]}
|
|
1
|
+
{"version":3,"file":"available-resources.component.js","sourceRoot":"","sources":["../../src/lib/available-resources.component.ts","../../src/lib/available-resources.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAiB,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAmB,OAAO,EAAY,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAA8B,MAAM,+BAA+B,CAAC;AACrG,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAKL,cAAc,EACd,kBAAkB,EAGlB,WAAW,EAEZ,MAAM,mBAAmB,CAAC;;;;;ICjBnB,0CAUwC;IADpC,AADA,oOAAoB,gCAAyB,KAAC,yMACjC,0BAAmB,KAAC;IAErC,iBAAkB;;;IAJd,AADA,AADA,AADA,AADA,AADA,wCAAmB,6BACE,iCACI,uCACM,2CACI,6BACd;;ADYjC,2BAA2B;AAC3B,cAAc,CAAC,eAAe,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAErD;;GAEG;AAOH,MAAM,OAAO,2BAA6B,SAAQ,oBAAoB;IACzD,IAAI,CAAY;IAChB,cAAc,CAAU;IACxB,mBAAmB,CAAU;IAC7B,aAAa,GAA0B,QAAQ,CAAC;IAEzD;;OAEG;IACM,YAAY,GAAW,EAAE,CAAC;IAE1B,iBAAiB,GAAmB,EAAE,CAAC;IACtC,gBAAgB,GAAG,IAAI,YAAY,EAAkB,CAAC;IAEzD,gBAAgB,GAAsB,EAAE,CAAC;IAEhD,gDAAgD;IAChD,IAAW,gBAAgB;QACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IACD,gDAAgD;IAChD,IAAW,gBAAgB,CAAC,KAAwB;QAClD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;IAED,wBAAwB;IACjB,UAAU,GAAa,EAAE,CAAC;IAC1B,aAAa,GAAW;QAC3B,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,KAAK;KAChB,CAAC;IACK,kBAAkB,GAAwB;QAC7C,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,KAAK;QACjB,oBAAoB,EAAE,IAAI;KAC7B,CAAC;IACF,iFAAiF;IACjF,+DAA+D;IACxD,SAAS,GAAU,WAAW,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;IAClE,OAAO,GAAmB,IAAI,CAAC;IAEhC,QAAQ,GAAG,CAAC,MAAoC,EAAU,EAAE;QAC/D,OAAO,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACxC,CAAC,CAAC;IAEF,wCAAwC;IACxC,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,wCAAwC;IACxC,IAAW,QAAQ,CAAC,KAAK;QACvB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IAEM,WAAW,CAAC,KAAqB;QACpC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC;QACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAED,2CAA2C;IACpC,WAAW,CAAC,KAAqB;QACtC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAEM,iBAAiB,CAAC,KAA4B;QACjD,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,EAAoB,CAAC;QACnE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB;QACnF,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC1B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACvD,CAAC;IAED,iDAAiD;IAC1C,iBAAiB,CAAC,KAA4B;QACnD,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAEM,mBAAmB,GAAiC,EAAE,CAAC;IAE9D,mDAAmD;IACnD,IAAW,mBAAmB;QAC5B,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IACD,mDAAmD;IACnD,IAAW,mBAAmB,CAAC,KAAmC;QAChE,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;IACnC,CAAC;IACM,SAAS,GAAmB,EAAE,CAAC;IAEtC,yCAAyC;IACzC,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,yCAAyC;IACzC,IAAW,SAAS,CAAC,KAAqB;QACxC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IACD,KAAK,CAAC,eAAe;QACjB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAO;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC7F,CAAC;QAED,4DAA4D;QAC5D,IAAI,CAAC,mBAAmB,GAAG,wBAAwB,CAAC,QAAQ,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACvH,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACxB,CAAC;aACI,CAAC;YACF,MAAM,EAAE,GAAG,wBAAwB,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YAC9G,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ;gBACnB,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,cAAc,YAAY,CAAC,CAAC;YAEtE,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;YAC7B,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnE,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS;gBAC5B,MAAM,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,QAAQ,sCAAsC,CAAC,CAAC;YACjF,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YACnC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,yFAAyF;gBACzF,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAClD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;gBAC3B,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;oBACxB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;oBACjG,IAAI,KAAK;wBACL,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC1C,CAAC,CAAC,CAAC;YACP,CAAC;YAED,2DAA2D;YAC3D,IAAI,CAAC,eAAe,EAAE,CAAC;YAEvB,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACzF,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC;gBAC5B,UAAU,EAAE,MAAM,CAAC,IAAI;gBACvB,WAAW,EAAE,WAAW,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,WAAW,GAAG;gBAClH,OAAO,EAAE,SAAS,CAAC,IAAI;aAC1B,CAAC,CAAA;YACF,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO;gBAC1B,MAAM,IAAI,KAAK,CAAC,iCAAiC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAEpE,4DAA4D;YAC5D,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtC,OAAO,IAAI,YAAY,CAAC;oBACpB,gBAAgB,EAAE,CAAC,CAAC,EAAE;oBACtB,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;oBACvB,cAAc,EAAE,IAAI,CAAC,cAAc;oBACnC,YAAY,EAAE,EAAE,CAAC,IAAI;oBACrB,aAAa,EAAE,CAAC,CAAC,mFAAmF;iBACvG,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,uCAAuC;YACvC,IAAI,CAAC,kBAAkB,GAAG;gBACtB,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU;gBAC9E,UAAU,EAAE,KAAK;gBACjB,oBAAoB,EAAE,IAAI;aAC7B,CAAC;YAEF,yCAAyC;YACzC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC;IAEO,eAAe;QACnB,MAAM,IAAI,GAAa;YACnB,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE;SACpD,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC;gBACN,UAAU,EAAE,GAAG,CAAC,iBAAiB;gBACjC,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE;oBACpB,OAAO,mBAAmB,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvE,CAAC;aACJ,CAAC,CAAC;QACP,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IAC3B,CAAC;IAEO,iBAAiB;QACrB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACjE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CACrE,CAAC;YACF,IAAI,UAAU,EAAE,CAAC;gBACb,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;yRA1MQ,2BAA2B,yBAA3B,2BAA2B;6DAA3B,2BAA2B;YCjCxC,8BAAuB;YACnB,yGAAY;YAcd,iBAAM;;YAdJ,cAaC;YAbD,mCAaC;;;iFDmBQ,2BAA2B;cANvC,SAAS;6BACI,KAAK,YACP,wBAAwB;;kBAK/B,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBAKL,KAAK;;kBAEL,KAAK;;kBACL,MAAM;;kFAZE,2BAA2B","sourcesContent":["import { AfterViewInit, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { EntityFieldInfo, RunView, UserInfo } from '@memberjunction/core';\nimport { ResourcePermissionEngine, MJResourcePermissionEntity } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { MJ_AG_GRID_THEME_PARAMS } from '@memberjunction/ng-shared-generic';\nimport { FormatSimpleRowCell } from './format-cell';\nimport {\n ColDef,\n GridReadyEvent,\n GridApi,\n GetRowIdParams,\n ModuleRegistry,\n AllCommunityModule,\n RowSelectionOptions,\n SelectionChangedEvent,\n themeAlpine,\n type Theme\n} from 'ag-grid-community';\n\n// Register AG Grid modules\nModuleRegistry.registerModules([AllCommunityModule]);\n\n/**\n * This component displays a list of available resources for a user for a specific Resource Type.\n */\n@Component({\n standalone: false,\n selector: 'mj-available-resources',\n templateUrl: './available-resources.component.html',\n styleUrls: ['./available-resources.component.css']\n})\nexport class AvailableResourcesComponent extends BaseAngularComponent implements AfterViewInit {\n @Input() User!: UserInfo;\n @Input() ResourceTypeID!: string;\n @Input() ResourceExtraFilter?: string;\n @Input() SelectionMode: 'Single' | 'Multiple' = 'Single';\n\n /**\n * Optional, comma-delimited list of field names to provide extra columns here to display in the grid. These columns will be displayed after the Name of the resource\n */\n @Input() ExtraColumns: string = \"\";\n\n @Input() SelectedResources: ResourceData[] = [];\n @Output() SelectionChanged = new EventEmitter<ResourceData[]>();\n\n public GridExtraColumns: EntityFieldInfo[] = [];\n\n /** @deprecated Use {@link GridExtraColumns}. */\n public get gridExtraColumns(): EntityFieldInfo[] {\n return this.GridExtraColumns;\n }\n /** @deprecated Use {@link GridExtraColumns}. */\n public set gridExtraColumns(value: EntityFieldInfo[]) {\n this.GridExtraColumns = value;\n }\n\n // AG Grid configuration\n public ColumnDefs: ColDef[] = [];\n public DefaultColDef: ColDef = {\n sortable: true,\n resizable: true,\n filter: false\n };\n public RowSelectionConfig: RowSelectionOptions = {\n mode: 'singleRow',\n checkboxes: false,\n enableClickSelection: true\n };\n // Themed from the shared --mj-* token params so this grid follows light/dark and\n // the org brand overlay, matching the main entity/query grids.\n public GridTheme: Theme = themeAlpine.withParams(MJ_AG_GRID_THEME_PARAMS);\n private gridApi: GridApi | null = null;\n\n public GetRowId = (params: GetRowIdParams<ResourceData>): string => {\n return params.data.ResourceRecordID;\n };\n\n /** @deprecated Use {@link GetRowId}. */\n public get getRowId() {\n return this.GetRowId;\n }\n /** @deprecated Use {@link GetRowId}. */\n public set getRowId(value) {\n this.GetRowId = value;\n }\n\n public OnGridReady(event: GridReadyEvent): void {\n this.gridApi = event.api;\n this.applyPreselection();\n }\n\n /** @deprecated Use {@link OnGridReady}. */\n public onGridReady(event: GridReadyEvent): void {\n return this.OnGridReady(event);\n }\n\n public OnSelectionChange(event: SelectionChangedEvent): void {\n const selectedRows = event.api.getSelectedRows() as ResourceData[];\n this.SelectedResources.splice(0, this.SelectedResources.length); // empty the array\n selectedRows.forEach((item) => {\n this.SelectedResources.push(item);\n });\n\n // now bubble up the event\n this.SelectionChanged.emit(this.SelectedResources);\n }\n\n /** @deprecated Use {@link OnSelectionChange}. */\n public onSelectionChange(event: SelectionChangedEvent): void {\n return this.OnSelectionChange(event);\n }\n\n public ResourcePermissions: MJResourcePermissionEntity[] = [];\n\n /** @deprecated Use {@link ResourcePermissions}. */\n public get resourcePermissions(): MJResourcePermissionEntity[] {\n return this.ResourcePermissions;\n }\n /** @deprecated Use {@link ResourcePermissions}. */\n public set resourcePermissions(value: MJResourcePermissionEntity[]) {\n this.ResourcePermissions = value;\n }\n public Resources: ResourceData[] = [];\n\n /** @deprecated Use {@link Resources}. */\n public get resources(): ResourceData[] {\n return this.Resources;\n }\n /** @deprecated Use {@link Resources}. */\n public set resources(value: ResourceData[]) {\n this.Resources = value;\n }\n async ngAfterViewInit() {\n await this.Refresh();\n }\n\n /**\n * This method will refresh the contents of the component based on the current state of the component.\n */\n public async Refresh() {\n if (!this.User) {\n throw new Error('User is a required property for the AvailableResourcesDialogComponent');\n }\n\n // now we can get the permissions for the specified resource\n this.ResourcePermissions = ResourcePermissionEngine.Instance.GetUserAvailableResources(this.User, this.ResourceTypeID);\n if (this.ResourcePermissions.length === 0) {\n this.Resources = [];\n }\n else {\n const rt = ResourcePermissionEngine.Instance.ResourceTypes.find(rt => UUIDsEqual(rt.ID, this.ResourceTypeID));\n if (!rt || !rt.EntityID)\n throw new Error(`Resource Type ${this.ResourceTypeID} not found`);\n\n const p = this.ProviderToUse;\n const entity = p.Entities.find(e => UUIDsEqual(e.ID, rt.EntityID));\n if (!entity || !entity.NameField)\n throw new Error(`Entity ${rt.EntityID} not found, or no Name field defined`);\n const rv = new RunView(this.RunViewToUse);\n const nameField = entity.NameField;\n if (this.ExtraColumns && this.ExtraColumns.length > 0) {\n /// split the comma delim string and for each item find it in the EntityFields collection\n const extraColumns = this.ExtraColumns.split(',');\n this.GridExtraColumns = [];\n extraColumns.forEach((ec) => {\n const field = entity.Fields.find((f) => f.Name.trim().toLowerCase() === ec.trim().toLowerCase());\n if (field)\n this.GridExtraColumns.push(field);\n });\n }\n\n // Build column definitions after we know the extra columns\n this.buildColumnDefs();\n\n const extraFilter = this.ResourceExtraFilter ? ` AND (${this.ResourceExtraFilter})` : '';\n const result = await rv.RunView({\n EntityName: entity.Name,\n ExtraFilter: `(ID in (${this.ResourcePermissions.map((r) => `'${r.ResourceRecordID}'`).join(',')})${extraFilter})`,\n OrderBy: nameField.Name\n })\n if (!result || !result.Success)\n throw new Error(`Error running view for entity ${entity.Name}`);\n\n // only return rows where we have a record in result.Results\n this.Resources = result.Results.map((r) => {\n return new ResourceData({\n ResourceRecordID: r.ID,\n Name: r[nameField.Name],\n ResourceTypeID: this.ResourceTypeID,\n ResourceType: rt.Name,\n Configuration: r // pass the whole resource record into configuration so it is accessible as desired\n });\n });\n\n // Update selection mode based on input\n this.RowSelectionConfig = {\n mode: this.SelectionMode.toLowerCase() === 'single' ? 'singleRow' : 'multiRow',\n checkboxes: false,\n enableClickSelection: true\n };\n\n // Re-apply preselection after data loads\n this.applyPreselection();\n }\n }\n\n private buildColumnDefs(): void {\n const cols: ColDef[] = [\n { field: 'Name', headerName: 'Name', width: 225 }\n ];\n\n for (const col of this.GridExtraColumns) {\n cols.push({\n headerName: col.DisplayNameOrName,\n valueGetter: (params) => {\n return FormatSimpleRowCell(params.data?.Configuration?.[col.Name]);\n }\n });\n }\n\n this.ColumnDefs = cols;\n }\n\n private applyPreselection(): void {\n if (!this.gridApi || this.SelectedResources.length === 0) return;\n this.gridApi.forEachNode((node) => {\n const isSelected = this.SelectedResources.some(\n (r) => UUIDsEqual(r.ResourceRecordID, node.data?.ResourceRecordID)\n );\n if (isSelected) {\n node.setSelected(true);\n }\n });\n }\n}\n","<div class=\"container\">\n @if (User) {\n <ag-grid-angular\n class=\"resources-grid\"\n [theme]=\"GridTheme\"\n [rowData]=\"resources\"\n [columnDefs]=\"ColumnDefs\"\n [defaultColDef]=\"DefaultColDef\"\n [rowSelection]=\"RowSelectionConfig\"\n [getRowId]=\"getRowId\"\n (selectionChanged)=\"onSelectionChange($event)\"\n (gridReady)=\"onGridReady($event)\"\n style=\"width: 100%; height: 400px;\">\n </ag-grid-angular>\n }\n </div>\n"]}
|
|
@@ -33,6 +33,8 @@ export declare class RequestResourceAccessComponent extends BaseAngularComponent
|
|
|
33
33
|
ResourceTypeObject: MJResourceTypeEntity;
|
|
34
34
|
AfterRequest: boolean;
|
|
35
35
|
ngOnInit(): Promise<void>;
|
|
36
|
+
RequestAccess(): Promise<void>;
|
|
37
|
+
/** @deprecated Use {@link RequestAccess}. */
|
|
36
38
|
requestAccess(): Promise<void>;
|
|
37
39
|
static ɵfac: i0.ɵɵFactoryDeclaration<RequestResourceAccessComponent, never>;
|
|
38
40
|
static ɵcmp: i0.ɵɵComponentDeclaration<RequestResourceAccessComponent, "mj-request-resource-access", never, { "ResourceType": { "alias": "ResourceType"; "required": false; }; "ResourceName": { "alias": "ResourceName"; "required": false; }; "ResourceRecordID": { "alias": "ResourceRecordID"; "required": false; }; "PermissionLevel": { "alias": "PermissionLevel"; "required": false; }; "ShowPermissionLevelDropdown": { "alias": "ShowPermissionLevelDropdown"; "required": false; }; }, { "AccessRequested": "AccessRequested"; }, never, never, false, never>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-access.component.d.ts","sourceRoot":"","sources":["../../src/lib/request-access.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAS,MAAM,EAAU,MAAM,eAAe,CAAC;AAE/E,OAAO,EAA4B,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC3H,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAGrE;;GAEG;AACH,qBAMa,8BAAgC,SAAQ,oBAAqB,YAAW,MAAM;IACvF;;OAEG;IACM,YAAY,EAAG,MAAM,CAAC;IAE/B;;OAEG;IACM,YAAY,EAAE,MAAM,CAAI;IACjC;;OAEG;IACM,gBAAgB,EAAG,MAAM,CAAC;IAEnC;;OAEG;IACM,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAU;IAE7D;;OAEG;IACM,2BAA2B,EAAE,OAAO,CAAQ;IAE3C,eAAe,2CAAkD;IAE3E;;OAEG;IACI,kBAAkB,EAAG,oBAAoB,CAAC;IAC1C,YAAY,EAAE,OAAO,CAAS;IAE/B,QAAQ;IAQD,aAAa;
|
|
1
|
+
{"version":3,"file":"request-access.component.d.ts","sourceRoot":"","sources":["../../src/lib/request-access.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAS,MAAM,EAAU,MAAM,eAAe,CAAC;AAE/E,OAAO,EAA4B,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC3H,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAGrE;;GAEG;AACH,qBAMa,8BAAgC,SAAQ,oBAAqB,YAAW,MAAM;IACvF;;OAEG;IACM,YAAY,EAAG,MAAM,CAAC;IAE/B;;OAEG;IACM,YAAY,EAAE,MAAM,CAAI;IACjC;;OAEG;IACM,gBAAgB,EAAG,MAAM,CAAC;IAEnC;;OAEG;IACM,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAU;IAE7D;;OAEG;IACM,2BAA2B,EAAE,OAAO,CAAQ;IAE3C,eAAe,2CAAkD;IAE3E;;OAEG;IACI,kBAAkB,EAAG,oBAAoB,CAAC;IAC1C,YAAY,EAAE,OAAO,CAAS;IAE/B,QAAQ;IAQD,aAAa;IAsB1B,6CAA6C;IAChC,aAAa;yCAhEjB,8BAA8B;2CAA9B,8BAA8B;CAmE1C"}
|
|
@@ -85,7 +85,7 @@ export class RequestResourceAccessComponent extends BaseAngularComponent {
|
|
|
85
85
|
else
|
|
86
86
|
throw new Error(`Resource Type ${this.ResourceType} not found`);
|
|
87
87
|
}
|
|
88
|
-
async
|
|
88
|
+
async RequestAccess() {
|
|
89
89
|
const p = this.ProviderToUse;
|
|
90
90
|
const permission = await p.GetEntityObject("MJ: Resource Permissions", p.CurrentUser);
|
|
91
91
|
permission.ResourceTypeID = this.ResourceTypeObject.ID;
|
|
@@ -106,6 +106,10 @@ export class RequestResourceAccessComponent extends BaseAngularComponent {
|
|
|
106
106
|
MJNotificationService.Instance.CreateSimpleNotification(`Failed to request access to ${this.ResourceType} record ${this.ResourceName} (${this.ResourceRecordID})`, 'error', 5000);
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
|
+
/** @deprecated Use {@link RequestAccess}. */
|
|
110
|
+
async requestAccess() {
|
|
111
|
+
return this.RequestAccess();
|
|
112
|
+
}
|
|
109
113
|
static ɵfac = /*@__PURE__*/ (() => { let ɵRequestResourceAccessComponent_BaseFactory; return function RequestResourceAccessComponent_Factory(__ngFactoryType__) { return (ɵRequestResourceAccessComponent_BaseFactory || (ɵRequestResourceAccessComponent_BaseFactory = i0.ɵɵgetInheritedFactory(RequestResourceAccessComponent)))(__ngFactoryType__ || RequestResourceAccessComponent); }; })();
|
|
110
114
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RequestResourceAccessComponent, selectors: [["mj-request-resource-access"]], inputs: { ResourceType: "ResourceType", ResourceName: "ResourceName", ResourceRecordID: "ResourceRecordID", PermissionLevel: "PermissionLevel", ShowPermissionLevelDropdown: "ShowPermissionLevelDropdown" }, outputs: { AccessRequested: "AccessRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 12, vars: 5, consts: [[1, "request-access-container"], [1, "request-icon"], [1, "fas", "fa-lock"], [1, "request-info"], [1, "request-actions"], ["for", "permissionLevel"], [3, "ngModelChange", "ngModel"], ["value", "View"], ["value", "Edit"], ["value", "Owner"], ["mjButton", "", 1, "request-button", 3, "click"], [1, "fas", "fa-paper-plane"]], template: function RequestResourceAccessComponent_Template(rf, ctx) { if (rf & 1) {
|
|
111
115
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-access.component.js","sourceRoot":"","sources":["../../src/lib/request-access.component.ts","../../src/lib/request-access.component.html"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"request-access.component.js","sourceRoot":"","sources":["../../src/lib/request-access.component.ts","../../src/lib/request-access.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { LogError, Metadata } from '@memberjunction/core';\nimport { ResourcePermissionEngine, MJResourcePermissionEntity, MJResourceTypeEntity } from '@memberjunction/core-entities';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\n\n/**\n * Use this component to display to the user the ability to request access to a resource they do not own and do not currently have permission to access\n */\n@Component({\n standalone: false,\n selector: 'mj-request-resource-access',\n templateUrl: './request-access.component.html',\n styleUrls: ['./request-access.component.css']\n})\nexport class RequestResourceAccessComponent extends BaseAngularComponent implements OnInit {\n /**\n * The name of the resource type that the user is requesting access to\n */\n @Input() ResourceType!: string;\n\n /**\n * Optional, the name of the resource that the user is requesting access to that will be displayed to the user\n */\n @Input() ResourceName: string=\"\";\n /**\n * The resource record ID that the user is requesting access to\n */\n @Input() ResourceRecordID!: string;\n\n /** \n * The default value for the permission level\n */\n @Input() PermissionLevel: 'View' | 'Edit' | 'Owner' = 'View';\n\n /**\n * Turn this off to not show the user the permission level drop down which would result in the default value for the PermissionLevel being requested.\n */\n @Input() ShowPermissionLevelDropdown: boolean = true;\n\n @Output() AccessRequested = new EventEmitter<MJResourcePermissionEntity>();\n\n /**\n * The resource type object that the user is requesting access to for all info on the resource type\n */\n public ResourceTypeObject!: MJResourceTypeEntity;\n public AfterRequest: boolean = false;\n\n async ngOnInit() {\n const rt = ResourcePermissionEngine.Instance.ResourceTypes.find(x => x.Name.trim().toLowerCase() === this.ResourceType.trim().toLowerCase()); \n if (rt) \n this.ResourceTypeObject = rt;\n else\n throw new Error(`Resource Type ${this.ResourceType} not found`);\n }\n\n public async RequestAccess() {\n const p = this.ProviderToUse;\n const permission = await p.GetEntityObject<MJResourcePermissionEntity>(\"MJ: Resource Permissions\", p.CurrentUser);\n permission.ResourceTypeID = this.ResourceTypeObject.ID;\n permission.ResourceRecordID = this.ResourceRecordID;\n permission.Status = 'Requested';\n permission.Type = 'User';\n permission.UserID = p.CurrentUser.ID; \n permission.PermissionLevel = this.PermissionLevel;\n if (await permission.Save()) {\n // worked, fire the event. \n // NOTE - the notification creatd to notify the resource owner happens in the MJResourcePermissionEntity sub-class not here in the UI\n this.AccessRequested.emit(permission);\n this.AfterRequest = true;\n }\n else {\n //failed\n LogError(`Failed to request access to ${this.ResourceType} record ${this.ResourceRecordID}`, undefined, permission.LatestResult);\n MJNotificationService.Instance.CreateSimpleNotification(`Failed to request access to ${this.ResourceType} record ${this.ResourceName} (${this.ResourceRecordID})`, 'error', 5000);\n }\n }\n\n /** @deprecated Use {@link RequestAccess}. */\n public async requestAccess() {\n return this.RequestAccess();\n }\n}","<div class=\"request-access-container\">\n <div class=\"request-icon\">\n <i class=\"fas fa-lock\"></i>\n </div>\n <div class=\"request-info\">\n <h3>Request Access</h3>\n <h5>{{ResourceType ? ResourceType : 'Resource'}}{{ResourceName ? ': ' + ResourceName : ''}}</h5>\n @if (!AfterRequest){\n <p> You do not have access to this resource. Click the button below to request access.</p>\n }\n @else {\n <h3>Your request has been submitted</h3>\n <p> You will be notified when your request has been processed.</p>\n }\n @if(ShowPermissionLevelDropdown && !AfterRequest) {\n <span>\n <label for=\"permissionLevel\">Permission Level:</label>\n <select [(ngModel)] = \"PermissionLevel\">\n <option value=\"View\">View</option>\n <option value=\"Edit\">Edit</option>\n <option value=\"Owner\">Owner</option> \n </select>\n </span> \n }\n </div>\n @if (!AfterRequest) {\n <div class=\"request-actions\">\n <button mjButton class=\"request-button\" (click)=\"requestAccess()\">\n <i class=\"fas fa-paper-plane\"></i> Request Access\n </button>\n </div> \n }\n</div>\n"]}
|
|
@@ -68,14 +68,28 @@ export declare class ResourcePermissionsComponent extends BaseAngularComponent i
|
|
|
68
68
|
SelectedRole: RoleInfo | null;
|
|
69
69
|
SelectedType: 'User' | 'Role';
|
|
70
70
|
SelectedPermissionLevel: 'View' | 'Edit' | 'Owner';
|
|
71
|
-
|
|
71
|
+
Loading: boolean;
|
|
72
|
+
/** @deprecated Use {@link Loading}. */
|
|
73
|
+
get _Loading(): boolean;
|
|
74
|
+
/** @deprecated Use {@link Loading}. */
|
|
75
|
+
set _Loading(value: boolean);
|
|
72
76
|
UpdateResourceRecordID(ResourceRecordID: string): Promise<void>;
|
|
73
|
-
|
|
77
|
+
ResourcePermissions: MJResourcePermissionEntity[];
|
|
78
|
+
/** @deprecated Use {@link ResourcePermissions}. */
|
|
79
|
+
get resourcePermissions(): MJResourcePermissionEntity[];
|
|
80
|
+
/** @deprecated Use {@link ResourcePermissions}. */
|
|
81
|
+
set resourcePermissions(value: MJResourcePermissionEntity[]);
|
|
74
82
|
ngAfterViewInit(): Promise<void>;
|
|
75
83
|
private _pendingDeletes;
|
|
84
|
+
DeletePermission(permission: MJResourcePermissionEntity): void;
|
|
85
|
+
/** @deprecated Use {@link DeletePermission}. */
|
|
76
86
|
deletePermission(permission: MJResourcePermissionEntity): void;
|
|
77
87
|
private _pendingAdds;
|
|
88
|
+
AddPermission(): Promise<void>;
|
|
89
|
+
/** @deprecated Use {@link AddPermission}. */
|
|
78
90
|
addPermission(): Promise<void>;
|
|
91
|
+
PermissionAlreadyExists(): boolean;
|
|
92
|
+
/** @deprecated Use {@link PermissionAlreadyExists}. */
|
|
79
93
|
permissionAlreadyExists(): boolean;
|
|
80
94
|
SavePermissions(): Promise<boolean>;
|
|
81
95
|
protected GetEngine(): ResourcePermissionEngine;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-permissions.component.d.ts","sourceRoot":"","sources":["../../src/lib/resource-permissions.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,MAAM,eAAe,CAAC;AAChE,OAAO,EAAY,QAAQ,EAAW,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAEnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAGrE;;;GAGG;AACH,qBAMa,4BAA6B,SAAQ,oBAAqB,YAAW,aAAa;IAC7F;;OAEG;IACM,cAAc,EAAG,MAAM,CAAC;IACjC;;OAEG;IACM,gBAAgB,EAAG,MAAM,CAAC;IACnC;;;;OAIG;IACM,cAAc,EAAE,OAAO,CAAS;IACzC;;;OAGG;IACM,oBAAoB,EAAE,OAAO,CAAQ;IAC9C;;;OAGG;IACM,qBAAqB,EAAE,OAAO,CAAS;IAChD;;OAEG;IACM,mBAAmB,EAAE,OAAO,CAAQ;IAC7C;;OAEG;IACM,oBAAoB,EAAE,OAAO,CAAQ;IAC9C;;OAEG;IACM,sBAAsB,EAAE,OAAO,CAAQ;IAEhD;;OAEG;IACM,gBAAgB,WAA6B;IAEtD;;OAEG;IACM,eAAe,WAAoB;IAE5C;;;OAGG;IACM,iBAAiB,EAAE,MAAM,EAAE,CAAM;IAE1C;;;OAGG;IACM,kBAAkB,EAAE,MAAM,EAAE,CAAM;IAEpC,QAAQ,EAAE,YAAY,EAAE,CAAM;IAC9B,QAAQ,EAAE,QAAQ,EAAE,CAAM;IAE1B,YAAY,EAAE,YAAY,GAAG,IAAI,CAAQ;IACzC,YAAY,EAAE,QAAQ,GAAG,IAAI,CAAQ;IACrC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAU;IACvC,uBAAuB,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAU;IAE5D,
|
|
1
|
+
{"version":3,"file":"resource-permissions.component.d.ts","sourceRoot":"","sources":["../../src/lib/resource-permissions.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,MAAM,eAAe,CAAC;AAChE,OAAO,EAAY,QAAQ,EAAW,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAEnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAGrE;;;GAGG;AACH,qBAMa,4BAA6B,SAAQ,oBAAqB,YAAW,aAAa;IAC7F;;OAEG;IACM,cAAc,EAAG,MAAM,CAAC;IACjC;;OAEG;IACM,gBAAgB,EAAG,MAAM,CAAC;IACnC;;;;OAIG;IACM,cAAc,EAAE,OAAO,CAAS;IACzC;;;OAGG;IACM,oBAAoB,EAAE,OAAO,CAAQ;IAC9C;;;OAGG;IACM,qBAAqB,EAAE,OAAO,CAAS;IAChD;;OAEG;IACM,mBAAmB,EAAE,OAAO,CAAQ;IAC7C;;OAEG;IACM,oBAAoB,EAAE,OAAO,CAAQ;IAC9C;;OAEG;IACM,sBAAsB,EAAE,OAAO,CAAQ;IAEhD;;OAEG;IACM,gBAAgB,WAA6B;IAEtD;;OAEG;IACM,eAAe,WAAoB;IAE5C;;;OAGG;IACM,iBAAiB,EAAE,MAAM,EAAE,CAAM;IAE1C;;;OAGG;IACM,kBAAkB,EAAE,MAAM,EAAE,CAAM;IAEpC,QAAQ,EAAE,YAAY,EAAE,CAAM;IAC9B,QAAQ,EAAE,QAAQ,EAAE,CAAM;IAE1B,YAAY,EAAE,YAAY,GAAG,IAAI,CAAQ;IACzC,YAAY,EAAE,QAAQ,GAAG,IAAI,CAAQ;IACrC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAU;IACvC,uBAAuB,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAU;IAE5D,OAAO,EAAE,OAAO,CAAS;IAEhC,uCAAuC;IACvC,IAAW,QAAQ,IAAI,OAAO,CAE7B;IACD,uCAAuC;IACvC,IAAW,QAAQ,CAAC,KAAK,EAAE,OAAO,EAEjC;IAEY,sBAAsB,CAAC,gBAAgB,EAAE,MAAM;IAQrD,mBAAmB,EAAE,0BAA0B,EAAE,CAAM;IAE9D,mDAAmD;IACnD,IAAW,mBAAmB,IAAI,0BAA0B,EAAE,CAE7D;IACD,mDAAmD;IACnD,IAAW,mBAAmB,CAAC,KAAK,EAAE,0BAA0B,EAAE,EAEjE;IACK,eAAe;IAkCrB,OAAO,CAAC,eAAe,CAAoC;IACpD,gBAAgB,CAAC,UAAU,EAAE,0BAA0B;IAK9D,gDAAgD;IACzC,gBAAgB,CAAC,UAAU,EAAE,0BAA0B;IAI9D,OAAO,CAAC,YAAY,CAAoC;IAC3C,aAAa;IAuB1B,6CAA6C;IAChC,aAAa;IAInB,uBAAuB,IAAI,OAAO;IAkBzC,uDAAuD;IAChD,uBAAuB,IAAI,OAAO;IAI5B,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAwEhD,SAAS,CAAC,SAAS,IAAI,wBAAwB;yCA1QpC,4BAA4B;2CAA5B,4BAA4B;CA6QxC"}
|
|
@@ -212,26 +212,42 @@ export class ResourcePermissionsComponent extends BaseAngularComponent {
|
|
|
212
212
|
SelectedRole = null;
|
|
213
213
|
SelectedType = 'Role';
|
|
214
214
|
SelectedPermissionLevel = 'View';
|
|
215
|
-
|
|
215
|
+
Loading = false;
|
|
216
|
+
/** @deprecated Use {@link Loading}. */
|
|
217
|
+
get _Loading() {
|
|
218
|
+
return this.Loading;
|
|
219
|
+
}
|
|
220
|
+
/** @deprecated Use {@link Loading}. */
|
|
221
|
+
set _Loading(value) {
|
|
222
|
+
this.Loading = value;
|
|
223
|
+
}
|
|
216
224
|
async UpdateResourceRecordID(ResourceRecordID) {
|
|
217
225
|
this.ResourceRecordID = ResourceRecordID;
|
|
218
226
|
// now go through all of our permissions and update the ResourceRecordID
|
|
219
|
-
for (const permission of this.
|
|
227
|
+
for (const permission of this.ResourcePermissions) {
|
|
220
228
|
permission.ResourceRecordID = ResourceRecordID;
|
|
221
229
|
}
|
|
222
230
|
}
|
|
223
|
-
|
|
231
|
+
ResourcePermissions = [];
|
|
232
|
+
/** @deprecated Use {@link ResourcePermissions}. */
|
|
233
|
+
get resourcePermissions() {
|
|
234
|
+
return this.ResourcePermissions;
|
|
235
|
+
}
|
|
236
|
+
/** @deprecated Use {@link ResourcePermissions}. */
|
|
237
|
+
set resourcePermissions(value) {
|
|
238
|
+
this.ResourcePermissions = value;
|
|
239
|
+
}
|
|
224
240
|
async ngAfterViewInit() {
|
|
225
241
|
if (!this.ResourceTypeID || !this.ResourceRecordID) {
|
|
226
242
|
throw new Error('ResourceTypeID and ResourceRecordID must be set');
|
|
227
243
|
}
|
|
228
|
-
this.
|
|
244
|
+
this.Loading = true;
|
|
229
245
|
// load up the current permissions for the specified ResourceTypeID and ResourceRecordID
|
|
230
246
|
const engine = this.GetEngine();
|
|
231
247
|
await engine.Config(false, this.ProviderToUse.CurrentUser, this.ProviderToUse);
|
|
232
248
|
// now we can get the permissions for the specified resource
|
|
233
249
|
const allResourcePermissions = engine.GetResourcePermissions(this.ResourceTypeID, this.ResourceRecordID);
|
|
234
|
-
this.
|
|
250
|
+
this.ResourcePermissions = allResourcePermissions.filter((p) => p.Status === 'Approved'); // only include approved permissions in the UI, we don't show requested, rejected, revoked permissions here, just suppress them.
|
|
235
251
|
const p = this.ProviderToUse;
|
|
236
252
|
const rv = RunView.FromMetadataProvider(p);
|
|
237
253
|
const result = await rv.RunView({
|
|
@@ -248,15 +264,19 @@ export class ResourcePermissionsComponent extends BaseAngularComponent {
|
|
|
248
264
|
this.SelectedUser = this.AllUsers[0];
|
|
249
265
|
if (this.AllRoles.length > 0)
|
|
250
266
|
this.SelectedRole = this.AllRoles[0];
|
|
251
|
-
this.
|
|
267
|
+
this.Loading = false;
|
|
252
268
|
}
|
|
253
269
|
_pendingDeletes = [];
|
|
254
|
-
|
|
270
|
+
DeletePermission(permission) {
|
|
255
271
|
this._pendingDeletes.push(permission);
|
|
256
|
-
this.
|
|
272
|
+
this.ResourcePermissions = this.ResourcePermissions.filter((p) => p !== permission);
|
|
273
|
+
}
|
|
274
|
+
/** @deprecated Use {@link DeletePermission}. */
|
|
275
|
+
deletePermission(permission) {
|
|
276
|
+
return this.DeletePermission(permission);
|
|
257
277
|
}
|
|
258
278
|
_pendingAdds = [];
|
|
259
|
-
async
|
|
279
|
+
async AddPermission() {
|
|
260
280
|
const p = this.ProviderToUse;
|
|
261
281
|
const permission = await p.GetEntityObject("MJ: Resource Permissions", p.CurrentUser);
|
|
262
282
|
permission.ResourceTypeID = this.ResourceTypeID;
|
|
@@ -276,12 +296,16 @@ export class ResourcePermissionsComponent extends BaseAngularComponent {
|
|
|
276
296
|
LogError('Invalid permission type or missing user/role');
|
|
277
297
|
return;
|
|
278
298
|
}
|
|
279
|
-
this.
|
|
299
|
+
this.ResourcePermissions.push(permission);
|
|
280
300
|
}
|
|
281
|
-
|
|
301
|
+
/** @deprecated Use {@link AddPermission}. */
|
|
302
|
+
async addPermission() {
|
|
303
|
+
return this.AddPermission();
|
|
304
|
+
}
|
|
305
|
+
PermissionAlreadyExists() {
|
|
282
306
|
// check to see if the selection that the user currently has in place for the combination of TYPE + either USER or ROLE already exists
|
|
283
307
|
// in our list of permissions
|
|
284
|
-
for (const permission of this.
|
|
308
|
+
for (const permission of this.ResourcePermissions) {
|
|
285
309
|
if (permission.Type === this.SelectedType) {
|
|
286
310
|
if (this.SelectedType === 'User' && UUIDsEqual(permission.UserID, this.SelectedUser?.ID)) {
|
|
287
311
|
return true;
|
|
@@ -294,9 +318,13 @@ export class ResourcePermissionsComponent extends BaseAngularComponent {
|
|
|
294
318
|
// if we get here, then the permission does not already exist
|
|
295
319
|
return false;
|
|
296
320
|
}
|
|
321
|
+
/** @deprecated Use {@link PermissionAlreadyExists}. */
|
|
322
|
+
permissionAlreadyExists() {
|
|
323
|
+
return this.PermissionAlreadyExists();
|
|
324
|
+
}
|
|
297
325
|
async SavePermissions() {
|
|
298
326
|
// first delete any permissions that were marked for deletion
|
|
299
|
-
this.
|
|
327
|
+
this.Loading = true;
|
|
300
328
|
const p = this.ProviderToUse;
|
|
301
329
|
const tg = await p.CreateTransactionGroup();
|
|
302
330
|
for (const permission of this._pendingDeletes) {
|
|
@@ -327,7 +355,7 @@ export class ResourcePermissionsComponent extends BaseAngularComponent {
|
|
|
327
355
|
}
|
|
328
356
|
}
|
|
329
357
|
// now save the existing permissions
|
|
330
|
-
for (const permission of this.
|
|
358
|
+
for (const permission of this.ResourcePermissions) {
|
|
331
359
|
// make sure not in the delete array
|
|
332
360
|
if (!this._pendingDeletes.includes(permission)) {
|
|
333
361
|
permission.TransactionGroup = tg;
|
|
@@ -342,7 +370,7 @@ export class ResourcePermissionsComponent extends BaseAngularComponent {
|
|
|
342
370
|
}
|
|
343
371
|
// now save the changes
|
|
344
372
|
if (await tg.Submit()) {
|
|
345
|
-
this.
|
|
373
|
+
this.Loading = false;
|
|
346
374
|
this._pendingDeletes = [];
|
|
347
375
|
this._pendingAdds = [];
|
|
348
376
|
const engine = this.GetEngine();
|
|
@@ -351,7 +379,7 @@ export class ResourcePermissionsComponent extends BaseAngularComponent {
|
|
|
351
379
|
}
|
|
352
380
|
else {
|
|
353
381
|
// we had an error, show the user via SharedService
|
|
354
|
-
this.
|
|
382
|
+
this.Loading = false;
|
|
355
383
|
if (this.ShowUserErrorMessages)
|
|
356
384
|
MJNotificationService.Instance.CreateSimpleNotification('Error saving permissions', 'error');
|
|
357
385
|
LogError('Error saving permissions in the transaction group');
|