@memberjunction/ng-dashboards 5.4.0 → 5.5.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 (121) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.js +4 -4
  2. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  3. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  4. package/dist/AI/components/agents/agent-editor.component.js +5 -4
  5. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  6. package/dist/AI/components/models/model-management.component.js +3 -3
  7. package/dist/AI/components/models/model-management.component.js.map +1 -1
  8. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  9. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +8 -7
  10. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  11. package/dist/AI/components/prompts/prompt-management.component.js +3 -3
  12. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  13. package/dist/AI/components/system/system-configuration.component.js +4 -4
  14. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  15. package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
  16. package/dist/APIKeys/api-applications-panel.component.js +3 -2
  17. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  18. package/dist/APIKeys/api-keys-resource.component.js +2 -2
  19. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  20. package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
  21. package/dist/APIKeys/api-scopes-panel.component.js +4 -3
  22. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  23. package/dist/Actions/components/actions-overview.component.js +3 -3
  24. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  25. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  26. package/dist/Actions/components/categories-list-view.component.js +3 -2
  27. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  28. package/dist/Actions/components/execution-monitoring.component.js +2 -2
  29. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  30. package/dist/Actions/components/explorer/action-explorer.component.js +2 -2
  31. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  32. package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
  33. package/dist/Actions/components/explorer/new-action-panel.component.js +3 -2
  34. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  35. package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
  36. package/dist/Actions/components/explorer/new-category-panel.component.js +3 -2
  37. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  38. package/dist/Communication/communication-templates-resource.component.js +2 -2
  39. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  40. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +6 -0
  41. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  42. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +19 -6
  43. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  44. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +4 -0
  45. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  46. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +13 -4
  47. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  48. package/dist/Credentials/components/credentials-categories-resource.component.d.ts +2 -0
  49. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  50. package/dist/Credentials/components/credentials-categories-resource.component.js +13 -9
  51. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  52. package/dist/Credentials/components/credentials-list-resource.component.js +11 -11
  53. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  54. package/dist/Credentials/components/credentials-overview-resource.component.js +3 -3
  55. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  56. package/dist/Credentials/components/credentials-types-resource.component.d.ts +2 -0
  57. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  58. package/dist/Credentials/components/credentials-types-resource.component.js +13 -9
  59. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  60. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +11 -11
  61. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  62. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
  63. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +4 -3
  64. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  65. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
  66. package/dist/DataExplorer/components/view-selector/view-selector.component.js +4 -3
  67. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
  68. package/dist/DataExplorer/data-explorer-dashboard.component.js +6 -6
  69. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  70. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  71. package/dist/DataExplorer/data-explorer-resource.component.js +4 -1
  72. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  73. package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
  74. package/dist/DataExplorer/services/explorer-state.service.js +9 -8
  75. package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
  76. package/dist/EntityAdmin/entity-admin-dashboard.component.js +2 -2
  77. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  78. package/dist/Home/home-application.js +2 -2
  79. package/dist/Home/home-application.js.map +1 -1
  80. package/dist/Lists/components/lists-browse-resource.component.js +3 -3
  81. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  82. package/dist/Lists/components/lists-categories-resource.component.d.ts +1 -0
  83. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  84. package/dist/Lists/components/lists-categories-resource.component.js +17 -14
  85. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  86. package/dist/Lists/components/lists-my-lists-resource.component.js +2 -2
  87. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  88. package/dist/Lists/components/lists-operations-resource.component.d.ts +1 -0
  89. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  90. package/dist/Lists/components/lists-operations-resource.component.js +15 -12
  91. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  92. package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
  93. package/dist/MCP/components/mcp-connection-dialog.component.js +3 -2
  94. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  95. package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts.map +1 -1
  96. package/dist/MCP/components/mcp-test-tool-dialog.component.js +8 -7
  97. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  98. package/dist/MCP/mcp-dashboard.component.js +22 -22
  99. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  100. package/dist/QueryBrowser/query-browser-resource.component.d.ts +2 -0
  101. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  102. package/dist/QueryBrowser/query-browser-resource.component.js +14 -10
  103. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  104. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
  105. package/dist/Scheduling/services/scheduling-instrumentation.service.js +2 -1
  106. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  107. package/dist/Testing/components/testing-explorer.component.d.ts +1 -0
  108. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  109. package/dist/Testing/components/testing-explorer.component.js +22 -18
  110. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  111. package/dist/Testing/components/testing-review.component.d.ts +1 -0
  112. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  113. package/dist/Testing/components/testing-review.component.js +14 -10
  114. package/dist/Testing/components/testing-review.component.js.map +1 -1
  115. package/dist/VersionHistory/components/diff-resource.component.js +6 -6
  116. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  117. package/dist/VersionHistory/components/graph-resource.component.js +2 -2
  118. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  119. package/dist/VersionHistory/components/labels-resource.component.js +3 -3
  120. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  121. package/package.json +38 -38
@@ -1,6 +1,7 @@
1
1
  import { Component, Input, Output, EventEmitter, ViewEncapsulation } from '@angular/core';
2
2
  import { Metadata, RunView } from '@memberjunction/core';
3
3
  import { Subject } from 'rxjs';
4
+ import { UUIDsEqual } from '@memberjunction/global';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@angular/forms";
6
7
  const _forTrack0 = ($index, $item) => $item.id;
@@ -499,10 +500,10 @@ export class ViewSelectorComponent {
499
500
  const accessibleViews = result.Results.filter(v => v.UserCanView);
500
501
  // Separate into owned and shared
501
502
  this.myViews = accessibleViews
502
- .filter(v => v.UserID === userId)
503
+ .filter(v => UUIDsEqual(v.UserID, userId))
503
504
  .map(v => this.mapViewToListItem(v, true));
504
505
  this.sharedViews = accessibleViews
505
- .filter(v => v.UserID !== userId)
506
+ .filter(v => !UUIDsEqual(v.UserID, userId))
506
507
  .map(v => this.mapViewToListItem(v, false));
507
508
  // Update selected view reference
508
509
  this.updateSelectedViewFromId();
@@ -861,5 +862,5 @@ export class ViewSelectorComponent {
861
862
  }], revertRequested: [{
862
863
  type: Output
863
864
  }] }); })();
864
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ViewSelectorComponent, { className: "ViewSelectorComponent", filePath: "src/DataExplorer/components/view-selector/view-selector.component.ts", lineNumber: 52 }); })();
865
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ViewSelectorComponent, { className: "ViewSelectorComponent", filePath: "src/DataExplorer/components/view-selector/view-selector.component.ts", lineNumber: 53 }); })();
865
866
  //# sourceMappingURL=view-selector.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"view-selector.component.js","sourceRoot":"","sources":["../../../../src/DataExplorer/components/view-selector/view-selector.component.ts","../../../../src/DataExplorer/components/view-selector/view-selector.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAA0D,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClJ,OAAO,EAAc,QAAQ,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;;;;;;ICA3B,+BAAmD;IAA1B,sLAAS,sBAAe,KAAC;IAAC,iBAAM;;;IAerD,+BAA+D;IAAA,sBAAC;IAAA,iBAAO;;;IAanE,gCAA8B;IAAA,YAA8B;IAAA,iBAAO;;;IAArC,cAA8B;IAA9B,qDAA8B;;;IAiCxD,wBAA+C;;;IAyBvC,gCAA+B;IAAA,uBAAO;IAAA,iBAAO;;;IAI/C,+BAA0B;IAAA,YAA6B;IAAA,iBAAM;;;IAAnC,cAA6B;IAA7B,gDAA6B;;;IAKnD,4BAAM;IAAA,wBAAkC;IAAC,YAAoF;IAAA,iBAAO;;;;IAA3F,eAAoF;IAApF,8HAAoF;;;IAG7H,4BAAM;IAAA,wBAAyC;IAAC,YAAiF;IAAA,iBAAO;;;;IAAxF,eAAiF;IAAjF,2HAAiF;;;IAGjI,4BAAM;IAAA,wBAAiD;IAAC,YAA2B;IAAA,iBAAO;;;;IAAlC,eAA2B;IAA3B,2DAA2B;;;IARvF,+BAA0B;IACxB,sIAAoC;IAGpC,sIAAoC;IAGpC,sIAA6B;IAG/B,iBAAM;;;;IATJ,cAEC;IAFD,iEAEC;IACD,cAEC;IAFD,iEAEC;IACD,cAEC;IAFD,0DAEC;;;IAyBL,wBAA+C;;;;IApDnD,+BAG6B;IAA3B,sOAAS,0BAAgB,KAAC;IAC1B,+BAAsE;IACpE,wBAAsC;IACxC,iBAAM;IAEJ,AADF,+BAA6B,cACD;IACxB,YACA;IAAA,4HAAsB;IAGxB,iBAAM;IACN,2HAA+B;IAG/B,2HAA6F;IAa/F,iBAAM;IAEJ,AADF,+BAA6B,kBAIP;IADlB,gPAAS,0CAAgC,KAAC;IAE1C,yBAAkC;IACpC,iBAAS;IACT,mCAGoB;IADlB,gPAAS,8CAAoC,KAAC;IAE9C,yBAAmC;IACrC,iBAAS;IACT,mCAGsB;IADpB,gPAAS,0CAAgC,KAAC;IAE1C,yBAAgD;IAEpD,AADE,iBAAS,EACL;IACN,2HAAkC;IAGpC,iBAAM;;;;IApDJ,8DAA2C;IAEjB,cAA2C;IAA3C,8DAA2C;IAKjE,eACA;IADA,6CACA;IAAA,cAEC;IAFD,4CAEC;IAEH,cAEC;IAFD,qDAEC;IACD,cAYC;IAZD,8IAYC;IAsBH,eAEC;IAFD,gEAEC;;;IA3DL,AADF,+BAAwB,cACS;IAC7B,wBAAgC;IAChC,4BAAM;IAAA,wBAAQ;IAAA,iBAAO;IACrB,gCAA+B;IAAA,YAA4B;IAC7D,AAD6D,iBAAO,EAC9D;IACN,uHAwDC;IACH,iBAAM;;;IA3D6B,eAA4B;IAA5B,mDAA4B;IAE7D,cAwDC;IAxDD,qCAwDC;;;IAwBS,gCAA8B;IAAA,yBAAS;IAAA,iBAAO;;;IAE9C,gCAAuC;IAAA,wBAAQ;IAAA,iBAAO;;;IAIxD,+BAA0B;IAAA,YAA6B;IAAA,iBAAM;;;IAAnC,cAA6B;IAA7B,gDAA6B;;;IAKnD,4BAAM;IAAA,wBAAkC;IAAC,YAAoF;IAAA,iBAAO;;;;IAA3F,eAAoF;IAApF,8HAAoF;;;IAG7H,4BAAM;IAAA,wBAAyC;IAAC,YAAiF;IAAA,iBAAO;;;;IAAxF,eAAiF;IAAjF,2HAAiF;;;IALrI,+BAA0B;IACxB,sIAAoC;IAGpC,sIAAoC;IAGtC,iBAAM;;;;IANJ,cAEC;IAFD,iEAEC;IACD,cAEC;IAFD,iEAEC;;;;IAYH,kCAGoB;IADlB,kRAAS,8CAAoC,KAAC;IAE9C,wBAAmC;IACrC,iBAAS;;;IAIX,wBAA+C;;;;IA/CnD,+BAG6B;IAA3B,sOAAS,0BAAgB,KAAC;IAC1B,+BAAiC;IAC/B,wBAAiC;IACnC,iBAAM;IAEJ,AADF,+BAA6B,cACD;IACxB,YACA;IAEE,AAFF,4HAAyB,sGAEhB;IAGX,iBAAM;IACN,2HAA+B;IAG/B,2HAAoE;IAUtE,iBAAM;IAEJ,AADF,gCAA6B,kBAII;IAD7B,gPAAS,0CAAgC,KAAC;IAE1C,yBAAkC;IACpC,iBAAS;IACT,gIAAwB;IAQ1B,iBAAM;IACN,2HAAkC;IAGpC,iBAAM;;;;IA/CJ,8DAA2C;IAOvC,eACA;IADA,6CACA;IAAA,cAIC;IAJD,8CAIC;IAEH,eAEC;IAFD,qDAEC;IACD,cASC;IATD,2GASC;IASD,eAOC;IAPD,+CAOC;IAEH,cAEC;IAFD,gEAEC;;;IAtDL,AADF,+BAAwB,cACS;IAC7B,wBAAuC;IACvC,4BAAM;IAAA,8BAAc;IAAA,iBAAO;IAC3B,gCAA+B;IAAA,YAAgC;IACjE,AADiE,iBAAO,EAClE;IACN,uHAmDC;IACH,iBAAM;;;IAtD6B,eAAgC;IAAhC,uDAAgC;IAEjE,cAmDC;IAnDD,yCAmDC;;;IAMH,+BAA8B;IAC5B,wBAAoC;IAElC,AADF,+BAA2B,aACjB;IAAA,kCAAkB;IAAA,iBAAS;IACnC,4BAAM;IAAA,yDAAyC;IAEnD,AADE,AADiD,iBAAO,EAClD,EACF;;;IAKN,+BAA8B;IAC5B,wBAAkC;IAClC,4BAAM;IAAA,YAAiC;IACzC,AADyC,iBAAO,EAC1C;;;IADE,eAAiC;IAAjC,mEAAiC;;;IAMzC,+BAAwB;IACtB,wBAA2C;IAC3C,4BAAM;IAAA,gCAAgB;IACxB,AADwB,iBAAO,EACzB;;;;IArMV,AAFF,8BAAsB,cAES;IAC3B,wBAAqD;IACrD,gCAA6B;IAAA,qBAAK;IAAA,iBAAO;IACzC,uGAAc;IAGd,kCAAqE;IAAxC,yLAAS,sBAAe,KAAC;IACpD,wBAAiC;IAErC,AADE,iBAAS,EACL;IAIJ,AADF,+BAA6B,gBAOzB;IAFA,iTAAwB;IACxB,8NAA+B,EAAE,KAAC;IAEtC,AAPE,iBAME,EACE;IAMF,AADF,AAFF,gCAA2B,eAED,eAIM;IAA1B,uLAAS,sBAAe,KAAC;IACzB,gCAA2D;IACzD,yBAAiC;IACnC,iBAAM;IAEJ,AADF,gCAA6B,eACD;IAAA,0BAAS;IACrC,AADqC,iBAAM,EACrC;IACN,sGAAuB;IAI3B,AADE,iBAAM,EACF;IAGN,wGAAkC;IAoElC,wGAAsC;IA+DtC,wGAA+B;IAW/B,wGAAkG;IAQlG,wGAAiB;IAMnB,iBAAM;IAIJ,AADF,gCAA6B,kBAIe;IADxC,0LAAS,oBAAa,KAAC;IAEvB,yBAAgC;IAChC,6BAAM;IAAA,yBAAQ;IAChB,AADgB,iBAAO,EACd;IACT,mCAGgC;IAD9B,0LAAS,yBAAkB,KAAC;IAE5B,yBAA6C;IAC7C,6BAAM;IAAA,iCAAgB;IAG5B,AADE,AADE,AADwB,iBAAO,EACtB,EACL,EACF;;;IAvNF,eAEC;IAFD,wCAEC;IAYC,eAAwB;IAAxB,iDAAwB;IAWtB,eAAgC;IAAhC,gDAAgC;IAEN,cAAgC;IAAhC,gDAAgC;IAM1D,eAEC;IAFD,kDAEC;IAKL,cAiEC;IAjED,6DAiEC;IAGD,cA4DC;IA5DD,iEA4DC;IAGD,cAQC;IARD,iEAQC;IAGD,cAKC;IALD,kJAKC;IAGD,cAKC;IALD,4CAKC;;;;IA0BP,kCAGsC;IADpC,0LAAS,oBAAa,KAAC;IAEvB,wBAA6C;IAC/C,iBAAS;;AD7Nb;;;;;;;;GAQG;AAQH,MAAM,OAAO,qBAAqB;IA8EZ;IA7EpB;;OAEG;IACM,MAAM,GAAsB,IAAI,CAAC;IAE1C;;OAEG;IACM,cAAc,GAAkB,IAAI,CAAC;IAE9C;;OAEG;IACM,YAAY,GAAY,KAAK,CAAC;IAEvC;;OAEG;IACO,YAAY,GAAG,IAAI,YAAY,EAAqB,CAAC;IAE/D;;OAEG;IACO,iBAAiB,GAAG,IAAI,YAAY,EAA0B,CAAC;IAEzE;;OAEG;IACO,oBAAoB,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE1D;;OAEG;IACO,kBAAkB,GAAG,IAAI,YAAY,EAAU,CAAC;IAE1D;;OAEG;IACO,sBAAsB,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE5D;;OAEG;IACO,wBAAwB,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE9D;;OAEG;IACO,eAAe,GAAG,IAAI,YAAY,EAAQ,CAAC;IAErD;;OAEG;IACO,sBAAsB,GAAG,IAAI,YAAY,EAAU,CAAC;IAE9D;;;OAGG;IACO,kBAAkB,GAAG,IAAI,YAAY,EAAW,CAAC;IAE3D;;OAEG;IACO,eAAe,GAAG,IAAI,YAAY,EAAQ,CAAC;IAErD,iBAAiB;IACV,SAAS,GAAY,KAAK,CAAC;IAC3B,cAAc,GAAY,KAAK,CAAC;IAChC,OAAO,GAAmB,EAAE,CAAC;IAC7B,WAAW,GAAmB,EAAE,CAAC;IACjC,YAAY,GAAoC,IAAI,CAAC;IACrD,UAAU,GAAW,EAAE,CAAC;IAEvB,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;IAC/B,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IAElC,YAAoB,GAAsB;QAAtB,QAAG,GAAH,GAAG,CAAmB;IAAG,CAAC;IAE9C,WAAW,CAAC,OAAsB;QAChC,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;gBAClB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;gBACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACrD,2EAA2E;YAC3E,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,SAAS;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7C,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;YAEzB,uEAAuE;YACvE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAA2B;gBACxD,UAAU,EAAE,gBAAgB;gBAC5B,WAAW,EAAE,eAAe,IAAI,CAAC,MAAM,CAAC,EAAE,oBAAoB,MAAM,oBAAoB;gBACxF,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,eAAe;aAC5B,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACrC,0CAA0C;gBAC1C,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBAElE,iCAAiC;gBACjC,IAAI,CAAC,OAAO,GAAG,eAAe;qBAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;qBAChC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;gBAE7C,IAAI,CAAC,WAAW,GAAG,eAAe;qBAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;qBAChC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gBAE9C,iCAAiC;gBACjC,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,IAA8B,EAAE,OAAgB;QACxE,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO;YACP,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,wBAAwB;QAC9B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,OAAO;QACT,CAAC;QAED,uBAAuB;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC;QACpE,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;YAClC,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5E,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC;YACtC,OAAO;QACT,CAAC;QAED,qDAAqD;QACrD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACb,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QAChC,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;QAC3C,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,aAAa;QACX,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,aAAa;QACX,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAkB;QAC3B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,eAAe;QACb,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,aAAa;QACX,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,eAAe;QACb,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,MAAc,EAAE,KAAiB;QAC/C,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,wBAAwB;QACjD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,YAAY,EAAE,WAAW,IAAI,KAAK,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,KAAY;QACzB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,2CAA2C;IAC3C,qCAAqC;IACrC,2CAA2C;IAE3C;;OAEG;IACH,IAAI,eAAe;QACjB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC7B,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;YACnC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC1D,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,IAAI,mBAAmB;QACrB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACjC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;YACnC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC1D,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,IAAkB;QACnC,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YAC5C,IAAI,CAAC,WAAW;gBAAE,OAAO,CAAC,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACvC,IAAI,MAAM,EAAE,OAAO,EAAE,MAAM;gBAAE,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAC1D,mCAAmC;YACnC,IAAI,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,OAAO;gBAAE,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YACnE,OAAO,CAAC,CAAC;QACX,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,IAAkB;QACnC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YACxC,IAAI,CAAC,SAAS;gBAAE,OAAO,CAAC,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAA0B,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;YAC5E,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,IAAkB;QAChC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YACxC,IAAI,CAAC,SAAS;gBAAE,OAAO,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/C,OAAO,GAAG,MAAM,CAAC,MAAM,QAAQ,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAChE,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,MAAc,EAAE,KAAiB;QACnD,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,0CAA0C;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QACpG,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;YAChC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,MAAc,EAAE,KAAiB;QAC/C,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;+GA1bU,qBAAqB;6DAArB,qBAAqB;YCnDlC,8BAA0B;YAExB,uFAAsB;YAMpB,AADF,8BAAwB,gBAOQ;YAF5B,kGAAS,oBAAgB,IAAC;YAG1B,uBAAmD;YACnD,+BAA0B;YAAA,YAAiB;YAAA,iBAAO;YAClD,wFAAoB;YAGpB,uBAAkF;YACpF,iBAAS;YAGT,yFAAsB;YA+NxB,iBAAM;YAGN,4FAAsB;YAUtB,mCAG8D;YAD5D,mGAAS,qBAAiB,IAAC;YAE3B,yBAAqC;YACvC,iBAAS;YAGT,mCAG4B;YAD1B,mGAAS,uBAAmB,IAAC;YAE7B,yBAAgC;YAClC,iBAAS;YAGT,mCAG0B;YADxB,mGAAS,cAAU,IAAC;YAEpB,yBAAsC;YAE1C,AADE,iBAAS,EACL;;YAxRJ,cAEC;YAFD,6CAEC;YAMG,eAA+B;YAC/B,AADA,4CAA+B,4BACF;YAE7B,wCAAsB;YAGI,eAAiB;YAAjB,qCAAiB;YAC3C,cAEC;YAFD,2CAEC;YAC4C,cAAgC;YAAhC,6CAAgC;YAI/E,cA8NC;YA9ND,6CA8NC;YAIH,cAOC;YAPD,8CAOC;;;iFD9MU,qBAAqB;cAPjC,SAAS;6BACI,KAAK,YACP,kBAAkB,iBAGb,iBAAiB,CAAC,IAAI;;kBAMpC,KAAK;;kBAKL,KAAK;;kBAKL,KAAK;;kBAKL,MAAM;;kBAKN,MAAM;;kBAKN,MAAM;;kBAKN,MAAM;;kBAKN,MAAM;;kBAKN,MAAM;;kBAKN,MAAM;;kBAKN,MAAM;;kBAMN,MAAM;;kBAKN,MAAM;;kFAjEI,qBAAqB","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef, OnDestroy, ViewEncapsulation } from '@angular/core';\nimport { EntityInfo, Metadata, RunView } from '@memberjunction/core';\nimport { MJUserViewEntityExtended, ViewInfo } from '@memberjunction/core-entities';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * Represents a view in the dropdown\n */\nexport interface ViewListItem {\n id: string;\n name: string;\n isOwned: boolean;\n isShared: boolean;\n isDefault: boolean;\n userCanEdit: boolean;\n entity: MJUserViewEntityExtended;\n}\n\n/**\n * Event emitted when a view is selected\n */\nexport interface ViewSelectedEvent {\n viewId: string | null;\n view: MJUserViewEntityExtended | null;\n}\n\n/**\n * Event emitted when user requests to save the current view\n */\nexport interface SaveViewRequestedEvent {\n /** True if user wants to save as a new view */\n saveAsNew: boolean;\n}\n\n/**\n * ViewSelectorComponent - Dropdown for selecting saved views\n *\n * Features:\n * - Shows \"(Default)\" option when no view is selected\n * - Groups views into \"My Views\" and \"Shared Views\"\n * - \"Save Current View\" and \"Manage Views\" actions\n * - \"Open in Tab\" button for saved views\n */\n@Component({\n standalone: false,\n selector: 'mj-view-selector',\n templateUrl: './view-selector.component.html',\n styleUrls: ['./view-selector.component.css'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ViewSelectorComponent implements OnChanges, OnDestroy {\n /**\n * The entity to load views for\n */\n @Input() entity: EntityInfo | null = null;\n\n /**\n * Currently selected view ID (null = default view)\n */\n @Input() selectedViewId: string | null = null;\n\n /**\n * Whether the current view has unsaved modifications\n */\n @Input() viewModified: boolean = false;\n\n /**\n * Emitted when a view is selected\n */\n @Output() viewSelected = new EventEmitter<ViewSelectedEvent>();\n\n /**\n * Emitted when user requests to save the current view\n */\n @Output() saveViewRequested = new EventEmitter<SaveViewRequestedEvent>();\n\n /**\n * Emitted when user wants to open the view management panel\n */\n @Output() manageViewsRequested = new EventEmitter<void>();\n\n /**\n * Emitted when user wants to open the current view in its own tab\n */\n @Output() openInTabRequested = new EventEmitter<string>();\n\n /**\n * Emitted when user wants to configure the current view\n */\n @Output() configureViewRequested = new EventEmitter<void>();\n\n /**\n * Emitted when user wants to create a new record\n */\n @Output() createNewRecordRequested = new EventEmitter<void>();\n\n /**\n * Emitted when user wants to export data to Excel\n */\n @Output() exportRequested = new EventEmitter<void>();\n\n /**\n * Emitted when user wants to duplicate a view (F-005)\n */\n @Output() duplicateViewRequested = new EventEmitter<string>();\n\n /**\n * Emitted when user wants to use the quick save dialog (F-001)\n * Emits true when user explicitly requested \"Save As New\", false for general save\n */\n @Output() quickSaveRequested = new EventEmitter<boolean>();\n\n /**\n * Emitted when user wants to revert to saved state (F-007)\n */\n @Output() revertRequested = new EventEmitter<void>();\n\n // Internal state\n public isLoading: boolean = false;\n public isDropdownOpen: boolean = false;\n public myViews: ViewListItem[] = [];\n public sharedViews: ViewListItem[] = [];\n public selectedView: MJUserViewEntityExtended | null = null;\n public searchText: string = '';\n\n private destroy$ = new Subject<void>();\n private metadata = new Metadata();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['entity']) {\n if (this.entity) {\n this.loadViews();\n } else {\n this.myViews = [];\n this.sharedViews = [];\n this.selectedView = null;\n }\n }\n\n if (changes['selectedViewId'] && this.selectedViewId) {\n // If we have a selected view ID and it's in our lists, update selectedView\n this.updateSelectedViewFromId();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Load views for the current entity\n */\n public async loadViews(): Promise<void> {\n if (!this.entity) {\n return;\n }\n\n this.isLoading = true;\n this.cdr.detectChanges();\n\n try {\n const userId = this.metadata.CurrentUser?.ID;\n const rv = new RunView();\n\n // Load all views for this entity that the user owns OR that are shared\n const result = await rv.RunView<MJUserViewEntityExtended>({\n EntityName: 'MJ: User Views',\n ExtraFilter: `EntityID = '${this.entity.ID}' AND (UserID = '${userId}' OR IsShared = 1)`,\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results) {\n // Filter views the user can actually view\n const accessibleViews = result.Results.filter(v => v.UserCanView);\n\n // Separate into owned and shared\n this.myViews = accessibleViews\n .filter(v => v.UserID === userId)\n .map(v => this.mapViewToListItem(v, true));\n\n this.sharedViews = accessibleViews\n .filter(v => v.UserID !== userId)\n .map(v => this.mapViewToListItem(v, false));\n\n // Update selected view reference\n this.updateSelectedViewFromId();\n }\n } catch (error) {\n console.error('Failed to load views:', error);\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Map a view entity to a list item\n */\n private mapViewToListItem(view: MJUserViewEntityExtended, isOwned: boolean): ViewListItem {\n return {\n id: view.ID,\n name: view.Name,\n isOwned,\n isShared: view.IsShared,\n isDefault: view.IsDefault,\n userCanEdit: view.UserCanEdit,\n entity: view\n };\n }\n\n /**\n * Update the selectedView reference based on selectedViewId\n */\n private updateSelectedViewFromId(): void {\n if (!this.selectedViewId) {\n this.selectedView = null;\n return;\n }\n\n // Search in both lists\n const myView = this.myViews.find(v => v.id === this.selectedViewId);\n if (myView) {\n this.selectedView = myView.entity;\n return;\n }\n\n const sharedView = this.sharedViews.find(v => v.id === this.selectedViewId);\n if (sharedView) {\n this.selectedView = sharedView.entity;\n return;\n }\n\n // View not in lists yet - it might need to be loaded\n this.selectedView = null;\n }\n\n /**\n * Get the display name for the current selection\n */\n get displayName(): string {\n if (this.selectedView) {\n return this.selectedView.Name;\n }\n return '(Default)';\n }\n\n /**\n * Toggle dropdown open/closed\n */\n toggleDropdown(): void {\n this.isDropdownOpen = !this.isDropdownOpen;\n this.cdr.detectChanges();\n }\n\n /**\n * Close the dropdown\n */\n closeDropdown(): void {\n this.isDropdownOpen = false;\n this.searchText = '';\n this.cdr.detectChanges();\n }\n\n /**\n * Select the default view (no saved view)\n */\n selectDefault(): void {\n this.selectedView = null;\n this.viewSelected.emit({ viewId: null, view: null });\n this.closeDropdown();\n }\n\n /**\n * Select a view from the list\n */\n selectView(item: ViewListItem): void {\n this.selectedView = item.entity;\n this.viewSelected.emit({ viewId: item.id, view: item.entity });\n this.closeDropdown();\n }\n\n /**\n * Request to save the current view\n */\n onSaveView(): void {\n this.saveViewRequested.emit({ saveAsNew: false });\n this.closeDropdown();\n }\n\n /**\n * Request to save as a new view - opens Quick Save dialog in \"Save As New\" mode\n */\n onSaveAsNewView(): void {\n this.quickSaveRequested.emit(true);\n this.closeDropdown();\n }\n\n /**\n * Request to manage views\n */\n onManageViews(): void {\n this.manageViewsRequested.emit();\n this.closeDropdown();\n }\n\n /**\n * Request to open the current view in a tab\n */\n onOpenInTab(): void {\n if (this.selectedViewId) {\n this.openInTabRequested.emit(this.selectedViewId);\n }\n }\n\n /**\n * Request to configure the current view\n */\n onConfigureView(): void {\n this.configureViewRequested.emit();\n }\n\n /**\n * Request to create a new record\n */\n onCreateNewRecord(): void {\n this.createNewRecordRequested.emit();\n }\n\n /**\n * Request to export data to Excel\n */\n onExport(): void {\n this.exportRequested.emit();\n }\n\n /**\n * Request to duplicate a view (F-005)\n */\n onDuplicateView(viewId: string, event: MouseEvent): void {\n event.stopPropagation(); // Don't select the view\n this.duplicateViewRequested.emit(viewId);\n this.closeDropdown();\n }\n\n /**\n * Request to open the quick save dialog (F-001)\n */\n onQuickSave(): void {\n this.quickSaveRequested.emit(false);\n this.closeDropdown();\n }\n\n /**\n * Request to revert view to saved state (F-007)\n */\n onRevert(): void {\n this.revertRequested.emit();\n }\n\n /**\n * Check if there are any views to show\n */\n get hasViews(): boolean {\n return this.myViews.length > 0 || this.sharedViews.length > 0;\n }\n\n /**\n * Check if the current user can edit the selected view\n */\n get canEditSelectedView(): boolean {\n return this.selectedView?.UserCanEdit ?? false;\n }\n\n /**\n * Handle click outside to close dropdown\n */\n onClickOutside(event: Event): void {\n this.closeDropdown();\n }\n\n // ========================================\n // RICH VIEW PANEL: Search & Metadata\n // ========================================\n\n /**\n * My views filtered by search text\n */\n get filteredMyViews(): ViewListItem[] {\n if (!this.searchText.trim()) return this.myViews;\n const term = this.searchText.toLowerCase();\n return this.myViews.filter(v =>\n v.name.toLowerCase().includes(term) ||\n (v.entity.Description || '').toLowerCase().includes(term)\n );\n }\n\n /**\n * Shared views filtered by search text\n */\n get filteredSharedViews(): ViewListItem[] {\n if (!this.searchText.trim()) return this.sharedViews;\n const term = this.searchText.toLowerCase();\n return this.sharedViews.filter(v =>\n v.name.toLowerCase().includes(term) ||\n (v.entity.Description || '').toLowerCase().includes(term)\n );\n }\n\n /**\n * Get the number of filters configured in a view by parsing its FilterState\n */\n getViewFilterCount(view: ViewListItem): number {\n try {\n const filterState = view.entity.FilterState;\n if (!filterState) return 0;\n const parsed = JSON.parse(filterState);\n if (parsed?.filters?.length) return parsed.filters.length;\n // CompositeFilterDescriptor format\n if (parsed?.logic && parsed?.filters) return parsed.filters.length;\n return 0;\n } catch {\n return 0;\n }\n }\n\n /**\n * Get the number of visible columns in a view by parsing GridState\n */\n getViewColumnCount(view: ViewListItem): number {\n try {\n const gridState = view.entity.GridState;\n if (!gridState) return 0;\n const parsed = JSON.parse(gridState);\n if (Array.isArray(parsed)) {\n return parsed.filter((c: Record<string, unknown>) => !c['hidden']).length;\n }\n return 0;\n } catch {\n return 0;\n }\n }\n\n /**\n * Get sort info string from a view's SortState\n */\n getViewSortInfo(view: ViewListItem): string {\n try {\n const sortState = view.entity.SortState;\n if (!sortState) return '';\n const parsed = JSON.parse(sortState);\n if (Array.isArray(parsed) && parsed.length > 0) {\n return `${parsed.length} sort${parsed.length > 1 ? 's' : ''}`;\n }\n return '';\n } catch {\n return '';\n }\n }\n\n /**\n * Select a specific view and open the config panel for it\n */\n onConfigureViewById(viewId: string, event: MouseEvent): void {\n event.stopPropagation();\n // First select the view, then open config\n const item = this.myViews.find(v => v.id === viewId) || this.sharedViews.find(v => v.id === viewId);\n if (item) {\n this.selectedView = item.entity;\n this.viewSelected.emit({ viewId: item.id, view: item.entity });\n }\n this.configureViewRequested.emit();\n this.closeDropdown();\n }\n\n /**\n * Open a specific view in a new tab\n */\n onOpenViewInTab(viewId: string, event: MouseEvent): void {\n event.stopPropagation();\n this.openInTabRequested.emit(viewId);\n this.closeDropdown();\n }\n\n /**\n * Reset to default view (select no view)\n */\n onResetToDefault(): void {\n this.selectDefault();\n }\n}\n","<div class=\"vs-container\">\n <!-- Backdrop for closing panel -->\n @if (isDropdownOpen) {\n <div class=\"vs-backdrop\" (click)=\"closeDropdown()\"></div>\n }\n\n <!-- Main View Selector Button -->\n <div class=\"vs-wrapper\">\n <button\n class=\"vs-button\"\n [class.modified]=\"viewModified\"\n [class.open]=\"isDropdownOpen\"\n (click)=\"toggleDropdown()\"\n [disabled]=\"isLoading\"\n title=\"Select a saved view\">\n <i class=\"fa-solid fa-layer-group vs-btn-icon\"></i>\n <span class=\"vs-btn-name\">{{ displayName }}</span>\n @if (viewModified) {\n <span class=\"vs-modified-dot\" title=\"View has unsaved changes\">•</span>\n }\n <i class=\"fa-solid fa-chevron-down vs-arrow\" [class.rotated]=\"isDropdownOpen\"></i>\n </button>\n\n <!-- Rich View Panel -->\n @if (isDropdownOpen) {\n <div class=\"vs-panel\">\n <!-- Panel Header -->\n <div class=\"vs-panel-header\">\n <i class=\"fa-solid fa-table-list vs-header-icon\"></i>\n <span class=\"vs-panel-title\">Views</span>\n @if (entity) {\n <span class=\"vs-entity-badge\">{{ entity.DisplayNameOrName }}</span>\n }\n <button class=\"vs-close-btn\" (click)=\"closeDropdown()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Search -->\n <div class=\"vs-panel-search\">\n <input\n type=\"text\"\n class=\"vs-search-input\"\n placeholder=\"Search views...\"\n [(ngModel)]=\"searchText\"\n (keydown.escape)=\"searchText = ''\"\n />\n </div>\n\n <!-- Panel Body -->\n <div class=\"vs-panel-body\">\n <!-- Default Option -->\n <div class=\"vs-section\">\n <div\n class=\"vs-card\"\n [class.active]=\"!selectedViewId\"\n (click)=\"selectDefault()\">\n <div class=\"vs-card-icon\" [class.active]=\"!selectedViewId\">\n <i class=\"fa-solid fa-table\"></i>\n </div>\n <div class=\"vs-card-content\">\n <div class=\"vs-card-name\">(Default)</div>\n </div>\n @if (!selectedViewId) {\n <i class=\"fa-solid fa-check vs-card-check\"></i>\n }\n </div>\n </div>\n\n <!-- My Views Section -->\n @if (filteredMyViews.length > 0) {\n <div class=\"vs-section\">\n <div class=\"vs-section-header\">\n <i class=\"fa-solid fa-user\"></i>\n <span>My Views</span>\n <span class=\"vs-section-count\">{{ filteredMyViews.length }}</span>\n </div>\n @for (view of filteredMyViews; track view.id) {\n <div\n class=\"vs-card\"\n [class.active]=\"selectedViewId === view.id\"\n (click)=\"selectView(view)\">\n <div class=\"vs-card-icon\" [class.active]=\"selectedViewId === view.id\">\n <i class=\"fa-solid fa-table-list\"></i>\n </div>\n <div class=\"vs-card-content\">\n <div class=\"vs-card-name\">\n {{ view.name }}\n @if (view.isDefault) {\n <span class=\"vs-default-badge\">Default</span>\n }\n </div>\n @if (view.entity.Description) {\n <div class=\"vs-card-desc\">{{ view.entity.Description }}</div>\n }\n @if (getViewFilterCount(view) > 0 || getViewColumnCount(view) > 0 || getViewSortInfo(view)) {\n <div class=\"vs-card-meta\">\n @if (getViewFilterCount(view) > 0) {\n <span><i class=\"fa-solid fa-filter\"></i> {{ getViewFilterCount(view) }} filter{{ getViewFilterCount(view) !== 1 ? 's' : '' }}</span>\n }\n @if (getViewColumnCount(view) > 0) {\n <span><i class=\"fa-solid fa-table-columns\"></i> {{ getViewColumnCount(view) }} col{{ getViewColumnCount(view) !== 1 ? 's' : '' }}</span>\n }\n @if (getViewSortInfo(view)) {\n <span><i class=\"fa-solid fa-arrow-down-short-wide\"></i> {{ getViewSortInfo(view) }}</span>\n }\n </div>\n }\n </div>\n <div class=\"vs-card-actions\">\n <button\n class=\"vs-action-btn\"\n (click)=\"onDuplicateView(view.id, $event)\"\n title=\"Duplicate\">\n <i class=\"fa-regular fa-copy\"></i>\n </button>\n <button\n class=\"vs-action-btn\"\n (click)=\"onConfigureViewById(view.id, $event)\"\n title=\"Configure\">\n <i class=\"fa-solid fa-sliders\"></i>\n </button>\n <button\n class=\"vs-action-btn\"\n (click)=\"onOpenViewInTab(view.id, $event)\"\n title=\"Open in Tab\">\n <i class=\"fa-solid fa-up-right-from-square\"></i>\n </button>\n </div>\n @if (selectedViewId === view.id) {\n <i class=\"fa-solid fa-check vs-card-check\"></i>\n }\n </div>\n }\n </div>\n }\n\n <!-- Shared Views Section -->\n @if (filteredSharedViews.length > 0) {\n <div class=\"vs-section\">\n <div class=\"vs-section-header\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n <span>Shared With Me</span>\n <span class=\"vs-section-count\">{{ filteredSharedViews.length }}</span>\n </div>\n @for (view of filteredSharedViews; track view.id) {\n <div\n class=\"vs-card\"\n [class.active]=\"selectedViewId === view.id\"\n (click)=\"selectView(view)\">\n <div class=\"vs-card-icon shared\">\n <i class=\"fa-solid fa-users\"></i>\n </div>\n <div class=\"vs-card-content\">\n <div class=\"vs-card-name\">\n {{ view.name }}\n @if (!view.userCanEdit) {\n <span class=\"vs-shared-badge\">View Only</span>\n } @else {\n <span class=\"vs-shared-badge editable\">Can Edit</span>\n }\n </div>\n @if (view.entity.Description) {\n <div class=\"vs-card-desc\">{{ view.entity.Description }}</div>\n }\n @if (getViewFilterCount(view) > 0 || getViewColumnCount(view) > 0) {\n <div class=\"vs-card-meta\">\n @if (getViewFilterCount(view) > 0) {\n <span><i class=\"fa-solid fa-filter\"></i> {{ getViewFilterCount(view) }} filter{{ getViewFilterCount(view) !== 1 ? 's' : '' }}</span>\n }\n @if (getViewColumnCount(view) > 0) {\n <span><i class=\"fa-solid fa-table-columns\"></i> {{ getViewColumnCount(view) }} col{{ getViewColumnCount(view) !== 1 ? 's' : '' }}</span>\n }\n </div>\n }\n </div>\n <div class=\"vs-card-actions\">\n <button\n class=\"vs-action-btn\"\n (click)=\"onDuplicateView(view.id, $event)\"\n title=\"Duplicate as My View\">\n <i class=\"fa-regular fa-copy\"></i>\n </button>\n @if (view.userCanEdit) {\n <button\n class=\"vs-action-btn\"\n (click)=\"onConfigureViewById(view.id, $event)\"\n title=\"Configure\">\n <i class=\"fa-solid fa-sliders\"></i>\n </button>\n }\n </div>\n @if (selectedViewId === view.id) {\n <i class=\"fa-solid fa-check vs-card-check\"></i>\n }\n </div>\n }\n </div>\n }\n\n <!-- No Views Message -->\n @if (!hasViews && !isLoading) {\n <div class=\"vs-empty-message\">\n <i class=\"fa-solid fa-bookmark\"></i>\n <div class=\"vs-empty-text\">\n <strong>No saved views yet</strong>\n <span>Save your current configuration as a view</span>\n </div>\n </div>\n }\n\n <!-- No Search Results -->\n @if (hasViews && filteredMyViews.length === 0 && filteredSharedViews.length === 0 && searchText) {\n <div class=\"vs-empty-message\">\n <i class=\"fa-solid fa-search\"></i>\n <span>No views match \"{{ searchText }}\"</span>\n </div>\n }\n\n <!-- Loading Indicator -->\n @if (isLoading) {\n <div class=\"vs-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading views...</span>\n </div>\n }\n </div>\n\n <!-- Panel Footer -->\n <div class=\"vs-panel-footer\">\n <button\n class=\"vs-panel-btn primary\"\n (click)=\"onQuickSave()\"\n title=\"Save current view configuration\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New View</span>\n </button>\n <button\n class=\"vs-panel-btn\"\n (click)=\"onResetToDefault()\"\n title=\"Reset to default view\">\n <i class=\"fa-solid fa-arrow-rotate-left\"></i>\n <span>Reset to Default</span>\n </button>\n </div>\n </div>\n }\n </div>\n\n <!-- Open in Tab Button (only visible when a view is selected) -->\n @if (selectedViewId) {\n <button\n class=\"vs-icon-btn\"\n (click)=\"onOpenInTab()\"\n title=\"Open this view in a new tab\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n </button>\n }\n\n <!-- Configure View Button -->\n <button\n class=\"vs-icon-btn\"\n (click)=\"onConfigureView()\"\n title=\"Configure view settings (columns, filters, sorting)\">\n <i class=\"fa-solid fa-sliders-h\"></i>\n </button>\n\n <!-- Create New Record Button -->\n <button\n class=\"vs-icon-btn\"\n (click)=\"onCreateNewRecord()\"\n title=\"Create new record\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n\n <!-- Export Button -->\n <button\n class=\"vs-icon-btn vs-export-btn\"\n (click)=\"onExport()\"\n title=\"Export to Excel\">\n <i class=\"fa-solid fa-file-excel\"></i>\n </button>\n</div>\n"]}
1
+ {"version":3,"file":"view-selector.component.js","sourceRoot":"","sources":["../../../../src/DataExplorer/components/view-selector/view-selector.component.ts","../../../../src/DataExplorer/components/view-selector/view-selector.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef, OnDestroy, ViewEncapsulation } from '@angular/core';\nimport { EntityInfo, Metadata, RunView } from '@memberjunction/core';\nimport { MJUserViewEntityExtended, ViewInfo } from '@memberjunction/core-entities';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Represents a view in the dropdown\n */\nexport interface ViewListItem {\n id: string;\n name: string;\n isOwned: boolean;\n isShared: boolean;\n isDefault: boolean;\n userCanEdit: boolean;\n entity: MJUserViewEntityExtended;\n}\n\n/**\n * Event emitted when a view is selected\n */\nexport interface ViewSelectedEvent {\n viewId: string | null;\n view: MJUserViewEntityExtended | null;\n}\n\n/**\n * Event emitted when user requests to save the current view\n */\nexport interface SaveViewRequestedEvent {\n /** True if user wants to save as a new view */\n saveAsNew: boolean;\n}\n\n/**\n * ViewSelectorComponent - Dropdown for selecting saved views\n *\n * Features:\n * - Shows \"(Default)\" option when no view is selected\n * - Groups views into \"My Views\" and \"Shared Views\"\n * - \"Save Current View\" and \"Manage Views\" actions\n * - \"Open in Tab\" button for saved views\n */\n@Component({\n standalone: false,\n selector: 'mj-view-selector',\n templateUrl: './view-selector.component.html',\n styleUrls: ['./view-selector.component.css'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ViewSelectorComponent implements OnChanges, OnDestroy {\n /**\n * The entity to load views for\n */\n @Input() entity: EntityInfo | null = null;\n\n /**\n * Currently selected view ID (null = default view)\n */\n @Input() selectedViewId: string | null = null;\n\n /**\n * Whether the current view has unsaved modifications\n */\n @Input() viewModified: boolean = false;\n\n /**\n * Emitted when a view is selected\n */\n @Output() viewSelected = new EventEmitter<ViewSelectedEvent>();\n\n /**\n * Emitted when user requests to save the current view\n */\n @Output() saveViewRequested = new EventEmitter<SaveViewRequestedEvent>();\n\n /**\n * Emitted when user wants to open the view management panel\n */\n @Output() manageViewsRequested = new EventEmitter<void>();\n\n /**\n * Emitted when user wants to open the current view in its own tab\n */\n @Output() openInTabRequested = new EventEmitter<string>();\n\n /**\n * Emitted when user wants to configure the current view\n */\n @Output() configureViewRequested = new EventEmitter<void>();\n\n /**\n * Emitted when user wants to create a new record\n */\n @Output() createNewRecordRequested = new EventEmitter<void>();\n\n /**\n * Emitted when user wants to export data to Excel\n */\n @Output() exportRequested = new EventEmitter<void>();\n\n /**\n * Emitted when user wants to duplicate a view (F-005)\n */\n @Output() duplicateViewRequested = new EventEmitter<string>();\n\n /**\n * Emitted when user wants to use the quick save dialog (F-001)\n * Emits true when user explicitly requested \"Save As New\", false for general save\n */\n @Output() quickSaveRequested = new EventEmitter<boolean>();\n\n /**\n * Emitted when user wants to revert to saved state (F-007)\n */\n @Output() revertRequested = new EventEmitter<void>();\n\n // Internal state\n public isLoading: boolean = false;\n public isDropdownOpen: boolean = false;\n public myViews: ViewListItem[] = [];\n public sharedViews: ViewListItem[] = [];\n public selectedView: MJUserViewEntityExtended | null = null;\n public searchText: string = '';\n\n private destroy$ = new Subject<void>();\n private metadata = new Metadata();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['entity']) {\n if (this.entity) {\n this.loadViews();\n } else {\n this.myViews = [];\n this.sharedViews = [];\n this.selectedView = null;\n }\n }\n\n if (changes['selectedViewId'] && this.selectedViewId) {\n // If we have a selected view ID and it's in our lists, update selectedView\n this.updateSelectedViewFromId();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Load views for the current entity\n */\n public async loadViews(): Promise<void> {\n if (!this.entity) {\n return;\n }\n\n this.isLoading = true;\n this.cdr.detectChanges();\n\n try {\n const userId = this.metadata.CurrentUser?.ID;\n const rv = new RunView();\n\n // Load all views for this entity that the user owns OR that are shared\n const result = await rv.RunView<MJUserViewEntityExtended>({\n EntityName: 'MJ: User Views',\n ExtraFilter: `EntityID = '${this.entity.ID}' AND (UserID = '${userId}' OR IsShared = 1)`,\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results) {\n // Filter views the user can actually view\n const accessibleViews = result.Results.filter(v => v.UserCanView);\n\n // Separate into owned and shared\n this.myViews = accessibleViews\n .filter(v => UUIDsEqual(v.UserID, userId))\n .map(v => this.mapViewToListItem(v, true));\n\n this.sharedViews = accessibleViews\n .filter(v => !UUIDsEqual(v.UserID, userId))\n .map(v => this.mapViewToListItem(v, false));\n\n // Update selected view reference\n this.updateSelectedViewFromId();\n }\n } catch (error) {\n console.error('Failed to load views:', error);\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Map a view entity to a list item\n */\n private mapViewToListItem(view: MJUserViewEntityExtended, isOwned: boolean): ViewListItem {\n return {\n id: view.ID,\n name: view.Name,\n isOwned,\n isShared: view.IsShared,\n isDefault: view.IsDefault,\n userCanEdit: view.UserCanEdit,\n entity: view\n };\n }\n\n /**\n * Update the selectedView reference based on selectedViewId\n */\n private updateSelectedViewFromId(): void {\n if (!this.selectedViewId) {\n this.selectedView = null;\n return;\n }\n\n // Search in both lists\n const myView = this.myViews.find(v => v.id === this.selectedViewId);\n if (myView) {\n this.selectedView = myView.entity;\n return;\n }\n\n const sharedView = this.sharedViews.find(v => v.id === this.selectedViewId);\n if (sharedView) {\n this.selectedView = sharedView.entity;\n return;\n }\n\n // View not in lists yet - it might need to be loaded\n this.selectedView = null;\n }\n\n /**\n * Get the display name for the current selection\n */\n get displayName(): string {\n if (this.selectedView) {\n return this.selectedView.Name;\n }\n return '(Default)';\n }\n\n /**\n * Toggle dropdown open/closed\n */\n toggleDropdown(): void {\n this.isDropdownOpen = !this.isDropdownOpen;\n this.cdr.detectChanges();\n }\n\n /**\n * Close the dropdown\n */\n closeDropdown(): void {\n this.isDropdownOpen = false;\n this.searchText = '';\n this.cdr.detectChanges();\n }\n\n /**\n * Select the default view (no saved view)\n */\n selectDefault(): void {\n this.selectedView = null;\n this.viewSelected.emit({ viewId: null, view: null });\n this.closeDropdown();\n }\n\n /**\n * Select a view from the list\n */\n selectView(item: ViewListItem): void {\n this.selectedView = item.entity;\n this.viewSelected.emit({ viewId: item.id, view: item.entity });\n this.closeDropdown();\n }\n\n /**\n * Request to save the current view\n */\n onSaveView(): void {\n this.saveViewRequested.emit({ saveAsNew: false });\n this.closeDropdown();\n }\n\n /**\n * Request to save as a new view - opens Quick Save dialog in \"Save As New\" mode\n */\n onSaveAsNewView(): void {\n this.quickSaveRequested.emit(true);\n this.closeDropdown();\n }\n\n /**\n * Request to manage views\n */\n onManageViews(): void {\n this.manageViewsRequested.emit();\n this.closeDropdown();\n }\n\n /**\n * Request to open the current view in a tab\n */\n onOpenInTab(): void {\n if (this.selectedViewId) {\n this.openInTabRequested.emit(this.selectedViewId);\n }\n }\n\n /**\n * Request to configure the current view\n */\n onConfigureView(): void {\n this.configureViewRequested.emit();\n }\n\n /**\n * Request to create a new record\n */\n onCreateNewRecord(): void {\n this.createNewRecordRequested.emit();\n }\n\n /**\n * Request to export data to Excel\n */\n onExport(): void {\n this.exportRequested.emit();\n }\n\n /**\n * Request to duplicate a view (F-005)\n */\n onDuplicateView(viewId: string, event: MouseEvent): void {\n event.stopPropagation(); // Don't select the view\n this.duplicateViewRequested.emit(viewId);\n this.closeDropdown();\n }\n\n /**\n * Request to open the quick save dialog (F-001)\n */\n onQuickSave(): void {\n this.quickSaveRequested.emit(false);\n this.closeDropdown();\n }\n\n /**\n * Request to revert view to saved state (F-007)\n */\n onRevert(): void {\n this.revertRequested.emit();\n }\n\n /**\n * Check if there are any views to show\n */\n get hasViews(): boolean {\n return this.myViews.length > 0 || this.sharedViews.length > 0;\n }\n\n /**\n * Check if the current user can edit the selected view\n */\n get canEditSelectedView(): boolean {\n return this.selectedView?.UserCanEdit ?? false;\n }\n\n /**\n * Handle click outside to close dropdown\n */\n onClickOutside(event: Event): void {\n this.closeDropdown();\n }\n\n // ========================================\n // RICH VIEW PANEL: Search & Metadata\n // ========================================\n\n /**\n * My views filtered by search text\n */\n get filteredMyViews(): ViewListItem[] {\n if (!this.searchText.trim()) return this.myViews;\n const term = this.searchText.toLowerCase();\n return this.myViews.filter(v =>\n v.name.toLowerCase().includes(term) ||\n (v.entity.Description || '').toLowerCase().includes(term)\n );\n }\n\n /**\n * Shared views filtered by search text\n */\n get filteredSharedViews(): ViewListItem[] {\n if (!this.searchText.trim()) return this.sharedViews;\n const term = this.searchText.toLowerCase();\n return this.sharedViews.filter(v =>\n v.name.toLowerCase().includes(term) ||\n (v.entity.Description || '').toLowerCase().includes(term)\n );\n }\n\n /**\n * Get the number of filters configured in a view by parsing its FilterState\n */\n getViewFilterCount(view: ViewListItem): number {\n try {\n const filterState = view.entity.FilterState;\n if (!filterState) return 0;\n const parsed = JSON.parse(filterState);\n if (parsed?.filters?.length) return parsed.filters.length;\n // CompositeFilterDescriptor format\n if (parsed?.logic && parsed?.filters) return parsed.filters.length;\n return 0;\n } catch {\n return 0;\n }\n }\n\n /**\n * Get the number of visible columns in a view by parsing GridState\n */\n getViewColumnCount(view: ViewListItem): number {\n try {\n const gridState = view.entity.GridState;\n if (!gridState) return 0;\n const parsed = JSON.parse(gridState);\n if (Array.isArray(parsed)) {\n return parsed.filter((c: Record<string, unknown>) => !c['hidden']).length;\n }\n return 0;\n } catch {\n return 0;\n }\n }\n\n /**\n * Get sort info string from a view's SortState\n */\n getViewSortInfo(view: ViewListItem): string {\n try {\n const sortState = view.entity.SortState;\n if (!sortState) return '';\n const parsed = JSON.parse(sortState);\n if (Array.isArray(parsed) && parsed.length > 0) {\n return `${parsed.length} sort${parsed.length > 1 ? 's' : ''}`;\n }\n return '';\n } catch {\n return '';\n }\n }\n\n /**\n * Select a specific view and open the config panel for it\n */\n onConfigureViewById(viewId: string, event: MouseEvent): void {\n event.stopPropagation();\n // First select the view, then open config\n const item = this.myViews.find(v => v.id === viewId) || this.sharedViews.find(v => v.id === viewId);\n if (item) {\n this.selectedView = item.entity;\n this.viewSelected.emit({ viewId: item.id, view: item.entity });\n }\n this.configureViewRequested.emit();\n this.closeDropdown();\n }\n\n /**\n * Open a specific view in a new tab\n */\n onOpenViewInTab(viewId: string, event: MouseEvent): void {\n event.stopPropagation();\n this.openInTabRequested.emit(viewId);\n this.closeDropdown();\n }\n\n /**\n * Reset to default view (select no view)\n */\n onResetToDefault(): void {\n this.selectDefault();\n }\n}\n","<div class=\"vs-container\">\n <!-- Backdrop for closing panel -->\n @if (isDropdownOpen) {\n <div class=\"vs-backdrop\" (click)=\"closeDropdown()\"></div>\n }\n\n <!-- Main View Selector Button -->\n <div class=\"vs-wrapper\">\n <button\n class=\"vs-button\"\n [class.modified]=\"viewModified\"\n [class.open]=\"isDropdownOpen\"\n (click)=\"toggleDropdown()\"\n [disabled]=\"isLoading\"\n title=\"Select a saved view\">\n <i class=\"fa-solid fa-layer-group vs-btn-icon\"></i>\n <span class=\"vs-btn-name\">{{ displayName }}</span>\n @if (viewModified) {\n <span class=\"vs-modified-dot\" title=\"View has unsaved changes\">•</span>\n }\n <i class=\"fa-solid fa-chevron-down vs-arrow\" [class.rotated]=\"isDropdownOpen\"></i>\n </button>\n\n <!-- Rich View Panel -->\n @if (isDropdownOpen) {\n <div class=\"vs-panel\">\n <!-- Panel Header -->\n <div class=\"vs-panel-header\">\n <i class=\"fa-solid fa-table-list vs-header-icon\"></i>\n <span class=\"vs-panel-title\">Views</span>\n @if (entity) {\n <span class=\"vs-entity-badge\">{{ entity.DisplayNameOrName }}</span>\n }\n <button class=\"vs-close-btn\" (click)=\"closeDropdown()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Search -->\n <div class=\"vs-panel-search\">\n <input\n type=\"text\"\n class=\"vs-search-input\"\n placeholder=\"Search views...\"\n [(ngModel)]=\"searchText\"\n (keydown.escape)=\"searchText = ''\"\n />\n </div>\n\n <!-- Panel Body -->\n <div class=\"vs-panel-body\">\n <!-- Default Option -->\n <div class=\"vs-section\">\n <div\n class=\"vs-card\"\n [class.active]=\"!selectedViewId\"\n (click)=\"selectDefault()\">\n <div class=\"vs-card-icon\" [class.active]=\"!selectedViewId\">\n <i class=\"fa-solid fa-table\"></i>\n </div>\n <div class=\"vs-card-content\">\n <div class=\"vs-card-name\">(Default)</div>\n </div>\n @if (!selectedViewId) {\n <i class=\"fa-solid fa-check vs-card-check\"></i>\n }\n </div>\n </div>\n\n <!-- My Views Section -->\n @if (filteredMyViews.length > 0) {\n <div class=\"vs-section\">\n <div class=\"vs-section-header\">\n <i class=\"fa-solid fa-user\"></i>\n <span>My Views</span>\n <span class=\"vs-section-count\">{{ filteredMyViews.length }}</span>\n </div>\n @for (view of filteredMyViews; track view.id) {\n <div\n class=\"vs-card\"\n [class.active]=\"selectedViewId === view.id\"\n (click)=\"selectView(view)\">\n <div class=\"vs-card-icon\" [class.active]=\"selectedViewId === view.id\">\n <i class=\"fa-solid fa-table-list\"></i>\n </div>\n <div class=\"vs-card-content\">\n <div class=\"vs-card-name\">\n {{ view.name }}\n @if (view.isDefault) {\n <span class=\"vs-default-badge\">Default</span>\n }\n </div>\n @if (view.entity.Description) {\n <div class=\"vs-card-desc\">{{ view.entity.Description }}</div>\n }\n @if (getViewFilterCount(view) > 0 || getViewColumnCount(view) > 0 || getViewSortInfo(view)) {\n <div class=\"vs-card-meta\">\n @if (getViewFilterCount(view) > 0) {\n <span><i class=\"fa-solid fa-filter\"></i> {{ getViewFilterCount(view) }} filter{{ getViewFilterCount(view) !== 1 ? 's' : '' }}</span>\n }\n @if (getViewColumnCount(view) > 0) {\n <span><i class=\"fa-solid fa-table-columns\"></i> {{ getViewColumnCount(view) }} col{{ getViewColumnCount(view) !== 1 ? 's' : '' }}</span>\n }\n @if (getViewSortInfo(view)) {\n <span><i class=\"fa-solid fa-arrow-down-short-wide\"></i> {{ getViewSortInfo(view) }}</span>\n }\n </div>\n }\n </div>\n <div class=\"vs-card-actions\">\n <button\n class=\"vs-action-btn\"\n (click)=\"onDuplicateView(view.id, $event)\"\n title=\"Duplicate\">\n <i class=\"fa-regular fa-copy\"></i>\n </button>\n <button\n class=\"vs-action-btn\"\n (click)=\"onConfigureViewById(view.id, $event)\"\n title=\"Configure\">\n <i class=\"fa-solid fa-sliders\"></i>\n </button>\n <button\n class=\"vs-action-btn\"\n (click)=\"onOpenViewInTab(view.id, $event)\"\n title=\"Open in Tab\">\n <i class=\"fa-solid fa-up-right-from-square\"></i>\n </button>\n </div>\n @if (selectedViewId === view.id) {\n <i class=\"fa-solid fa-check vs-card-check\"></i>\n }\n </div>\n }\n </div>\n }\n\n <!-- Shared Views Section -->\n @if (filteredSharedViews.length > 0) {\n <div class=\"vs-section\">\n <div class=\"vs-section-header\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n <span>Shared With Me</span>\n <span class=\"vs-section-count\">{{ filteredSharedViews.length }}</span>\n </div>\n @for (view of filteredSharedViews; track view.id) {\n <div\n class=\"vs-card\"\n [class.active]=\"selectedViewId === view.id\"\n (click)=\"selectView(view)\">\n <div class=\"vs-card-icon shared\">\n <i class=\"fa-solid fa-users\"></i>\n </div>\n <div class=\"vs-card-content\">\n <div class=\"vs-card-name\">\n {{ view.name }}\n @if (!view.userCanEdit) {\n <span class=\"vs-shared-badge\">View Only</span>\n } @else {\n <span class=\"vs-shared-badge editable\">Can Edit</span>\n }\n </div>\n @if (view.entity.Description) {\n <div class=\"vs-card-desc\">{{ view.entity.Description }}</div>\n }\n @if (getViewFilterCount(view) > 0 || getViewColumnCount(view) > 0) {\n <div class=\"vs-card-meta\">\n @if (getViewFilterCount(view) > 0) {\n <span><i class=\"fa-solid fa-filter\"></i> {{ getViewFilterCount(view) }} filter{{ getViewFilterCount(view) !== 1 ? 's' : '' }}</span>\n }\n @if (getViewColumnCount(view) > 0) {\n <span><i class=\"fa-solid fa-table-columns\"></i> {{ getViewColumnCount(view) }} col{{ getViewColumnCount(view) !== 1 ? 's' : '' }}</span>\n }\n </div>\n }\n </div>\n <div class=\"vs-card-actions\">\n <button\n class=\"vs-action-btn\"\n (click)=\"onDuplicateView(view.id, $event)\"\n title=\"Duplicate as My View\">\n <i class=\"fa-regular fa-copy\"></i>\n </button>\n @if (view.userCanEdit) {\n <button\n class=\"vs-action-btn\"\n (click)=\"onConfigureViewById(view.id, $event)\"\n title=\"Configure\">\n <i class=\"fa-solid fa-sliders\"></i>\n </button>\n }\n </div>\n @if (selectedViewId === view.id) {\n <i class=\"fa-solid fa-check vs-card-check\"></i>\n }\n </div>\n }\n </div>\n }\n\n <!-- No Views Message -->\n @if (!hasViews && !isLoading) {\n <div class=\"vs-empty-message\">\n <i class=\"fa-solid fa-bookmark\"></i>\n <div class=\"vs-empty-text\">\n <strong>No saved views yet</strong>\n <span>Save your current configuration as a view</span>\n </div>\n </div>\n }\n\n <!-- No Search Results -->\n @if (hasViews && filteredMyViews.length === 0 && filteredSharedViews.length === 0 && searchText) {\n <div class=\"vs-empty-message\">\n <i class=\"fa-solid fa-search\"></i>\n <span>No views match \"{{ searchText }}\"</span>\n </div>\n }\n\n <!-- Loading Indicator -->\n @if (isLoading) {\n <div class=\"vs-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading views...</span>\n </div>\n }\n </div>\n\n <!-- Panel Footer -->\n <div class=\"vs-panel-footer\">\n <button\n class=\"vs-panel-btn primary\"\n (click)=\"onQuickSave()\"\n title=\"Save current view configuration\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New View</span>\n </button>\n <button\n class=\"vs-panel-btn\"\n (click)=\"onResetToDefault()\"\n title=\"Reset to default view\">\n <i class=\"fa-solid fa-arrow-rotate-left\"></i>\n <span>Reset to Default</span>\n </button>\n </div>\n </div>\n }\n </div>\n\n <!-- Open in Tab Button (only visible when a view is selected) -->\n @if (selectedViewId) {\n <button\n class=\"vs-icon-btn\"\n (click)=\"onOpenInTab()\"\n title=\"Open this view in a new tab\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n </button>\n }\n\n <!-- Configure View Button -->\n <button\n class=\"vs-icon-btn\"\n (click)=\"onConfigureView()\"\n title=\"Configure view settings (columns, filters, sorting)\">\n <i class=\"fa-solid fa-sliders-h\"></i>\n </button>\n\n <!-- Create New Record Button -->\n <button\n class=\"vs-icon-btn\"\n (click)=\"onCreateNewRecord()\"\n title=\"Create new record\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n\n <!-- Export Button -->\n <button\n class=\"vs-icon-btn vs-export-btn\"\n (click)=\"onExport()\"\n title=\"Export to Excel\">\n <i class=\"fa-solid fa-file-excel\"></i>\n </button>\n</div>\n"]}
@@ -10,7 +10,7 @@ import { trigger, transition, style, animate } from '@angular/animations';
10
10
  import { Subject } from 'rxjs';
11
11
  import { takeUntil, debounceTime, distinctUntilChanged, filter } from 'rxjs/operators';
12
12
  import { BaseDashboard } from '@memberjunction/ng-shared';
13
- import { RegisterClass } from '@memberjunction/global';
13
+ import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
14
14
  import { Metadata, RunView, EntityFieldTSType } from '@memberjunction/core';
15
15
  // CompositeKey is used via buildCompositeKey from ng-entity-viewer
16
16
  import { UserInfoEngine } from '@memberjunction/core-entities';
@@ -961,7 +961,7 @@ let DataExplorerDashboardComponent = class DataExplorerDashboardComponent extend
961
961
  get recentEntities() {
962
962
  return this.state.recentEntityAccesses
963
963
  .slice(0, 5)
964
- .map(r => this.entities.find(e => e.ID === r.entityId))
964
+ .map(r => this.entities.find(e => UUIDsEqual(e.ID, r.entityId)))
965
965
  .filter((e) => e !== undefined);
966
966
  }
967
967
  /**
@@ -969,7 +969,7 @@ let DataExplorerDashboardComponent = class DataExplorerDashboardComponent extend
969
969
  */
970
970
  get favoriteEntities() {
971
971
  return this.state.favoriteEntities
972
- .map(f => this.entities.find(e => e.ID === f.entityId))
972
+ .map(f => this.entities.find(e => UUIDsEqual(e.ID, f.entityId)))
973
973
  .filter((e) => e !== undefined);
974
974
  }
975
975
  /**
@@ -3162,7 +3162,7 @@ let DataExplorerDashboardComponent = class DataExplorerDashboardComponent extend
3162
3162
  * and open the detail panel once data loads.
3163
3163
  */
3164
3164
  onRecentRecordClick(record) {
3165
- const entity = this.entities.find(e => e.ID === record.entityId);
3165
+ const entity = this.entities.find(e => UUIDsEqual(e.ID, record.entityId));
3166
3166
  if (entity) {
3167
3167
  // Set pending record selection - will be resolved in onDataLoaded
3168
3168
  this.pendingRecordSelection = record.recordId;
@@ -3175,7 +3175,7 @@ let DataExplorerDashboardComponent = class DataExplorerDashboardComponent extend
3175
3175
  * and open the detail panel once data loads.
3176
3176
  */
3177
3177
  onFavoriteRecordClick(record) {
3178
- const entity = this.entities.find(e => e.ID === record.entityId);
3178
+ const entity = this.entities.find(e => UUIDsEqual(e.ID, record.entityId));
3179
3179
  if (entity) {
3180
3180
  // Set pending record selection - will be resolved in onDataLoaded
3181
3181
  this.pendingRecordSelection = record.recordId;
@@ -3186,7 +3186,7 @@ let DataExplorerDashboardComponent = class DataExplorerDashboardComponent extend
3186
3186
  * Get the icon for an entity by ID (for recent records)
3187
3187
  */
3188
3188
  getEntityIconById(entityId) {
3189
- const entity = this.metadata.Entities.find(e => e.ID === entityId);
3189
+ const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, entityId));
3190
3190
  if (entity) {
3191
3191
  return this.getEntityIcon(entity);
3192
3192
  }