@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.
@@ -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
- gridExtraColumns: EntityFieldInfo[];
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
- getRowId: (params: GetRowIdParams<ResourceData>) => string;
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
- resourcePermissions: MJResourcePermissionEntity[];
32
- resources: ResourceData[];
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;IAGzC,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;IAEK,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAKxC,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAWrD,mBAAmB,EAAE,0BAA0B,EAAE,CAAM;IACvD,SAAS,EAAE,YAAY,EAAE,CAAM;IAChC,eAAe;IAIrB;;OAEG;IACU,OAAO;IAmEpB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,iBAAiB;yCAlJhB,2BAA2B;2CAA3B,2BAA2B;CA6JvC"}
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
- gridExtraColumns = [];
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
- getRowId = (params) => {
62
+ GetRowId = (params) => {
55
63
  return params.data.ResourceRecordID;
56
64
  };
57
- onGridReady(event) {
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
- onSelectionChange(event) {
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
- resourcePermissions = [];
71
- resources = [];
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.resourcePermissions = ResourcePermissionEngine.Instance.GetUserAvailableResources(this.User, this.ResourceTypeID);
84
- if (this.resourcePermissions.length === 0) {
85
- this.resources = [];
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.gridExtraColumns = [];
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.gridExtraColumns.push(field);
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.resourcePermissions.map((r) => `'${r.ResourceRecordID}'`).join(',')})${extraFilter})`,
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.resources = result.Results.map((r) => {
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.gridExtraColumns) {
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;yCAzCjB,8BAA8B;2CAA9B,8BAA8B;CA8D1C"}
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 requestAccess() {
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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","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}","<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"]}
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
- _Loading: boolean;
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
- resourcePermissions: MJResourcePermissionEntity[];
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,QAAQ,EAAE,OAAO,CAAS;IAEpB,sBAAsB,CAAC,gBAAgB,EAAE,MAAM;IAQrD,mBAAmB,EAAE,0BAA0B,EAAE,CAAM;IACxD,eAAe;IAkCrB,OAAO,CAAC,eAAe,CAAoC;IACpD,gBAAgB,CAAC,UAAU,EAAE,0BAA0B;IAK9D,OAAO,CAAC,YAAY,CAAoC;IAC3C,aAAa;IAuBnB,uBAAuB,IAAI,OAAO;IAkB5B,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAwEhD,SAAS,CAAC,SAAS,IAAI,wBAAwB;yCAzOpC,4BAA4B;2CAA5B,4BAA4B;CA4OxC"}
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
- _Loading = false;
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.resourcePermissions) {
227
+ for (const permission of this.ResourcePermissions) {
220
228
  permission.ResourceRecordID = ResourceRecordID;
221
229
  }
222
230
  }
223
- resourcePermissions = [];
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._Loading = true;
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.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.
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._Loading = false;
267
+ this.Loading = false;
252
268
  }
253
269
  _pendingDeletes = [];
254
- deletePermission(permission) {
270
+ DeletePermission(permission) {
255
271
  this._pendingDeletes.push(permission);
256
- this.resourcePermissions = this.resourcePermissions.filter((p) => p !== permission);
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 addPermission() {
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.resourcePermissions.push(permission);
299
+ this.ResourcePermissions.push(permission);
280
300
  }
281
- permissionAlreadyExists() {
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.resourcePermissions) {
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._Loading = true;
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.resourcePermissions) {
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._Loading = false;
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._Loading = false;
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');