@memberjunction/ng-dashboards 6.2.0-edge.2 → 6.2.0-edge.4

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 (229) hide show
  1. package/dist/AI/components/analytics/realtime/realtime-transcripts-data.d.ts +4 -3
  2. package/dist/AI/components/analytics/realtime/realtime-transcripts-data.d.ts.map +1 -1
  3. package/dist/AI/components/analytics/realtime/realtime-transcripts-data.js +8 -5
  4. package/dist/AI/components/analytics/realtime/realtime-transcripts-data.js.map +1 -1
  5. package/dist/AI/components/duplicates/compare-value.component.d.ts +67 -0
  6. package/dist/AI/components/duplicates/compare-value.component.d.ts.map +1 -0
  7. package/dist/AI/components/duplicates/compare-value.component.js +168 -0
  8. package/dist/AI/components/duplicates/compare-value.component.js.map +1 -0
  9. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +49 -3
  10. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  11. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +287 -169
  12. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  13. package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts +77 -0
  14. package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts.map +1 -0
  15. package/dist/AI/components/duplicates/duplicate-detection-run-scope.js +116 -0
  16. package/dist/AI/components/duplicates/duplicate-detection-run-scope.js.map +1 -0
  17. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +1 -0
  18. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  19. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +16 -4
  20. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  21. package/dist/AI/components/tags/tags-resource.component.d.ts +2 -0
  22. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  23. package/dist/AI/components/tags/tags-resource.component.js +12 -6
  24. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  25. package/dist/AI/components/vectors/vector-index-auto.d.ts +29 -0
  26. package/dist/AI/components/vectors/vector-index-auto.d.ts.map +1 -0
  27. package/dist/AI/components/vectors/vector-index-auto.js +59 -0
  28. package/dist/AI/components/vectors/vector-index-auto.js.map +1 -0
  29. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +9 -0
  30. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  31. package/dist/AI/components/vectors/vector-management-resource.component.js +65 -20
  32. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  33. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  34. package/dist/Actions/components/actions-overview.component.js +7 -3
  35. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  36. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  37. package/dist/Actions/components/categories-list-view.component.js +3 -2
  38. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  39. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  40. package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
  41. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  42. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +0 -3
  43. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
  44. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +5 -14
  45. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
  46. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  47. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +1 -0
  48. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  49. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  50. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +1 -0
  51. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  52. package/dist/ComponentStudio/components/form-override-dialog.component.d.ts +12 -1
  53. package/dist/ComponentStudio/components/form-override-dialog.component.d.ts.map +1 -1
  54. package/dist/ComponentStudio/components/form-override-dialog.component.js +128 -81
  55. package/dist/ComponentStudio/components/form-override-dialog.component.js.map +1 -1
  56. package/dist/Credentials/components/credentials-list-resource.component.d.ts +2 -0
  57. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  58. package/dist/Credentials/components/credentials-list-resource.component.js +12 -10
  59. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  60. package/dist/DashboardBrowser/dashboard-browser-agent-context.d.ts +14 -43
  61. package/dist/DashboardBrowser/dashboard-browser-agent-context.d.ts.map +1 -1
  62. package/dist/DashboardBrowser/dashboard-browser-agent-context.js +6 -29
  63. package/dist/DashboardBrowser/dashboard-browser-agent-context.js.map +1 -1
  64. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +174 -321
  65. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
  66. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +522 -1195
  67. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  68. package/dist/DashboardBrowser/dashboard-library-filter.d.ts +116 -0
  69. package/dist/DashboardBrowser/dashboard-library-filter.d.ts.map +1 -0
  70. package/dist/DashboardBrowser/dashboard-library-filter.js +277 -0
  71. package/dist/DashboardBrowser/dashboard-library-filter.js.map +1 -0
  72. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +1 -1
  73. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  74. package/dist/DashboardBrowser/dashboards-agent-tools.d.ts +26 -0
  75. package/dist/DashboardBrowser/dashboards-agent-tools.d.ts.map +1 -0
  76. package/dist/DashboardBrowser/dashboards-agent-tools.js +32 -0
  77. package/dist/DashboardBrowser/dashboards-agent-tools.js.map +1 -0
  78. package/dist/DashboardBrowser/dashboards-categories-resource.component.d.ts +58 -0
  79. package/dist/DashboardBrowser/dashboards-categories-resource.component.d.ts.map +1 -0
  80. package/dist/DashboardBrowser/dashboards-categories-resource.component.js +391 -0
  81. package/dist/DashboardBrowser/dashboards-categories-resource.component.js.map +1 -0
  82. package/dist/DashboardBrowser/dashboards-categories.helpers.d.ts +37 -0
  83. package/dist/DashboardBrowser/dashboards-categories.helpers.d.ts.map +1 -0
  84. package/dist/DashboardBrowser/dashboards-categories.helpers.js +68 -0
  85. package/dist/DashboardBrowser/dashboards-categories.helpers.js.map +1 -0
  86. package/dist/DashboardEditor/dashboard-editor.component.d.ts +295 -0
  87. package/dist/DashboardEditor/dashboard-editor.component.d.ts.map +1 -0
  88. package/dist/DashboardEditor/dashboard-editor.component.js +1022 -0
  89. package/dist/DashboardEditor/dashboard-editor.component.js.map +1 -0
  90. package/dist/DashboardEditor/dashboard-editor.types.d.ts +23 -0
  91. package/dist/DashboardEditor/dashboard-editor.types.d.ts.map +1 -0
  92. package/dist/DashboardEditor/dashboard-editor.types.js +3 -0
  93. package/dist/DashboardEditor/dashboard-editor.types.js.map +1 -0
  94. package/dist/DashboardEditor/dashboard-viewer-factory.d.ts +11 -0
  95. package/dist/DashboardEditor/dashboard-viewer-factory.d.ts.map +1 -0
  96. package/dist/DashboardEditor/dashboard-viewer-factory.js +17 -0
  97. package/dist/DashboardEditor/dashboard-viewer-factory.js.map +1 -0
  98. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +30 -0
  99. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  100. package/dist/DataExplorer/data-explorer-dashboard.component.js +349 -232
  101. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  102. package/dist/DataExplorer/services/explorer-state.service.d.ts +1 -1
  103. package/dist/DataExplorer/services/explorer-state.service.js +2 -5
  104. package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
  105. package/dist/FormBuilder/form-builder-resource.component.d.ts +0 -14
  106. package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -1
  107. package/dist/FormBuilder/form-builder-resource.component.js +7 -29
  108. package/dist/FormBuilder/form-builder-resource.component.js.map +1 -1
  109. package/dist/Home/home-agent-context.d.ts +29 -10
  110. package/dist/Home/home-agent-context.d.ts.map +1 -1
  111. package/dist/Home/home-agent-context.js +50 -24
  112. package/dist/Home/home-agent-context.js.map +1 -1
  113. package/dist/Home/home-dashboard-switcher.component.d.ts +95 -0
  114. package/dist/Home/home-dashboard-switcher.component.d.ts.map +1 -0
  115. package/dist/Home/home-dashboard-switcher.component.js +442 -0
  116. package/dist/Home/home-dashboard-switcher.component.js.map +1 -0
  117. package/dist/Home/home-dashboard.component.d.ts +330 -17
  118. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  119. package/dist/Home/home-dashboard.component.js +1702 -1014
  120. package/dist/Home/home-dashboard.component.js.map +1 -1
  121. package/dist/Home/home-menus.d.ts +38 -0
  122. package/dist/Home/home-menus.d.ts.map +1 -0
  123. package/dist/Home/home-menus.js +53 -0
  124. package/dist/Home/home-menus.js.map +1 -0
  125. package/dist/Home/home-pinned-dashboards.d.ts +33 -0
  126. package/dist/Home/home-pinned-dashboards.d.ts.map +1 -0
  127. package/dist/Home/home-pinned-dashboards.js +76 -0
  128. package/dist/Home/home-pinned-dashboards.js.map +1 -0
  129. package/dist/PredictiveStudio/components/ps-production.component.d.ts +5 -1
  130. package/dist/PredictiveStudio/components/ps-production.component.d.ts.map +1 -1
  131. package/dist/PredictiveStudio/components/ps-production.component.js +64 -41
  132. package/dist/PredictiveStudio/components/ps-production.component.js.map +1 -1
  133. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  134. package/dist/QueryBrowser/query-browser-resource.component.js +3 -2
  135. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  136. package/dist/RealtimeRecordings/realtime-recordings-dashboard.component.js +2 -2
  137. package/dist/RealtimeRecordings/realtime-recordings-dashboard.component.js.map +1 -1
  138. package/dist/TelephonyOperations/telephony-operations-agent-context.d.ts +107 -0
  139. package/dist/TelephonyOperations/telephony-operations-agent-context.d.ts.map +1 -0
  140. package/dist/TelephonyOperations/telephony-operations-agent-context.js +216 -0
  141. package/dist/TelephonyOperations/telephony-operations-agent-context.js.map +1 -0
  142. package/dist/TelephonyOperations/telephony-operations-dashboard.component.d.ts +58 -0
  143. package/dist/TelephonyOperations/telephony-operations-dashboard.component.d.ts.map +1 -0
  144. package/dist/TelephonyOperations/telephony-operations-dashboard.component.js +812 -0
  145. package/dist/TelephonyOperations/telephony-operations-dashboard.component.js.map +1 -0
  146. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  147. package/dist/Testing/components/testing-explorer.component.js +7 -7
  148. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  149. package/dist/WorkQueue/components/work-queue-bindings.component.d.ts +37 -0
  150. package/dist/WorkQueue/components/work-queue-bindings.component.d.ts.map +1 -0
  151. package/dist/WorkQueue/components/work-queue-bindings.component.js +210 -0
  152. package/dist/WorkQueue/components/work-queue-bindings.component.js.map +1 -0
  153. package/dist/WorkQueue/components/work-queue-dead-letters.component.d.ts +70 -0
  154. package/dist/WorkQueue/components/work-queue-dead-letters.component.d.ts.map +1 -0
  155. package/dist/WorkQueue/components/work-queue-dead-letters.component.js +496 -0
  156. package/dist/WorkQueue/components/work-queue-dead-letters.component.js.map +1 -0
  157. package/dist/WorkQueue/components/work-queue-discard-dialog.component.d.ts +22 -0
  158. package/dist/WorkQueue/components/work-queue-discard-dialog.component.d.ts.map +1 -0
  159. package/dist/WorkQueue/components/work-queue-discard-dialog.component.js +99 -0
  160. package/dist/WorkQueue/components/work-queue-discard-dialog.component.js.map +1 -0
  161. package/dist/WorkQueue/components/work-queue-overview.component.d.ts +29 -0
  162. package/dist/WorkQueue/components/work-queue-overview.component.d.ts.map +1 -0
  163. package/dist/WorkQueue/components/work-queue-overview.component.js +278 -0
  164. package/dist/WorkQueue/components/work-queue-overview.component.js.map +1 -0
  165. package/dist/WorkQueue/components/work-queue-partitions.component.d.ts +59 -0
  166. package/dist/WorkQueue/components/work-queue-partitions.component.d.ts.map +1 -0
  167. package/dist/WorkQueue/components/work-queue-partitions.component.js +359 -0
  168. package/dist/WorkQueue/components/work-queue-partitions.component.js.map +1 -0
  169. package/dist/WorkQueue/services/work-queue-operator.service.d.ts +22 -0
  170. package/dist/WorkQueue/services/work-queue-operator.service.d.ts.map +1 -0
  171. package/dist/WorkQueue/services/work-queue-operator.service.js +44 -0
  172. package/dist/WorkQueue/services/work-queue-operator.service.js.map +1 -0
  173. package/dist/WorkQueue/work-queue-agent-context.d.ts +67 -0
  174. package/dist/WorkQueue/work-queue-agent-context.d.ts.map +1 -0
  175. package/dist/WorkQueue/work-queue-agent-context.js +119 -0
  176. package/dist/WorkQueue/work-queue-agent-context.js.map +1 -0
  177. package/dist/WorkQueue/work-queue-dashboard.component.d.ts +94 -0
  178. package/dist/WorkQueue/work-queue-dashboard.component.d.ts.map +1 -0
  179. package/dist/WorkQueue/work-queue-dashboard.component.js +545 -0
  180. package/dist/WorkQueue/work-queue-dashboard.component.js.map +1 -0
  181. package/dist/WorkQueue/work-queue-types.d.ts +40 -0
  182. package/dist/WorkQueue/work-queue-types.d.ts.map +1 -0
  183. package/dist/WorkQueue/work-queue-types.js +2 -0
  184. package/dist/WorkQueue/work-queue-types.js.map +1 -0
  185. package/dist/ai-dashboards.module.d.ts +21 -20
  186. package/dist/ai-dashboards.module.d.ts.map +1 -1
  187. package/dist/ai-dashboards.module.js +4 -1
  188. package/dist/ai-dashboards.module.js.map +1 -1
  189. package/dist/core-dashboards.module.d.ts +69 -61
  190. package/dist/core-dashboards.module.d.ts.map +1 -1
  191. package/dist/core-dashboards.module.js +29 -2
  192. package/dist/core-dashboards.module.js.map +1 -1
  193. package/dist/data-explorer-dashboards.module.d.ts +1 -1
  194. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  195. package/dist/data-explorer-dashboards.module.js +3 -1
  196. package/dist/data-explorer-dashboards.module.js.map +1 -1
  197. package/dist/module.d.ts +14 -13
  198. package/dist/module.d.ts.map +1 -1
  199. package/dist/module.js +7 -0
  200. package/dist/module.js.map +1 -1
  201. package/dist/public-api.d.ts +6 -0
  202. package/dist/public-api.d.ts.map +1 -1
  203. package/dist/public-api.js +9 -0
  204. package/dist/public-api.js.map +1 -1
  205. package/dist/shared/dashboard-library-changes.d.ts +23 -0
  206. package/dist/shared/dashboard-library-changes.d.ts.map +1 -0
  207. package/dist/shared/dashboard-library-changes.js +26 -0
  208. package/dist/shared/dashboard-library-changes.js.map +1 -0
  209. package/dist/shared/dashboard-owner-names.d.ts +17 -0
  210. package/dist/shared/dashboard-owner-names.d.ts.map +1 -0
  211. package/dist/shared/dashboard-owner-names.js +65 -0
  212. package/dist/shared/dashboard-owner-names.js.map +1 -0
  213. package/dist/shared/dashboard-recents.d.ts +34 -0
  214. package/dist/shared/dashboard-recents.d.ts.map +1 -0
  215. package/dist/shared/dashboard-recents.js +87 -0
  216. package/dist/shared/dashboard-recents.js.map +1 -0
  217. package/dist/shared/dashboards-app-install.d.ts +59 -0
  218. package/dist/shared/dashboards-app-install.d.ts.map +1 -0
  219. package/dist/shared/dashboards-app-install.js +97 -0
  220. package/dist/shared/dashboards-app-install.js.map +1 -0
  221. package/dist/shared/dashboards-app.helpers.d.ts +42 -0
  222. package/dist/shared/dashboards-app.helpers.d.ts.map +1 -0
  223. package/dist/shared/dashboards-app.helpers.js +143 -0
  224. package/dist/shared/dashboards-app.helpers.js.map +1 -0
  225. package/dist/work-queue-dashboards.module.d.ts +23 -0
  226. package/dist/work-queue-dashboards.module.d.ts.map +1 -0
  227. package/dist/work-queue-dashboards.module.js +92 -0
  228. package/dist/work-queue-dashboards.module.js.map +1 -0
  229. package/package.json +73 -66
@@ -1 +1 @@
1
- {"version":3,"file":"actions-overview.component.d.ts","sourceRoot":"","sources":["../../../src/Actions/components/actions-overview.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actions-overview.component.d.ts","sourceRoot":"","sources":["../../../src/Actions/components/actions-overview.component.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { Component } from '@angular/core';
8
8
  import { CompositeKey, RunView, LogError } from '@memberjunction/core';
9
- import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
9
+ import { GroupByUUID, IndexByUUID, RegisterClass } from '@memberjunction/global';
10
10
  import { BaseResourceComponent } from '@memberjunction/ng-shared';
11
11
  import { Subject, BehaviorSubject, combineLatest } from 'rxjs';
12
12
  import { debounceTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';
@@ -555,9 +555,13 @@ let ActionsOverviewComponent = class ActionsOverviewComponent extends BaseResour
555
555
  return Math.round((successful / executions.length) * 100);
556
556
  }
557
557
  calculateCategoryStats(actions, categories, executions) {
558
+ // Group once: scanning every action and every execution per category grew with all three lists.
559
+ const actionsByCategory = GroupByUUID(actions, a => a.CategoryID);
560
+ const actionsByID = IndexByUUID(actions);
561
+ const executionsByCategory = GroupByUUID(executions, e => actionsByID.Get(e.ActionID)?.CategoryID);
558
562
  this.CategoryStats = categories.map(category => {
559
- const categoryActions = actions.filter(a => UUIDsEqual(a.CategoryID, category.ID));
560
- const categoryExecutions = executions.filter(e => categoryActions.some(a => UUIDsEqual(a.ID, e.ActionID)));
563
+ const categoryActions = actionsByCategory.Get(category.ID) ?? [];
564
+ const categoryExecutions = executionsByCategory.Get(category.ID) ?? [];
561
565
  return {
562
566
  categoryId: category.ID,
563
567
  categoryName: category.Name,
@@ -1 +1 @@
1
- {"version":3,"file":"actions-overview.component.js","sourceRoot":"","sources":["../../../src/Actions/components/actions-overview.component.ts","../../../src/Actions/components/actions-overview.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { CompositeKey, RunView, LogError } from '@memberjunction/core';\nimport { MJActionEntity, MJActionCategoryEntity, MJActionExecutionLogEntity, ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\nimport { FilterFieldConfig } from '@memberjunction/ng-ui-components';\nimport { Subject, BehaviorSubject, combineLatest } from 'rxjs';\nimport { debounceTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';\nimport { ValidateEnumParam, BoundNameList } from '../../shared/agent-tool-validation';\nimport { FindByIdOrError, FindByIdOrNameOrError } from '../agent-tool-helpers';\ninterface ActionMetrics {\n totalActions: number;\n activeActions: number;\n pendingActions: number;\n disabledActions: number;\n totalExecutions: number;\n recentExecutions: number;\n successRate: number;\n totalCategories: number;\n aiGeneratedActions: number;\n customActions: number;\n}\n\ninterface CategoryStats {\n categoryId: string;\n categoryName: string;\n actionCount: number;\n executionCount: number;\n successRate: number;\n}\n\ninterface ExecutionWithExpanded extends MJActionExecutionLogEntity {\n isExpanded?: boolean;\n}\n\n/**\n * Actions Overview Resource - displays action management dashboard\n */\n@RegisterClass(BaseResourceComponent, 'ActionsOverviewResource')\n@Component({\n standalone: false,\n selector: 'mj-actions-overview',\n templateUrl: './actions-overview.component.html',\n styleUrls: ['./actions-overview.component.css']\n})\nexport class ActionsOverviewComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n public isLoading: boolean = true;\n public Metrics: ActionMetrics = {\n totalActions: 0,\n activeActions: 0,\n pendingActions: 0,\n disabledActions: 0,\n totalExecutions: 0,\n recentExecutions: 0,\n successRate: 0,\n totalCategories: 0,\n aiGeneratedActions: 0,\n customActions: 0\n };\n\n /** @deprecated Use {@link Metrics}. */\n public get metrics(): ActionMetrics {\n return this.Metrics;\n }\n /** @deprecated Use {@link Metrics}. */\n public set metrics(value: ActionMetrics) {\n this.Metrics = value;\n }\n\n public CategoryStats: CategoryStats[] = [];\n\n /** @deprecated Use {@link CategoryStats}. */\n public get categoryStats(): CategoryStats[] {\n return this.CategoryStats;\n }\n /** @deprecated Use {@link CategoryStats}. */\n public set categoryStats(value: CategoryStats[]) {\n this.CategoryStats = value;\n }\n public RecentActions: MJActionEntity[] = [];\n\n /** @deprecated Use {@link RecentActions}. */\n public get recentActions(): MJActionEntity[] {\n return this.RecentActions;\n }\n /** @deprecated Use {@link RecentActions}. */\n public set recentActions(value: MJActionEntity[]) {\n this.RecentActions = value;\n }\n public RecentExecutions: ExecutionWithExpanded[] = [];\n\n /** @deprecated Use {@link RecentExecutions}. */\n public get recentExecutions(): ExecutionWithExpanded[] {\n return this.RecentExecutions;\n }\n /** @deprecated Use {@link RecentExecutions}. */\n public set recentExecutions(value: ExecutionWithExpanded[]) {\n this.RecentExecutions = value;\n }\n public TopCategories: MJActionCategoryEntity[] = [];\n\n /** @deprecated Use {@link TopCategories}. */\n public get topCategories(): MJActionCategoryEntity[] {\n return this.TopCategories;\n }\n /** @deprecated Use {@link TopCategories}. */\n public set topCategories(value: MJActionCategoryEntity[]) {\n this.TopCategories = value;\n }\n\n /** Full (un-sliced) collections retained so agent tools can resolve any id, not just the visible top-10. */\n private allActions: MJActionEntity[] = [];\n private allExecutions: MJActionExecutionLogEntity[] = [];\n private allCategories: MJActionCategoryEntity[] = [];\n\n /** Last action the agent (or user) selected/opened — surfaced in context as id + name. */\n private selectedAction: MJActionEntity | null = null;\n\n public SearchTerm$ = new BehaviorSubject<string>('');\n\n /** @deprecated Use {@link SearchTerm$}. */\n public get searchTerm$() {\n return this.SearchTerm$;\n }\n /** @deprecated Use {@link SearchTerm$}. */\n public set searchTerm$(value) {\n this.SearchTerm$ = value;\n }\n public SelectedStatus$ = new BehaviorSubject<string>('all');\n\n /** @deprecated Use {@link SelectedStatus$}. */\n public get selectedStatus$() {\n return this.SelectedStatus$;\n }\n /** @deprecated Use {@link SelectedStatus$}. */\n public set selectedStatus$(value) {\n this.SelectedStatus$ = value;\n }\n public SelectedType$ = new BehaviorSubject<string>('all');\n\n /** @deprecated Use {@link SelectedType$}. */\n public get selectedType$() {\n return this.SelectedType$;\n }\n /** @deprecated Use {@link SelectedType$}. */\n public set selectedType$(value) {\n this.SelectedType$ = value;\n }\n\n /** Allowed status filter values (mirrors the Filter popover dropdown). */\n private readonly statusFilterValues = ['all', 'Active', 'Pending', 'Disabled'] as const;\n /** Allowed type filter values (mirrors the Filter popover dropdown). */\n private readonly typeFilterValues = ['all', 'Generated', 'Custom'] as const;\n /** Allowed sort fields for the visible-actions list. */\n private readonly sortFieldValues = ['name', 'status', 'type', 'updated'] as const;\n /** Allowed sort directions. */\n private readonly sortDirectionValues = ['asc', 'desc'] as const;\n\n protected override destroy$ = new Subject<void>();\n\n constructor(private cdr: ChangeDetectorRef ) {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.setupFilters();\n this.registerAgentTools();\n this.loadData();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private setupFilters(): void {\n combineLatest([\n this.SearchTerm$.pipe(debounceTime(300), distinctUntilChanged()),\n this.SelectedStatus$.pipe(distinctUntilChanged()),\n this.SelectedType$.pipe(distinctUntilChanged())\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.loadFilteredData();\n this.publishAgentContext();\n });\n }\n\n // ================================================================\n // AI Agent context + client tools\n //\n // 🚨 SAFETY BOUNDARY: The Actions app executes actions with real side\n // effects (data mutation, emails, integrations). Action EXECUTION is\n // intentionally NOT exposed to the agent here — no RunAction, no execute\n // path. The agent may only FIND / FILTER / NAVIGATE actions and view run\n // history. Every Handler is tolerant (never throws; returns a structured\n // failure on bad input).\n // ================================================================\n\n /** Publish the current overview state to the agent. Called on load and on every filter change.\n * Deep context: counts by status/type, success rate, all filter state, the visible\n * (bounded) action + category names, and the currently selected action (id + name). */\n private publishAgentContext(): void {\n this.navigationService.SetAgentContext(this, {\n // Action counts by status\n TotalActionCount: this.Metrics.totalActions,\n ActiveActionCount: this.Metrics.activeActions,\n PendingActionCount: this.Metrics.pendingActions,\n DisabledActionCount: this.Metrics.disabledActions,\n // Action counts by type\n AIGeneratedActionCount: this.Metrics.aiGeneratedActions,\n CustomActionCount: this.Metrics.customActions,\n // Execution metrics\n TotalExecutionCount: this.Metrics.totalExecutions,\n RecentExecutionCount: this.Metrics.recentExecutions,\n SuccessRate: this.Metrics.successRate,\n // Category metrics\n TotalCategoryCount: this.Metrics.totalCategories,\n // Filter / search state\n CurrentSearchTerm: this.SearchTerm$.value,\n CurrentStatusFilter: this.SelectedStatus$.value,\n CurrentTypeFilter: this.SelectedType$.value,\n // What the user is looking at — bounded name lists so the agent can pick by name\n VisibleActionCount: this.RecentActions.length,\n VisibleActionNames: BoundNameList(this.RecentActions.map(a => a.Name)),\n TopCategoryNames: BoundNameList(this.TopCategories.map(c => c.Name)),\n // Current selection (id + NAME)\n SelectedActionId: this.selectedAction?.ID ?? null,\n SelectedActionName: this.selectedAction?.Name ?? null,\n });\n }\n\n /** Register the read-only / navigational client tools the agent can invoke on this surface. */\n private registerAgentTools(): void {\n this.navigationService.SetAgentClientTools(this, [\n {\n Name: 'SearchActions',\n Description: 'Search the actions list by a free-text term (matches name and description).',\n ParameterSchema: { type: 'object', properties: { searchTerm: { type: 'string' } }, required: ['searchTerm'] },\n Handler: async (params) => {\n const term = typeof params['searchTerm'] === 'string' ? params['searchTerm'] : '';\n this.OnSearchChange(term);\n return { Success: true };\n },\n },\n {\n Name: 'FilterActionsByStatus',\n Description: 'Filter actions by status. Allowed: all, Active, Pending, Disabled.',\n ParameterSchema: { type: 'object', properties: { status: { type: 'string', enum: [...this.statusFilterValues] } }, required: ['status'] },\n Handler: async (params) => {\n const v = ValidateEnumParam(params['status'], this.statusFilterValues, 'status');\n if (!v.ok) return v.result;\n this.OnStatusFilterChange(v.value);\n return { Success: true };\n },\n },\n {\n Name: 'FilterActionsByType',\n Description: 'Filter actions by type. Allowed: all, Generated (AI-generated), Custom.',\n ParameterSchema: { type: 'object', properties: { type: { type: 'string', enum: [...this.typeFilterValues] } }, required: ['type'] },\n Handler: async (params) => {\n const v = ValidateEnumParam(params['type'], this.typeFilterValues, 'type');\n if (!v.ok) return v.result;\n this.OnTypeFilterChange(v.value);\n return { Success: true };\n },\n },\n {\n Name: 'ClearAllFilters',\n Description: 'Reset the status and type filters back to \"all\".',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.ResetFilters();\n return { Success: true };\n },\n },\n {\n Name: 'SortVisibleActions',\n Description: 'Sort the visible recent-actions list. field: name, status, type, updated. direction: asc, desc (default asc).',\n ParameterSchema: {\n type: 'object',\n properties: {\n field: { type: 'string', enum: [...this.sortFieldValues] },\n direction: { type: 'string', enum: [...this.sortDirectionValues] },\n },\n required: ['field'],\n },\n Handler: async (params) => {\n const f = ValidateEnumParam(params['field'], this.sortFieldValues, 'field');\n if (!f.ok) return f.result;\n let direction: 'asc' | 'desc' = 'asc';\n if (params['direction'] !== undefined) {\n const d = ValidateEnumParam(params['direction'], this.sortDirectionValues, 'direction');\n if (!d.ok) return d.result;\n direction = d.value;\n }\n this.sortVisibleActions(f.value, direction);\n return { Success: true };\n },\n },\n {\n Name: 'OpenActionDetail',\n Description: 'Open the detail record for an action by its id OR its name (navigation only — does NOT run the action). Name matching is case-insensitive (exact then contains).',\n ParameterSchema: { type: 'object', properties: { action: { type: 'string' } }, required: ['action'] },\n Handler: async (params) => {\n const found = FindByIdOrNameOrError(params['action'], this.allActions, 'action');\n if (!found.ok) return found.result;\n this.OpenAction(found.value);\n return { Success: true, Data: { Id: found.value.ID, Name: found.value.Name } };\n },\n },\n {\n Name: 'OpenCategoryDetail',\n Description: 'Open the detail record for an action category by its id OR its name (navigation only). Name matching is case-insensitive (exact then contains).',\n ParameterSchema: { type: 'object', properties: { category: { type: 'string' } }, required: ['category'] },\n Handler: async (params) => {\n const found = FindByIdOrNameOrError(params['category'], this.allCategories, 'category');\n if (!found.ok) return found.result;\n this.OpenCategory(found.value.ID);\n return { Success: true, Data: { Id: found.value.ID, Name: found.value.Name } };\n },\n },\n {\n Name: 'OpenExecutionDetail',\n Description: 'Open the detail record for an action execution log by its id (view-only run history).',\n ParameterSchema: { type: 'object', properties: { executionId: { type: 'string' } }, required: ['executionId'] },\n Handler: async (params) => {\n const found = FindByIdOrError(params['executionId'], this.allExecutions, 'execution');\n if (!found.ok) return found.result;\n this.OpenExecution(found.value);\n return { Success: true };\n },\n },\n {\n Name: 'RefreshOverviewData',\n Description: 'Reload the actions overview data (metrics, categories, recent items).',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n await this.loadData();\n return { Success: true };\n },\n },\n ]);\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n this.cdr.detectChanges();\n\n // Load all data in a single batch using RunViews\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n \n const [actionsResult, categoriesResult, executionsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Actions', \n OrderBy: '__mj_UpdatedAt DESC' \n },\n {\n EntityName: 'MJ: Action Categories', \n OrderBy: 'Name' \n },\n {\n EntityName: 'MJ: Action Execution Logs', \n OrderBy: 'StartedAt DESC', \n }\n ]);\n \n if (!actionsResult.Success || !categoriesResult.Success || !executionsResult.Success) {\n const errors = [];\n if (!actionsResult.Success) errors.push('Actions: ' + actionsResult.ErrorMessage);\n if (!categoriesResult.Success) errors.push('Categories: ' + categoriesResult.ErrorMessage);\n if (!executionsResult.Success) errors.push('Executions: ' + executionsResult.ErrorMessage);\n throw new Error('Failed to load data: ' + errors.join(', '));\n }\n \n const actions = (actionsResult.Results || []) as MJActionEntity[];\n const categories = (categoriesResult.Results || []) as MJActionCategoryEntity[];\n const executions = (executionsResult.Results || []) as MJActionExecutionLogEntity[];\n\n this.allActions = actions;\n this.allExecutions = executions;\n this.allCategories = categories;\n this.calculateMetrics(actions, categories, executions);\n this.calculateCategoryStats(actions, categories, executions);\n this.RecentActions = actions.slice(0, 10);\n this.RecentExecutions = executions.slice(0, 10).map(e => ({ ...e, isExpanded: false } as ExecutionWithExpanded));\n this.TopCategories = categories.slice(0, 5);\n this.publishAgentContext();\n } catch (error) {\n console.error('Error loading actions overview data:', error);\n LogError('Failed to load actions overview data', undefined, error);\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n this.NotifyLoadComplete();\n }\n }\n\n private calculateMetrics(\n actions: MJActionEntity[], \n categories: MJActionCategoryEntity[], \n executions: MJActionExecutionLogEntity[]\n ): void {\n this.Metrics = {\n totalActions: actions.length,\n activeActions: actions.filter(a => a.Status === 'Active').length,\n pendingActions: actions.filter(a => a.Status === 'Pending').length,\n disabledActions: actions.filter(a => a.Status === 'Disabled').length,\n totalExecutions: executions.length,\n recentExecutions: executions.filter(e => {\n const dayAgo = new Date();\n dayAgo.setDate(dayAgo.getDate() - 1);\n return e.StartedAt && new Date(e.StartedAt) > dayAgo;\n }).length,\n successRate: this.calculateSuccessRate(executions),\n totalCategories: categories.length,\n aiGeneratedActions: actions.filter(a => a.Type === 'Generated').length,\n customActions: actions.filter(a => a.Type === 'Custom').length\n };\n }\n\n private calculateSuccessRate(executions: MJActionExecutionLogEntity[]): number {\n if (!executions || executions.length === 0) return 0;\n // Check for success based on result code - Actions may use different success codes\n const successful = executions.filter(e => {\n const code = e.ResultCode?.toLowerCase();\n return code === 'success' || code === 'ok' || code === 'completed' || code === '200';\n }).length;\n return Math.round((successful / executions.length) * 100);\n }\n\n private calculateCategoryStats(\n actions: MJActionEntity[], \n categories: MJActionCategoryEntity[], \n executions: MJActionExecutionLogEntity[]\n ): void {\n this.CategoryStats = categories.map(category => {\n const categoryActions = actions.filter(a => UUIDsEqual(a.CategoryID, category.ID));\n const categoryExecutions = executions.filter(e => \n categoryActions.some(a => UUIDsEqual(a.ID, e.ActionID))\n );\n \n return {\n categoryId: category.ID,\n categoryName: category.Name,\n actionCount: categoryActions.length,\n executionCount: categoryExecutions.length,\n successRate: this.calculateSuccessRate(categoryExecutions)\n };\n });\n }\n\n private async loadFilteredData(): Promise<void> {\n // Implement filtered data loading based on current filter values\n const searchTerm = this.SearchTerm$.value;\n const status = this.SelectedStatus$.value;\n const type = this.SelectedType$.value;\n\n let extraFilter = '';\n const filters: string[] = [];\n\n if (status !== 'all') {\n filters.push(`Status = '${status}'`);\n }\n\n if (type !== 'all') {\n filters.push(`Type = '${type}'`);\n }\n\n if (filters.length > 0) {\n extraFilter = filters.join(' AND ');\n }\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView({\n EntityName: 'MJ: Actions',\n ExtraFilter: extraFilter,\n OrderBy: '__mj_UpdatedAt DESC',\n UserSearchString: searchTerm,\n IgnoreMaxRows: false,\n MaxRows: 1000\n });\n \n this.RecentActions = ((result.Results || []) as MJActionEntity[]).slice(0, 10);\n } catch (error) {\n LogError('Failed to load filtered actions', undefined, error);\n }\n }\n\n public OnSearchChange(searchTerm: string): void {\n this.SearchTerm$.next(searchTerm);\n }\n\n /** @deprecated Use {@link OnSearchChange}. */\n public onSearchChange(searchTerm: string): void {\n return this.OnSearchChange(searchTerm);\n }\n\n public OnStatusFilterChange(status: string): void {\n this.SelectedStatus$.next(status);\n }\n\n /** @deprecated Use {@link OnStatusFilterChange}. */\n public onStatusFilterChange(status: string): void {\n return this.OnStatusFilterChange(status);\n }\n\n public OnTypeFilterChange(type: string): void {\n this.SelectedType$.next(type);\n }\n\n /** @deprecated Use {@link OnTypeFilterChange}. */\n public onTypeFilterChange(type: string): void {\n return this.OnTypeFilterChange(type);\n }\n\n // ───── Filter-popover plumbing for the [actions] slot ─────\n\n public get FilterFields(): FilterFieldConfig[] {\n return [\n {\n key: 'status',\n type: 'dropdown',\n label: 'Status',\n icon: 'fa-solid fa-circle-info',\n placeholder: 'All Statuses',\n options: [\n { text: 'All Statuses', value: 'all' },\n { text: 'Active', value: 'Active' },\n { text: 'Pending', value: 'Pending' },\n { text: 'Disabled', value: 'Disabled' }\n ]\n },\n {\n key: 'type',\n type: 'dropdown',\n label: 'Type',\n icon: 'fa-solid fa-shapes',\n placeholder: 'All Types',\n options: [\n { text: 'All Types', value: 'all' },\n { text: 'AI Generated', value: 'Generated' },\n { text: 'Custom', value: 'Custom' }\n ]\n }\n ];\n }\n public get FilterValues(): Record<string, unknown> {\n return { status: this.SelectedStatus$.value, type: this.SelectedType$.value };\n }\n public get ActiveFilterCount(): number {\n let n = 0;\n if (this.SelectedStatus$.value !== 'all') n++;\n if (this.SelectedType$.value !== 'all') n++;\n return n;\n }\n public OnFilterValuesChange(v: Record<string, unknown>): void {\n const next = (v ?? {}) as { status?: string; type?: string };\n if ((next.status ?? 'all') !== this.SelectedStatus$.value) {\n this.OnStatusFilterChange(next.status ?? 'all');\n }\n if ((next.type ?? 'all') !== this.SelectedType$.value) {\n this.OnTypeFilterChange(next.type ?? 'all');\n }\n }\n\n /** @deprecated Use {@link OnFilterValuesChange}. */\n public onFilterValuesChange(v: Record<string, unknown>): void {\n return this.OnFilterValuesChange(v);\n }\n public ResetFilters(): void {\n if (this.SelectedStatus$.value !== 'all') this.OnStatusFilterChange('all');\n if (this.SelectedType$.value !== 'all') this.OnTypeFilterChange('all');\n }\n\n /** @deprecated Use {@link ResetFilters}. */\n public resetFilters(): void {\n return this.ResetFilters();\n }\n\n public OpenAction(action: MJActionEntity): void {\n this.selectedAction = action;\n this.publishAgentContext();\n this.navigationService.OpenEntityRecord('MJ: Actions', CompositeKey.FromID(action.ID));\n }\n\n /** @deprecated Use {@link OpenAction}. */\n public openAction(action: MJActionEntity): void {\n return this.OpenAction(action);\n }\n\n /** Sort the visible recent-actions list in place (agent tool — view-only). */\n private sortVisibleActions(field: 'name' | 'status' | 'type' | 'updated', direction: 'asc' | 'desc'): void {\n const dir = direction === 'asc' ? 1 : -1;\n const sorted = [...this.RecentActions].sort((a, b) => {\n let cmp = 0;\n switch (field) {\n case 'name': cmp = (a.Name || '').localeCompare(b.Name || ''); break;\n case 'status': cmp = (a.Status || '').localeCompare(b.Status || ''); break;\n case 'type': cmp = (a.Type || '').localeCompare(b.Type || ''); break;\n case 'updated': {\n const da = a.__mj_UpdatedAt ? new Date(a.__mj_UpdatedAt).getTime() : 0;\n const db = b.__mj_UpdatedAt ? new Date(b.__mj_UpdatedAt).getTime() : 0;\n cmp = da - db;\n break;\n }\n }\n return cmp * dir;\n });\n this.RecentActions = sorted;\n this.publishAgentContext();\n this.cdr.detectChanges();\n }\n\n public OpenCategory(categoryId: string): void {\n this.navigationService.OpenEntityRecord('MJ: Action Categories', CompositeKey.FromID(categoryId));\n }\n\n /** @deprecated Use {@link OpenCategory}. */\n public openCategory(categoryId: string): void {\n return this.OpenCategory(categoryId);\n }\n\n public OpenExecution(execution: MJActionExecutionLogEntity): void {\n this.navigationService.OpenEntityRecord('MJ: Action Execution Logs', CompositeKey.FromID(execution.ID));\n }\n\n /** @deprecated Use {@link OpenExecution}. */\n public openExecution(execution: MJActionExecutionLogEntity): void {\n return this.OpenExecution(execution);\n }\n\n public IsExecutionSuccess(execution: MJActionExecutionLogEntity): boolean {\n const code = execution.ResultCode?.toLowerCase();\n return code === 'success' || code === 'ok' || code === 'completed' || code === '200';\n }\n\n /** @deprecated Use {@link IsExecutionSuccess}. */\n public isExecutionSuccess(execution: MJActionExecutionLogEntity): boolean {\n return this.IsExecutionSuccess(execution);\n }\n\n public GetStatusColor(status: string): 'success' | 'warning' | 'error' | 'info' {\n switch (status) {\n case 'Active': return 'success';\n case 'Pending': return 'warning';\n case 'Disabled': return 'error';\n default: return 'info';\n }\n }\n\n /** @deprecated Use {@link GetStatusColor}. */\n public getStatusColor(status: string): 'success' | 'warning' | 'error' | 'info' {\n return this.GetStatusColor(status);\n }\n\n public GetTypeIcon(type: string): string {\n switch (type) {\n case 'Generated': return 'fa-solid fa-robot';\n case 'Custom': return 'fa-solid fa-code';\n default: return 'fa-solid fa-cog';\n }\n }\n\n /** @deprecated Use {@link GetTypeIcon}. */\n public getTypeIcon(type: string): string {\n return this.GetTypeIcon(type);\n }\n\n // Metric card click handlers - these now filter the current view\n public OnTotalActionsClick(): void {\n // Reset filters to show all actions\n this.SelectedStatus$.next('all');\n this.SelectedType$.next('all');\n }\n\n /** @deprecated Use {@link OnTotalActionsClick}. */\n public onTotalActionsClick(): void {\n return this.OnTotalActionsClick();\n }\n\n public OnExecutionsClick(): void {\n // This would navigate to execution monitoring resource\n }\n\n /** @deprecated Use {@link OnExecutionsClick}. */\n public onExecutionsClick(): void {\n return this.OnExecutionsClick();\n }\n\n public OnCategoriesClick(): void {\n // This would navigate to categories view\n }\n\n /** @deprecated Use {@link OnCategoriesClick}. */\n public onCategoriesClick(): void {\n return this.OnCategoriesClick();\n }\n\n public OnAIGeneratedClick(): void {\n // Filter to show AI generated actions in the current view\n this.SelectedType$.next('Generated');\n }\n\n /** @deprecated Use {@link OnAIGeneratedClick}. */\n public onAIGeneratedClick(): void {\n return this.OnAIGeneratedClick();\n }\n\n public OnActionGalleryClick(): void {\n // This would navigate to action gallery view\n }\n\n /** @deprecated Use {@link OnActionGalleryClick}. */\n public onActionGalleryClick(): void {\n return this.OnActionGalleryClick();\n }\n\n public FormatJsonParams(params: string | null): string {\n if (!params) return '{}';\n try {\n // Try to parse and reformat\n const parsed = JSON.parse(params);\n return JSON.stringify(parsed, null, 2);\n } catch {\n // If parse fails, return as is\n return params;\n }\n }\n\n /** @deprecated Use {@link FormatJsonParams}. */\n public formatJsonParams(params: string | null): string {\n return this.FormatJsonParams(params);\n }\n\n /**\n * Gets the icon class for an action\n * Falls back to type-based icon if no IconClass is set\n */\n public GetActionIcon(action: MJActionEntity): string {\n return action?.IconClass || this.GetTypeIcon(action.Type);\n }\n\n /** @deprecated Use {@link GetActionIcon}. */\n public getActionIcon(action: MJActionEntity): string {\n return this.GetActionIcon(action);\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Actions Overview';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-bolt';\n }\n}","<mj-page-layout>\n <mj-page-header\n Title=\"Actions Overview\"\n Icon=\"fa-solid fa-bolt\"\n Subtitle=\"Health and activity for all configured actions\">\n <!-- [meta] intentionally omitted — chrome slot discipline audit Task B.\n totalActions was a single inventory count; the body's KPI cards\n surface this and other metrics in their proper place. -->\n <!-- No [actions] — this page has no primary CTA; the control bar lives in [toolbar] per §3. -->\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search actions...\"\n [Value]=\"searchTerm$.value\"\n (ValueChange)=\"onSearchChange($event)\">\n </mj-page-search>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetFilters()\">\n <mj-filter-panel\n [Fields]=\"FilterFields\"\n [Values]=\"FilterValues\"\n (ValuesChange)=\"onFilterValuesChange($event)\"\n (Reset)=\"resetFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n <div class=\"actions-overview\" >\n\n <!-- Metrics Cards -->\n <div class=\"metrics-grid\">\n <div class=\"metric-card primary clickable\" (click)=\"onTotalActionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-cogs\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalActions }}</div>\n <div class=\"metric-label\">Total Actions</div>\n <div class=\"metric-breakdown\">\n <span class=\"active\">{{ metrics.activeActions }} Active</span>\n <span class=\"pending\">{{ metrics.pendingActions }} Pending</span>\n <span class=\"disabled\">{{ metrics.disabledActions }} Disabled</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card success clickable\" (click)=\"onExecutionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-play-circle\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalExecutions }}</div>\n <div class=\"metric-label\">Total Executions</div>\n <div class=\"metric-breakdown\">\n <span class=\"recent\">{{ metrics.recentExecutions }} in last 24h</span>\n <span class=\"success-rate\">{{ metrics.successRate }}% success rate</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card info clickable\" (click)=\"onCategoriesClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-sitemap\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalCategories }}</div>\n <div class=\"metric-label\">Categories</div>\n <div class=\"metric-breakdown\">\n <span>Organized structure</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card warning clickable\" (click)=\"onAIGeneratedClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-robot\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.aiGeneratedActions }}</div>\n <div class=\"metric-label\">AI Generated</div>\n <div class=\"metric-breakdown\">\n <span class=\"custom\">{{ metrics.customActions }} Custom</span>\n </div>\n </div>\n </div>\n \n <div class=\"metric-card gallery clickable\" (click)=\"onActionGalleryClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-th\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">\n <i class=\"fa-solid fa-sparkles\"></i>\n </div>\n <div class=\"metric-label\">Action Gallery</div>\n <div class=\"metric-breakdown\">\n <span>Visual action browser</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Content Grid -->\n <div class=\"content-grid\">\n <!-- Category Statistics -->\n <div class=\"panel category-stats\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-chart-bar\"></i> Category Performance</h3>\n </div>\n <div class=\"panel-content\">\n @if (categoryStats.length > 0) {\n <div class=\"category-list\">\n @for (category of categoryStats; track category.categoryId) {\n <div class=\"category-item\" (click)=\"openCategory(category.categoryId)\">\n <div class=\"category-info\">\n <div class=\"category-name\">{{ category.categoryName }}</div>\n <div class=\"category-metrics\">\n <span class=\"metric\">{{ category.actionCount }} actions</span>\n <span class=\"metric\">{{ category.executionCount }} executions</span>\n <span class=\"metric success-rate\">{{ category.successRate }}% success</span>\n </div>\n </div>\n <div class=\"category-chart\">\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" [style.width.%]=\"category.successRate\"></div>\n </div>\n </div>\n </div>\n }\n </div>\n } @else {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-chart-bar\"\n Title=\"No category statistics available\" />\n }\n </div>\n </div>\n\n <!-- Recent Actions -->\n <div class=\"panel recent-actions\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-clock\"></i> Recent Actions</h3>\n </div>\n <div class=\"panel-content\">\n @if (recentActions.length > 0) {\n <div class=\"actions-list\">\n @for (action of recentActions; track action.ID) {\n <div class=\"action-item\" (click)=\"openAction(action)\">\n <div class=\"action-icon\">\n <i [class]=\"getActionIcon(action)\"></i>\n </div>\n <div class=\"action-info\">\n <div class=\"action-name\">{{ action.Name }}</div>\n <div class=\"action-description\">{{ action.Description || 'No description' }}</div>\n </div>\n <div class=\"action-status\">\n <span class=\"status-chip\" [attr.data-color]=\"getStatusColor(action.Status)\">\n {{ action.Status }}\n </span>\n </div>\n </div>\n }\n </div>\n } @else {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-cogs\"\n Title=\"No recent actions found\" />\n }\n </div>\n </div>\n\n <!-- Recent Executions -->\n <div class=\"panel recent-executions\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-history\"></i> Recent Executions</h3>\n </div>\n <div class=\"panel-content\">\n @if (recentExecutions.length > 0) {\n <div class=\"executions-list\">\n @for (execution of recentExecutions; track execution.ID) {\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"execution.isExpanded ?? false\" (ExpandedChange)=\"execution.isExpanded = $event\">\n <ng-template mjAccordionTitle>\n <div class=\"execution-time\">\n {{ execution.StartedAt | date:'MMM d, HH:mm' }}\n </div>\n <div class=\"execution-info\">\n <div class=\"execution-action\">{{ execution.Action || 'Action ID: ' + execution.ActionID }}</div>\n <div class=\"execution-user\">{{ execution.User || 'User ID: ' + execution.UserID }}</div>\n </div>\n <div class=\"execution-result\">\n <span class=\"status-chip\" [attr.data-color]=\"isExecutionSuccess(execution) ? 'success' : 'error'\">\n {{ execution.ResultCode || 'Unknown' }}\n </span>\n </div>\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"execution-details\">\n <div class=\"params-section\">\n <h5><i class=\"fa-solid fa-sliders\"></i> Parameters</h5>\n <mj-code-editor\n [ngModel]=\"formatJsonParams(execution.Params)\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 150px; width: 100%;\">\n </mj-code-editor>\n </div>\n <div class=\"execution-actions\">\n <button mjButton\n variant=\"primary\"\n size=\"sm\"\n (click)=\"openExecution(execution)\">\n <i class=\"fa-solid fa-external-link\"></i> Open Details\n </button>\n </div>\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n </div>\n } @else {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-history\"\n Title=\"No recent executions found\" />\n }\n </div>\n </div>\n </div>\n\n @if (isLoading) {\n <div class=\"loading-overlay\">\n <mj-loading [showText]=\"false\" size=\"medium\"></mj-loading>\n </div>\n }\n</div>\n </mj-page-body>\n</mj-page-layout>"]}
1
+ {"version":3,"file":"actions-overview.component.js","sourceRoot":"","sources":["../../../src/Actions/components/actions-overview.component.ts","../../../src/Actions/components/actions-overview.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { CompositeKey, RunView, LogError } from '@memberjunction/core';\nimport { MJActionEntity, MJActionCategoryEntity, MJActionExecutionLogEntity, ResourceData } from '@memberjunction/core-entities';\nimport { GroupByUUID, IndexByUUID, RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\nimport { FilterFieldConfig } from '@memberjunction/ng-ui-components';\nimport { Subject, BehaviorSubject, combineLatest } from 'rxjs';\nimport { debounceTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';\nimport { ValidateEnumParam, BoundNameList } from '../../shared/agent-tool-validation';\nimport { FindByIdOrError, FindByIdOrNameOrError } from '../agent-tool-helpers';\ninterface ActionMetrics {\n totalActions: number;\n activeActions: number;\n pendingActions: number;\n disabledActions: number;\n totalExecutions: number;\n recentExecutions: number;\n successRate: number;\n totalCategories: number;\n aiGeneratedActions: number;\n customActions: number;\n}\n\ninterface CategoryStats {\n categoryId: string;\n categoryName: string;\n actionCount: number;\n executionCount: number;\n successRate: number;\n}\n\ninterface ExecutionWithExpanded extends MJActionExecutionLogEntity {\n isExpanded?: boolean;\n}\n\n/**\n * Actions Overview Resource - displays action management dashboard\n */\n@RegisterClass(BaseResourceComponent, 'ActionsOverviewResource')\n@Component({\n standalone: false,\n selector: 'mj-actions-overview',\n templateUrl: './actions-overview.component.html',\n styleUrls: ['./actions-overview.component.css']\n})\nexport class ActionsOverviewComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n public isLoading: boolean = true;\n public Metrics: ActionMetrics = {\n totalActions: 0,\n activeActions: 0,\n pendingActions: 0,\n disabledActions: 0,\n totalExecutions: 0,\n recentExecutions: 0,\n successRate: 0,\n totalCategories: 0,\n aiGeneratedActions: 0,\n customActions: 0\n };\n\n /** @deprecated Use {@link Metrics}. */\n public get metrics(): ActionMetrics {\n return this.Metrics;\n }\n /** @deprecated Use {@link Metrics}. */\n public set metrics(value: ActionMetrics) {\n this.Metrics = value;\n }\n\n public CategoryStats: CategoryStats[] = [];\n\n /** @deprecated Use {@link CategoryStats}. */\n public get categoryStats(): CategoryStats[] {\n return this.CategoryStats;\n }\n /** @deprecated Use {@link CategoryStats}. */\n public set categoryStats(value: CategoryStats[]) {\n this.CategoryStats = value;\n }\n public RecentActions: MJActionEntity[] = [];\n\n /** @deprecated Use {@link RecentActions}. */\n public get recentActions(): MJActionEntity[] {\n return this.RecentActions;\n }\n /** @deprecated Use {@link RecentActions}. */\n public set recentActions(value: MJActionEntity[]) {\n this.RecentActions = value;\n }\n public RecentExecutions: ExecutionWithExpanded[] = [];\n\n /** @deprecated Use {@link RecentExecutions}. */\n public get recentExecutions(): ExecutionWithExpanded[] {\n return this.RecentExecutions;\n }\n /** @deprecated Use {@link RecentExecutions}. */\n public set recentExecutions(value: ExecutionWithExpanded[]) {\n this.RecentExecutions = value;\n }\n public TopCategories: MJActionCategoryEntity[] = [];\n\n /** @deprecated Use {@link TopCategories}. */\n public get topCategories(): MJActionCategoryEntity[] {\n return this.TopCategories;\n }\n /** @deprecated Use {@link TopCategories}. */\n public set topCategories(value: MJActionCategoryEntity[]) {\n this.TopCategories = value;\n }\n\n /** Full (un-sliced) collections retained so agent tools can resolve any id, not just the visible top-10. */\n private allActions: MJActionEntity[] = [];\n private allExecutions: MJActionExecutionLogEntity[] = [];\n private allCategories: MJActionCategoryEntity[] = [];\n\n /** Last action the agent (or user) selected/opened — surfaced in context as id + name. */\n private selectedAction: MJActionEntity | null = null;\n\n public SearchTerm$ = new BehaviorSubject<string>('');\n\n /** @deprecated Use {@link SearchTerm$}. */\n public get searchTerm$() {\n return this.SearchTerm$;\n }\n /** @deprecated Use {@link SearchTerm$}. */\n public set searchTerm$(value) {\n this.SearchTerm$ = value;\n }\n public SelectedStatus$ = new BehaviorSubject<string>('all');\n\n /** @deprecated Use {@link SelectedStatus$}. */\n public get selectedStatus$() {\n return this.SelectedStatus$;\n }\n /** @deprecated Use {@link SelectedStatus$}. */\n public set selectedStatus$(value) {\n this.SelectedStatus$ = value;\n }\n public SelectedType$ = new BehaviorSubject<string>('all');\n\n /** @deprecated Use {@link SelectedType$}. */\n public get selectedType$() {\n return this.SelectedType$;\n }\n /** @deprecated Use {@link SelectedType$}. */\n public set selectedType$(value) {\n this.SelectedType$ = value;\n }\n\n /** Allowed status filter values (mirrors the Filter popover dropdown). */\n private readonly statusFilterValues = ['all', 'Active', 'Pending', 'Disabled'] as const;\n /** Allowed type filter values (mirrors the Filter popover dropdown). */\n private readonly typeFilterValues = ['all', 'Generated', 'Custom'] as const;\n /** Allowed sort fields for the visible-actions list. */\n private readonly sortFieldValues = ['name', 'status', 'type', 'updated'] as const;\n /** Allowed sort directions. */\n private readonly sortDirectionValues = ['asc', 'desc'] as const;\n\n protected override destroy$ = new Subject<void>();\n\n constructor(private cdr: ChangeDetectorRef ) {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.setupFilters();\n this.registerAgentTools();\n this.loadData();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private setupFilters(): void {\n combineLatest([\n this.SearchTerm$.pipe(debounceTime(300), distinctUntilChanged()),\n this.SelectedStatus$.pipe(distinctUntilChanged()),\n this.SelectedType$.pipe(distinctUntilChanged())\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.loadFilteredData();\n this.publishAgentContext();\n });\n }\n\n // ================================================================\n // AI Agent context + client tools\n //\n // 🚨 SAFETY BOUNDARY: The Actions app executes actions with real side\n // effects (data mutation, emails, integrations). Action EXECUTION is\n // intentionally NOT exposed to the agent here — no RunAction, no execute\n // path. The agent may only FIND / FILTER / NAVIGATE actions and view run\n // history. Every Handler is tolerant (never throws; returns a structured\n // failure on bad input).\n // ================================================================\n\n /** Publish the current overview state to the agent. Called on load and on every filter change.\n * Deep context: counts by status/type, success rate, all filter state, the visible\n * (bounded) action + category names, and the currently selected action (id + name). */\n private publishAgentContext(): void {\n this.navigationService.SetAgentContext(this, {\n // Action counts by status\n TotalActionCount: this.Metrics.totalActions,\n ActiveActionCount: this.Metrics.activeActions,\n PendingActionCount: this.Metrics.pendingActions,\n DisabledActionCount: this.Metrics.disabledActions,\n // Action counts by type\n AIGeneratedActionCount: this.Metrics.aiGeneratedActions,\n CustomActionCount: this.Metrics.customActions,\n // Execution metrics\n TotalExecutionCount: this.Metrics.totalExecutions,\n RecentExecutionCount: this.Metrics.recentExecutions,\n SuccessRate: this.Metrics.successRate,\n // Category metrics\n TotalCategoryCount: this.Metrics.totalCategories,\n // Filter / search state\n CurrentSearchTerm: this.SearchTerm$.value,\n CurrentStatusFilter: this.SelectedStatus$.value,\n CurrentTypeFilter: this.SelectedType$.value,\n // What the user is looking at — bounded name lists so the agent can pick by name\n VisibleActionCount: this.RecentActions.length,\n VisibleActionNames: BoundNameList(this.RecentActions.map(a => a.Name)),\n TopCategoryNames: BoundNameList(this.TopCategories.map(c => c.Name)),\n // Current selection (id + NAME)\n SelectedActionId: this.selectedAction?.ID ?? null,\n SelectedActionName: this.selectedAction?.Name ?? null,\n });\n }\n\n /** Register the read-only / navigational client tools the agent can invoke on this surface. */\n private registerAgentTools(): void {\n this.navigationService.SetAgentClientTools(this, [\n {\n Name: 'SearchActions',\n Description: 'Search the actions list by a free-text term (matches name and description).',\n ParameterSchema: { type: 'object', properties: { searchTerm: { type: 'string' } }, required: ['searchTerm'] },\n Handler: async (params) => {\n const term = typeof params['searchTerm'] === 'string' ? params['searchTerm'] : '';\n this.OnSearchChange(term);\n return { Success: true };\n },\n },\n {\n Name: 'FilterActionsByStatus',\n Description: 'Filter actions by status. Allowed: all, Active, Pending, Disabled.',\n ParameterSchema: { type: 'object', properties: { status: { type: 'string', enum: [...this.statusFilterValues] } }, required: ['status'] },\n Handler: async (params) => {\n const v = ValidateEnumParam(params['status'], this.statusFilterValues, 'status');\n if (!v.ok) return v.result;\n this.OnStatusFilterChange(v.value);\n return { Success: true };\n },\n },\n {\n Name: 'FilterActionsByType',\n Description: 'Filter actions by type. Allowed: all, Generated (AI-generated), Custom.',\n ParameterSchema: { type: 'object', properties: { type: { type: 'string', enum: [...this.typeFilterValues] } }, required: ['type'] },\n Handler: async (params) => {\n const v = ValidateEnumParam(params['type'], this.typeFilterValues, 'type');\n if (!v.ok) return v.result;\n this.OnTypeFilterChange(v.value);\n return { Success: true };\n },\n },\n {\n Name: 'ClearAllFilters',\n Description: 'Reset the status and type filters back to \"all\".',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.ResetFilters();\n return { Success: true };\n },\n },\n {\n Name: 'SortVisibleActions',\n Description: 'Sort the visible recent-actions list. field: name, status, type, updated. direction: asc, desc (default asc).',\n ParameterSchema: {\n type: 'object',\n properties: {\n field: { type: 'string', enum: [...this.sortFieldValues] },\n direction: { type: 'string', enum: [...this.sortDirectionValues] },\n },\n required: ['field'],\n },\n Handler: async (params) => {\n const f = ValidateEnumParam(params['field'], this.sortFieldValues, 'field');\n if (!f.ok) return f.result;\n let direction: 'asc' | 'desc' = 'asc';\n if (params['direction'] !== undefined) {\n const d = ValidateEnumParam(params['direction'], this.sortDirectionValues, 'direction');\n if (!d.ok) return d.result;\n direction = d.value;\n }\n this.sortVisibleActions(f.value, direction);\n return { Success: true };\n },\n },\n {\n Name: 'OpenActionDetail',\n Description: 'Open the detail record for an action by its id OR its name (navigation only — does NOT run the action). Name matching is case-insensitive (exact then contains).',\n ParameterSchema: { type: 'object', properties: { action: { type: 'string' } }, required: ['action'] },\n Handler: async (params) => {\n const found = FindByIdOrNameOrError(params['action'], this.allActions, 'action');\n if (!found.ok) return found.result;\n this.OpenAction(found.value);\n return { Success: true, Data: { Id: found.value.ID, Name: found.value.Name } };\n },\n },\n {\n Name: 'OpenCategoryDetail',\n Description: 'Open the detail record for an action category by its id OR its name (navigation only). Name matching is case-insensitive (exact then contains).',\n ParameterSchema: { type: 'object', properties: { category: { type: 'string' } }, required: ['category'] },\n Handler: async (params) => {\n const found = FindByIdOrNameOrError(params['category'], this.allCategories, 'category');\n if (!found.ok) return found.result;\n this.OpenCategory(found.value.ID);\n return { Success: true, Data: { Id: found.value.ID, Name: found.value.Name } };\n },\n },\n {\n Name: 'OpenExecutionDetail',\n Description: 'Open the detail record for an action execution log by its id (view-only run history).',\n ParameterSchema: { type: 'object', properties: { executionId: { type: 'string' } }, required: ['executionId'] },\n Handler: async (params) => {\n const found = FindByIdOrError(params['executionId'], this.allExecutions, 'execution');\n if (!found.ok) return found.result;\n this.OpenExecution(found.value);\n return { Success: true };\n },\n },\n {\n Name: 'RefreshOverviewData',\n Description: 'Reload the actions overview data (metrics, categories, recent items).',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n await this.loadData();\n return { Success: true };\n },\n },\n ]);\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n this.cdr.detectChanges();\n\n // Load all data in a single batch using RunViews\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n \n const [actionsResult, categoriesResult, executionsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Actions', \n OrderBy: '__mj_UpdatedAt DESC' \n },\n {\n EntityName: 'MJ: Action Categories', \n OrderBy: 'Name' \n },\n {\n EntityName: 'MJ: Action Execution Logs', \n OrderBy: 'StartedAt DESC', \n }\n ]);\n \n if (!actionsResult.Success || !categoriesResult.Success || !executionsResult.Success) {\n const errors = [];\n if (!actionsResult.Success) errors.push('Actions: ' + actionsResult.ErrorMessage);\n if (!categoriesResult.Success) errors.push('Categories: ' + categoriesResult.ErrorMessage);\n if (!executionsResult.Success) errors.push('Executions: ' + executionsResult.ErrorMessage);\n throw new Error('Failed to load data: ' + errors.join(', '));\n }\n \n const actions = (actionsResult.Results || []) as MJActionEntity[];\n const categories = (categoriesResult.Results || []) as MJActionCategoryEntity[];\n const executions = (executionsResult.Results || []) as MJActionExecutionLogEntity[];\n\n this.allActions = actions;\n this.allExecutions = executions;\n this.allCategories = categories;\n this.calculateMetrics(actions, categories, executions);\n this.calculateCategoryStats(actions, categories, executions);\n this.RecentActions = actions.slice(0, 10);\n this.RecentExecutions = executions.slice(0, 10).map(e => ({ ...e, isExpanded: false } as ExecutionWithExpanded));\n this.TopCategories = categories.slice(0, 5);\n this.publishAgentContext();\n } catch (error) {\n console.error('Error loading actions overview data:', error);\n LogError('Failed to load actions overview data', undefined, error);\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n this.NotifyLoadComplete();\n }\n }\n\n private calculateMetrics(\n actions: MJActionEntity[], \n categories: MJActionCategoryEntity[], \n executions: MJActionExecutionLogEntity[]\n ): void {\n this.Metrics = {\n totalActions: actions.length,\n activeActions: actions.filter(a => a.Status === 'Active').length,\n pendingActions: actions.filter(a => a.Status === 'Pending').length,\n disabledActions: actions.filter(a => a.Status === 'Disabled').length,\n totalExecutions: executions.length,\n recentExecutions: executions.filter(e => {\n const dayAgo = new Date();\n dayAgo.setDate(dayAgo.getDate() - 1);\n return e.StartedAt && new Date(e.StartedAt) > dayAgo;\n }).length,\n successRate: this.calculateSuccessRate(executions),\n totalCategories: categories.length,\n aiGeneratedActions: actions.filter(a => a.Type === 'Generated').length,\n customActions: actions.filter(a => a.Type === 'Custom').length\n };\n }\n\n private calculateSuccessRate(executions: MJActionExecutionLogEntity[]): number {\n if (!executions || executions.length === 0) return 0;\n // Check for success based on result code - Actions may use different success codes\n const successful = executions.filter(e => {\n const code = e.ResultCode?.toLowerCase();\n return code === 'success' || code === 'ok' || code === 'completed' || code === '200';\n }).length;\n return Math.round((successful / executions.length) * 100);\n }\n\n private calculateCategoryStats(\n actions: MJActionEntity[], \n categories: MJActionCategoryEntity[], \n executions: MJActionExecutionLogEntity[]\n ): void {\n // Group once: scanning every action and every execution per category grew with all three lists.\n const actionsByCategory = GroupByUUID(actions, a => a.CategoryID);\n const actionsByID = IndexByUUID(actions);\n const executionsByCategory = GroupByUUID(executions, e => actionsByID.Get(e.ActionID)?.CategoryID);\n this.CategoryStats = categories.map(category => {\n const categoryActions = actionsByCategory.Get(category.ID) ?? [];\n const categoryExecutions = executionsByCategory.Get(category.ID) ?? [];\n \n return {\n categoryId: category.ID,\n categoryName: category.Name,\n actionCount: categoryActions.length,\n executionCount: categoryExecutions.length,\n successRate: this.calculateSuccessRate(categoryExecutions)\n };\n });\n }\n\n private async loadFilteredData(): Promise<void> {\n // Implement filtered data loading based on current filter values\n const searchTerm = this.SearchTerm$.value;\n const status = this.SelectedStatus$.value;\n const type = this.SelectedType$.value;\n\n let extraFilter = '';\n const filters: string[] = [];\n\n if (status !== 'all') {\n filters.push(`Status = '${status}'`);\n }\n\n if (type !== 'all') {\n filters.push(`Type = '${type}'`);\n }\n\n if (filters.length > 0) {\n extraFilter = filters.join(' AND ');\n }\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView({\n EntityName: 'MJ: Actions',\n ExtraFilter: extraFilter,\n OrderBy: '__mj_UpdatedAt DESC',\n UserSearchString: searchTerm,\n IgnoreMaxRows: false,\n MaxRows: 1000\n });\n \n this.RecentActions = ((result.Results || []) as MJActionEntity[]).slice(0, 10);\n } catch (error) {\n LogError('Failed to load filtered actions', undefined, error);\n }\n }\n\n public OnSearchChange(searchTerm: string): void {\n this.SearchTerm$.next(searchTerm);\n }\n\n /** @deprecated Use {@link OnSearchChange}. */\n public onSearchChange(searchTerm: string): void {\n return this.OnSearchChange(searchTerm);\n }\n\n public OnStatusFilterChange(status: string): void {\n this.SelectedStatus$.next(status);\n }\n\n /** @deprecated Use {@link OnStatusFilterChange}. */\n public onStatusFilterChange(status: string): void {\n return this.OnStatusFilterChange(status);\n }\n\n public OnTypeFilterChange(type: string): void {\n this.SelectedType$.next(type);\n }\n\n /** @deprecated Use {@link OnTypeFilterChange}. */\n public onTypeFilterChange(type: string): void {\n return this.OnTypeFilterChange(type);\n }\n\n // ───── Filter-popover plumbing for the [actions] slot ─────\n\n public get FilterFields(): FilterFieldConfig[] {\n return [\n {\n key: 'status',\n type: 'dropdown',\n label: 'Status',\n icon: 'fa-solid fa-circle-info',\n placeholder: 'All Statuses',\n options: [\n { text: 'All Statuses', value: 'all' },\n { text: 'Active', value: 'Active' },\n { text: 'Pending', value: 'Pending' },\n { text: 'Disabled', value: 'Disabled' }\n ]\n },\n {\n key: 'type',\n type: 'dropdown',\n label: 'Type',\n icon: 'fa-solid fa-shapes',\n placeholder: 'All Types',\n options: [\n { text: 'All Types', value: 'all' },\n { text: 'AI Generated', value: 'Generated' },\n { text: 'Custom', value: 'Custom' }\n ]\n }\n ];\n }\n public get FilterValues(): Record<string, unknown> {\n return { status: this.SelectedStatus$.value, type: this.SelectedType$.value };\n }\n public get ActiveFilterCount(): number {\n let n = 0;\n if (this.SelectedStatus$.value !== 'all') n++;\n if (this.SelectedType$.value !== 'all') n++;\n return n;\n }\n public OnFilterValuesChange(v: Record<string, unknown>): void {\n const next = (v ?? {}) as { status?: string; type?: string };\n if ((next.status ?? 'all') !== this.SelectedStatus$.value) {\n this.OnStatusFilterChange(next.status ?? 'all');\n }\n if ((next.type ?? 'all') !== this.SelectedType$.value) {\n this.OnTypeFilterChange(next.type ?? 'all');\n }\n }\n\n /** @deprecated Use {@link OnFilterValuesChange}. */\n public onFilterValuesChange(v: Record<string, unknown>): void {\n return this.OnFilterValuesChange(v);\n }\n public ResetFilters(): void {\n if (this.SelectedStatus$.value !== 'all') this.OnStatusFilterChange('all');\n if (this.SelectedType$.value !== 'all') this.OnTypeFilterChange('all');\n }\n\n /** @deprecated Use {@link ResetFilters}. */\n public resetFilters(): void {\n return this.ResetFilters();\n }\n\n public OpenAction(action: MJActionEntity): void {\n this.selectedAction = action;\n this.publishAgentContext();\n this.navigationService.OpenEntityRecord('MJ: Actions', CompositeKey.FromID(action.ID));\n }\n\n /** @deprecated Use {@link OpenAction}. */\n public openAction(action: MJActionEntity): void {\n return this.OpenAction(action);\n }\n\n /** Sort the visible recent-actions list in place (agent tool — view-only). */\n private sortVisibleActions(field: 'name' | 'status' | 'type' | 'updated', direction: 'asc' | 'desc'): void {\n const dir = direction === 'asc' ? 1 : -1;\n const sorted = [...this.RecentActions].sort((a, b) => {\n let cmp = 0;\n switch (field) {\n case 'name': cmp = (a.Name || '').localeCompare(b.Name || ''); break;\n case 'status': cmp = (a.Status || '').localeCompare(b.Status || ''); break;\n case 'type': cmp = (a.Type || '').localeCompare(b.Type || ''); break;\n case 'updated': {\n const da = a.__mj_UpdatedAt ? new Date(a.__mj_UpdatedAt).getTime() : 0;\n const db = b.__mj_UpdatedAt ? new Date(b.__mj_UpdatedAt).getTime() : 0;\n cmp = da - db;\n break;\n }\n }\n return cmp * dir;\n });\n this.RecentActions = sorted;\n this.publishAgentContext();\n this.cdr.detectChanges();\n }\n\n public OpenCategory(categoryId: string): void {\n this.navigationService.OpenEntityRecord('MJ: Action Categories', CompositeKey.FromID(categoryId));\n }\n\n /** @deprecated Use {@link OpenCategory}. */\n public openCategory(categoryId: string): void {\n return this.OpenCategory(categoryId);\n }\n\n public OpenExecution(execution: MJActionExecutionLogEntity): void {\n this.navigationService.OpenEntityRecord('MJ: Action Execution Logs', CompositeKey.FromID(execution.ID));\n }\n\n /** @deprecated Use {@link OpenExecution}. */\n public openExecution(execution: MJActionExecutionLogEntity): void {\n return this.OpenExecution(execution);\n }\n\n public IsExecutionSuccess(execution: MJActionExecutionLogEntity): boolean {\n const code = execution.ResultCode?.toLowerCase();\n return code === 'success' || code === 'ok' || code === 'completed' || code === '200';\n }\n\n /** @deprecated Use {@link IsExecutionSuccess}. */\n public isExecutionSuccess(execution: MJActionExecutionLogEntity): boolean {\n return this.IsExecutionSuccess(execution);\n }\n\n public GetStatusColor(status: string): 'success' | 'warning' | 'error' | 'info' {\n switch (status) {\n case 'Active': return 'success';\n case 'Pending': return 'warning';\n case 'Disabled': return 'error';\n default: return 'info';\n }\n }\n\n /** @deprecated Use {@link GetStatusColor}. */\n public getStatusColor(status: string): 'success' | 'warning' | 'error' | 'info' {\n return this.GetStatusColor(status);\n }\n\n public GetTypeIcon(type: string): string {\n switch (type) {\n case 'Generated': return 'fa-solid fa-robot';\n case 'Custom': return 'fa-solid fa-code';\n default: return 'fa-solid fa-cog';\n }\n }\n\n /** @deprecated Use {@link GetTypeIcon}. */\n public getTypeIcon(type: string): string {\n return this.GetTypeIcon(type);\n }\n\n // Metric card click handlers - these now filter the current view\n public OnTotalActionsClick(): void {\n // Reset filters to show all actions\n this.SelectedStatus$.next('all');\n this.SelectedType$.next('all');\n }\n\n /** @deprecated Use {@link OnTotalActionsClick}. */\n public onTotalActionsClick(): void {\n return this.OnTotalActionsClick();\n }\n\n public OnExecutionsClick(): void {\n // This would navigate to execution monitoring resource\n }\n\n /** @deprecated Use {@link OnExecutionsClick}. */\n public onExecutionsClick(): void {\n return this.OnExecutionsClick();\n }\n\n public OnCategoriesClick(): void {\n // This would navigate to categories view\n }\n\n /** @deprecated Use {@link OnCategoriesClick}. */\n public onCategoriesClick(): void {\n return this.OnCategoriesClick();\n }\n\n public OnAIGeneratedClick(): void {\n // Filter to show AI generated actions in the current view\n this.SelectedType$.next('Generated');\n }\n\n /** @deprecated Use {@link OnAIGeneratedClick}. */\n public onAIGeneratedClick(): void {\n return this.OnAIGeneratedClick();\n }\n\n public OnActionGalleryClick(): void {\n // This would navigate to action gallery view\n }\n\n /** @deprecated Use {@link OnActionGalleryClick}. */\n public onActionGalleryClick(): void {\n return this.OnActionGalleryClick();\n }\n\n public FormatJsonParams(params: string | null): string {\n if (!params) return '{}';\n try {\n // Try to parse and reformat\n const parsed = JSON.parse(params);\n return JSON.stringify(parsed, null, 2);\n } catch {\n // If parse fails, return as is\n return params;\n }\n }\n\n /** @deprecated Use {@link FormatJsonParams}. */\n public formatJsonParams(params: string | null): string {\n return this.FormatJsonParams(params);\n }\n\n /**\n * Gets the icon class for an action\n * Falls back to type-based icon if no IconClass is set\n */\n public GetActionIcon(action: MJActionEntity): string {\n return action?.IconClass || this.GetTypeIcon(action.Type);\n }\n\n /** @deprecated Use {@link GetActionIcon}. */\n public getActionIcon(action: MJActionEntity): string {\n return this.GetActionIcon(action);\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Actions Overview';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-bolt';\n }\n}","<mj-page-layout>\n <mj-page-header\n Title=\"Actions Overview\"\n Icon=\"fa-solid fa-bolt\"\n Subtitle=\"Health and activity for all configured actions\">\n <!-- [meta] intentionally omitted — chrome slot discipline audit Task B.\n totalActions was a single inventory count; the body's KPI cards\n surface this and other metrics in their proper place. -->\n <!-- No [actions] — this page has no primary CTA; the control bar lives in [toolbar] per §3. -->\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search actions...\"\n [Value]=\"searchTerm$.value\"\n (ValueChange)=\"onSearchChange($event)\">\n </mj-page-search>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetFilters()\">\n <mj-filter-panel\n [Fields]=\"FilterFields\"\n [Values]=\"FilterValues\"\n (ValuesChange)=\"onFilterValuesChange($event)\"\n (Reset)=\"resetFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n <div class=\"actions-overview\" >\n\n <!-- Metrics Cards -->\n <div class=\"metrics-grid\">\n <div class=\"metric-card primary clickable\" (click)=\"onTotalActionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-cogs\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalActions }}</div>\n <div class=\"metric-label\">Total Actions</div>\n <div class=\"metric-breakdown\">\n <span class=\"active\">{{ metrics.activeActions }} Active</span>\n <span class=\"pending\">{{ metrics.pendingActions }} Pending</span>\n <span class=\"disabled\">{{ metrics.disabledActions }} Disabled</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card success clickable\" (click)=\"onExecutionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-play-circle\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalExecutions }}</div>\n <div class=\"metric-label\">Total Executions</div>\n <div class=\"metric-breakdown\">\n <span class=\"recent\">{{ metrics.recentExecutions }} in last 24h</span>\n <span class=\"success-rate\">{{ metrics.successRate }}% success rate</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card info clickable\" (click)=\"onCategoriesClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-sitemap\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalCategories }}</div>\n <div class=\"metric-label\">Categories</div>\n <div class=\"metric-breakdown\">\n <span>Organized structure</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card warning clickable\" (click)=\"onAIGeneratedClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-robot\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.aiGeneratedActions }}</div>\n <div class=\"metric-label\">AI Generated</div>\n <div class=\"metric-breakdown\">\n <span class=\"custom\">{{ metrics.customActions }} Custom</span>\n </div>\n </div>\n </div>\n \n <div class=\"metric-card gallery clickable\" (click)=\"onActionGalleryClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-th\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">\n <i class=\"fa-solid fa-sparkles\"></i>\n </div>\n <div class=\"metric-label\">Action Gallery</div>\n <div class=\"metric-breakdown\">\n <span>Visual action browser</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Content Grid -->\n <div class=\"content-grid\">\n <!-- Category Statistics -->\n <div class=\"panel category-stats\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-chart-bar\"></i> Category Performance</h3>\n </div>\n <div class=\"panel-content\">\n @if (categoryStats.length > 0) {\n <div class=\"category-list\">\n @for (category of categoryStats; track category.categoryId) {\n <div class=\"category-item\" (click)=\"openCategory(category.categoryId)\">\n <div class=\"category-info\">\n <div class=\"category-name\">{{ category.categoryName }}</div>\n <div class=\"category-metrics\">\n <span class=\"metric\">{{ category.actionCount }} actions</span>\n <span class=\"metric\">{{ category.executionCount }} executions</span>\n <span class=\"metric success-rate\">{{ category.successRate }}% success</span>\n </div>\n </div>\n <div class=\"category-chart\">\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" [style.width.%]=\"category.successRate\"></div>\n </div>\n </div>\n </div>\n }\n </div>\n } @else {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-chart-bar\"\n Title=\"No category statistics available\" />\n }\n </div>\n </div>\n\n <!-- Recent Actions -->\n <div class=\"panel recent-actions\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-clock\"></i> Recent Actions</h3>\n </div>\n <div class=\"panel-content\">\n @if (recentActions.length > 0) {\n <div class=\"actions-list\">\n @for (action of recentActions; track action.ID) {\n <div class=\"action-item\" (click)=\"openAction(action)\">\n <div class=\"action-icon\">\n <i [class]=\"getActionIcon(action)\"></i>\n </div>\n <div class=\"action-info\">\n <div class=\"action-name\">{{ action.Name }}</div>\n <div class=\"action-description\">{{ action.Description || 'No description' }}</div>\n </div>\n <div class=\"action-status\">\n <span class=\"status-chip\" [attr.data-color]=\"getStatusColor(action.Status)\">\n {{ action.Status }}\n </span>\n </div>\n </div>\n }\n </div>\n } @else {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-cogs\"\n Title=\"No recent actions found\" />\n }\n </div>\n </div>\n\n <!-- Recent Executions -->\n <div class=\"panel recent-executions\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-history\"></i> Recent Executions</h3>\n </div>\n <div class=\"panel-content\">\n @if (recentExecutions.length > 0) {\n <div class=\"executions-list\">\n @for (execution of recentExecutions; track execution.ID) {\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"execution.isExpanded ?? false\" (ExpandedChange)=\"execution.isExpanded = $event\">\n <ng-template mjAccordionTitle>\n <div class=\"execution-time\">\n {{ execution.StartedAt | date:'MMM d, HH:mm' }}\n </div>\n <div class=\"execution-info\">\n <div class=\"execution-action\">{{ execution.Action || 'Action ID: ' + execution.ActionID }}</div>\n <div class=\"execution-user\">{{ execution.User || 'User ID: ' + execution.UserID }}</div>\n </div>\n <div class=\"execution-result\">\n <span class=\"status-chip\" [attr.data-color]=\"isExecutionSuccess(execution) ? 'success' : 'error'\">\n {{ execution.ResultCode || 'Unknown' }}\n </span>\n </div>\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"execution-details\">\n <div class=\"params-section\">\n <h5><i class=\"fa-solid fa-sliders\"></i> Parameters</h5>\n <mj-code-editor\n [ngModel]=\"formatJsonParams(execution.Params)\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 150px; width: 100%;\">\n </mj-code-editor>\n </div>\n <div class=\"execution-actions\">\n <button mjButton\n variant=\"primary\"\n size=\"sm\"\n (click)=\"openExecution(execution)\">\n <i class=\"fa-solid fa-external-link\"></i> Open Details\n </button>\n </div>\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n </div>\n } @else {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-history\"\n Title=\"No recent executions found\" />\n }\n </div>\n </div>\n </div>\n\n @if (isLoading) {\n <div class=\"loading-overlay\">\n <mj-loading [showText]=\"false\" size=\"medium\"></mj-loading>\n </div>\n }\n</div>\n </mj-page-body>\n</mj-page-layout>"]}
@@ -1 +1 @@
1
- {"version":3,"file":"categories-list-view.component.d.ts","sourceRoot":"","sources":["../../../src/Actions/components/categories-list-view.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAU,YAAY,EAAE,MAAM,eAAe,CAAC;AAEnF,OAAO,EAAE,sBAAsB,EAAkB,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAW,eAAe,EAAE,MAAM,MAAM,CAAC;AAGhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAErE,UAAU,iBAAkB,SAAQ,sBAAsB;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qBAoQa,2BAA4B,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IACtF,gBAAgB;oBAAiC,MAAM;kBAAY,MAAM;OAAK;IAExF;;;;;;OAMG;IACO,gBAAgB;oBATiC,MAAM;kBAAY,MAAM;OAShC;IAE5C,SAAS,UAAQ;IACjB,UAAU,EAAE,iBAAiB,EAAE,CAAM;IAE5C,0CAA0C;IAC1C,IAAW,UAAU,IAAI,iBAAiB,EAAE,CAE3C;IACD,0CAA0C;IAC1C,IAAW,UAAU,CAAC,KAAK,EAAE,iBAAiB,EAAE,EAE/C;IACM,kBAAkB,EAAE,iBAAiB,EAAE,CAAM;IAEpD,kDAAkD;IAClD,IAAW,kBAAkB,IAAI,iBAAiB,EAAE,CAEnD;IACD,kDAAkD;IAClD,IAAW,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,EAAE,EAEvD;IACM,WAAW,0BAAmC;IAErD,2CAA2C;IAC3C,IAAW,WAAW,4BAErB;IACD,2CAA2C;IAC3C,IAAW,WAAW,CAAC,KAAK,yBAAA,EAE3B;IAED,OAAO,CAAC,QAAQ,CAAuB;;IAIvC,QAAQ,IAAI,IAAI;IAKhB,WAAW,IAAI,IAAI;IAKnB,OAAO,CAAC,WAAW;YAUL,QAAQ;IAmDtB,OAAO,CAAC,WAAW;IAaZ,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI/C,8CAA8C;IACvC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC,YAAY,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAO3D,4CAA4C;IACrC,YAAY,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAIpD,WAAW,CAAC,QAAQ,EAAE,sBAAsB,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAOxE,2CAA2C;IACpC,WAAW,CAAC,QAAQ,EAAE,sBAAsB,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;yCAjK7D,2BAA2B;2CAA3B,2BAA2B;CAoKvC"}
1
+ {"version":3,"file":"categories-list-view.component.d.ts","sourceRoot":"","sources":["../../../src/Actions/components/categories-list-view.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAU,YAAY,EAAE,MAAM,eAAe,CAAC;AAEnF,OAAO,EAAE,sBAAsB,EAAkB,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAW,eAAe,EAAE,MAAM,MAAM,CAAC;AAGhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAErE,UAAU,iBAAkB,SAAQ,sBAAsB;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qBAoQa,2BAA4B,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IACtF,gBAAgB;oBAAiC,MAAM;kBAAY,MAAM;OAAK;IAExF;;;;;;OAMG;IACO,gBAAgB;oBATiC,MAAM;kBAAY,MAAM;OAShC;IAE5C,SAAS,UAAQ;IACjB,UAAU,EAAE,iBAAiB,EAAE,CAAM;IAE5C,0CAA0C;IAC1C,IAAW,UAAU,IAAI,iBAAiB,EAAE,CAE3C;IACD,0CAA0C;IAC1C,IAAW,UAAU,CAAC,KAAK,EAAE,iBAAiB,EAAE,EAE/C;IACM,kBAAkB,EAAE,iBAAiB,EAAE,CAAM;IAEpD,kDAAkD;IAClD,IAAW,kBAAkB,IAAI,iBAAiB,EAAE,CAEnD;IACD,kDAAkD;IAClD,IAAW,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,EAAE,EAEvD;IACM,WAAW,0BAAmC;IAErD,2CAA2C;IAC3C,IAAW,WAAW,4BAErB;IACD,2CAA2C;IAC3C,IAAW,WAAW,CAAC,KAAK,yBAAA,EAE3B;IAED,OAAO,CAAC,QAAQ,CAAuB;;IAIvC,QAAQ,IAAI,IAAI;IAKhB,WAAW,IAAI,IAAI;IAKnB,OAAO,CAAC,WAAW;YAUL,QAAQ;IAoDtB,OAAO,CAAC,WAAW;IAaZ,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI/C,8CAA8C;IACvC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC,YAAY,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAO3D,4CAA4C;IACrC,YAAY,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAIpD,WAAW,CAAC,QAAQ,EAAE,sBAAsB,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAOxE,2CAA2C;IACpC,WAAW,CAAC,QAAQ,EAAE,sBAAsB,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;yCAlK7D,2BAA2B;2CAA3B,2BAA2B;CAqKvC"}
@@ -2,7 +2,7 @@ import { Component, Output, EventEmitter } from '@angular/core';
2
2
  import { RunView, LogError } from '@memberjunction/core';
3
3
  import { Subject, BehaviorSubject } from 'rxjs';
4
4
  import { debounceTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';
5
- import { UUIDsEqual } from '@memberjunction/global';
5
+ import { GroupByUUID } from '@memberjunction/global';
6
6
  import { BaseAngularComponent } from '@memberjunction/ng-base-types';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "@memberjunction/ng-ui-components";
@@ -151,8 +151,9 @@ export class CategoriesListViewComponent extends BaseAngularComponent {
151
151
  const actions = (actionsResult.Results || []);
152
152
  console.log(`Loaded ${categories.length} categories and ${actions.length} actions`);
153
153
  // Calculate stats for each category
154
+ const actionsByCategory = GroupByUUID(actions, a => a.CategoryID);
154
155
  this.Categories = categories.map(category => {
155
- const categoryActions = actions.filter(a => UUIDsEqual(a.CategoryID, category.ID));
156
+ const categoryActions = actionsByCategory.Get(category.ID) ?? [];
156
157
  return {
157
158
  ...category,
158
159
  actionCount: categoryActions.length,
@@ -1 +1 @@
1
- {"version":3,"file":"categories-list-view.component.js","sourceRoot":"","sources":["../../../src/Actions/components/categories-list-view.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\nimport { RunView, LogError } from '@memberjunction/core';\nimport { MJActionCategoryEntity, MJActionEntity } from '@memberjunction/core-entities';\nimport { Subject, BehaviorSubject } from 'rxjs';\nimport { debounceTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n\ninterface CategoryWithStats extends MJActionCategoryEntity {\n actionCount?: number;\n activeActionCount?: number;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-categories-list-view',\n template: `\n <div class=\"categories-list-view\" mjFillContainer>\n <!-- Header with search -->\n <div class=\"list-header\">\n <div class=\"header-title\">\n <h2><i class=\"fa-solid fa-sitemap\"></i> Action Categories</h2>\n <div class=\"results-count\">{{ filteredCategories.length }} of {{ categories.length }} categories</div>\n </div>\n \n <div class=\"search-container\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\" class=\"mj-input\"\n placeholder=\"Search categories...\"\n [value]=\"searchTerm$.value\"\n (input)=\"onSearchChange($any($event.target).value)\" />\n </div>\n </div>\n </div>\n\n <!-- Categories Grid -->\n <div class=\"categories-grid\">\n @if (filteredCategories.length > 0) {\n @for (category of filteredCategories; track category.ID) {\n <div class=\"category-card\" (click)=\"openCategory(category)\">\n <div class=\"category-header\">\n <div class=\"category-icon\">\n <i class=\"fa-solid fa-folder\"></i>\n </div>\n <h3 class=\"category-name\">{{ category.Name }}</h3>\n </div>\n \n @if (category.Description) {\n <div class=\"category-description\">\n {{ category.Description }}\n </div>\n }\n \n <div class=\"category-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{ category.actionCount || 0 }}</span>\n <span class=\"stat-label\">Total Actions</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-value active\">{{ category.activeActionCount || 0 }}</span>\n <span class=\"stat-label\">Active</span>\n </div>\n </div>\n \n <div class=\"category-footer\">\n <button mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"viewActions(category, $event)\">\n <i class=\"fa-solid fa-cogs\"></i> View Actions\n </button>\n </div>\n </div>\n }\n } @else if (!isLoading) {\n <mj-empty-state Variant=\"no-results\" Icon=\"fa-solid fa-sitemap\"\n Title=\"No categories found\"\n Message=\"Try adjusting your search criteria\" />\n }\n </div>\n\n @if (isLoading) {\n <div class=\"loading-overlay\">\n <mj-loading [showText]=\"false\" size=\"large\"></mj-loading>\n </div>\n }\n </div>\n `,\n styles: [`\n .categories-list-view {\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n padding: 1.5rem;\n height: 100%;\n overflow-y: auto;\n\n .list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 1rem;\n\n .header-title {\n display: flex;\n align-items: baseline;\n gap: 1rem;\n\n h2 {\n margin: 0;\n font-size: 1.5rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n\n i {\n color: var(--mj-brand-primary);\n }\n }\n\n .results-count {\n color: var(--mj-text-muted);\n font-size: 0.875rem;\n }\n }\n\n .search-container {\n min-width: 250px;\n \n .search-input-wrapper {\n width: 100%;\n }\n }\n }\n\n .categories-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 1.5rem;\n flex: 1;\n align-content: start;\n\n .category-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 0.75rem;\n padding: 1.5rem;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n border-color: var(--mj-brand-primary);\n }\n\n .category-header {\n display: flex;\n align-items: center;\n gap: 1rem;\n\n .category-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 3rem;\n height: 3rem;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-radius: 0.5rem;\n\n i {\n color: var(--mj-brand-primary);\n font-size: 1.25rem;\n }\n }\n\n .category-name {\n margin: 0;\n font-size: 1.125rem;\n font-weight: 600;\n flex: 1;\n }\n }\n\n .category-description {\n color: var(--mj-text-muted);\n font-size: 0.875rem;\n line-height: 1.5;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .category-stats {\n display: flex;\n gap: 2rem;\n padding: 1rem;\n background: var(--mj-bg-surface);\n border-radius: 0.5rem;\n\n .stat-item {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n\n .stat-value {\n font-size: 1.5rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n\n &.active {\n color: var(--mj-status-success);\n }\n }\n\n .stat-label {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n font-weight: 600;\n }\n }\n }\n\n .category-footer {\n display: flex;\n justify-content: flex-end;\n margin-top: auto;\n }\n }\n }\n\n .loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(255, 255, 255, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n }\n }\n\n @media (max-width: 768px) {\n .categories-list-view {\n padding: 1rem;\n\n .list-header {\n flex-direction: column;\n align-items: stretch;\n\n .search-container {\n min-width: unset;\n }\n }\n\n .categories-grid {\n grid-template-columns: 1fr;\n gap: 1rem;\n }\n }\n }\n `]\n})\nexport class CategoriesListViewComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n @Output() OpenEntityRecord = new EventEmitter<{entityName: string; recordId: string}>();\n\n /**\n * @deprecated Use {@link OpenEntityRecord}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (openEntityRecord) keeps working. Must stay AFTER OpenEntityRecord: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() openEntityRecord = this.OpenEntityRecord;\n\n public isLoading = true;\n public Categories: CategoryWithStats[] = [];\n\n /** @deprecated Use {@link Categories}. */\n public get categories(): CategoryWithStats[] {\n return this.Categories;\n }\n /** @deprecated Use {@link Categories}. */\n public set categories(value: CategoryWithStats[]) {\n this.Categories = value;\n }\n public FilteredCategories: CategoryWithStats[] = [];\n\n /** @deprecated Use {@link FilteredCategories}. */\n public get filteredCategories(): CategoryWithStats[] {\n return this.FilteredCategories;\n }\n /** @deprecated Use {@link FilteredCategories}. */\n public set filteredCategories(value: CategoryWithStats[]) {\n this.FilteredCategories = value;\n }\n public SearchTerm$ = new BehaviorSubject<string>('');\n\n /** @deprecated Use {@link SearchTerm$}. */\n public get searchTerm$() {\n return this.SearchTerm$;\n }\n /** @deprecated Use {@link SearchTerm$}. */\n public set searchTerm$(value) {\n this.SearchTerm$ = value;\n }\n\n private destroy$ = new Subject<void>();\n\n constructor() { super(); }\n\n ngOnInit(): void {\n this.setupSearch();\n this.loadData();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private setupSearch(): void {\n this.SearchTerm$.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.applyFilter();\n });\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n console.log('Loading categories data...');\n \n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const [categoriesResult, actionsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Action Categories', \n OrderBy: 'Name' \n },\n {\n EntityName: 'MJ: Actions', \n OrderBy: 'Name'\n }\n ]);\n \n console.log('Categories result:', categoriesResult);\n console.log('Actions result for categories:', actionsResult);\n \n if (!categoriesResult.Success) {\n throw new Error('Failed to load categories: ' + categoriesResult.ErrorMessage);\n }\n \n const categories = (categoriesResult.Results || []) as MJActionCategoryEntity[];\n const actions = (actionsResult.Results || []) as MJActionEntity[];\n \n console.log(`Loaded ${categories.length} categories and ${actions.length} actions`);\n\n // Calculate stats for each category\n this.Categories = categories.map(category => {\n const categoryActions = actions.filter(a => UUIDsEqual(a.CategoryID, category.ID));\n return {\n ...category,\n actionCount: categoryActions.length,\n activeActionCount: categoryActions.filter(a => a.Status === 'Active').length\n } as CategoryWithStats;\n });\n\n this.applyFilter();\n\n } catch (error) {\n console.error('Error loading categories data:', error);\n LogError('Failed to load categories data', undefined, error);\n this.Categories = [];\n this.FilteredCategories = [];\n } finally {\n this.isLoading = false;\n }\n }\n\n private applyFilter(): void {\n const searchTerm = this.SearchTerm$.value.toLowerCase();\n \n if (!searchTerm) {\n this.FilteredCategories = [...this.Categories];\n } else {\n this.FilteredCategories = this.Categories.filter(category => \n category.Name.toLowerCase().includes(searchTerm) ||\n (category.Description || '').toLowerCase().includes(searchTerm)\n );\n }\n }\n\n public OnSearchChange(searchTerm: string): void {\n this.SearchTerm$.next(searchTerm);\n }\n\n /** @deprecated Use {@link OnSearchChange}. */\n public onSearchChange(searchTerm: string): void {\n return this.OnSearchChange(searchTerm);\n }\n\n public OpenCategory(category: MJActionCategoryEntity): void {\n this.OpenEntityRecord.emit({\n entityName: 'MJ: Action Categories',\n recordId: category.ID\n });\n }\n\n /** @deprecated Use {@link OpenCategory}. */\n public openCategory(category: MJActionCategoryEntity): void {\n return this.OpenCategory(category);\n }\n\n public ViewActions(category: MJActionCategoryEntity, event: Event): void {\n event.stopPropagation();\n // This could navigate to the actions list with a pre-applied category filter\n // For now, just open the category\n this.OpenCategory(category);\n }\n\n /** @deprecated Use {@link ViewActions}. */\n public viewActions(category: MJActionCategoryEntity, event: Event): void {\n return this.ViewActions(category, event);\n }\n}"]}
1
+ {"version":3,"file":"categories-list-view.component.js","sourceRoot":"","sources":["../../../src/Actions/components/categories-list-view.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\nimport { RunView, LogError } from '@memberjunction/core';\nimport { MJActionCategoryEntity, MJActionEntity } from '@memberjunction/core-entities';\nimport { Subject, BehaviorSubject } from 'rxjs';\nimport { debounceTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';\nimport { GroupByUUID } from '@memberjunction/global';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n\ninterface CategoryWithStats extends MJActionCategoryEntity {\n actionCount?: number;\n activeActionCount?: number;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-categories-list-view',\n template: `\n <div class=\"categories-list-view\" mjFillContainer>\n <!-- Header with search -->\n <div class=\"list-header\">\n <div class=\"header-title\">\n <h2><i class=\"fa-solid fa-sitemap\"></i> Action Categories</h2>\n <div class=\"results-count\">{{ filteredCategories.length }} of {{ categories.length }} categories</div>\n </div>\n \n <div class=\"search-container\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\" class=\"mj-input\"\n placeholder=\"Search categories...\"\n [value]=\"searchTerm$.value\"\n (input)=\"onSearchChange($any($event.target).value)\" />\n </div>\n </div>\n </div>\n\n <!-- Categories Grid -->\n <div class=\"categories-grid\">\n @if (filteredCategories.length > 0) {\n @for (category of filteredCategories; track category.ID) {\n <div class=\"category-card\" (click)=\"openCategory(category)\">\n <div class=\"category-header\">\n <div class=\"category-icon\">\n <i class=\"fa-solid fa-folder\"></i>\n </div>\n <h3 class=\"category-name\">{{ category.Name }}</h3>\n </div>\n \n @if (category.Description) {\n <div class=\"category-description\">\n {{ category.Description }}\n </div>\n }\n \n <div class=\"category-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{ category.actionCount || 0 }}</span>\n <span class=\"stat-label\">Total Actions</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-value active\">{{ category.activeActionCount || 0 }}</span>\n <span class=\"stat-label\">Active</span>\n </div>\n </div>\n \n <div class=\"category-footer\">\n <button mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"viewActions(category, $event)\">\n <i class=\"fa-solid fa-cogs\"></i> View Actions\n </button>\n </div>\n </div>\n }\n } @else if (!isLoading) {\n <mj-empty-state Variant=\"no-results\" Icon=\"fa-solid fa-sitemap\"\n Title=\"No categories found\"\n Message=\"Try adjusting your search criteria\" />\n }\n </div>\n\n @if (isLoading) {\n <div class=\"loading-overlay\">\n <mj-loading [showText]=\"false\" size=\"large\"></mj-loading>\n </div>\n }\n </div>\n `,\n styles: [`\n .categories-list-view {\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n padding: 1.5rem;\n height: 100%;\n overflow-y: auto;\n\n .list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 1rem;\n\n .header-title {\n display: flex;\n align-items: baseline;\n gap: 1rem;\n\n h2 {\n margin: 0;\n font-size: 1.5rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n\n i {\n color: var(--mj-brand-primary);\n }\n }\n\n .results-count {\n color: var(--mj-text-muted);\n font-size: 0.875rem;\n }\n }\n\n .search-container {\n min-width: 250px;\n \n .search-input-wrapper {\n width: 100%;\n }\n }\n }\n\n .categories-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 1.5rem;\n flex: 1;\n align-content: start;\n\n .category-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 0.75rem;\n padding: 1.5rem;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n border-color: var(--mj-brand-primary);\n }\n\n .category-header {\n display: flex;\n align-items: center;\n gap: 1rem;\n\n .category-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 3rem;\n height: 3rem;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-radius: 0.5rem;\n\n i {\n color: var(--mj-brand-primary);\n font-size: 1.25rem;\n }\n }\n\n .category-name {\n margin: 0;\n font-size: 1.125rem;\n font-weight: 600;\n flex: 1;\n }\n }\n\n .category-description {\n color: var(--mj-text-muted);\n font-size: 0.875rem;\n line-height: 1.5;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .category-stats {\n display: flex;\n gap: 2rem;\n padding: 1rem;\n background: var(--mj-bg-surface);\n border-radius: 0.5rem;\n\n .stat-item {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n\n .stat-value {\n font-size: 1.5rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n\n &.active {\n color: var(--mj-status-success);\n }\n }\n\n .stat-label {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n font-weight: 600;\n }\n }\n }\n\n .category-footer {\n display: flex;\n justify-content: flex-end;\n margin-top: auto;\n }\n }\n }\n\n .loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(255, 255, 255, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n }\n }\n\n @media (max-width: 768px) {\n .categories-list-view {\n padding: 1rem;\n\n .list-header {\n flex-direction: column;\n align-items: stretch;\n\n .search-container {\n min-width: unset;\n }\n }\n\n .categories-grid {\n grid-template-columns: 1fr;\n gap: 1rem;\n }\n }\n }\n `]\n})\nexport class CategoriesListViewComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n @Output() OpenEntityRecord = new EventEmitter<{entityName: string; recordId: string}>();\n\n /**\n * @deprecated Use {@link OpenEntityRecord}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (openEntityRecord) keeps working. Must stay AFTER OpenEntityRecord: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() openEntityRecord = this.OpenEntityRecord;\n\n public isLoading = true;\n public Categories: CategoryWithStats[] = [];\n\n /** @deprecated Use {@link Categories}. */\n public get categories(): CategoryWithStats[] {\n return this.Categories;\n }\n /** @deprecated Use {@link Categories}. */\n public set categories(value: CategoryWithStats[]) {\n this.Categories = value;\n }\n public FilteredCategories: CategoryWithStats[] = [];\n\n /** @deprecated Use {@link FilteredCategories}. */\n public get filteredCategories(): CategoryWithStats[] {\n return this.FilteredCategories;\n }\n /** @deprecated Use {@link FilteredCategories}. */\n public set filteredCategories(value: CategoryWithStats[]) {\n this.FilteredCategories = value;\n }\n public SearchTerm$ = new BehaviorSubject<string>('');\n\n /** @deprecated Use {@link SearchTerm$}. */\n public get searchTerm$() {\n return this.SearchTerm$;\n }\n /** @deprecated Use {@link SearchTerm$}. */\n public set searchTerm$(value) {\n this.SearchTerm$ = value;\n }\n\n private destroy$ = new Subject<void>();\n\n constructor() { super(); }\n\n ngOnInit(): void {\n this.setupSearch();\n this.loadData();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private setupSearch(): void {\n this.SearchTerm$.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.applyFilter();\n });\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n console.log('Loading categories data...');\n \n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const [categoriesResult, actionsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Action Categories', \n OrderBy: 'Name' \n },\n {\n EntityName: 'MJ: Actions', \n OrderBy: 'Name'\n }\n ]);\n \n console.log('Categories result:', categoriesResult);\n console.log('Actions result for categories:', actionsResult);\n \n if (!categoriesResult.Success) {\n throw new Error('Failed to load categories: ' + categoriesResult.ErrorMessage);\n }\n \n const categories = (categoriesResult.Results || []) as MJActionCategoryEntity[];\n const actions = (actionsResult.Results || []) as MJActionEntity[];\n \n console.log(`Loaded ${categories.length} categories and ${actions.length} actions`);\n\n // Calculate stats for each category\n const actionsByCategory = GroupByUUID(actions, a => a.CategoryID);\n this.Categories = categories.map(category => {\n const categoryActions = actionsByCategory.Get(category.ID) ?? [];\n return {\n ...category,\n actionCount: categoryActions.length,\n activeActionCount: categoryActions.filter(a => a.Status === 'Active').length\n } as CategoryWithStats;\n });\n\n this.applyFilter();\n\n } catch (error) {\n console.error('Error loading categories data:', error);\n LogError('Failed to load categories data', undefined, error);\n this.Categories = [];\n this.FilteredCategories = [];\n } finally {\n this.isLoading = false;\n }\n }\n\n private applyFilter(): void {\n const searchTerm = this.SearchTerm$.value.toLowerCase();\n \n if (!searchTerm) {\n this.FilteredCategories = [...this.Categories];\n } else {\n this.FilteredCategories = this.Categories.filter(category => \n category.Name.toLowerCase().includes(searchTerm) ||\n (category.Description || '').toLowerCase().includes(searchTerm)\n );\n }\n }\n\n public OnSearchChange(searchTerm: string): void {\n this.SearchTerm$.next(searchTerm);\n }\n\n /** @deprecated Use {@link OnSearchChange}. */\n public onSearchChange(searchTerm: string): void {\n return this.OnSearchChange(searchTerm);\n }\n\n public OpenCategory(category: MJActionCategoryEntity): void {\n this.OpenEntityRecord.emit({\n entityName: 'MJ: Action Categories',\n recordId: category.ID\n });\n }\n\n /** @deprecated Use {@link OpenCategory}. */\n public openCategory(category: MJActionCategoryEntity): void {\n return this.OpenCategory(category);\n }\n\n public ViewActions(category: MJActionCategoryEntity, event: Event): void {\n event.stopPropagation();\n // This could navigate to the actions list with a pre-applied category filter\n // For now, just open the category\n this.OpenCategory(category);\n }\n\n /** @deprecated Use {@link ViewActions}. */\n public viewActions(category: MJActionCategoryEntity, event: Event): void {\n return this.ViewActions(category, event);\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"component-studio-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/ComponentStudio/component-studio-dashboard.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component-studio-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/ComponentStudio/component-studio-dashboard.component.ts"],"names":[],"mappings":"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"}
@@ -1248,6 +1248,7 @@ let ComponentStudioDashboardComponent = class ComponentStudioDashboardComponent
1248
1248
  version.ArtifactID = artifact.ID;
1249
1249
  version.UserID = this.metadata.CurrentUser.ID;
1250
1250
  const rv = RunView.FromMetadataProvider(this.ProviderToUse);
1251
+ // conversation-scope: artifact-wide read, no conversation path applies
1251
1252
  const versionsResult = await rv.RunView({
1252
1253
  EntityName: 'MJ: Artifact Versions',
1253
1254
  ExtraFilter: `ArtifactID = '${artifact.ID}'`,