@memberjunction/ng-explorer-core 5.51.0 → 6.1.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.
Files changed (61) hide show
  1. package/LICENSE +7 -0
  2. package/dist/app-routing.module.d.ts.map +1 -1
  3. package/dist/app-routing.module.js +5 -23
  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 -4
  8. package/dist/generated/lazy-feature-config.js.map +1 -1
  9. package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts.map +1 -1
  10. package/dist/lib/resource-wrappers/dashboard-resource.component.js +28 -0
  11. package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
  12. package/dist/lib/shell/components/header/app-nav.component.d.ts +2 -1
  13. package/dist/lib/shell/components/header/app-nav.component.d.ts.map +1 -1
  14. package/dist/lib/shell/components/header/app-nav.component.js +58 -42
  15. package/dist/lib/shell/components/header/app-nav.component.js.map +1 -1
  16. package/dist/lib/shell/components/record-open/record-bar.component.d.ts +29 -0
  17. package/dist/lib/shell/components/record-open/record-bar.component.d.ts.map +1 -0
  18. package/dist/lib/shell/components/record-open/record-bar.component.js +72 -0
  19. package/dist/lib/shell/components/record-open/record-bar.component.js.map +1 -0
  20. package/dist/lib/shell/components/record-open/record-origin-crumb.component.d.ts +26 -0
  21. package/dist/lib/shell/components/record-open/record-origin-crumb.component.d.ts.map +1 -0
  22. package/dist/lib/shell/components/record-open/record-origin-crumb.component.js +140 -0
  23. package/dist/lib/shell/components/record-open/record-origin-crumb.component.js.map +1 -0
  24. package/dist/lib/shell/components/record-open/record-switcher-sheet.component.d.ts +43 -0
  25. package/dist/lib/shell/components/record-open/record-switcher-sheet.component.d.ts.map +1 -0
  26. package/dist/lib/shell/components/record-open/record-switcher-sheet.component.js +102 -0
  27. package/dist/lib/shell/components/record-open/record-switcher-sheet.component.js.map +1 -0
  28. package/dist/lib/shell/components/record-open/record-switcher.service.d.ts +21 -0
  29. package/dist/lib/shell/components/record-open/record-switcher.service.d.ts.map +1 -0
  30. package/dist/lib/shell/components/record-open/record-switcher.service.js +30 -0
  31. package/dist/lib/shell/components/record-open/record-switcher.service.js.map +1 -0
  32. package/dist/lib/shell/components/record-open/records-hub-pill.component.d.ts +63 -0
  33. package/dist/lib/shell/components/record-open/records-hub-pill.component.d.ts.map +1 -0
  34. package/dist/lib/shell/components/record-open/records-hub-pill.component.js +143 -0
  35. package/dist/lib/shell/components/record-open/records-hub-pill.component.js.map +1 -0
  36. package/dist/lib/shell/components/tabs/tab-container.component.d.ts +228 -2
  37. package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
  38. package/dist/lib/shell/components/tabs/tab-container.component.js +1073 -115
  39. package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
  40. package/dist/lib/shell/services/sharing-center-dialog-host.component.d.ts.map +1 -1
  41. package/dist/lib/shell/services/sharing-center-dialog-host.component.js +2 -0
  42. package/dist/lib/shell/services/sharing-center-dialog-host.component.js.map +1 -1
  43. package/dist/lib/shell/shell.component.d.ts +41 -4
  44. package/dist/lib/shell/shell.component.d.ts.map +1 -1
  45. package/dist/lib/shell/shell.component.js +400 -266
  46. package/dist/lib/shell/shell.component.js.map +1 -1
  47. package/dist/lib/shell/shell.module.d.ts +4 -1
  48. package/dist/lib/shell/shell.module.d.ts.map +1 -1
  49. package/dist/lib/shell/shell.module.js +14 -3
  50. package/dist/lib/shell/shell.module.js.map +1 -1
  51. package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts +0 -3
  52. package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts.map +1 -1
  53. package/dist/lib/single-dashboard/Components/add-item/add-item.component.js +16 -78
  54. package/dist/lib/single-dashboard/Components/add-item/add-item.component.js.map +1 -1
  55. package/dist/lib/single-dashboard/single-dashboard.component.d.ts.map +1 -1
  56. package/dist/lib/single-dashboard/single-dashboard.component.js +0 -1
  57. package/dist/lib/single-dashboard/single-dashboard.component.js.map +1 -1
  58. package/dist/lib/user-notifications/user-notifications.component.d.ts.map +1 -1
  59. package/dist/lib/user-notifications/user-notifications.component.js +0 -3
  60. package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
  61. package/package.json +66 -63
@@ -12,9 +12,12 @@ import * as i10 from "@memberjunction/ng-ui-components";
12
12
  import * as i11 from "@memberjunction/ng-explorer-settings";
13
13
  import * as i12 from "@memberjunction/ng-shared-generic";
14
14
  import * as i13 from "@memberjunction/ng-search";
15
+ import * as i14 from "./components/record-open/records-hub-pill.component";
16
+ import * as i15 from "./components/record-open/record-bar.component";
17
+ import * as i16 from "./components/record-open/record-switcher-sheet.component";
15
18
  export declare class ShellModule {
16
19
  static ɵfac: i0.ɵɵFactoryDeclaration<ShellModule, never>;
17
- static ɵmod: i0.ɵɵNgModuleDeclaration<ShellModule, [typeof i1.ShellComponent, typeof i2.AppSwitcherComponent, typeof i3.AppNavComponent, typeof i4.TabContainerComponent, typeof i5.AppAccessDialogComponent, typeof i6.CommandPaletteComponent, typeof i7.OmnibarPaletteComponent], [typeof i8.CommonModule, typeof i9.FormsModule, typeof i10.MJDropdownComponent, typeof i10.MJClickableDirective, typeof i10.MJButtonDirective, typeof i10.MJEmptyStateComponent, typeof i11.ExplorerSettingsModule, typeof i12.SharedGenericModule, typeof i13.SearchModule], [typeof i1.ShellComponent]>;
20
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ShellModule, [typeof i1.ShellComponent, typeof i2.AppSwitcherComponent, typeof i3.AppNavComponent, typeof i4.TabContainerComponent, typeof i5.AppAccessDialogComponent, typeof i6.CommandPaletteComponent, typeof i7.OmnibarPaletteComponent], [typeof i8.CommonModule, typeof i9.FormsModule, typeof i10.MJDropdownComponent, typeof i10.MJClickableDirective, typeof i10.MJButtonDirective, typeof i10.MJEmptyStateComponent, typeof i11.ExplorerSettingsModule, typeof i12.SharedGenericModule, typeof i13.SearchModule, typeof i14.RecordsHubPillComponent, typeof i15.RecordBarComponent, typeof i16.RecordSwitcherSheetComponent], [typeof i1.ShellComponent]>;
18
21
  static ɵinj: i0.ɵɵInjectorDeclaration<ShellModule>;
19
22
  }
20
23
  //# sourceMappingURL=shell.module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shell.module.d.ts","sourceRoot":"","sources":["../../../src/lib/shell/shell.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAgBA,qBA4Ba,WAAW;yCAAX,WAAW;0CAAX,WAAW;0CAAX,WAAW;CAAI"}
1
+ {"version":3,"file":"shell.module.d.ts","sourceRoot":"","sources":["../../../src/lib/shell/shell.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAoBA,qBA+Ba,WAAW;yCAAX,WAAW;0CAAX,WAAW;0CAAX,WAAW;CAAI"}
@@ -9,6 +9,10 @@ import { AppAccessDialogComponent } from './components/dialogs/app-access-dialog
9
9
  import { CommandPaletteComponent } from '../command-palette/command-palette.component';
10
10
  import { OmnibarPaletteComponent } from '../omnibar/omnibar-palette.component';
11
11
  import { CommandPaletteService } from '../command-palette/command-palette.service';
12
+ // Records-style record-open surface (Shell.RecordOpen.Style = 'records')
13
+ import { RecordsHubPillComponent } from './components/record-open/records-hub-pill.component';
14
+ import { RecordBarComponent } from './components/record-open/record-bar.component';
15
+ import { RecordSwitcherSheetComponent } from './components/record-open/record-switcher-sheet.component';
12
16
  import { ExplorerSettingsModule } from '@memberjunction/ng-explorer-settings';
13
17
  import { SharedGenericModule } from '@memberjunction/ng-shared-generic';
14
18
  import { MJDropdownComponent, MJClickableDirective, MJButtonDirective, MJEmptyStateComponent } from '@memberjunction/ng-ui-components';
@@ -25,7 +29,8 @@ export class ShellModule {
25
29
  MJEmptyStateComponent,
26
30
  ExplorerSettingsModule,
27
31
  SharedGenericModule,
28
- SearchModule] });
32
+ SearchModule,
33
+ RecordSwitcherSheetComponent] });
29
34
  }
30
35
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ShellModule, [{
31
36
  type: NgModule,
@@ -48,7 +53,10 @@ export class ShellModule {
48
53
  MJEmptyStateComponent,
49
54
  ExplorerSettingsModule,
50
55
  SharedGenericModule,
51
- SearchModule
56
+ SearchModule,
57
+ RecordsHubPillComponent,
58
+ RecordBarComponent,
59
+ RecordSwitcherSheetComponent
52
60
  ],
53
61
  providers: [
54
62
  CommandPaletteService
@@ -72,5 +80,8 @@ export class ShellModule {
72
80
  MJEmptyStateComponent,
73
81
  ExplorerSettingsModule,
74
82
  SharedGenericModule,
75
- SearchModule], exports: [ShellComponent] }); })();
83
+ SearchModule,
84
+ RecordsHubPillComponent,
85
+ RecordBarComponent,
86
+ RecordSwitcherSheetComponent], exports: [ShellComponent] }); })();
76
87
  //# sourceMappingURL=shell.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shell.module.js","sourceRoot":"","sources":["../../../src/lib/shell/shell.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kDAAkD,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACvI,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;;AA8BzD,MAAM,OAAO,WAAW;qGAAX,WAAW;4DAAX,WAAW;iEAPX;YACT,qBAAqB;SACtB,YAZC,YAAY;YACZ,WAAW;YACX,mBAAmB;YAGnB,qBAAqB;YACrB,sBAAsB;YACtB,mBAAmB;YACnB,YAAY;;iFASH,WAAW;cA5BvB,QAAQ;eAAC;gBACR,YAAY,EAAE;oBACZ,cAAc;oBACd,oBAAoB;oBACpB,eAAe;oBACf,qBAAqB;oBACrB,wBAAwB;oBACxB,uBAAuB;oBACvB,uBAAuB;iBACxB;gBACD,OAAO,EAAE;oBACP,YAAY;oBACZ,WAAW;oBACX,mBAAmB;oBACnB,oBAAoB;oBACpB,iBAAiB;oBACjB,qBAAqB;oBACrB,sBAAsB;oBACtB,mBAAmB;oBACnB,YAAY;iBACb;gBACD,SAAS,EAAE;oBACT,qBAAqB;iBACtB;gBACD,OAAO,EAAE;oBACP,cAAc;iBACf;aACF;;wFACY,WAAW,mBA1BpB,cAAc;QACd,oBAAoB;QACpB,eAAe;QACf,qBAAqB;QACrB,wBAAwB;QACxB,uBAAuB;QACvB,uBAAuB,aAGvB,YAAY;QACZ,WAAW;QACX,mBAAmB;QACnB,oBAAoB;QACpB,iBAAiB;QACjB,qBAAqB;QACrB,sBAAsB;QACtB,mBAAmB;QACnB,YAAY,aAMZ,cAAc","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ShellComponent } from './shell.component';\nimport { AppSwitcherComponent } from './components/header/app-switcher.component';\nimport { AppNavComponent } from './components/header/app-nav.component';\nimport { TabContainerComponent } from './components/tabs/tab-container.component';\nimport { AppAccessDialogComponent } from './components/dialogs/app-access-dialog.component';\nimport { CommandPaletteComponent } from '../command-palette/command-palette.component';\nimport { OmnibarPaletteComponent } from '../omnibar/omnibar-palette.component';\nimport { CommandPaletteService } from '../command-palette/command-palette.service';\nimport { ExplorerSettingsModule } from '@memberjunction/ng-explorer-settings';\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\nimport { MJDropdownComponent, MJClickableDirective, MJButtonDirective, MJEmptyStateComponent } from '@memberjunction/ng-ui-components';\nimport { SearchModule } from '@memberjunction/ng-search';\n\n@NgModule({\n declarations: [\n ShellComponent,\n AppSwitcherComponent,\n AppNavComponent,\n TabContainerComponent,\n AppAccessDialogComponent,\n CommandPaletteComponent,\n OmnibarPaletteComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n MJDropdownComponent,\n MJClickableDirective,\n MJButtonDirective,\n MJEmptyStateComponent,\n ExplorerSettingsModule,\n SharedGenericModule,\n SearchModule\n ],\n providers: [\n CommandPaletteService\n ],\n exports: [\n ShellComponent\n ]\n})\nexport class ShellModule { }\n"]}
1
+ {"version":3,"file":"shell.module.js","sourceRoot":"","sources":["../../../src/lib/shell/shell.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kDAAkD,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,yEAAyE;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACnF,OAAO,EAAE,4BAA4B,EAAE,MAAM,0DAA0D,CAAC;AACxG,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACvI,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;;AAiCzD,MAAM,OAAO,WAAW;qGAAX,WAAW;4DAAX,WAAW;iEAPX;YACT,qBAAqB;SACtB,YAfC,YAAY;YACZ,WAAW;YACX,mBAAmB;YAGnB,qBAAqB;YACrB,sBAAsB;YACtB,mBAAmB;YACnB,YAAY;YAGZ,4BAA4B;;iFASnB,WAAW;cA/BvB,QAAQ;eAAC;gBACR,YAAY,EAAE;oBACZ,cAAc;oBACd,oBAAoB;oBACpB,eAAe;oBACf,qBAAqB;oBACrB,wBAAwB;oBACxB,uBAAuB;oBACvB,uBAAuB;iBACxB;gBACD,OAAO,EAAE;oBACP,YAAY;oBACZ,WAAW;oBACX,mBAAmB;oBACnB,oBAAoB;oBACpB,iBAAiB;oBACjB,qBAAqB;oBACrB,sBAAsB;oBACtB,mBAAmB;oBACnB,YAAY;oBACZ,uBAAuB;oBACvB,kBAAkB;oBAClB,4BAA4B;iBAC7B;gBACD,SAAS,EAAE;oBACT,qBAAqB;iBACtB;gBACD,OAAO,EAAE;oBACP,cAAc;iBACf;aACF;;wFACY,WAAW,mBA7BpB,cAAc;QACd,oBAAoB;QACpB,eAAe;QACf,qBAAqB;QACrB,wBAAwB;QACxB,uBAAuB;QACvB,uBAAuB,aAGvB,YAAY;QACZ,WAAW;QACX,mBAAmB;QACnB,oBAAoB;QACpB,iBAAiB;QACjB,qBAAqB;QACrB,sBAAsB;QACtB,mBAAmB;QACnB,YAAY;QACZ,uBAAuB;QACvB,kBAAkB;QAClB,4BAA4B,aAM5B,cAAc","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ShellComponent } from './shell.component';\nimport { AppSwitcherComponent } from './components/header/app-switcher.component';\nimport { AppNavComponent } from './components/header/app-nav.component';\nimport { TabContainerComponent } from './components/tabs/tab-container.component';\nimport { AppAccessDialogComponent } from './components/dialogs/app-access-dialog.component';\nimport { CommandPaletteComponent } from '../command-palette/command-palette.component';\nimport { OmnibarPaletteComponent } from '../omnibar/omnibar-palette.component';\nimport { CommandPaletteService } from '../command-palette/command-palette.service';\n// Records-style record-open surface (Shell.RecordOpen.Style = 'records')\nimport { RecordsHubPillComponent } from './components/record-open/records-hub-pill.component';\nimport { RecordBarComponent } from './components/record-open/record-bar.component';\nimport { RecordSwitcherSheetComponent } from './components/record-open/record-switcher-sheet.component';\nimport { ExplorerSettingsModule } from '@memberjunction/ng-explorer-settings';\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\nimport { MJDropdownComponent, MJClickableDirective, MJButtonDirective, MJEmptyStateComponent } from '@memberjunction/ng-ui-components';\nimport { SearchModule } from '@memberjunction/ng-search';\n\n@NgModule({\n declarations: [\n ShellComponent,\n AppSwitcherComponent,\n AppNavComponent,\n TabContainerComponent,\n AppAccessDialogComponent,\n CommandPaletteComponent,\n OmnibarPaletteComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n MJDropdownComponent,\n MJClickableDirective,\n MJButtonDirective,\n MJEmptyStateComponent,\n ExplorerSettingsModule,\n SharedGenericModule,\n SearchModule,\n RecordsHubPillComponent,\n RecordBarComponent,\n RecordSwitcherSheetComponent\n ],\n providers: [\n CommandPaletteService\n ],\n exports: [\n ShellComponent\n ]\n})\nexport class ShellModule { }\n"]}
@@ -11,7 +11,6 @@ export declare class AddItemComponent extends BaseAngularComponent implements On
11
11
  resourceType: any;
12
12
  selectedEntity: any;
13
13
  selectedView: any;
14
- selectedReport: any;
15
14
  selectedViewMode: string;
16
15
  viewModeOptions: {
17
16
  label: string;
@@ -20,14 +19,12 @@ export declare class AddItemComponent extends BaseAngularComponent implements On
20
19
  }[];
21
20
  Entities: any[];
22
21
  Views: any[];
23
- Reports: any[];
24
22
  get ResourceTypes(): any[];
25
23
  private get md();
26
24
  constructor(sharedService: SharedService);
27
25
  ngOnInit(): void;
28
26
  onResourceTypeChange(event: any): Promise<void>;
29
27
  getViews(): Promise<void>;
30
- getReports(): Promise<void>;
31
28
  onEntityChange(event: any): void;
32
29
  onViewChange(event: any): void;
33
30
  addItem(): 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,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
+ {"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;IAoB9D,OAAO,CAAC,aAAa;IAnBvB,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,gBAAgB,EAAE,MAAM,CAAU;IAClC,eAAe;;;;QAKpB;IACK,QAAQ,EAAE,GAAG,EAAE,CAAM;IACrB,KAAK,EAAE,GAAG,EAAE,CAAM;IACzB,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;IAK/B,QAAQ;IAed,cAAc,CAAC,KAAK,EAAE,GAAG;IAMzB,YAAY,CAAC,KAAK,EAAE,GAAG;IAIhB,OAAO;IAwCd,WAAW;yCAtGA,gBAAgB;2CAAhB,gBAAgB;CAyG5B"}
@@ -1,5 +1,4 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { RunView } from '@memberjunction/core';
3
2
  import { ViewInfo } from '@memberjunction/core-entities';
4
3
  import { ResourceData } from '@memberjunction/core-entities';
5
4
  import { SharedService } from '@memberjunction/ng-shared';
@@ -69,41 +68,6 @@ function AddItemComponent_Case_8_Template(rf, ctx) { if (rf & 1) {
69
68
  i0.ɵɵadvance();
70
69
  i0.ɵɵconditional(ctx_r1.selectedEntity && ctx_r1.showloader ? 5 : -1);
71
70
  } }
72
- function AddItemComponent_Case_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
73
- const _r5 = i0.ɵɵgetCurrentView();
74
- i0.ɵɵelementStart(0, "label");
75
- i0.ɵɵtext(1, "Reports ");
76
- i0.ɵɵelement(2, "br");
77
- i0.ɵɵelementStart(3, "mj-dropdown", 3);
78
- i0.ɵɵlistener("ValueChange", function AddItemComponent_Case_9_Conditional_0_Template_mj_dropdown_ValueChange_3_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onViewChange($event)); });
79
- i0.ɵɵtwoWayListener("ngModelChange", function AddItemComponent_Case_9_Conditional_0_Template_mj_dropdown_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedReport, $event) || (ctx_r1.selectedReport = $event); return i0.ɵɵresetView($event); });
80
- i0.ɵɵelementEnd()();
81
- } if (rf & 2) {
82
- const ctx_r1 = i0.ɵɵnextContext(2);
83
- i0.ɵɵadvance(3);
84
- i0.ɵɵproperty("Data", ctx_r1.Reports)("TextField", "Name")("ValueField", "ID");
85
- i0.ɵɵtwoWayProperty("ngModel", ctx_r1.selectedReport);
86
- } }
87
- function AddItemComponent_Case_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
88
- i0.ɵɵelement(0, "mj-loading", 9);
89
- } if (rf & 2) {
90
- i0.ɵɵproperty("showText", false);
91
- } }
92
- function AddItemComponent_Case_9_Conditional_2_Template(rf, ctx) { if (rf & 1) {
93
- i0.ɵɵelement(0, "mj-empty-state", 12);
94
- } }
95
- function AddItemComponent_Case_9_Template(rf, ctx) { if (rf & 1) {
96
- i0.ɵɵconditionalCreate(0, AddItemComponent_Case_9_Conditional_0_Template, 4, 4, "label");
97
- i0.ɵɵconditionalCreate(1, AddItemComponent_Case_9_Conditional_1_Template, 1, 1, "mj-loading", 9);
98
- i0.ɵɵconditionalCreate(2, AddItemComponent_Case_9_Conditional_2_Template, 1, 0, "mj-empty-state", 12);
99
- } if (rf & 2) {
100
- const ctx_r1 = i0.ɵɵnextContext();
101
- i0.ɵɵconditional(ctx_r1.Reports.length ? 0 : -1);
102
- i0.ɵɵadvance();
103
- i0.ɵɵconditional(!ctx_r1.Reports.length && ctx_r1.showloader ? 1 : -1);
104
- i0.ɵɵadvance();
105
- i0.ɵɵconditional(!ctx_r1.Reports.length && !ctx_r1.showloader ? 2 : -1);
106
- } }
107
71
  export class AddItemComponent extends BaseAngularComponent {
108
72
  sharedService;
109
73
  onClose = new EventEmitter();
@@ -112,7 +76,6 @@ export class AddItemComponent extends BaseAngularComponent {
112
76
  resourceType = null;
113
77
  selectedEntity = null;
114
78
  selectedView = null;
115
- selectedReport = null;
116
79
  selectedViewMode = 'grid';
117
80
  viewModeOptions = [
118
81
  { label: 'Grid', value: 'grid', icon: 'fa-solid fa-list' },
@@ -122,7 +85,6 @@ export class AddItemComponent extends BaseAngularComponent {
122
85
  ];
123
86
  Entities = [];
124
87
  Views = [];
125
- Reports = [];
126
88
  get ResourceTypes() {
127
89
  return SharedService.Instance.ResourceTypes.filter((rt) => rt.Name !== 'Dashboards' && rt.Name !== 'Records');
128
90
  }
@@ -140,9 +102,6 @@ export class AddItemComponent extends BaseAngularComponent {
140
102
  async onResourceTypeChange(event) {
141
103
  this.resourceType = event;
142
104
  this.selectedEntity = null;
143
- if (this.resourceType.Name === 'Reports') {
144
- this.getReports();
145
- }
146
105
  }
147
106
  async getViews() {
148
107
  if (!this.selectedEntity)
@@ -156,45 +115,24 @@ export class AddItemComponent extends BaseAngularComponent {
156
115
  // Always set showloader to false when done, even if no views found
157
116
  this.showloader = false;
158
117
  }
159
- async getReports() {
160
- if (!this.resourceType)
161
- return;
162
- this.showloader = true;
163
- this.selectedReport = null;
164
- this.Reports = [];
165
- const rv = RunView.FromMetadataProvider(this.ProviderToUse);
166
- const reports = await rv.RunView({ EntityName: this.resourceType.Entity, ExtraFilter: `UserID='${this.md.CurrentUser.ID}'` });
167
- if (reports.Success && reports.Results) {
168
- // Sort reports alphabetically
169
- this.Reports = reports.Results.sort((a, b) => a.Name.localeCompare(b.Name));
170
- }
171
- // Always set showloader to false when done, even if no reports found
172
- this.showloader = false;
173
- }
174
118
  onEntityChange(event) {
175
119
  this.selectedEntity = event;
176
120
  this.selectedView = null;
177
- this.selectedReport = null;
178
121
  this.getViews();
179
122
  }
180
123
  onViewChange(event) {
181
- if (this.resourceType.Name === 'Reports') {
182
- this.selectedReport = event;
183
- }
184
- else {
185
- this.selectedView = event;
186
- }
124
+ this.selectedView = event;
187
125
  }
188
126
  addItem() {
189
127
  // For views, allow "Default View" (no specific view selected) when an entity is chosen
190
128
  const isViewResource = this.resourceType?.Name === 'UserViews' || this.resourceType?.Entity === 'MJ: User Views';
191
129
  const isDefaultView = isViewResource && this.selectedEntity && !this.selectedView;
192
- if (!this.selectedReport && !this.selectedView && !isDefaultView) {
130
+ if (!this.selectedView && !isDefaultView) {
193
131
  this.sharedService.CreateSimpleNotification('Please select an item to add', 'warning', 2000);
194
132
  return;
195
133
  }
196
- const name = this.selectedReport?.Name || this.selectedView?.Name || (isDefaultView ? `${this.selectedEntity.Name} (Default View)` : null);
197
- const id = this.selectedReport?.ID || this.selectedView?.ID || null;
134
+ const name = this.selectedView?.Name || (isDefaultView ? `${this.selectedEntity.Name} (Default View)` : null);
135
+ const id = this.selectedView?.ID || null;
198
136
  // Build configuration — include viewMode for view resources
199
137
  const configuration = {};
200
138
  if (isViewResource && this.selectedViewMode && this.selectedViewMode !== 'grid') {
@@ -223,7 +161,7 @@ export class AddItemComponent extends BaseAngularComponent {
223
161
  this.onClose.emit();
224
162
  }
225
163
  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, 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"], ["Size", "compact", "Icon", "fa-solid fa-file-lines", "Title", "No reports available"]], template: function AddItemComponent_Template(rf, ctx) { if (rf & 1) {
164
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AddItemComponent, selectors: [["app-add-item-dialog"]], inputs: { selectedResource: "selectedResource" }, outputs: { onClose: "onClose" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 15, 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"]], template: function AddItemComponent_Template(rf, ctx) { if (rf & 1) {
227
165
  i0.ɵɵelement(0, "div", 0);
228
166
  i0.ɵɵelementStart(1, "mj-window", 1);
229
167
  i0.ɵɵlistener("Close", function AddItemComponent_Template_mj_window_Close_1_listener() { return ctx.closeDialog(); });
@@ -235,16 +173,16 @@ export class AddItemComponent extends BaseAngularComponent {
235
173
  i0.ɵɵtwoWayListener("ngModelChange", function AddItemComponent_Template_mj_dropdown_ngModelChange_6_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.resourceType, $event) || (ctx.resourceType = $event); return $event; });
236
174
  i0.ɵɵelementEnd()();
237
175
  i0.ɵɵelementStart(7, "div", 4);
238
- i0.ɵɵconditionalCreate(8, AddItemComponent_Case_8_Template, 6, 6)(9, AddItemComponent_Case_9_Template, 3, 3);
176
+ i0.ɵɵconditionalCreate(8, AddItemComponent_Case_8_Template, 6, 6);
239
177
  i0.ɵɵelementEnd()();
240
- i0.ɵɵelementStart(10, "div", 5)(11, "button", 6);
241
- i0.ɵɵlistener("click", function AddItemComponent_Template_button_click_11_listener() { return ctx.addItem(); });
242
- i0.ɵɵelement(12, "span", 7);
243
- i0.ɵɵtext(13, " Add ");
178
+ i0.ɵɵelementStart(9, "div", 5)(10, "button", 6);
179
+ i0.ɵɵlistener("click", function AddItemComponent_Template_button_click_10_listener() { return ctx.addItem(); });
180
+ i0.ɵɵelement(11, "span", 7);
181
+ i0.ɵɵtext(12, " Add ");
244
182
  i0.ɵɵelementEnd();
245
- i0.ɵɵelementStart(14, "button", 8);
246
- i0.ɵɵlistener("click", function AddItemComponent_Template_button_click_14_listener() { return ctx.closeDialog(); });
247
- i0.ɵɵtext(15, "Cancel");
183
+ i0.ɵɵelementStart(13, "button", 8);
184
+ i0.ɵɵlistener("click", function AddItemComponent_Template_button_click_13_listener() { return ctx.closeDialog(); });
185
+ i0.ɵɵtext(14, "Cancel");
248
186
  i0.ɵɵelementEnd()()();
249
187
  } if (rf & 2) {
250
188
  let tmp_9_0;
@@ -254,12 +192,12 @@ export class AddItemComponent extends BaseAngularComponent {
254
192
  i0.ɵɵproperty("Data", ctx.ResourceTypes)("TextField", "DisplayName")("ValueField", "ID");
255
193
  i0.ɵɵtwoWayProperty("ngModel", ctx.resourceType);
256
194
  i0.ɵɵadvance(2);
257
- i0.ɵɵconditional((tmp_9_0 = ctx.resourceType.Entity) === "MJ: User Views" ? 8 : tmp_9_0 === "Reports" ? 9 : -1);
258
- } }, dependencies: [i2.NgControlStatus, i2.NgModel, i3.LoadingComponent, i4.MJButtonDirective, i4.MJDropdownComponent, i4.MJWindowComponent, i4.MJEmptyStateComponent], styles: [".popup-actions[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px;\n border-top: 1px solid rgba(0, 0, 0, 0.08);\n}\n .modal-body-wrap .k-window-content {\n display: flex;\n flex-direction: column;\n height: 100%;\n flex: 1;\n padding: 0;\n}\n.resource-wrap[_ngcontent-%COMP%] {\n flex: 1;\n padding: 24px;\n margin: 16px;\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.08);\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n.user-view-wrap[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n .resource-wrap .k-label {\n color: var(--mj-text-secondary);\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n}\n .resource-wrap .k-dropdownlist {\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.08);\n background: transparent;\n line-height: 32px;\n margin: 0;\n}\n .customBtn button {\n flex: 1;\n border-radius: 10px;\n line-height: 34px;\n}\n\n.optional-hint[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n font-weight: 400;\n margin-left: 4px;\n}"] });
195
+ i0.ɵɵconditional((tmp_9_0 = ctx.resourceType.Entity) === "MJ: User Views" ? 8 : -1);
196
+ } }, dependencies: [i2.NgControlStatus, i2.NgModel, i3.LoadingComponent, i4.MJButtonDirective, i4.MJDropdownComponent, i4.MJWindowComponent], styles: [".popup-actions[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px;\n border-top: 1px solid rgba(0, 0, 0, 0.08);\n}\n .modal-body-wrap .k-window-content {\n display: flex;\n flex-direction: column;\n height: 100%;\n flex: 1;\n padding: 0;\n}\n.resource-wrap[_ngcontent-%COMP%] {\n flex: 1;\n padding: 24px;\n margin: 16px;\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.08);\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n.user-view-wrap[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n .resource-wrap .k-label {\n color: var(--mj-text-secondary);\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n}\n .resource-wrap .k-dropdownlist {\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.08);\n background: transparent;\n line-height: 32px;\n margin: 0;\n}\n .customBtn button {\n flex: 1;\n border-radius: 10px;\n line-height: 34px;\n}\n\n.optional-hint[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n font-weight: 400;\n margin-left: 4px;\n}"] });
259
197
  }
260
198
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AddItemComponent, [{
261
199
  type: Component,
262
- args: [{ standalone: false, selector: 'app-add-item-dialog', template: "<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 \u2014 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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-file-lines\"\n Title=\"No reports available\" />\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", styles: [".popup-actions {\n width: 100%;\n padding: 10px;\n border-top: 1px solid rgba(0, 0, 0, 0.08);\n}\n::ng-deep .modal-body-wrap .k-window-content {\n display: flex;\n flex-direction: column;\n height: 100%;\n flex: 1;\n padding: 0;\n}\n.resource-wrap {\n flex: 1;\n padding: 24px;\n margin: 16px;\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.08);\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n.user-view-wrap {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n::ng-deep .resource-wrap .k-label {\n color: var(--mj-text-secondary);\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n}\n::ng-deep .resource-wrap .k-dropdownlist {\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.08);\n background: transparent;\n line-height: 32px;\n margin: 0;\n}\n::ng-deep .customBtn button {\n flex: 1;\n border-radius: 10px;\n line-height: 34px;\n}\n\n.optional-hint {\n font-size: 11px;\n color: var(--mj-text-muted);\n font-weight: 400;\n margin-left: 4px;\n}\n\n"] }]
200
+ args: [{ standalone: false, selector: 'app-add-item-dialog', template: "<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 \u2014 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 }\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", styles: [".popup-actions {\n width: 100%;\n padding: 10px;\n border-top: 1px solid rgba(0, 0, 0, 0.08);\n}\n::ng-deep .modal-body-wrap .k-window-content {\n display: flex;\n flex-direction: column;\n height: 100%;\n flex: 1;\n padding: 0;\n}\n.resource-wrap {\n flex: 1;\n padding: 24px;\n margin: 16px;\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.08);\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n.user-view-wrap {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n::ng-deep .resource-wrap .k-label {\n color: var(--mj-text-secondary);\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n}\n::ng-deep .resource-wrap .k-dropdownlist {\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.08);\n background: transparent;\n line-height: 32px;\n margin: 0;\n}\n::ng-deep .customBtn button {\n flex: 1;\n border-radius: 10px;\n line-height: 34px;\n}\n\n.optional-hint {\n font-size: 11px;\n color: var(--mj-text-muted);\n font-weight: 400;\n margin-left: 4px;\n}\n\n"] }]
263
201
  }], () => [{ type: i1.SharedService }], { onClose: [{
264
202
  type: Output
265
203
  }], selectedResource: [{
@@ -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\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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-file-lines\"\n Title=\"No reports available\" />\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 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 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 }\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 onEntityChange(event: any) {\n this.selectedEntity = event;\n this.selectedView = null;\n this.getViews();\n }\n\n onViewChange(event: any) {\n this.selectedView = event;\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.selectedView && !isDefaultView) {\n this.sharedService.CreateSimpleNotification('Please select an item to add', 'warning', 2000);\n return;\n }\n\n const name = this.selectedView?.Name || (isDefaultView ? `${this.selectedEntity.Name} (Default View)` : null);\n const 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 }\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 +1 @@
1
- {"version":3,"file":"single-dashboard.component.d.ts","sourceRoot":"","sources":["../../../src/lib/single-dashboard/single-dashboard.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"single-dashboard.component.d.ts","sourceRoot":"","sources":["../../../src/lib/single-dashboard/single-dashboard.component.ts"],"names":[],"mappings":"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"}
@@ -439,7 +439,6 @@ export class SingleDashboardComponent extends BaseDashboard {
439
439
  return 'fa-solid fa-cube';
440
440
  // Map resource types to appropriate FontAwesome icons
441
441
  const iconMap = {
442
- 'Reports': 'fa-solid fa-chart-line',
443
442
  'UserViews': 'fa-solid fa-table',
444
443
  'Dashboards': 'fa-solid fa-grip',
445
444
  'Lists': 'fa-solid fa-list',
@@ -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, takeUntil } 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), takeUntil(this.destroy$))\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 <mj-empty-state class=\"empty-dashboard\"\n Icon=\"fa-solid fa-grip-vertical\"\n Title=\"This dashboard is empty\"\n Message=\"Start by adding reports or user views to your dashboard\"\n ActionText=\"Add Item\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addItem()\" />\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, takeUntil } 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), takeUntil(this.destroy$))\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 '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 <mj-empty-state class=\"empty-dashboard\"\n Icon=\"fa-solid fa-grip-vertical\"\n Title=\"This dashboard is empty\"\n Message=\"Start by adding reports or user views to your dashboard\"\n ActionText=\"Add Item\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addItem()\" />\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 +1 @@
1
- {"version":3,"file":"user-notifications.component.d.ts","sourceRoot":"","sources":["../../../src/lib/user-notifications/user-notifications.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-notifications.component.d.ts","sourceRoot":"","sources":["../../../src/lib/user-notifications/user-notifications.component.ts"],"names":[],"mappings":"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"}
@@ -801,9 +801,6 @@ export class UserNotificationsComponent extends BaseAngularComponent {
801
801
  case 'dashboards':
802
802
  this.navigationService.OpenDashboard(recordId, 'Dashboard');
803
803
  break;
804
- case 'reports':
805
- this.navigationService.OpenReport(recordId, 'Report');
806
- break;
807
804
  default:
808
805
  console.warn(`[UserNotifications] Unhandled resource type for navigation: ${rt.Name}`);
809
806
  break;