@memberjunction/ng-explorer-core 5.30.1 → 5.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/app-routing.module.d.ts +9 -0
  2. package/dist/app-routing.module.d.ts.map +1 -1
  3. package/dist/app-routing.module.js +13 -1
  4. package/dist/app-routing.module.js.map +1 -1
  5. package/dist/generated/lazy-feature-config.d.ts +1 -1
  6. package/dist/generated/lazy-feature-config.d.ts.map +1 -1
  7. package/dist/generated/lazy-feature-config.js +5 -3
  8. package/dist/generated/lazy-feature-config.js.map +1 -1
  9. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.d.ts +2 -1
  10. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.d.ts.map +1 -1
  11. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js +12 -11
  12. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js.map +1 -1
  13. package/dist/lib/guards/entities.guard.d.ts +2 -1
  14. package/dist/lib/guards/entities.guard.d.ts.map +1 -1
  15. package/dist/lib/guards/entities.guard.js +14 -1
  16. package/dist/lib/guards/entities.guard.js.map +1 -1
  17. package/dist/lib/oauth/oauth-callback.component.d.ts +2 -1
  18. package/dist/lib/oauth/oauth-callback.component.d.ts.map +1 -1
  19. package/dist/lib/oauth/oauth-callback.component.js +7 -6
  20. package/dist/lib/oauth/oauth-callback.component.js.map +1 -1
  21. package/dist/lib/resource-wrappers/artifact-resource.component.js +2 -3
  22. package/dist/lib/resource-wrappers/artifact-resource.component.js.map +1 -1
  23. package/dist/lib/resource-wrappers/chat-collections-resource.component.js +3 -3
  24. package/dist/lib/resource-wrappers/chat-collections-resource.component.js.map +1 -1
  25. package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +4 -4
  26. package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -1
  27. package/dist/lib/resource-wrappers/chat-tasks-resource.component.js +1 -2
  28. package/dist/lib/resource-wrappers/chat-tasks-resource.component.js.map +1 -1
  29. package/dist/lib/resource-wrappers/dashboard-resource.component.js +5 -5
  30. package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
  31. package/dist/lib/resource-wrappers/list-detail-resource.component.js +2 -2
  32. package/dist/lib/resource-wrappers/list-detail-resource.component.js.map +1 -1
  33. package/dist/lib/resource-wrappers/query-resource.component.js +2 -2
  34. package/dist/lib/resource-wrappers/query-resource.component.js.map +1 -1
  35. package/dist/lib/resource-wrappers/record-resource.component.d.ts +2 -2
  36. package/dist/lib/resource-wrappers/record-resource.component.d.ts.map +1 -1
  37. package/dist/lib/resource-wrappers/record-resource.component.js +8 -7
  38. package/dist/lib/resource-wrappers/record-resource.component.js.map +1 -1
  39. package/dist/lib/resource-wrappers/search-results-resource.component.js +3 -3
  40. package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
  41. package/dist/lib/resource-wrappers/view-resource.component.d.ts +1 -1
  42. package/dist/lib/resource-wrappers/view-resource.component.d.ts.map +1 -1
  43. package/dist/lib/resource-wrappers/view-resource.component.js +3 -3
  44. package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
  45. package/dist/lib/services/startup-validation.service.d.ts +9 -0
  46. package/dist/lib/services/startup-validation.service.d.ts.map +1 -1
  47. package/dist/lib/services/startup-validation.service.js +13 -1
  48. package/dist/lib/services/startup-validation.service.js.map +1 -1
  49. package/dist/lib/shell/components/tabs/tab-container.component.d.ts +2 -1
  50. package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
  51. package/dist/lib/shell/components/tabs/tab-container.component.js +7 -5
  52. package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
  53. package/dist/lib/shell/shell.component.d.ts +5 -2
  54. package/dist/lib/shell/shell.component.d.ts.map +1 -1
  55. package/dist/lib/shell/shell.component.js +43 -27
  56. package/dist/lib/shell/shell.component.js.map +1 -1
  57. package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts +3 -2
  58. package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts.map +1 -1
  59. package/dist/lib/single-dashboard/Components/add-item/add-item.component.js +8 -6
  60. package/dist/lib/single-dashboard/Components/add-item/add-item.component.js.map +1 -1
  61. package/dist/lib/single-dashboard/single-dashboard.component.js +1 -2
  62. package/dist/lib/single-dashboard/single-dashboard.component.js.map +1 -1
  63. package/dist/lib/single-list-detail/single-list-detail.component.d.ts +2 -1
  64. package/dist/lib/single-list-detail/single-list-detail.component.d.ts.map +1 -1
  65. package/dist/lib/single-list-detail/single-list-detail.component.js +18 -16
  66. package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
  67. package/dist/lib/single-record/single-record.component.d.ts +2 -1
  68. package/dist/lib/single-record/single-record.component.d.ts.map +1 -1
  69. package/dist/lib/single-record/single-record.component.js +7 -5
  70. package/dist/lib/single-record/single-record.component.js.map +1 -1
  71. package/dist/lib/single-search-result/single-search-result.component.d.ts +2 -1
  72. package/dist/lib/single-search-result/single-search-result.component.d.ts.map +1 -1
  73. package/dist/lib/single-search-result/single-search-result.component.js +8 -6
  74. package/dist/lib/single-search-result/single-search-result.component.js.map +1 -1
  75. package/dist/lib/user-notifications/user-notifications.component.d.ts +2 -1
  76. package/dist/lib/user-notifications/user-notifications.component.d.ts.map +1 -1
  77. package/dist/lib/user-notifications/user-notifications.component.js +9 -7
  78. package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
  79. package/dist/lib/user-profile/user-profile.component.d.ts +2 -1
  80. package/dist/lib/user-profile/user-profile.component.d.ts.map +1 -1
  81. package/dist/lib/user-profile/user-profile.component.js +6 -5
  82. package/dist/lib/user-profile/user-profile.component.js.map +1 -1
  83. package/package.json +42 -41
@@ -1,8 +1,9 @@
1
1
  import { EventEmitter, OnInit } from '@angular/core';
2
2
  import { MJResourceTypeEntity } from '@memberjunction/core-entities';
3
3
  import { SharedService } from '@memberjunction/ng-shared';
4
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
4
5
  import * as i0 from "@angular/core";
5
- export declare class AddItemComponent implements OnInit {
6
+ export declare class AddItemComponent extends BaseAngularComponent implements OnInit {
6
7
  private sharedService;
7
8
  onClose: EventEmitter<any>;
8
9
  selectedResource: MJResourceTypeEntity | null;
@@ -21,7 +22,7 @@ export declare class AddItemComponent implements OnInit {
21
22
  Views: any[];
22
23
  Reports: any[];
23
24
  get ResourceTypes(): any[];
24
- private md;
25
+ private get md();
25
26
  constructor(sharedService: SharedService);
26
27
  ngOnInit(): void;
27
28
  onResourceTypeChange(event: any): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"add-item.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/single-dashboard/Components/add-item/add-item.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAS,MAAM,EAAU,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,oBAAoB,EAAW,MAAM,+BAA+B,CAAC;AAE9E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;;AAE1D,qBAMa,gBAAiB,YAAW,MAAM;IAuBjC,OAAO,CAAC,aAAa;IAtBvB,OAAO,oBAA2B;IACnC,gBAAgB,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAChD,UAAU,EAAE,OAAO,CAAS;IAC5B,YAAY,EAAE,GAAG,CAAQ;IACzB,cAAc,EAAE,GAAG,CAAQ;IAC3B,YAAY,EAAE,GAAG,CAAQ;IACzB,cAAc,EAAE,GAAG,CAAQ;IAC3B,gBAAgB,EAAE,MAAM,CAAU;IAClC,eAAe;;;;QAKpB;IACK,QAAQ,EAAE,GAAG,EAAE,CAAM;IACrB,KAAK,EAAE,GAAG,EAAE,CAAM;IAClB,OAAO,EAAE,GAAG,EAAE,CAAM;IAC3B,IAAW,aAAa,IAAI,GAAG,EAAE,CAEhC;IACD,OAAO,CAAC,EAAE,CAA4B;gBAElB,aAAa,EAAE,aAAa;IAEhD,QAAQ,IAAI,IAAI;IASV,oBAAoB,CAAC,KAAK,EAAE,GAAG;IAQ/B,QAAQ;IAeR,UAAU;IAmBhB,cAAc,CAAC,KAAK,EAAE,GAAG;IAOzB,YAAY,CAAC,KAAK,EAAE,GAAG;IAQhB,OAAO;IAwCd,WAAW;yCAnIA,gBAAgB;2CAAhB,gBAAgB;CAsI5B"}
1
+ {"version":3,"file":"add-item.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/single-dashboard/Components/add-item/add-item.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAS,MAAM,EAAU,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,oBAAoB,EAAW,MAAM,+BAA+B,CAAC;AAE9E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AACrE,qBAMa,gBAAiB,SAAQ,oBAAqB,YAAW,MAAM;IAsB9D,OAAO,CAAC,aAAa;IArBvB,OAAO,oBAA2B;IACnC,gBAAgB,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAChD,UAAU,EAAE,OAAO,CAAS;IAC5B,YAAY,EAAE,GAAG,CAAQ;IACzB,cAAc,EAAE,GAAG,CAAQ;IAC3B,YAAY,EAAE,GAAG,CAAQ;IACzB,cAAc,EAAE,GAAG,CAAQ;IAC3B,gBAAgB,EAAE,MAAM,CAAU;IAClC,eAAe;;;;QAKpB;IACK,QAAQ,EAAE,GAAG,EAAE,CAAM;IACrB,KAAK,EAAE,GAAG,EAAE,CAAM;IAClB,OAAO,EAAE,GAAG,EAAE,CAAM;IAC3B,IAAW,aAAa,IAAI,GAAG,EAAE,CAEhC;IACD,OAAO,KAAK,EAAE,GAAiC;gBAC3B,aAAa,EAAE,aAAa;IAGhD,QAAQ,IAAI,IAAI;IASV,oBAAoB,CAAC,KAAK,EAAE,GAAG;IAQ/B,QAAQ;IAeR,UAAU;IAmBhB,cAAc,CAAC,KAAK,EAAE,GAAG;IAOzB,YAAY,CAAC,KAAK,EAAE,GAAG;IAQhB,OAAO;IAwCd,WAAW;yCAnIA,gBAAgB;2CAAhB,gBAAgB;CAsI5B"}
@@ -1,8 +1,9 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { Metadata, RunView } from '@memberjunction/core';
2
+ import { RunView } from '@memberjunction/core';
3
3
  import { ViewInfo } from '@memberjunction/core-entities';
4
4
  import { ResourceData } from '@memberjunction/core-entities';
5
5
  import { SharedService } from '@memberjunction/ng-shared';
6
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "@memberjunction/ng-shared";
8
9
  import * as i2 from "@angular/forms";
@@ -105,7 +106,7 @@ function AddItemComponent_Case_9_Template(rf, ctx) { if (rf & 1) {
105
106
  i0.ɵɵadvance();
106
107
  i0.ɵɵconditional(!ctx_r1.Reports.length && !ctx_r1.showloader ? 2 : -1);
107
108
  } }
108
- export class AddItemComponent {
109
+ export class AddItemComponent extends BaseAngularComponent {
109
110
  sharedService;
110
111
  onClose = new EventEmitter();
111
112
  selectedResource;
@@ -127,8 +128,9 @@ export class AddItemComponent {
127
128
  get ResourceTypes() {
128
129
  return SharedService.Instance.ResourceTypes.filter((rt) => rt.Name !== 'Dashboards' && rt.Name !== 'Records');
129
130
  }
130
- md = new Metadata();
131
+ get md() { return this.ProviderToUse; }
131
132
  constructor(sharedService) {
133
+ super();
132
134
  this.sharedService = sharedService;
133
135
  }
134
136
  ngOnInit() {
@@ -162,7 +164,7 @@ export class AddItemComponent {
162
164
  this.showloader = true;
163
165
  this.selectedReport = null;
164
166
  this.Reports = [];
165
- const rv = new RunView();
167
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
166
168
  const reports = await rv.RunView({ EntityName: this.resourceType.Entity, ExtraFilter: `UserID='${this.md.CurrentUser.ID}'` });
167
169
  if (reports.Success && reports.Results) {
168
170
  // Sort reports alphabetically
@@ -223,7 +225,7 @@ export class AddItemComponent {
223
225
  this.onClose.emit();
224
226
  }
225
227
  static ɵfac = function AddItemComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AddItemComponent)(i0.ɵɵdirectiveInject(i1.SharedService)); };
226
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AddItemComponent, selectors: [["app-add-item-dialog"]], inputs: { selectedResource: "selectedResource" }, outputs: { onClose: "onClose" }, standalone: false, decls: 16, vars: 10, consts: [[1, "k-overlay"], ["Title", "Add Item to Dashboard", 3, "Close", "Visible", "Width", "MinHeight", "MinWidth", "Resizable"], [1, "k-d-flex", "k-flex-col", "resource-wrap"], [3, "ValueChange", "ngModelChange", "Data", "TextField", "ValueField", "ngModel"], [1, "user-view-wrap"], [1, "k-actions", "k-actions-end", "popup-actions", "customBtn"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "fa-solid", "fa-check"], ["mjButton", "", "variant", "outline", 3, "click"], ["size", "medium", 3, "showText"], [3, "ngModelChange", "Data", "TextField", "ValueField", "ngModel"], [1, "optional-hint"], [1, "no-items-message"]], template: function AddItemComponent_Template(rf, ctx) { if (rf & 1) {
228
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AddItemComponent, selectors: [["app-add-item-dialog"]], inputs: { selectedResource: "selectedResource" }, outputs: { onClose: "onClose" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 16, vars: 10, consts: [[1, "k-overlay"], ["Title", "Add Item to Dashboard", 3, "Close", "Visible", "Width", "MinHeight", "MinWidth", "Resizable"], [1, "k-d-flex", "k-flex-col", "resource-wrap"], [3, "ValueChange", "ngModelChange", "Data", "TextField", "ValueField", "ngModel"], [1, "user-view-wrap"], [1, "k-actions", "k-actions-end", "popup-actions", "customBtn"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "fa-solid", "fa-check"], ["mjButton", "", "variant", "outline", 3, "click"], ["size", "medium", 3, "showText"], [3, "ngModelChange", "Data", "TextField", "ValueField", "ngModel"], [1, "optional-hint"], [1, "no-items-message"]], template: function AddItemComponent_Template(rf, ctx) { if (rf & 1) {
227
229
  i0.ɵɵelement(0, "div", 0);
228
230
  i0.ɵɵelementStart(1, "mj-window", 1);
229
231
  i0.ɵɵlistener("Close", function AddItemComponent_Template_mj_window_Close_1_listener() { return ctx.closeDialog(); });
@@ -265,5 +267,5 @@ export class AddItemComponent {
265
267
  }], selectedResource: [{
266
268
  type: Input
267
269
  }] }); })();
268
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AddItemComponent, { className: "AddItemComponent", filePath: "src/lib/single-dashboard/Components/add-item/add-item.component.ts", lineNumber: 13 }); })();
270
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AddItemComponent, { className: "AddItemComponent", filePath: "src/lib/single-dashboard/Components/add-item/add-item.component.ts", lineNumber: 14 }); })();
269
271
  //# sourceMappingURL=add-item.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-item.component.js","sourceRoot":"","sources":["../../../../../src/lib/single-dashboard/Components/add-item/add-item.component.ts","../../../../../src/lib/single-dashboard/Components/add-item/add-item.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { Metadata, RunView } from '@memberjunction/core';\nimport { MJResourceTypeEntity, ViewInfo} from '@memberjunction/core-entities';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { SharedService } from '@memberjunction/ng-shared';\n\n@Component({\n standalone: false,\n selector: 'app-add-item-dialog',\n templateUrl: './add-item.component.html',\n styleUrls: ['./add-item.component.css']\n})\nexport class AddItemComponent implements OnInit {\n @Output() onClose = new EventEmitter<any>();\n @Input() selectedResource!:MJResourceTypeEntity | null;\n public showloader: boolean = false;\n public resourceType: any = null;\n public selectedEntity: any = null;\n public selectedView: any = null;\n public selectedReport: any = null;\n public selectedViewMode: string = 'grid';\n public viewModeOptions = [\n { label: 'Grid', value: 'grid', icon: 'fa-solid fa-list' },\n { label: 'Cards', value: 'cards', icon: 'fa-solid fa-grip' },\n { label: 'Timeline', value: 'timeline', icon: 'fa-solid fa-timeline' },\n { label: 'Map', value: 'map', icon: 'fa-solid fa-map' }\n ];\n public Entities: any[] = [];\n public Views: any[] = [];\n public Reports: any[] = [];\n public get ResourceTypes(): any[] {\n return SharedService.Instance.ResourceTypes.filter((rt: any) => rt.Name !== 'Dashboards' && rt.Name !== 'Records');\n }\n private md: Metadata = new Metadata();\n\n constructor(private sharedService: SharedService) { }\n\n ngOnInit(): void {\n this.resourceType = this.selectedResource || SharedService.Instance.ViewResourceType;\n this.onResourceTypeChange(this.resourceType);\n // Sort entities alphabetically by name\n this.Entities = [...this.md.Entities].sort((a, b) => \n a.Name.localeCompare(b.Name)\n );\n }\n\n async onResourceTypeChange(event: any) {\n this.resourceType = event;\n this.selectedEntity = null;\n if (this.resourceType.Name === 'Reports') {\n this.getReports();\n }\n }\n\n async getViews() {\n if (!this.selectedEntity) return;\n \n this.showloader = true;\n this.Views = await ViewInfo.GetViewsForUser(this.selectedEntity.ID);\n \n // Sort views alphabetically\n if (this.Views && this.Views.length) {\n this.Views = this.Views.sort((a, b) => a.Name.localeCompare(b.Name));\n }\n \n // Always set showloader to false when done, even if no views found\n this.showloader = false;\n }\n\n async getReports() {\n if (!this.resourceType) return;\n \n this.showloader = true;\n this.selectedReport = null;\n this.Reports = [];\n \n const rv = new RunView();\n const reports = await rv.RunView({ EntityName: this.resourceType.Entity, ExtraFilter: `UserID='${this.md.CurrentUser.ID}'` });\n \n if (reports.Success && reports.Results) {\n // Sort reports alphabetically\n this.Reports = reports.Results.sort((a, b) => a.Name.localeCompare(b.Name));\n }\n \n // Always set showloader to false when done, even if no reports found\n this.showloader = false;\n }\n\n onEntityChange(event: any) {\n this.selectedEntity = event;\n this.selectedView = null;\n this.selectedReport = null;\n this.getViews();\n }\n\n onViewChange(event: any) {\n if (this.resourceType.Name === 'Reports') {\n this.selectedReport = event;\n } else {\n this.selectedView = event;\n }\n }\n\n public addItem() {\n // For views, allow \"Default View\" (no specific view selected) when an entity is chosen\n const isViewResource = this.resourceType?.Name === 'UserViews' || this.resourceType?.Entity === 'MJ: User Views';\n const isDefaultView = isViewResource && this.selectedEntity && !this.selectedView;\n\n if (!this.selectedReport && !this.selectedView && !isDefaultView) {\n this.sharedService.CreateSimpleNotification('Please select an item to add', 'warning', 2000);\n return;\n }\n\n const name = this.selectedReport?.Name || this.selectedView?.Name || (isDefaultView ? `${this.selectedEntity.Name} (Default View)` : null);\n const id = this.selectedReport?.ID || this.selectedView?.ID || null;\n\n // Build configuration — include viewMode for view resources\n const configuration: Record<string, unknown> = {};\n if (isViewResource && this.selectedViewMode && this.selectedViewMode !== 'grid') {\n configuration['viewMode'] = this.selectedViewMode;\n }\n if (isDefaultView && this.selectedEntity) {\n configuration['Entity'] = this.selectedEntity.Name;\n }\n\n const dashboardItem = {\n title: name ? name : 'New Item',\n col: 1,\n rowSpan: 3,\n colSpan: 2,\n ResourceData: new ResourceData({\n Name: name,\n ResourceType: this.resourceType.Name,\n ResourceTypeID: this.resourceType.ID,\n ResourceRecordID: id,\n Configuration: configuration\n }),\n };\n\n this.sharedService.CreateSimpleNotification(`Added \"${name}\" to dashboard`, 'success', 2000);\n this.onClose.emit(dashboardItem);\n }\n\n closeDialog() {\n this.onClose.emit();\n }\n}\n","<div class=\"k-overlay\"></div>\n<mj-window [Visible]=\"true\" [Width]=\"500\" [MinHeight]=\"300\" [MinWidth]=\"400\" [Resizable]=\"true\" (Close)=\"closeDialog()\"\n Title=\"Add Item to Dashboard\">\n <div class=\"k-d-flex k-flex-col resource-wrap\">\n <label>Resource Type\n <br />\n <mj-dropdown [Data]=\"ResourceTypes\" [TextField]=\"'DisplayName'\" [ValueField]=\"'ID'\"\n (ValueChange)=\"onResourceTypeChange($any($event))\" [(ngModel)]=\"resourceType\">\n </mj-dropdown>\n </label>\n <div class=\"user-view-wrap\">\n @switch (resourceType.Entity ) {\n @case ('MJ: User Views') {\n <label>Entity\n <br />\n <mj-dropdown [Data]=\"Entities\" [TextField]=\"'Name'\" [ValueField]=\"'ID'\"\n (ValueChange)=\"onEntityChange($any($event))\" [(ngModel)]=\"selectedEntity\">\n </mj-dropdown>\n </label>\n @if (selectedEntity && !showloader) {\n @if (Views.length) {\n <label>View\n <span class=\"optional-hint\">(optional — leave blank for default)</span>\n <br />\n <mj-dropdown [Data]=\"Views\" [TextField]=\"'Name'\" [ValueField]=\"'ID'\"\n (ValueChange)=\"onViewChange($any($event))\" [(ngModel)]=\"selectedView\">\n </mj-dropdown>\n </label>\n }\n <!-- View Mode Selector -->\n <label>View Mode\n <br />\n <mj-dropdown [Data]=\"viewModeOptions\" [TextField]=\"'label'\" [ValueField]=\"'value'\"\n [(ngModel)]=\"selectedViewMode\">\n </mj-dropdown>\n </label>\n }\n @if (selectedEntity && showloader) {\n <mj-loading [showText]=\"false\" size=\"medium\"></mj-loading>\n }\n }\n @case ('Reports') {\n @if (Reports.length) {\n <label>Reports\n <br />\n <mj-dropdown [Data]=\"Reports\" [TextField]=\"'Name'\" [ValueField]=\"'ID'\"\n (ValueChange)=\"onViewChange($any($event))\" [(ngModel)]=\"selectedReport\">\n </mj-dropdown>\n </label>\n }\n @if (!Reports.length && showloader) {\n <mj-loading [showText]=\"false\" size=\"medium\"></mj-loading>\n }\n @if (!Reports.length && !showloader) {\n <div class=\"no-items-message\">\n No reports available\n </div>\n }\n }\n }\n </div>\n </div>\n <div class=\"k-actions k-actions-end popup-actions customBtn\">\n <button mjButton variant=\"primary\" (click)=\"addItem()\">\n <span class=\"fa-solid fa-check\"></span> Add\n </button>\n <button mjButton variant=\"outline\" (click)=\"closeDialog()\">Cancel</button>\n </div>\n</mj-window>\n"]}
1
+ {"version":3,"file":"add-item.component.js","sourceRoot":"","sources":["../../../../../src/lib/single-dashboard/Components/add-item/add-item.component.ts","../../../../../src/lib/single-dashboard/Components/add-item/add-item.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { Metadata, RunView } from '@memberjunction/core';\nimport { MJResourceTypeEntity, ViewInfo} from '@memberjunction/core-entities';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { SharedService } from '@memberjunction/ng-shared';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n@Component({\n standalone: false,\n selector: 'app-add-item-dialog',\n templateUrl: './add-item.component.html',\n styleUrls: ['./add-item.component.css']\n})\nexport class AddItemComponent extends BaseAngularComponent implements OnInit {\n @Output() onClose = new EventEmitter<any>();\n @Input() selectedResource!:MJResourceTypeEntity | null;\n public showloader: boolean = false;\n public resourceType: any = null;\n public selectedEntity: any = null;\n public selectedView: any = null;\n public selectedReport: any = null;\n public selectedViewMode: string = 'grid';\n public viewModeOptions = [\n { label: 'Grid', value: 'grid', icon: 'fa-solid fa-list' },\n { label: 'Cards', value: 'cards', icon: 'fa-solid fa-grip' },\n { label: 'Timeline', value: 'timeline', icon: 'fa-solid fa-timeline' },\n { label: 'Map', value: 'map', icon: 'fa-solid fa-map' }\n ];\n public Entities: any[] = [];\n public Views: any[] = [];\n public Reports: any[] = [];\n public get ResourceTypes(): any[] {\n return SharedService.Instance.ResourceTypes.filter((rt: any) => rt.Name !== 'Dashboards' && rt.Name !== 'Records');\n }\n private get md() { return this.ProviderToUse; }\n constructor(private sharedService: SharedService) {\n super(); }\n\n ngOnInit(): void {\n this.resourceType = this.selectedResource || SharedService.Instance.ViewResourceType;\n this.onResourceTypeChange(this.resourceType);\n // Sort entities alphabetically by name\n this.Entities = [...this.md.Entities].sort((a, b) => \n a.Name.localeCompare(b.Name)\n );\n }\n\n async onResourceTypeChange(event: any) {\n this.resourceType = event;\n this.selectedEntity = null;\n if (this.resourceType.Name === 'Reports') {\n this.getReports();\n }\n }\n\n async getViews() {\n if (!this.selectedEntity) return;\n \n this.showloader = true;\n this.Views = await ViewInfo.GetViewsForUser(this.selectedEntity.ID);\n \n // Sort views alphabetically\n if (this.Views && this.Views.length) {\n this.Views = this.Views.sort((a, b) => a.Name.localeCompare(b.Name));\n }\n \n // Always set showloader to false when done, even if no views found\n this.showloader = false;\n }\n\n async getReports() {\n if (!this.resourceType) return;\n \n this.showloader = true;\n this.selectedReport = null;\n this.Reports = [];\n \n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const reports = await rv.RunView({ EntityName: this.resourceType.Entity, ExtraFilter: `UserID='${this.md.CurrentUser.ID}'` });\n \n if (reports.Success && reports.Results) {\n // Sort reports alphabetically\n this.Reports = reports.Results.sort((a, b) => a.Name.localeCompare(b.Name));\n }\n \n // Always set showloader to false when done, even if no reports found\n this.showloader = false;\n }\n\n onEntityChange(event: any) {\n this.selectedEntity = event;\n this.selectedView = null;\n this.selectedReport = null;\n this.getViews();\n }\n\n onViewChange(event: any) {\n if (this.resourceType.Name === 'Reports') {\n this.selectedReport = event;\n } else {\n this.selectedView = event;\n }\n }\n\n public addItem() {\n // For views, allow \"Default View\" (no specific view selected) when an entity is chosen\n const isViewResource = this.resourceType?.Name === 'UserViews' || this.resourceType?.Entity === 'MJ: User Views';\n const isDefaultView = isViewResource && this.selectedEntity && !this.selectedView;\n\n if (!this.selectedReport && !this.selectedView && !isDefaultView) {\n this.sharedService.CreateSimpleNotification('Please select an item to add', 'warning', 2000);\n return;\n }\n\n const name = this.selectedReport?.Name || this.selectedView?.Name || (isDefaultView ? `${this.selectedEntity.Name} (Default View)` : null);\n const id = this.selectedReport?.ID || this.selectedView?.ID || null;\n\n // Build configuration — include viewMode for view resources\n const configuration: Record<string, unknown> = {};\n if (isViewResource && this.selectedViewMode && this.selectedViewMode !== 'grid') {\n configuration['viewMode'] = this.selectedViewMode;\n }\n if (isDefaultView && this.selectedEntity) {\n configuration['Entity'] = this.selectedEntity.Name;\n }\n\n const dashboardItem = {\n title: name ? name : 'New Item',\n col: 1,\n rowSpan: 3,\n colSpan: 2,\n ResourceData: new ResourceData({\n Name: name,\n ResourceType: this.resourceType.Name,\n ResourceTypeID: this.resourceType.ID,\n ResourceRecordID: id,\n Configuration: configuration\n }),\n };\n\n this.sharedService.CreateSimpleNotification(`Added \"${name}\" to dashboard`, 'success', 2000);\n this.onClose.emit(dashboardItem);\n }\n\n closeDialog() {\n this.onClose.emit();\n }\n}\n","<div class=\"k-overlay\"></div>\n<mj-window [Visible]=\"true\" [Width]=\"500\" [MinHeight]=\"300\" [MinWidth]=\"400\" [Resizable]=\"true\" (Close)=\"closeDialog()\"\n Title=\"Add Item to Dashboard\">\n <div class=\"k-d-flex k-flex-col resource-wrap\">\n <label>Resource Type\n <br />\n <mj-dropdown [Data]=\"ResourceTypes\" [TextField]=\"'DisplayName'\" [ValueField]=\"'ID'\"\n (ValueChange)=\"onResourceTypeChange($any($event))\" [(ngModel)]=\"resourceType\">\n </mj-dropdown>\n </label>\n <div class=\"user-view-wrap\">\n @switch (resourceType.Entity ) {\n @case ('MJ: User Views') {\n <label>Entity\n <br />\n <mj-dropdown [Data]=\"Entities\" [TextField]=\"'Name'\" [ValueField]=\"'ID'\"\n (ValueChange)=\"onEntityChange($any($event))\" [(ngModel)]=\"selectedEntity\">\n </mj-dropdown>\n </label>\n @if (selectedEntity && !showloader) {\n @if (Views.length) {\n <label>View\n <span class=\"optional-hint\">(optional — leave blank for default)</span>\n <br />\n <mj-dropdown [Data]=\"Views\" [TextField]=\"'Name'\" [ValueField]=\"'ID'\"\n (ValueChange)=\"onViewChange($any($event))\" [(ngModel)]=\"selectedView\">\n </mj-dropdown>\n </label>\n }\n <!-- View Mode Selector -->\n <label>View Mode\n <br />\n <mj-dropdown [Data]=\"viewModeOptions\" [TextField]=\"'label'\" [ValueField]=\"'value'\"\n [(ngModel)]=\"selectedViewMode\">\n </mj-dropdown>\n </label>\n }\n @if (selectedEntity && showloader) {\n <mj-loading [showText]=\"false\" size=\"medium\"></mj-loading>\n }\n }\n @case ('Reports') {\n @if (Reports.length) {\n <label>Reports\n <br />\n <mj-dropdown [Data]=\"Reports\" [TextField]=\"'Name'\" [ValueField]=\"'ID'\"\n (ValueChange)=\"onViewChange($any($event))\" [(ngModel)]=\"selectedReport\">\n </mj-dropdown>\n </label>\n }\n @if (!Reports.length && showloader) {\n <mj-loading [showText]=\"false\" size=\"medium\"></mj-loading>\n }\n @if (!Reports.length && !showloader) {\n <div class=\"no-items-message\">\n No reports available\n </div>\n }\n }\n }\n </div>\n </div>\n <div class=\"k-actions k-actions-end popup-actions customBtn\">\n <button mjButton variant=\"primary\" (click)=\"addItem()\">\n <span class=\"fa-solid fa-check\"></span> Add\n </button>\n <button mjButton variant=\"outline\" (click)=\"closeDialog()\">Cancel</button>\n </div>\n</mj-window>\n"]}
@@ -1,6 +1,5 @@
1
1
  import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
2
  import { ResourceData } from '@memberjunction/core-entities';
3
- import { Metadata } from '@memberjunction/core';
4
3
  import { RecentAccessService } from '@memberjunction/ng-shared';
5
4
  import { Subject, debounceTime } from 'rxjs';
6
5
  import { BaseDashboard } from '@memberjunction/ng-shared';
@@ -219,7 +218,7 @@ export class SingleDashboardComponent extends BaseDashboard {
219
218
  const d = this.ResourceData;
220
219
  const config = this.ResourceData.Configuration;
221
220
  if (this.ResourceData) {
222
- const md = new Metadata();
221
+ const md = this.ProviderToUse;
223
222
  let uiConfig = { items: [] };
224
223
  this.dashboardEntity = await md.GetEntityObject('MJ: Dashboards');
225
224
  if (this.ResourceData.ResourceRecordID && this.ResourceData.ResourceRecordID.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"single-dashboard.component.js","sourceRoot":"","sources":["../../../src/lib/single-dashboard/single-dashboard.component.ts","../../../src/lib/single-dashboard/single-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { MJDashboardEntityExtended, MJResourceTypeEntity } from '@memberjunction/core-entities';\nimport { Metadata } from '@memberjunction/core';\nimport { SharedService, RecentAccessService } from '@memberjunction/ng-shared';\nimport { ResourceContainerComponent } from '../generic/resource-container-component';\nimport { Subject, debounceTime } from 'rxjs';\nimport { ActivatedRoute } from '@angular/router';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\n\n@Component({\n standalone: false,\n selector: 'mj-single-dashboard',\n templateUrl: './single-dashboard.component.html',\n styleUrls: ['./single-dashboard.component.css']\n})\nexport class SingleDashboardComponent extends BaseDashboard implements OnInit {\n\n @ViewChild('dashboardNameInput') dashboardNameInput!: ElementRef<HTMLInputElement>\n\n @Input() public ResourceData!: ResourceData;\n @Output() public dashboardSaved: EventEmitter<MJDashboardEntityExtended> = new EventEmitter<MJDashboardEntityExtended>();\n @Output() public loadComplete: EventEmitter<any> = new EventEmitter<any>();\n @Output() public loadStarted: EventEmitter<any> = new EventEmitter<any>();\n\n public items: DashboardItem[] = [];\n public dashboardEntity!: MJDashboardEntityExtended;\n public config: DashboardConfigDetails = new DashboardConfigDetails();\n public isItemDialogOpened: boolean = false;\n public isEditDialogOpened: boolean = false;\n public isEditDashboardNameDialogOpened: boolean = false;\n public isDeletingDashboardItem: boolean = false;\n public allowResize: boolean = false;\n public allowReorder: boolean = false;\n public isEditingDashboard: boolean = false;\n public selectedResource!: MJResourceTypeEntity | null;\n public selectedDashboardItem!: DashboardItem | null;\n private saveChangesSubject: Subject<any> = new Subject();\n private editOnLoad: boolean = false;\n private recentAccessService: RecentAccessService;\n\n public get contentLoading(): boolean {\n for (const item of this.items) {\n if (item.contentLoading) {\n return true;\n }\n }\n return false;\n }\n\n protected initDashboard(): void {\n \n }\n protected loadData(): void {\n \n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return \"Dashboard\"\n }\n\n constructor(private route: ActivatedRoute, public sharedService: SharedService) {\n super();\n this.recentAccessService = new RecentAccessService();\n\n this.saveChangesSubject\n .pipe(debounceTime(500))\n .subscribe(() => {\n this.SaveDashboard();\n });\n\n let edit = this.route.snapshot.queryParamMap.get('edit');\n if(edit){\n this.editOnLoad = true;\n }\n }\n\n async ngOnInit(): Promise<void> {\n super.ngOnInit();\n // load up the dashboard\n const d = this.ResourceData;\n const config = this.ResourceData.Configuration;\n if (this.ResourceData) {\n const md = new Metadata();\n let uiConfig: any = {items:[]};\n this.dashboardEntity = await md.GetEntityObject<MJDashboardEntityExtended>('MJ: Dashboards');\n if (this.ResourceData.ResourceRecordID && this.ResourceData.ResourceRecordID.length > 0) {\n await this.dashboardEntity.Load(this.ResourceData.ResourceRecordID);\n // Log access to dashboard (fire-and-forget, don't await)\n this.recentAccessService.logAccess('Dashboards', this.ResourceData.ResourceRecordID, 'dashboard');\n\n // now we have loaded and we need to get the UIConfigDetails\n const raw = this.dashboardEntity.UIConfigDetails;\n if (raw) {\n uiConfig = JSON.parse(raw);\n this.config.columns = uiConfig.columns;\n this.config.rowHeight = uiConfig.rowHeight;\n this.config.resizable = uiConfig.resizable;\n this.config.reorderable = uiConfig.reorderable;\n }\n\n //the save and canel functions call this function\n //and we only want to show the edit view once\n if(this.editOnLoad){\n this.editOnLoad = false;\n this.toggleEditDashboard(true);\n }\n }\n else {\n this.dashboardEntity.NewRecord(); // creating a new dashboard\n this.dashboardEntity.UserID = md.CurrentUser.ID;\n \n // We should never get here now because dashboard creation is handled in dashboard-browser\n // But just in case, set a better default name\n this.dashboardEntity.Name = 'My Dashboard';\n \n // Set default configuration\n this.config.columns = 4; // 4-column layout\n this.config.rowHeight = 150;\n this.config.resizable = true;\n this.config.reorderable = true;\n \n // Automatically show edit mode for new dashboards to encourage adding items\n setTimeout(() => {\n this.toggleEditDashboard(true);\n }, 500);\n }\n\n // now we need to load up the items\n this.items = [];\n //const tempItems = uiConfig.items.sort((a: any, b: any) => a.order - b.order);\n for (const item of uiConfig.items) {\n const dashboardItem = this.CreateDashboardItem(item);\n this.items.push(dashboardItem);\n }\n }\n\n this.NotifyLoadComplete();\n }\n\n protected CreateDashboardItem(item: any): DashboardItem {\n const dashboardItem = new DashboardItem();\n if (item) {\n dashboardItem.title = item.title;\n dashboardItem.order = item.order ? item.order : 0;\n dashboardItem.col = item.col;\n dashboardItem.row = item.row;\n dashboardItem.rowSpan = item.rowSpan;\n dashboardItem.colSpan = item.colSpan;\n dashboardItem.ResourceData = new ResourceData(item.ResourceData); \n }\n return dashboardItem;\n }\n\n public loadingStarted(resourceComponent: ResourceContainerComponent) {\n // look up the copmonent in the \n const item = this.items.find(i => i.ResourceData === resourceComponent.Data);\n if (item) {\n item.contentLoading = true;\n this.loadStarted.emit();\n }\n }\n\n public loadingComplete(resourceComponent: ResourceContainerComponent) {\n // look up the copmonent in the \n const item = this.items.find(i => i.ResourceData === resourceComponent.Data);\n if (item) {\n item.contentLoading = false;\n if (!this.contentLoading) {\n this.loadComplete.emit();\n }\n }\n }\n\n public addItem(resourceType: any = null): void {\n this.selectedResource = resourceType;\n this.isItemDialogOpened = true;\n this.isEditDialogOpened = false;\n }\n\n public closeDialog(data: any): void {\n if(data) {\n const dashboardItem = this.CreateDashboardItem(data);\n this.items.push(dashboardItem);\n console.log(dashboardItem);\n this.saveChangesSubject.next(true);\n }\n this.selectedResource = null;\n this.isItemDialogOpened = false;\n }\n\n public toggleEditDashboard(allowEdit: boolean): void {\n this.allowReorder = allowEdit;\n this.allowResize = allowEdit;\n this.isEditingDashboard = allowEdit;\n this.toggleInlineNameEdit(false);\n }\n\n public async onClickSaveDashboard(): Promise<void> {\n this.toggleEditDashboard(false);\n let result = await this.SaveDashboard();\n if(result){\n this.sharedService.CreateSimpleNotification(\"Dashboard changes have been saved.\", \"success\", 1000);\n await this.ngOnInit();\n }\n else{\n this.sharedService.CreateSimpleNotification(\"An error occured saving the dashboard changes\", \"error\", 1000);\n }\n }\n\n public async onclickCancelChanges(): Promise<void> {\n this.toggleEditDashboard(false);\n await this.ngOnInit();\n }\n\n public closeDashboardDialog(data: any = null){\n this.isEditDialogOpened = false;\n }\n\n saveChanges(data: any): void {\n if(data.config){\n this.config = data.config;\n }\n if(data.itemsChanged && data.items){\n this.items = data.items;\n this.sharedService.InvokeManualResize();\n }\n this.SaveDashboard();\n this.closeDashboardDialog();\n }\n\n public async SaveDashboard(): Promise<boolean> {\n if (this.dashboardEntity) {\n const configData = {\n columns: this.config.columns,\n rowHeight: this.config.rowHeight,\n resizable: this.config.resizable,\n reorderable: this.config.reorderable,\n items: this.items\n }\n const configJSON = JSON.stringify(configData);\n this.dashboardEntity.UIConfigDetails = configJSON;\n const result = await this.dashboardEntity.Save();\n \n return result;\n }\n else \n return false;\n }\n\n public dashboardSaveComplete(entity: MJDashboardEntityExtended): void {\n this.dashboardSaved.emit(entity);\n }\n\n public toggleInlineNameEdit(visible: boolean): void {\n this.isEditDashboardNameDialogOpened = visible;\n if(this.isEditDashboardNameDialogOpened){\n this.dashboardNameInput?.nativeElement?.focus();\n }\n }\n\n public saveDashboardName(): void {\n this.toggleInlineNameEdit(true);\n const inputValue = this.dashboardNameInput.nativeElement.value;\n if(inputValue && inputValue.length > 3){\n this.dashboardEntity.Name = inputValue;\n this.SaveDashboard();\n }\n else {\n this.sharedService.CreateSimpleNotification('Invalid dashboard name: Must be at least 3 characters.','warning', 1000);\n }\n }\n\n public cancelNameChange(): void {\n this.toggleInlineNameEdit(false);\n }\n\n public closeDeleteItemComponent(): void {\n this.selectedDashboardItem = null;\n this.isDeletingDashboardItem = false;\n }\n\n public showConfirmDeleteDashboardItem(item: DashboardItem): void {\n this.selectedDashboardItem = item;\n this.isDeletingDashboardItem = true;\n }\n\n public async deleteDashboardItem(item: DashboardItem): Promise<void> {\n this.items = this.items.filter(i => i.uniqueId != item.uniqueId);\n let result = await this.SaveDashboard();\n if(result){\n this.sharedService.CreateSimpleNotification(`Dashboard item ${item.uniqueId} deleted successfully`, \"success\", 1000);\n }\n else{\n this.sharedService.CreateSimpleNotification(`Unable to delete dashboard item ${item.uniqueId}`, \"error\", 1000);\n }\n this.selectedDashboardItem = null;\n this.isDeletingDashboardItem = false;\n }\n\n public getIsEditingItemBodyStyle(): string {\n return this.isEditingDashboard ? \"bg-light-grey\" : \"\";\n }\n\n public getIsEditingItemHeaderStyle(): string {\n return this.isEditingDashboard ? \"bg-dark-grey\" : \"bg-blue\";\n }\n\n onReorder(e: { oldIndex: number; newIndex: number; newCol?: number; newRow?: number; uniqueId?: number }): void {\n const item = e.uniqueId != null ? this.items.find(i => i.uniqueId === e.uniqueId) : this.items[e.oldIndex];\n if (item) {\n if (e.oldIndex !== e.newIndex) {\n this.items.splice(e.oldIndex, 1);\n this.items.splice(e.newIndex, 0, item);\n }\n item.col = e.newCol ?? item.col;\n item.row = e.newRow ?? item.row;\n }\n }\n\n onResize(e: { newColSpan: number; newRowSpan: number; uniqueId?: number }): void {\n const item = e.uniqueId != null ? this.items.find(i => i.uniqueId === e.uniqueId) : undefined;\n if (item) {\n item.colSpan = e.newColSpan;\n item.rowSpan = e.newRowSpan;\n }\n }\n\n onMouseEnter(e: MouseEvent): void {\n // Available for future drag-and-drop support\n }\n\n onMouseOut(e: MouseEvent): void {\n // Available for future drag-and-drop support\n }\n\n /**\n * Get the appropriate icon for a resource type\n * @param resourceType The type of resource\n * @returns FontAwesome icon class\n */\n getResourceIcon(resourceType: string | undefined): string {\n // Default to a cube icon if type is undefined\n if (!resourceType) return 'fa-solid fa-cube';\n \n // Map resource types to appropriate FontAwesome icons\n const iconMap: {[key: string]: string} = {\n 'Reports': 'fa-solid fa-chart-line',\n 'UserViews': 'fa-solid fa-table',\n 'Dashboards': 'fa-solid fa-grip',\n 'Lists': 'fa-solid fa-list',\n 'default': 'fa-solid fa-cube'\n };\n \n return iconMap[resourceType] || iconMap['default'];\n }\n}\n\nexport class DashboardConfigDetails {\n columns: number = 4;\n rowHeight: number = 150;\n resizable: boolean = true;\n reorderable: boolean = true;\n}\n\nexport class DashboardItem {\n private static nextUniqueId: number = 1;\n private getNextUniqueID(): number {\n return DashboardItem.nextUniqueId++;\n }\n constructor() {\n this.uniqueId = this.getNextUniqueID();\n }\n uniqueId!: number;\n title!: string;\n col!: number;\n row!: number;\n rowSpan!: number;\n colSpan!: number;\n order!: number;\n ResourceData!: ResourceData;\n contentLoading: boolean = false;\n}","@if (isItemDialogOpened) {\n <app-add-item-dialog (onClose)=\"closeDialog($event)\" [selectedResource]=\"selectedResource\"></app-add-item-dialog>\n}\n@if (isEditDialogOpened) {\n <div>\n <app-edit-dashboard (onClose)=\"closeDashboardDialog($event)\" (triggerAddItem)=\"addItem($event)\" [items]=\"items\" [config]=\"config\" (onSave)=\"saveChanges($event)\"></app-edit-dashboard>\n </div>\n}\n\n@if (isDeletingDashboardItem) {\n <app-delete-item-dialog [dashboardItem]=\"selectedDashboardItem\" (removeDashboardItem)=\"deleteDashboardItem($event)\" (onClose)=\"closeDeleteItemComponent()\"></app-delete-item-dialog>\n}\n\n<div class=\"dashboard-container\">\n <div class=\"main-head-dashboard\">\n <div class=\"dashboard-title\">\n @if (isEditDashboardNameDialogOpened) {\n <div class=\"dashboard-header\">\n <input class=\"mj-input\" (keydown.enter)=\"saveDashboardName()\" type=\"text\" placeholder=\"Enter name here\" id=\"txtDashboardName\" #dashboardNameInput>\n <button mjButton (click)=\"saveDashboardName()\">\n <span class=\"fa-solid fa-check\"></span>\n Save\n </button>\n <button mjButton (click)=\"cancelNameChange()\" >\n <span class=\"fa-solid fa-xmark\"></span>\n Cancel\n </button>\n </div>\n } @else {\n <i class=\"fa-solid fa-star dashboard-star-icon\" aria-hidden=\"true\"></i>\n <h3 (click)=\"toggleInlineNameEdit(true)\">{{dashboardEntity ? dashboardEntity.Name : ''}}</h3>\n }\n </div>\n <div class=\"dashboard-header\">\n @if (isEditingDashboard) {\n <div>\n <button mjButton (click)=\"onClickSaveDashboard()\">\n <span class=\"fa-solid fa-check\"></span>\n Save\n </button>\n <button mjButton (click)=\"onclickCancelChanges()\">\n <span class=\"fa-solid fa-xmark\"></span>\n Cancel\n </button>\n </div>\n } @else {\n <button mjButton (click)=\"addItem()\">\n <span class=\"fa-solid fa-plus\"></span>\n Add Item\n </button>\n <button mjButton (click)=\"toggleEditDashboard(true)\" >\n <span class=\"fa-solid fa-gear\"></span>\n Edit Dashboard\n </button>\n }\n </div>\n </div>\n <div class=\"tile-resource-container\">\n <!-- Show empty state if no items -->\n @if (items.length === 0 && !isEditingDashboard) {\n <div class=\"empty-dashboard\">\n <i class=\"fa-solid fa-grip-vertical\" aria-hidden=\"true\"></i>\n <h3>This dashboard is empty</h3>\n <p>Start by adding reports or user views to your dashboard</p>\n <button mjButton variant=\"primary\" (click)=\"addItem()\">\n <span class=\"fa-solid fa-plus\"></span>\n Add Item\n </button>\n </div>\n }\n\n <!-- Show tile layout if there are items or if editing -->\n @if (items.length > 0 || isEditingDashboard) {\n <div class=\"mj-tile-layout\"\n [style.grid-template-columns]=\"'repeat(' + config.columns + ', 1fr)'\"\n [style.grid-auto-rows]=\"config.rowHeight + 'px'\">\n @for (item of items; track item.uniqueId) {\n <div class=\"mj-tile-item\"\n [style.grid-column]=\"item.col + ' / span ' + item.colSpan\"\n [style.grid-row]=\"'span ' + item.rowSpan\"\n [id]=\"item.uniqueId\"\n (mouseenter)=\"onMouseEnter($event)\"\n (mouseleave)=\"onMouseOut($event)\">\n <div class=\"mj-tile-header\" [ngClass]=\"[getIsEditingItemHeaderStyle()]\">\n <div class=\"item-title\">\n <i [class]=\"getResourceIcon(item.ResourceData.ResourceType)\" aria-hidden=\"true\"></i>\n {{item.title}}\n </div>\n @if (!isEditingDashboard) {\n <div>\n <div class=\"btn-wrapper\">\n <button mjButton title=\"Edit dashboard\" (click)=\"toggleEditDashboard(true)\">\n <span class=\"fa-solid fa-pen-to-square\"></span>\n </button>\n <button mjButton title=\"Remove item\" (click)=\"showConfirmDeleteDashboardItem(item)\">\n <span class=\"fa-solid fa-trash\"></span>\n </button>\n </div>\n </div>\n }\n </div>\n <div class=\"mj-tile-body\" [ngClass]=\"[getIsEditingItemBodyStyle()]\">\n <mj-resource [Data]=\"item.ResourceData\" [isVisible]=\"true\" (ContentLoadingStarted)=\"loadingStarted($event)\" (ContentLoadingComplete)=\"loadingComplete($event)\"></mj-resource>\n </div>\n </div>\n }\n </div>\n }\n </div>\n</div>\n"]}
1
+ {"version":3,"file":"single-dashboard.component.js","sourceRoot":"","sources":["../../../src/lib/single-dashboard/single-dashboard.component.ts","../../../src/lib/single-dashboard/single-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { MJDashboardEntityExtended, MJResourceTypeEntity } from '@memberjunction/core-entities';\nimport { Metadata } from '@memberjunction/core';\nimport { SharedService, RecentAccessService } from '@memberjunction/ng-shared';\nimport { ResourceContainerComponent } from '../generic/resource-container-component';\nimport { Subject, debounceTime } from 'rxjs';\nimport { ActivatedRoute } from '@angular/router';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\n\n@Component({\n standalone: false,\n selector: 'mj-single-dashboard',\n templateUrl: './single-dashboard.component.html',\n styleUrls: ['./single-dashboard.component.css']\n})\nexport class SingleDashboardComponent extends BaseDashboard implements OnInit {\n\n @ViewChild('dashboardNameInput') dashboardNameInput!: ElementRef<HTMLInputElement>\n\n @Input() public ResourceData!: ResourceData;\n @Output() public dashboardSaved: EventEmitter<MJDashboardEntityExtended> = new EventEmitter<MJDashboardEntityExtended>();\n @Output() public loadComplete: EventEmitter<any> = new EventEmitter<any>();\n @Output() public loadStarted: EventEmitter<any> = new EventEmitter<any>();\n\n public items: DashboardItem[] = [];\n public dashboardEntity!: MJDashboardEntityExtended;\n public config: DashboardConfigDetails = new DashboardConfigDetails();\n public isItemDialogOpened: boolean = false;\n public isEditDialogOpened: boolean = false;\n public isEditDashboardNameDialogOpened: boolean = false;\n public isDeletingDashboardItem: boolean = false;\n public allowResize: boolean = false;\n public allowReorder: boolean = false;\n public isEditingDashboard: boolean = false;\n public selectedResource!: MJResourceTypeEntity | null;\n public selectedDashboardItem!: DashboardItem | null;\n private saveChangesSubject: Subject<any> = new Subject();\n private editOnLoad: boolean = false;\n private recentAccessService: RecentAccessService;\n\n public get contentLoading(): boolean {\n for (const item of this.items) {\n if (item.contentLoading) {\n return true;\n }\n }\n return false;\n }\n\n protected initDashboard(): void {\n \n }\n protected loadData(): void {\n \n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return \"Dashboard\"\n }\n\n constructor(private route: ActivatedRoute, public sharedService: SharedService) {\n super();\n this.recentAccessService = new RecentAccessService();\n\n this.saveChangesSubject\n .pipe(debounceTime(500))\n .subscribe(() => {\n this.SaveDashboard();\n });\n\n let edit = this.route.snapshot.queryParamMap.get('edit');\n if(edit){\n this.editOnLoad = true;\n }\n }\n\n async ngOnInit(): Promise<void> {\n super.ngOnInit();\n // load up the dashboard\n const d = this.ResourceData;\n const config = this.ResourceData.Configuration;\n if (this.ResourceData) {\n const md = this.ProviderToUse;\n let uiConfig: any = {items:[]};\n this.dashboardEntity = await md.GetEntityObject<MJDashboardEntityExtended>('MJ: Dashboards');\n if (this.ResourceData.ResourceRecordID && this.ResourceData.ResourceRecordID.length > 0) {\n await this.dashboardEntity.Load(this.ResourceData.ResourceRecordID);\n // Log access to dashboard (fire-and-forget, don't await)\n this.recentAccessService.logAccess('Dashboards', this.ResourceData.ResourceRecordID, 'dashboard');\n\n // now we have loaded and we need to get the UIConfigDetails\n const raw = this.dashboardEntity.UIConfigDetails;\n if (raw) {\n uiConfig = JSON.parse(raw);\n this.config.columns = uiConfig.columns;\n this.config.rowHeight = uiConfig.rowHeight;\n this.config.resizable = uiConfig.resizable;\n this.config.reorderable = uiConfig.reorderable;\n }\n\n //the save and canel functions call this function\n //and we only want to show the edit view once\n if(this.editOnLoad){\n this.editOnLoad = false;\n this.toggleEditDashboard(true);\n }\n }\n else {\n this.dashboardEntity.NewRecord(); // creating a new dashboard\n this.dashboardEntity.UserID = md.CurrentUser.ID;\n \n // We should never get here now because dashboard creation is handled in dashboard-browser\n // But just in case, set a better default name\n this.dashboardEntity.Name = 'My Dashboard';\n \n // Set default configuration\n this.config.columns = 4; // 4-column layout\n this.config.rowHeight = 150;\n this.config.resizable = true;\n this.config.reorderable = true;\n \n // Automatically show edit mode for new dashboards to encourage adding items\n setTimeout(() => {\n this.toggleEditDashboard(true);\n }, 500);\n }\n\n // now we need to load up the items\n this.items = [];\n //const tempItems = uiConfig.items.sort((a: any, b: any) => a.order - b.order);\n for (const item of uiConfig.items) {\n const dashboardItem = this.CreateDashboardItem(item);\n this.items.push(dashboardItem);\n }\n }\n\n this.NotifyLoadComplete();\n }\n\n protected CreateDashboardItem(item: any): DashboardItem {\n const dashboardItem = new DashboardItem();\n if (item) {\n dashboardItem.title = item.title;\n dashboardItem.order = item.order ? item.order : 0;\n dashboardItem.col = item.col;\n dashboardItem.row = item.row;\n dashboardItem.rowSpan = item.rowSpan;\n dashboardItem.colSpan = item.colSpan;\n dashboardItem.ResourceData = new ResourceData(item.ResourceData); \n }\n return dashboardItem;\n }\n\n public loadingStarted(resourceComponent: ResourceContainerComponent) {\n // look up the copmonent in the \n const item = this.items.find(i => i.ResourceData === resourceComponent.Data);\n if (item) {\n item.contentLoading = true;\n this.loadStarted.emit();\n }\n }\n\n public loadingComplete(resourceComponent: ResourceContainerComponent) {\n // look up the copmonent in the \n const item = this.items.find(i => i.ResourceData === resourceComponent.Data);\n if (item) {\n item.contentLoading = false;\n if (!this.contentLoading) {\n this.loadComplete.emit();\n }\n }\n }\n\n public addItem(resourceType: any = null): void {\n this.selectedResource = resourceType;\n this.isItemDialogOpened = true;\n this.isEditDialogOpened = false;\n }\n\n public closeDialog(data: any): void {\n if(data) {\n const dashboardItem = this.CreateDashboardItem(data);\n this.items.push(dashboardItem);\n console.log(dashboardItem);\n this.saveChangesSubject.next(true);\n }\n this.selectedResource = null;\n this.isItemDialogOpened = false;\n }\n\n public toggleEditDashboard(allowEdit: boolean): void {\n this.allowReorder = allowEdit;\n this.allowResize = allowEdit;\n this.isEditingDashboard = allowEdit;\n this.toggleInlineNameEdit(false);\n }\n\n public async onClickSaveDashboard(): Promise<void> {\n this.toggleEditDashboard(false);\n let result = await this.SaveDashboard();\n if(result){\n this.sharedService.CreateSimpleNotification(\"Dashboard changes have been saved.\", \"success\", 1000);\n await this.ngOnInit();\n }\n else{\n this.sharedService.CreateSimpleNotification(\"An error occured saving the dashboard changes\", \"error\", 1000);\n }\n }\n\n public async onclickCancelChanges(): Promise<void> {\n this.toggleEditDashboard(false);\n await this.ngOnInit();\n }\n\n public closeDashboardDialog(data: any = null){\n this.isEditDialogOpened = false;\n }\n\n saveChanges(data: any): void {\n if(data.config){\n this.config = data.config;\n }\n if(data.itemsChanged && data.items){\n this.items = data.items;\n this.sharedService.InvokeManualResize();\n }\n this.SaveDashboard();\n this.closeDashboardDialog();\n }\n\n public async SaveDashboard(): Promise<boolean> {\n if (this.dashboardEntity) {\n const configData = {\n columns: this.config.columns,\n rowHeight: this.config.rowHeight,\n resizable: this.config.resizable,\n reorderable: this.config.reorderable,\n items: this.items\n }\n const configJSON = JSON.stringify(configData);\n this.dashboardEntity.UIConfigDetails = configJSON;\n const result = await this.dashboardEntity.Save();\n \n return result;\n }\n else \n return false;\n }\n\n public dashboardSaveComplete(entity: MJDashboardEntityExtended): void {\n this.dashboardSaved.emit(entity);\n }\n\n public toggleInlineNameEdit(visible: boolean): void {\n this.isEditDashboardNameDialogOpened = visible;\n if(this.isEditDashboardNameDialogOpened){\n this.dashboardNameInput?.nativeElement?.focus();\n }\n }\n\n public saveDashboardName(): void {\n this.toggleInlineNameEdit(true);\n const inputValue = this.dashboardNameInput.nativeElement.value;\n if(inputValue && inputValue.length > 3){\n this.dashboardEntity.Name = inputValue;\n this.SaveDashboard();\n }\n else {\n this.sharedService.CreateSimpleNotification('Invalid dashboard name: Must be at least 3 characters.','warning', 1000);\n }\n }\n\n public cancelNameChange(): void {\n this.toggleInlineNameEdit(false);\n }\n\n public closeDeleteItemComponent(): void {\n this.selectedDashboardItem = null;\n this.isDeletingDashboardItem = false;\n }\n\n public showConfirmDeleteDashboardItem(item: DashboardItem): void {\n this.selectedDashboardItem = item;\n this.isDeletingDashboardItem = true;\n }\n\n public async deleteDashboardItem(item: DashboardItem): Promise<void> {\n this.items = this.items.filter(i => i.uniqueId != item.uniqueId);\n let result = await this.SaveDashboard();\n if(result){\n this.sharedService.CreateSimpleNotification(`Dashboard item ${item.uniqueId} deleted successfully`, \"success\", 1000);\n }\n else{\n this.sharedService.CreateSimpleNotification(`Unable to delete dashboard item ${item.uniqueId}`, \"error\", 1000);\n }\n this.selectedDashboardItem = null;\n this.isDeletingDashboardItem = false;\n }\n\n public getIsEditingItemBodyStyle(): string {\n return this.isEditingDashboard ? \"bg-light-grey\" : \"\";\n }\n\n public getIsEditingItemHeaderStyle(): string {\n return this.isEditingDashboard ? \"bg-dark-grey\" : \"bg-blue\";\n }\n\n onReorder(e: { oldIndex: number; newIndex: number; newCol?: number; newRow?: number; uniqueId?: number }): void {\n const item = e.uniqueId != null ? this.items.find(i => i.uniqueId === e.uniqueId) : this.items[e.oldIndex];\n if (item) {\n if (e.oldIndex !== e.newIndex) {\n this.items.splice(e.oldIndex, 1);\n this.items.splice(e.newIndex, 0, item);\n }\n item.col = e.newCol ?? item.col;\n item.row = e.newRow ?? item.row;\n }\n }\n\n onResize(e: { newColSpan: number; newRowSpan: number; uniqueId?: number }): void {\n const item = e.uniqueId != null ? this.items.find(i => i.uniqueId === e.uniqueId) : undefined;\n if (item) {\n item.colSpan = e.newColSpan;\n item.rowSpan = e.newRowSpan;\n }\n }\n\n onMouseEnter(e: MouseEvent): void {\n // Available for future drag-and-drop support\n }\n\n onMouseOut(e: MouseEvent): void {\n // Available for future drag-and-drop support\n }\n\n /**\n * Get the appropriate icon for a resource type\n * @param resourceType The type of resource\n * @returns FontAwesome icon class\n */\n getResourceIcon(resourceType: string | undefined): string {\n // Default to a cube icon if type is undefined\n if (!resourceType) return 'fa-solid fa-cube';\n \n // Map resource types to appropriate FontAwesome icons\n const iconMap: {[key: string]: string} = {\n 'Reports': 'fa-solid fa-chart-line',\n 'UserViews': 'fa-solid fa-table',\n 'Dashboards': 'fa-solid fa-grip',\n 'Lists': 'fa-solid fa-list',\n 'default': 'fa-solid fa-cube'\n };\n \n return iconMap[resourceType] || iconMap['default'];\n }\n}\n\nexport class DashboardConfigDetails {\n columns: number = 4;\n rowHeight: number = 150;\n resizable: boolean = true;\n reorderable: boolean = true;\n}\n\nexport class DashboardItem {\n private static nextUniqueId: number = 1;\n private getNextUniqueID(): number {\n return DashboardItem.nextUniqueId++;\n }\n constructor() {\n this.uniqueId = this.getNextUniqueID();\n }\n uniqueId!: number;\n title!: string;\n col!: number;\n row!: number;\n rowSpan!: number;\n colSpan!: number;\n order!: number;\n ResourceData!: ResourceData;\n contentLoading: boolean = false;\n}","@if (isItemDialogOpened) {\n <app-add-item-dialog (onClose)=\"closeDialog($event)\" [selectedResource]=\"selectedResource\"></app-add-item-dialog>\n}\n@if (isEditDialogOpened) {\n <div>\n <app-edit-dashboard (onClose)=\"closeDashboardDialog($event)\" (triggerAddItem)=\"addItem($event)\" [items]=\"items\" [config]=\"config\" (onSave)=\"saveChanges($event)\"></app-edit-dashboard>\n </div>\n}\n\n@if (isDeletingDashboardItem) {\n <app-delete-item-dialog [dashboardItem]=\"selectedDashboardItem\" (removeDashboardItem)=\"deleteDashboardItem($event)\" (onClose)=\"closeDeleteItemComponent()\"></app-delete-item-dialog>\n}\n\n<div class=\"dashboard-container\">\n <div class=\"main-head-dashboard\">\n <div class=\"dashboard-title\">\n @if (isEditDashboardNameDialogOpened) {\n <div class=\"dashboard-header\">\n <input class=\"mj-input\" (keydown.enter)=\"saveDashboardName()\" type=\"text\" placeholder=\"Enter name here\" id=\"txtDashboardName\" #dashboardNameInput>\n <button mjButton (click)=\"saveDashboardName()\">\n <span class=\"fa-solid fa-check\"></span>\n Save\n </button>\n <button mjButton (click)=\"cancelNameChange()\" >\n <span class=\"fa-solid fa-xmark\"></span>\n Cancel\n </button>\n </div>\n } @else {\n <i class=\"fa-solid fa-star dashboard-star-icon\" aria-hidden=\"true\"></i>\n <h3 (click)=\"toggleInlineNameEdit(true)\">{{dashboardEntity ? dashboardEntity.Name : ''}}</h3>\n }\n </div>\n <div class=\"dashboard-header\">\n @if (isEditingDashboard) {\n <div>\n <button mjButton (click)=\"onClickSaveDashboard()\">\n <span class=\"fa-solid fa-check\"></span>\n Save\n </button>\n <button mjButton (click)=\"onclickCancelChanges()\">\n <span class=\"fa-solid fa-xmark\"></span>\n Cancel\n </button>\n </div>\n } @else {\n <button mjButton (click)=\"addItem()\">\n <span class=\"fa-solid fa-plus\"></span>\n Add Item\n </button>\n <button mjButton (click)=\"toggleEditDashboard(true)\" >\n <span class=\"fa-solid fa-gear\"></span>\n Edit Dashboard\n </button>\n }\n </div>\n </div>\n <div class=\"tile-resource-container\">\n <!-- Show empty state if no items -->\n @if (items.length === 0 && !isEditingDashboard) {\n <div class=\"empty-dashboard\">\n <i class=\"fa-solid fa-grip-vertical\" aria-hidden=\"true\"></i>\n <h3>This dashboard is empty</h3>\n <p>Start by adding reports or user views to your dashboard</p>\n <button mjButton variant=\"primary\" (click)=\"addItem()\">\n <span class=\"fa-solid fa-plus\"></span>\n Add Item\n </button>\n </div>\n }\n\n <!-- Show tile layout if there are items or if editing -->\n @if (items.length > 0 || isEditingDashboard) {\n <div class=\"mj-tile-layout\"\n [style.grid-template-columns]=\"'repeat(' + config.columns + ', 1fr)'\"\n [style.grid-auto-rows]=\"config.rowHeight + 'px'\">\n @for (item of items; track item.uniqueId) {\n <div class=\"mj-tile-item\"\n [style.grid-column]=\"item.col + ' / span ' + item.colSpan\"\n [style.grid-row]=\"'span ' + item.rowSpan\"\n [id]=\"item.uniqueId\"\n (mouseenter)=\"onMouseEnter($event)\"\n (mouseleave)=\"onMouseOut($event)\">\n <div class=\"mj-tile-header\" [ngClass]=\"[getIsEditingItemHeaderStyle()]\">\n <div class=\"item-title\">\n <i [class]=\"getResourceIcon(item.ResourceData.ResourceType)\" aria-hidden=\"true\"></i>\n {{item.title}}\n </div>\n @if (!isEditingDashboard) {\n <div>\n <div class=\"btn-wrapper\">\n <button mjButton title=\"Edit dashboard\" (click)=\"toggleEditDashboard(true)\">\n <span class=\"fa-solid fa-pen-to-square\"></span>\n </button>\n <button mjButton title=\"Remove item\" (click)=\"showConfirmDeleteDashboardItem(item)\">\n <span class=\"fa-solid fa-trash\"></span>\n </button>\n </div>\n </div>\n }\n </div>\n <div class=\"mj-tile-body\" [ngClass]=\"[getIsEditingItemBodyStyle()]\">\n <mj-resource [Data]=\"item.ResourceData\" [isVisible]=\"true\" (ContentLoadingStarted)=\"loadingStarted($event)\" (ContentLoadingComplete)=\"loadingComplete($event)\"></mj-resource>\n </div>\n </div>\n }\n </div>\n }\n </div>\n</div>\n"]}
@@ -4,6 +4,7 @@ import { SharedService } from '@memberjunction/ng-shared';
4
4
  import { ListDetailGridComponent, ListGridRowClickedEvent } from '@memberjunction/ng-list-detail-grid';
5
5
  import { GridToolbarConfig } from '@memberjunction/ng-entity-viewer';
6
6
  import { NewItemOption } from '../../generic/Item.types';
7
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
7
8
  import * as i0 from "@angular/core";
8
9
  /**
9
10
  * Represents a record that can be added to a list
@@ -14,7 +15,7 @@ interface AddableRecord {
14
15
  isInList: boolean;
15
16
  isSelected: boolean;
16
17
  }
17
- export declare class SingleListDetailComponent implements OnInit {
18
+ export declare class SingleListDetailComponent extends BaseAngularComponent implements OnInit {
18
19
  private sharedService;
19
20
  private cdr;
20
21
  private elementRef;
@@ -1 +1 @@
1
- {"version":3,"file":"single-list-detail.component.d.ts","sourceRoot":"","sources":["../../../src/lib/single-list-detail/single-list-detail.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"single-list-detail.component.d.ts","sourceRoot":"","sources":["../../../src/lib/single-list-detail/single-list-detail.component.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { Component, Input, ViewChild, HostListener } from '@angular/core';
2
- import { CompositeKey, LogError, LogErrorEx, LogStatus, Metadata, RunView } from '@memberjunction/core';
2
+ import { CompositeKey, LogError, LogErrorEx, LogStatus, RunView } from '@memberjunction/core';
3
3
  import { Subject, debounceTime } from 'rxjs';
4
4
  import { UUIDsEqual, NormalizeUUID } from '@memberjunction/global';
5
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "@memberjunction/ng-shared";
7
8
  import * as i2 from "@memberjunction/ng-ui-components";
@@ -407,7 +408,7 @@ function SingleListDetailComponent_Conditional_15_Template(rf, ctx) { if (rf & 1
407
408
  i0.ɵɵadvance();
408
409
  i0.ɵɵproperty("disabled", ctx_r2.showAddFromViewLoader);
409
410
  } }
410
- export class SingleListDetailComponent {
411
+ export class SingleListDetailComponent extends BaseAngularComponent {
411
412
  sharedService;
412
413
  cdr;
413
414
  elementRef;
@@ -478,6 +479,7 @@ export class SingleListDetailComponent {
478
479
  }
479
480
  }
480
481
  constructor(sharedService, cdr, elementRef) {
482
+ super();
481
483
  this.sharedService = sharedService;
482
484
  this.cdr = cdr;
483
485
  this.elementRef = elementRef;
@@ -499,7 +501,7 @@ export class SingleListDetailComponent {
499
501
  return;
500
502
  this.showLoader = true;
501
503
  try {
502
- const md = new Metadata();
504
+ const md = this.ProviderToUse;
503
505
  this.listRecord = await md.GetEntityObject("MJ: Lists");
504
506
  const loadResult = await this.listRecord.Load(this.ListID);
505
507
  if (!loadResult) {
@@ -591,8 +593,8 @@ export class SingleListDetailComponent {
591
593
  this.isRemoving = true;
592
594
  this.removeTotal = this.selectedKeys.length;
593
595
  this.removeProgress = 0;
594
- const md = new Metadata();
595
- const rv = new RunView();
596
+ const md = this.ProviderToUse;
597
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
596
598
  const entityInfo = md.EntityByID(this.listRecord.EntityID);
597
599
  // selectedKeys from grid are in concatenated format (ID|value)
598
600
  // For single PK entities, RecordID in DB is just the raw value
@@ -668,8 +670,8 @@ export class SingleListDetailComponent {
668
670
  async loadExistingListDetailIds() {
669
671
  if (!this.listRecord)
670
672
  return;
671
- const md = new Metadata();
672
- const rv = new RunView();
673
+ const md = this.ProviderToUse;
674
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
673
675
  const result = await rv.RunView({
674
676
  EntityName: 'MJ: List Details',
675
677
  ExtraFilter: `ListID = '${this.listRecord.ID}'`,
@@ -694,7 +696,7 @@ export class SingleListDetailComponent {
694
696
  return;
695
697
  }
696
698
  this.addDialogLoading = true;
697
- const md = new Metadata();
699
+ const md = this.ProviderToUse;
698
700
  const sourceEntityInfo = md.EntityByID(this.listRecord.EntityID);
699
701
  if (!sourceEntityInfo) {
700
702
  this.addDialogLoading = false;
@@ -706,7 +708,7 @@ export class SingleListDetailComponent {
706
708
  if (nameField) {
707
709
  filter = `${nameField.Name} LIKE '%${searchText}%'`;
708
710
  }
709
- const rv = new RunView();
711
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
710
712
  const result = await rv.RunView({
711
713
  EntityName: this.listRecord.Entity,
712
714
  ExtraFilter: filter,
@@ -753,7 +755,7 @@ export class SingleListDetailComponent {
753
755
  this.addTotal = recordsToAdd.length;
754
756
  this.addProgress = 0;
755
757
  const progressPerRecord = 0.8 / recordsToAdd.length; // 80% for individual saves
756
- const md = new Metadata();
758
+ const md = this.ProviderToUse;
757
759
  // Use transaction group for bulk insert
758
760
  const tg = await md.CreateTransactionGroup();
759
761
  for (let i = 0; i < recordsToAdd.length; i++) {
@@ -807,8 +809,8 @@ export class SingleListDetailComponent {
807
809
  if (!this.listRecord || !this.listRecord.Entity)
808
810
  return;
809
811
  this.showAddFromViewLoader = true;
810
- const rv = new RunView();
811
- const md = new Metadata();
812
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
813
+ const md = this.ProviderToUse;
812
814
  const runViewResult = await rv.RunView({
813
815
  EntityName: "MJ: User Views",
814
816
  ExtraFilter: `UserID = '${md.CurrentUser.ID}' AND EntityID = '${this.listRecord.EntityID}'`,
@@ -841,8 +843,8 @@ export class SingleListDetailComponent {
841
843
  this.showAddFromViewLoader = true;
842
844
  this.fetchingRecordsToSave = true;
843
845
  this.cdr.detectChanges();
844
- const rv = new RunView();
845
- const md = new Metadata();
846
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
847
+ const md = this.ProviderToUse;
846
848
  // Collect all unique record IDs from selected views
847
849
  const recordIdSet = new Set();
848
850
  for (const userView of this.userViewsToAdd) {
@@ -911,7 +913,7 @@ export class SingleListDetailComponent {
911
913
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.listDetailGrid = _t.first);
912
914
  } }, hostBindings: function SingleListDetailComponent_HostBindings(rf, ctx) { if (rf & 1) {
913
915
  i0.ɵɵlistener("click", function SingleListDetailComponent_click_HostBindingHandler($event) { return ctx.onDocumentClick($event); }, i0.ɵɵresolveDocument);
914
- } }, inputs: { ListID: "ListID" }, standalone: false, decls: 16, vars: 8, consts: [["listDetailGrid", ""], [1, "list-detail-container"], [1, "list-header"], [1, "add-dropdown-wrapper"], ["mjButton", "", "variant", "primary", 1, "add-btn", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "fa-solid", "fa-chevron-down", "add-dropdown-arrow"], [1, "add-dropdown-panel"], [1, "custom-toolbar"], [1, "loading-container"], [1, "grid-container"], ["Title", "Remove from List", 3, "Visible", "MinWidth", "Width"], [3, "Visible", "Title", "MinWidth", "Width", "Height"], ["Title", "Add Records from Views", 3, "Visible", "MinWidth", "Width", "Height"], [1, "add-dropdown-item"], [1, "add-dropdown-item", 3, "click"], [1, "add-dropdown-item-text"], [1, "add-dropdown-item-desc"], [1, "toolbar-left"], [1, "row-count"], [1, "selection-count"], [1, "toolbar-right"], ["mjButton", "", "variant", "flat", 1, "toolbar-button", "remove-btn"], ["mjButton", "", "variant", "flat", 1, "toolbar-button", 3, "click"], [1, "fa-solid", "fa-rotate"], [1, "fa-solid", "fa-file-export"], ["mjButton", "", "variant", "flat", 1, "toolbar-button", "remove-btn", 3, "click"], [1, "fa-solid", "fa-trash"], ["text", "Loading list...", "size", "medium"], [3, "rowClicked", "rowDoubleClicked", "selectionChange", "dataLoaded", "listId", "listEntity", "autoNavigate", "height", "showToolbar", "toolbarConfig", "selectionMode"], ["Title", "Remove from List", 3, "Close", "Visible", "MinWidth", "Width"], [1, "dialog-content"], [1, "dialog-loading"], [1, "dialog-message"], ["mjButton", "", "variant", "danger", 3, "click", "disabled"], ["mjButton", "", "variant", "outline", 3, "click", "disabled"], ["text", "Removing records...", "size", "small"], [1, "progress-bar", 3, "Value"], [1, "fa-solid", "fa-triangle-exclamation", "warning-icon"], [1, "dialog-note"], [3, "Close", "Visible", "Title", "MinWidth", "Width", "Height"], [1, "dialog-content", "add-records-dialog"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["text", "Adding records to list...", "size", "small"], [1, "search-section"], [1, "search-input-wrapper"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", 1, "mj-input", "search-input", 3, "input", "placeholder", "value"], [1, "search-hint"], [1, "records-list"], [1, "list-loading"], [1, "empty-results"], ["size", "small", 3, "showText"], [1, "fa-solid", "fa-search", "empty-icon"], [1, "fa-solid", "fa-list", "empty-icon"], [1, "selection-controls"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click"], [1, "selection-info"], [1, "records-scroll"], [1, "record-item", 3, "in-list", "selected"], [1, "record-item", 3, "click"], [1, "record-checkbox"], ["title", "Already in list", 1, "fa-solid", "fa-check", "in-list-icon"], ["type", "checkbox", 3, "checked"], [1, "record-name"], [1, "in-list-badge"], ["type", "checkbox", 3, "click", "change", "checked"], ["Title", "Add Records from Views", 3, "Close", "Visible", "MinWidth", "Width", "Height"], ["text", "Loading records from views...", "size", "small"], ["text", "Loading views...", "size", "small"], [1, "dialog-instruction"], [1, "views-list"], [1, "fa-solid", "fa-folder-open", "empty-icon"], [1, "view-item", 3, "selected"], [1, "view-item", 3, "click"], [1, "fa-solid", "fa-table-list", "view-icon"], [1, "view-name"]], template: function SingleListDetailComponent_Template(rf, ctx) { if (rf & 1) {
916
+ } }, inputs: { ListID: "ListID" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 16, vars: 8, consts: [["listDetailGrid", ""], [1, "list-detail-container"], [1, "list-header"], [1, "add-dropdown-wrapper"], ["mjButton", "", "variant", "primary", 1, "add-btn", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "fa-solid", "fa-chevron-down", "add-dropdown-arrow"], [1, "add-dropdown-panel"], [1, "custom-toolbar"], [1, "loading-container"], [1, "grid-container"], ["Title", "Remove from List", 3, "Visible", "MinWidth", "Width"], [3, "Visible", "Title", "MinWidth", "Width", "Height"], ["Title", "Add Records from Views", 3, "Visible", "MinWidth", "Width", "Height"], [1, "add-dropdown-item"], [1, "add-dropdown-item", 3, "click"], [1, "add-dropdown-item-text"], [1, "add-dropdown-item-desc"], [1, "toolbar-left"], [1, "row-count"], [1, "selection-count"], [1, "toolbar-right"], ["mjButton", "", "variant", "flat", 1, "toolbar-button", "remove-btn"], ["mjButton", "", "variant", "flat", 1, "toolbar-button", 3, "click"], [1, "fa-solid", "fa-rotate"], [1, "fa-solid", "fa-file-export"], ["mjButton", "", "variant", "flat", 1, "toolbar-button", "remove-btn", 3, "click"], [1, "fa-solid", "fa-trash"], ["text", "Loading list...", "size", "medium"], [3, "rowClicked", "rowDoubleClicked", "selectionChange", "dataLoaded", "listId", "listEntity", "autoNavigate", "height", "showToolbar", "toolbarConfig", "selectionMode"], ["Title", "Remove from List", 3, "Close", "Visible", "MinWidth", "Width"], [1, "dialog-content"], [1, "dialog-loading"], [1, "dialog-message"], ["mjButton", "", "variant", "danger", 3, "click", "disabled"], ["mjButton", "", "variant", "outline", 3, "click", "disabled"], ["text", "Removing records...", "size", "small"], [1, "progress-bar", 3, "Value"], [1, "fa-solid", "fa-triangle-exclamation", "warning-icon"], [1, "dialog-note"], [3, "Close", "Visible", "Title", "MinWidth", "Width", "Height"], [1, "dialog-content", "add-records-dialog"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["text", "Adding records to list...", "size", "small"], [1, "search-section"], [1, "search-input-wrapper"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", 1, "mj-input", "search-input", 3, "input", "placeholder", "value"], [1, "search-hint"], [1, "records-list"], [1, "list-loading"], [1, "empty-results"], ["size", "small", 3, "showText"], [1, "fa-solid", "fa-search", "empty-icon"], [1, "fa-solid", "fa-list", "empty-icon"], [1, "selection-controls"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click"], [1, "selection-info"], [1, "records-scroll"], [1, "record-item", 3, "in-list", "selected"], [1, "record-item", 3, "click"], [1, "record-checkbox"], ["title", "Already in list", 1, "fa-solid", "fa-check", "in-list-icon"], ["type", "checkbox", 3, "checked"], [1, "record-name"], [1, "in-list-badge"], ["type", "checkbox", 3, "click", "change", "checked"], ["Title", "Add Records from Views", 3, "Close", "Visible", "MinWidth", "Width", "Height"], ["text", "Loading records from views...", "size", "small"], ["text", "Loading views...", "size", "small"], [1, "dialog-instruction"], [1, "views-list"], [1, "fa-solid", "fa-folder-open", "empty-icon"], [1, "view-item", 3, "selected"], [1, "view-item", 3, "click"], [1, "fa-solid", "fa-table-list", "view-icon"], [1, "view-name"]], template: function SingleListDetailComponent_Template(rf, ctx) { if (rf & 1) {
915
917
  i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "h1");
916
918
  i0.ɵɵtext(3);
917
919
  i0.ɵɵelementEnd();
@@ -961,5 +963,5 @@ export class SingleListDetailComponent {
961
963
  type: HostListener,
962
964
  args: ['document:click', ['$event']]
963
965
  }] }); })();
964
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SingleListDetailComponent, { className: "SingleListDetailComponent", filePath: "src/lib/single-list-detail/single-list-detail.component.ts", lineNumber: 27 }); })();
966
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SingleListDetailComponent, { className: "SingleListDetailComponent", filePath: "src/lib/single-list-detail/single-list-detail.component.ts", lineNumber: 28 }); })();
965
967
  //# sourceMappingURL=single-list-detail.component.js.map