@memberjunction/ng-dashboards 5.22.0 → 5.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/README.md +51 -0
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +364 -362
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/agents/agent-editor.component.js +2 -2
  6. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +947 -64
  7. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  8. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +7645 -430
  9. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  10. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +285 -6
  11. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  12. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +2454 -277
  13. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  14. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  15. package/dist/AI/components/execution-monitoring.component.js +191 -197
  16. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  17. package/dist/AI/components/models/model-management.component.js +9 -8
  18. package/dist/AI/components/models/model-management.component.js.map +1 -1
  19. package/dist/AI/components/prompts/prompt-management.component.js +305 -299
  20. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  21. package/dist/AI/components/system/system-configuration.component.js +319 -313
  22. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  23. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +20 -2
  24. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  25. package/dist/AI/components/vectors/vector-management-resource.component.js +419 -232
  26. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  27. package/dist/APIKeys/api-applications-panel.component.js +10 -12
  28. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  29. package/dist/APIKeys/api-key-create-dialog.component.js +13 -19
  30. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  31. package/dist/APIKeys/api-key-edit-panel.component.js +12 -14
  32. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  33. package/dist/APIKeys/api-scopes-panel.component.js +61 -68
  34. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  35. package/dist/APIKeys/api-usage-panel.component.js +10 -11
  36. package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
  37. package/dist/Actions/components/actions-list-view.component.js +82 -96
  38. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  39. package/dist/Actions/components/actions-overview.component.js +130 -134
  40. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  41. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  42. package/dist/Actions/components/categories-list-view.component.js +40 -46
  43. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  44. package/dist/Actions/components/code-management.component.js +2 -2
  45. package/dist/Actions/components/code-management.component.js.map +1 -1
  46. package/dist/Actions/components/entity-integration.component.js +2 -2
  47. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  48. package/dist/Actions/components/execution-monitoring.component.js +127 -132
  49. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  50. package/dist/Actions/components/executions-list-view.component.js +2 -2
  51. package/dist/Actions/components/executions-list-view.component.js.map +1 -1
  52. package/dist/Actions/components/explorer/action-card.component.js +11 -17
  53. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  54. package/dist/Actions/components/explorer/action-explorer.component.js +5 -11
  55. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  56. package/dist/Actions/components/explorer/action-list-item.component.js +8 -10
  57. package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
  58. package/dist/Actions/components/explorer/action-toolbar.component.js +112 -133
  59. package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
  60. package/dist/Actions/components/explorer/action-tree-panel.component.js +63 -83
  61. package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
  62. package/dist/Actions/components/explorer/new-action-panel.component.js +17 -21
  63. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  64. package/dist/Actions/components/explorer/new-category-panel.component.js +17 -21
  65. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  66. package/dist/Actions/components/scheduled-actions.component.js +2 -2
  67. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  68. package/dist/Actions/components/security-permissions.component.js +2 -2
  69. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  70. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +13 -5
  71. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  72. package/dist/ComponentStudio/component-studio-dashboard.component.js +168 -145
  73. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  74. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +4 -5
  75. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  76. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +197 -200
  77. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  78. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +5 -7
  79. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  80. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +142 -148
  81. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  82. package/dist/ComponentStudio/components/browser/component-browser.component.js +153 -166
  83. package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
  84. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +15 -20
  85. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
  86. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +16 -21
  87. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  88. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +18 -23
  89. package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
  90. package/dist/ComponentStudio/components/editors/spec-editor.component.js +25 -30
  91. package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
  92. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +10 -11
  93. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
  94. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
  95. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +24 -35
  96. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
  97. package/dist/ComponentStudio/components/text-import-dialog.component.js +15 -17
  98. package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
  99. package/dist/Credentials/components/credentials-categories-resource.component.js +7 -6
  100. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  101. package/dist/Credentials/components/credentials-list-resource.component.js +6 -5
  102. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  103. package/dist/Credentials/components/credentials-types-resource.component.js +7 -6
  104. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  105. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -9
  106. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  107. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  108. package/dist/DataExplorer/data-explorer-dashboard.component.js +17 -17
  109. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  110. package/dist/Home/home-dashboard.component.js +4 -4
  111. package/dist/Home/home-dashboard.component.js.map +1 -1
  112. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  113. package/dist/Integration/components/activity/activity.component.js +1 -0
  114. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  115. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  116. package/dist/Integration/components/connections/connections.component.js +5 -4
  117. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  118. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
  119. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +247 -259
  120. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  121. package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
  122. package/dist/Integration/components/overview/overview.component.js +1 -0
  123. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  124. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  125. package/dist/Integration/components/pipelines/pipelines.component.js +1 -0
  126. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  127. package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
  128. package/dist/Integration/components/schedules/schedules.component.js +1 -0
  129. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  130. package/dist/Integration/components/widgets/integration-card.component.js +7 -9
  131. package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
  132. package/dist/Integration/integration.module.d.ts +6 -10
  133. package/dist/Integration/integration.module.d.ts.map +1 -1
  134. package/dist/Integration/integration.module.js +12 -20
  135. package/dist/Integration/integration.module.js.map +1 -1
  136. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +411 -0
  137. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -0
  138. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +4266 -0
  139. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -0
  140. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +140 -0
  141. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -0
  142. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +780 -0
  143. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -0
  144. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +8 -2
  145. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  146. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +246 -195
  147. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  148. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +75 -0
  149. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -0
  150. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +601 -0
  151. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -0
  152. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts +93 -12
  153. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts.map +1 -1
  154. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js +637 -107
  155. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js.map +1 -1
  156. package/dist/KnowledgeHub/index.d.ts +3 -0
  157. package/dist/KnowledgeHub/index.d.ts.map +1 -1
  158. package/dist/KnowledgeHub/index.js +3 -0
  159. package/dist/KnowledgeHub/index.js.map +1 -1
  160. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  161. package/dist/Lists/components/lists-browse-resource.component.js +9 -7
  162. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  163. package/dist/Lists/components/lists-my-lists-resource.component.js +5 -4
  164. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  165. package/dist/Lists/components/lists-operations-resource.component.js +10 -9
  166. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  167. package/dist/MCP/components/mcp-connection-dialog.component.js +141 -132
  168. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  169. package/dist/MCP/components/mcp-log-detail-panel.component.js +4 -4
  170. package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
  171. package/dist/MCP/components/mcp-server-dialog.component.js +141 -128
  172. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
  173. package/dist/MCP/components/mcp-test-tool-dialog.component.js +210 -218
  174. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  175. package/dist/MCP/mcp-dashboard.component.js +2 -2
  176. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  177. package/dist/MCP/mcp.module.d.ts +6 -9
  178. package/dist/MCP/mcp.module.d.ts.map +1 -1
  179. package/dist/MCP/mcp.module.js +20 -22
  180. package/dist/MCP/mcp.module.js.map +1 -1
  181. package/dist/Scheduling/components/scheduling-activity.component.js +5 -4
  182. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  183. package/dist/Scheduling/components/scheduling-jobs.component.js +6 -5
  184. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  185. package/dist/Scheduling/components/scheduling-overview.component.js +93 -92
  186. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  187. package/dist/Testing/testing-dashboard.component.js +9 -10
  188. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  189. package/dist/__tests__/analytics-resource.test.d.ts +2 -0
  190. package/dist/__tests__/analytics-resource.test.d.ts.map +1 -0
  191. package/dist/__tests__/analytics-resource.test.js +181 -0
  192. package/dist/__tests__/analytics-resource.test.js.map +1 -0
  193. package/dist/__tests__/scheduling.test.d.ts +2 -0
  194. package/dist/__tests__/scheduling.test.d.ts.map +1 -0
  195. package/dist/__tests__/scheduling.test.js +205 -0
  196. package/dist/__tests__/scheduling.test.js.map +1 -0
  197. package/dist/actions-dashboards.module.d.ts +8 -13
  198. package/dist/actions-dashboards.module.d.ts.map +1 -1
  199. package/dist/actions-dashboards.module.js +6 -27
  200. package/dist/actions-dashboards.module.js.map +1 -1
  201. package/dist/ai-dashboards.module.d.ts +20 -20
  202. package/dist/ai-dashboards.module.d.ts.map +1 -1
  203. package/dist/ai-dashboards.module.js +43 -44
  204. package/dist/ai-dashboards.module.js.map +1 -1
  205. package/dist/communication-dashboards.module.d.ts +4 -8
  206. package/dist/communication-dashboards.module.d.ts.map +1 -1
  207. package/dist/communication-dashboards.module.js +0 -19
  208. package/dist/communication-dashboards.module.js.map +1 -1
  209. package/dist/component-studio-dashboards.module.d.ts +7 -11
  210. package/dist/component-studio-dashboards.module.d.ts.map +1 -1
  211. package/dist/component-studio-dashboards.module.js +22 -34
  212. package/dist/component-studio-dashboards.module.js.map +1 -1
  213. package/dist/core-dashboards.module.d.ts +12 -18
  214. package/dist/core-dashboards.module.d.ts.map +1 -1
  215. package/dist/core-dashboards.module.js +15 -31
  216. package/dist/core-dashboards.module.js.map +1 -1
  217. package/dist/credentials-dashboards.module.d.ts +5 -8
  218. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  219. package/dist/credentials-dashboards.module.js +3 -19
  220. package/dist/credentials-dashboards.module.js.map +1 -1
  221. package/dist/data-explorer-dashboards.module.d.ts +7 -13
  222. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  223. package/dist/data-explorer-dashboards.module.js +0 -27
  224. package/dist/data-explorer-dashboards.module.js.map +1 -1
  225. package/dist/lists-dashboards.module.d.ts +5 -8
  226. package/dist/lists-dashboards.module.d.ts.map +1 -1
  227. package/dist/lists-dashboards.module.js +3 -19
  228. package/dist/lists-dashboards.module.js.map +1 -1
  229. package/dist/public-api.d.ts +2 -0
  230. package/dist/public-api.d.ts.map +1 -1
  231. package/dist/public-api.js +2 -0
  232. package/dist/public-api.js.map +1 -1
  233. package/dist/scheduling-dashboards.module.d.ts +6 -10
  234. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  235. package/dist/scheduling-dashboards.module.js +3 -23
  236. package/dist/scheduling-dashboards.module.js.map +1 -1
  237. package/dist/shared/entity-field-display.d.ts +44 -0
  238. package/dist/shared/entity-field-display.d.ts.map +1 -0
  239. package/dist/shared/entity-field-display.js +118 -0
  240. package/dist/shared/entity-field-display.js.map +1 -0
  241. package/dist/testing-dashboards.module.d.ts +7 -13
  242. package/dist/testing-dashboards.module.d.ts.map +1 -1
  243. package/dist/testing-dashboards.module.js +0 -27
  244. package/dist/testing-dashboards.module.js.map +1 -1
  245. package/package.json +48 -55
@@ -1 +1 @@
1
- {"version":3,"file":"actions-list-view.component.js","sourceRoot":"","sources":["../../../src/Actions/components/actions-list-view.component.ts","../../../src/Actions/components/actions-list-view.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\nimport { RunView, LogError } from '@memberjunction/core';\nimport { MJActionEntity, MJActionCategoryEntity } from '@memberjunction/core-entities';\nimport { Subject, BehaviorSubject, combineLatest } from 'rxjs';\nimport { debounceTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';\n\ninterface CategoryTreeNode {\n category: MJActionCategoryEntity;\n children: CategoryTreeNode[];\n level: number;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-actions-list-view',\n templateUrl: './actions-list-view.component.html',\n styleUrls: ['./actions-list-view.component.css']\n})\nexport class ActionsListViewComponent implements OnInit, OnDestroy {\n @Output() openEntityRecord = new EventEmitter<{entityName: string; recordId: string}>();\n\n public isLoading = true;\n public actions: MJActionEntity[] = [];\n public filteredActions: MJActionEntity[] = [];\n public categories: Map<string, MJActionCategoryEntity> = new Map();\n public categoryTree: CategoryTreeNode[] = [];\n public categoryDescendants: Map<string, Set<string>> = new Map();\n\n public searchTerm$ = new BehaviorSubject<string>('');\n public selectedStatus$ = new BehaviorSubject<string>('all');\n public selectedType$ = new BehaviorSubject<string>('all');\n public selectedCategory$ = new BehaviorSubject<string>('all');\n public expandedCategories: Set<string> = new Set();\n\n public statusOptions = [\n { text: 'All Statuses', value: 'all' },\n { text: 'Active', value: 'Active' },\n { text: 'Pending', value: 'Pending' },\n { text: 'Disabled', value: 'Disabled' }\n ];\n\n public typeOptions = [\n { text: 'All Types', value: 'all' },\n { text: 'AI Generated', value: 'Generated' },\n { text: 'Custom', value: 'Custom' }\n ];\n\n public categoryOptions: Array<{text: string; value: string}> = [\n { text: 'All Categories', value: 'all' }\n ];\n\n private destroy$ = new Subject<void>();\n\n constructor() {}\n\n ngOnInit(): void {\n this.setupFilters();\n this.loadData();\n }\n\n ngOnDestroy(): void {\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 this.selectedCategory$.pipe(distinctUntilChanged())\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.applyFilters();\n });\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n \n const rv = new RunView();\n \n const [actionsResult, categoriesResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Actions',\n OrderBy: 'Name'\n },\n {\n EntityName: 'MJ: Action Categories',\n OrderBy: 'Name'\n }\n ]);\n \n if (!actionsResult.Success || !categoriesResult.Success) {\n const errors = [];\n if (!actionsResult.Success) \n errors.push('Actions: ' + actionsResult.ErrorMessage);\n if (!categoriesResult.Success) \n errors.push('Categories: ' + categoriesResult.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 \n this.actions = actions;\n this.populateCategoriesMap(categories);\n this.buildCategoryOptions(categories);\n this.applyFilters();\n\n } catch (error) {\n console.error('Error loading actions list data:', error);\n LogError('Failed to load actions list data', undefined, error);\n } finally {\n this.isLoading = false;\n }\n }\n\n\n private populateCategoriesMap(categories: MJActionCategoryEntity[]): void {\n this.categories.clear();\n categories.forEach(category => {\n this.categories.set(category.ID, category);\n });\n \n // Build the category tree\n this.buildCategoryTree(categories);\n \n // Build descendant mapping for efficient filtering\n this.buildDescendantMapping(categories);\n }\n\n private buildCategoryOptions(categories: MJActionCategoryEntity[]): void {\n this.categoryOptions = [\n { text: 'All Categories', value: 'all' },\n ...categories.map(category => ({\n text: category.Name,\n value: category.ID\n }))\n ];\n }\n\n private buildCategoryTree(categories: MJActionCategoryEntity[]): void {\n const categoryMap = new Map<string, CategoryTreeNode>();\n \n // First pass: create all nodes\n categories.forEach(category => {\n categoryMap.set(category.ID, {\n category,\n children: [],\n level: 0\n });\n });\n \n // Second pass: build tree structure\n const rootNodes: CategoryTreeNode[] = [];\n categoryMap.forEach(node => {\n const parentId = node.category.ParentID;\n if (parentId && categoryMap.has(parentId)) {\n const parent = categoryMap.get(parentId)!;\n parent.children.push(node);\n node.level = parent.level + 1;\n } else {\n rootNodes.push(node);\n }\n });\n \n // Sort children at each level by name\n const sortChildren = (nodes: CategoryTreeNode[]) => {\n nodes.sort((a, b) => a.category.Name.localeCompare(b.category.Name));\n nodes.forEach(node => sortChildren(node.children));\n };\n sortChildren(rootNodes);\n \n this.categoryTree = rootNodes;\n }\n\n private buildDescendantMapping(categories: MJActionCategoryEntity[]): void {\n this.categoryDescendants.clear();\n \n // Initialize each category with itself\n categories.forEach(category => {\n this.categoryDescendants.set(category.ID, new Set([category.ID]));\n });\n \n // Build descendant sets\n const addDescendants = (categoryId: string, descendantId: string) => {\n const descendants = this.categoryDescendants.get(categoryId);\n if (descendants) {\n descendants.add(descendantId);\n }\n };\n \n categories.forEach(category => {\n if (category.ParentID) {\n // Add this category as a descendant of all its ancestors\n let currentParentId: string | null = category.ParentID;\n while (currentParentId) {\n addDescendants(currentParentId, category.ID);\n const parent = this.categories.get(currentParentId);\n currentParentId = parent?.ParentID || null;\n }\n }\n });\n }\n\n private applyFilters(): void {\n let filtered = [...this.actions];\n\n // Apply search filter\n const searchTerm = this.searchTerm$.value.toLowerCase();\n if (searchTerm) {\n filtered = filtered.filter(action => \n action.Name.toLowerCase().includes(searchTerm) ||\n (action.Description || '').toLowerCase().includes(searchTerm)\n );\n }\n\n // Apply status filter\n const status = this.selectedStatus$.value;\n if (status !== 'all') {\n filtered = filtered.filter(action => action.Status === status);\n }\n\n // Apply type filter\n const type = this.selectedType$.value;\n if (type !== 'all') {\n filtered = filtered.filter(action => action.Type === type);\n }\n\n // Apply category filter (includes descendants)\n const categoryId = this.selectedCategory$.value;\n if (categoryId !== 'all') {\n const descendantIds = this.categoryDescendants.get(categoryId);\n if (descendantIds) {\n // Filter actions that belong to the selected category or any of its descendants\n filtered = filtered.filter(action => \n action.CategoryID && descendantIds.has(action.CategoryID)\n );\n } else {\n console.warn(`Category ID ${categoryId} not found in category hierarchy`);\n filtered = [];\n }\n }\n\n this.filteredActions = filtered;\n }\n\n public onSearchChange(searchTerm: string): void {\n this.searchTerm$.next(searchTerm);\n }\n\n public onStatusFilterChange(status: string): void {\n this.selectedStatus$.next(status);\n }\n\n public onTypeFilterChange(type: string): void {\n this.selectedType$.next(type);\n }\n\n public onCategoryFilterChange(categoryId: string): void {\n this.selectedCategory$.next(categoryId);\n }\n\n public openAction(action: MJActionEntity): void {\n this.openEntityRecord.emit({\n entityName: 'MJ: Actions',\n recordId: action.ID\n });\n }\n\n public getCategoryName(categoryId: string | null): string {\n if (!categoryId) return 'No Category';\n return this.categories.get(categoryId)?.Name || 'Unknown Category';\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 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 /**\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 // Tree view methods\n public toggleCategoryExpanded(categoryId: string): void {\n if (this.expandedCategories.has(categoryId)) {\n this.expandedCategories.delete(categoryId);\n } else {\n this.expandedCategories.add(categoryId);\n }\n }\n\n public isCategoryExpanded(categoryId: string): boolean {\n return this.expandedCategories.has(categoryId);\n }\n\n public selectCategory(categoryId: string): void {\n this.selectedCategory$.next(categoryId);\n }\n\n public getCategoryActionCount(categoryId: string): number {\n const descendantIds = this.categoryDescendants.get(categoryId);\n if (!descendantIds) return 0;\n \n return this.actions.filter(action => \n action.CategoryID && descendantIds.has(action.CategoryID)\n ).length;\n }\n\n public showCategoryTree = false;\n\n public toggleCategoryTree(): void {\n this.showCategoryTree = !this.showCategoryTree;\n }\n}","<div class=\"actions-list-view\" >\n <!-- Header with filters -->\n <div class=\"list-header\">\n <div class=\"header-title\">\n <h2><i class=\"fa-solid fa-cogs\"></i> Actions</h2>\n <div class=\"results-count\">{{ filteredActions.length }} of {{ actions.length }} actions</div>\n </div>\n \n <div class=\"filters-row\">\n <div class=\"search-container\">\n <kendo-textbox \n placeholder=\"Search actions...\" \n [value]=\"searchTerm$.value\"\n (valueChange)=\"onSearchChange($event)\">\n <ng-template kendoTextBoxPrefixTemplate>\n <i class=\"fa-solid fa-search\"></i>\n </ng-template>\n </kendo-textbox>\n </div>\n \n <div class=\"filter-group\">\n <kendo-dropdownlist \n [data]=\"statusOptions\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n [value]=\"selectedStatus$.value\"\n (valueChange)=\"onStatusFilterChange($event)\">\n </kendo-dropdownlist>\n \n <kendo-dropdownlist \n [data]=\"typeOptions\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n [value]=\"selectedType$.value\"\n (valueChange)=\"onTypeFilterChange($event)\">\n </kendo-dropdownlist>\n \n <button kendoButton\n [fillMode]=\"'outline'\"\n (click)=\"toggleCategoryTree()\"\n class=\"category-filter-button\">\n <i class=\"fa-solid fa-folder-tree\"></i>\n @if (selectedCategory$.value === 'all') {\n All Categories\n } @else {\n {{ getCategoryName(selectedCategory$.value) }}\n }\n <span class=\"badge\">{{ getCategoryActionCount(selectedCategory$.value) }}</span>\n </button>\n </div>\n </div>\n </div>\n \n <!-- Category Tree View Panel -->\n @if (showCategoryTree) {\n <div class=\"category-tree-panel\">\n <div class=\"tree-header\">\n <h3>Select Category</h3>\n <button kendoButton\n [fillMode]=\"'flat'\"\n [size]=\"'small'\"\n (click)=\"toggleCategoryTree()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n \n <div class=\"tree-actions\">\n <button kendoButton\n [fillMode]=\"'flat'\"\n [size]=\"'small'\"\n (click)=\"selectCategory('all')\"\n [class.selected]=\"selectedCategory$.value === 'all'\">\n <i class=\"fa-solid fa-folder-open\"></i>\n All Categories\n <span class=\"badge\">{{ actions.length }}</span>\n </button>\n </div>\n \n <div class=\"tree-content\">\n <ng-container *ngTemplateOutlet=\"categoryTreeTemplate; context: { nodes: categoryTree }\"></ng-container>\n </div>\n \n <ng-template #categoryTreeTemplate let-nodes=\"nodes\">\n @for (node of nodes; track node.category.ID) {\n <div class=\"tree-node\" [style.padding-left.px]=\"node.level * 20\">\n <button kendoButton\n [fillMode]=\"'flat'\"\n [size]=\"'small'\"\n class=\"tree-node-button\"\n [class.selected]=\"selectedCategory$.value === node.category.ID\"\n (click)=\"selectCategory(node.category.ID)\">\n \n @if (node.children.length > 0) {\n <button kendoButton\n [fillMode]=\"'flat'\"\n [size]=\"'small'\"\n class=\"expand-button\"\n (click)=\"toggleCategoryExpanded(node.category.ID); $event.stopPropagation()\">\n @if (isCategoryExpanded(node.category.ID)) {\n <i class=\"fa-solid fa-chevron-down\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-right\"></i>\n }\n </button>\n } @else {\n <span class=\"no-expand\"></span>\n }\n \n <i class=\"fa-solid fa-folder\"></i>\n {{ node.category.Name }}\n <span class=\"badge\">{{ getCategoryActionCount(node.category.ID) }}</span>\n </button>\n \n @if (node.children.length > 0 && isCategoryExpanded(node.category.ID)) {\n <ng-container *ngTemplateOutlet=\"categoryTreeTemplate; context: { nodes: node.children }\"></ng-container>\n }\n </div>\n }\n </ng-template>\n </div>\n }\n\n <!-- Actions List -->\n <div class=\"actions-list\">\n @if (filteredActions.length > 0) {\n @for (action of filteredActions; track action.ID) {\n <div class=\"action-card\" (click)=\"openAction(action)\">\n <div class=\"action-icon\">\n <i [class]=\"getActionIcon(action)\"></i>\n </div>\n \n <div class=\"action-main\">\n <div class=\"action-header\">\n <h3 class=\"action-name\">{{ action.Name }}</h3>\n <div class=\"action-badges\">\n <kendo-chip \n [themeColor]=\"getStatusColor(action.Status)\"\n [size]=\"'small'\">\n {{ action.Status }}\n </kendo-chip>\n @if (action.Type === 'Generated') {\n <kendo-chip \n themeColor=\"info\"\n [size]=\"'small'\">\n <i class=\"fa-solid fa-robot\"></i> AI Generated\n </kendo-chip>\n }\n </div>\n </div>\n \n <div class=\"action-description\">\n {{ action.Description || 'No description available' }}\n </div>\n \n <div class=\"action-details\">\n <div class=\"detail-item\">\n <i class=\"fa-solid fa-folder\"></i>\n <span>{{ getCategoryName(action.CategoryID) }}</span>\n </div>\n @if (action.__mj_UpdatedAt) {\n <div class=\"detail-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>Updated {{ action.__mj_UpdatedAt | date:'MMM d, yyyy' }}</span>\n </div>\n }\n @if (action.CodeApprovalStatus && action.Type === 'Generated') {\n <div class=\"detail-item\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>{{ action.CodeApprovalStatus }}</span>\n </div>\n }\n </div>\n </div>\n \n <div class=\"action-actions\">\n <button kendoButton \n [fillMode]=\"'flat'\"\n (click)=\"$event.stopPropagation()\">\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </button>\n </div>\n </div>\n }\n } @else if (!isLoading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-search\"></i>\n <h3>No actions found</h3>\n <p>Try adjusting your search or filter criteria</p>\n </div>\n }\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>"]}
1
+ {"version":3,"file":"actions-list-view.component.js","sourceRoot":"","sources":["../../../src/Actions/components/actions-list-view.component.ts","../../../src/Actions/components/actions-list-view.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\nimport { RunView, LogError } from '@memberjunction/core';\nimport { MJActionEntity, MJActionCategoryEntity } from '@memberjunction/core-entities';\nimport { Subject, BehaviorSubject, combineLatest } from 'rxjs';\nimport { debounceTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';\n\ninterface CategoryTreeNode {\n category: MJActionCategoryEntity;\n children: CategoryTreeNode[];\n level: number;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-actions-list-view',\n templateUrl: './actions-list-view.component.html',\n styleUrls: ['./actions-list-view.component.css']\n})\nexport class ActionsListViewComponent implements OnInit, OnDestroy {\n @Output() openEntityRecord = new EventEmitter<{entityName: string; recordId: string}>();\n\n public isLoading = true;\n public actions: MJActionEntity[] = [];\n public filteredActions: MJActionEntity[] = [];\n public categories: Map<string, MJActionCategoryEntity> = new Map();\n public categoryTree: CategoryTreeNode[] = [];\n public categoryDescendants: Map<string, Set<string>> = new Map();\n\n public searchTerm$ = new BehaviorSubject<string>('');\n public selectedStatus$ = new BehaviorSubject<string>('all');\n public selectedType$ = new BehaviorSubject<string>('all');\n public selectedCategory$ = new BehaviorSubject<string>('all');\n public expandedCategories: Set<string> = new Set();\n\n public statusOptions = [\n { text: 'All Statuses', value: 'all' },\n { text: 'Active', value: 'Active' },\n { text: 'Pending', value: 'Pending' },\n { text: 'Disabled', value: 'Disabled' }\n ];\n\n public typeOptions = [\n { text: 'All Types', value: 'all' },\n { text: 'AI Generated', value: 'Generated' },\n { text: 'Custom', value: 'Custom' }\n ];\n\n public categoryOptions: Array<{text: string; value: string}> = [\n { text: 'All Categories', value: 'all' }\n ];\n\n private destroy$ = new Subject<void>();\n\n constructor() {}\n\n ngOnInit(): void {\n this.setupFilters();\n this.loadData();\n }\n\n ngOnDestroy(): void {\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 this.selectedCategory$.pipe(distinctUntilChanged())\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.applyFilters();\n });\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n \n const rv = new RunView();\n \n const [actionsResult, categoriesResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Actions',\n OrderBy: 'Name'\n },\n {\n EntityName: 'MJ: Action Categories',\n OrderBy: 'Name'\n }\n ]);\n \n if (!actionsResult.Success || !categoriesResult.Success) {\n const errors = [];\n if (!actionsResult.Success) \n errors.push('Actions: ' + actionsResult.ErrorMessage);\n if (!categoriesResult.Success) \n errors.push('Categories: ' + categoriesResult.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 \n this.actions = actions;\n this.populateCategoriesMap(categories);\n this.buildCategoryOptions(categories);\n this.applyFilters();\n\n } catch (error) {\n console.error('Error loading actions list data:', error);\n LogError('Failed to load actions list data', undefined, error);\n } finally {\n this.isLoading = false;\n }\n }\n\n\n private populateCategoriesMap(categories: MJActionCategoryEntity[]): void {\n this.categories.clear();\n categories.forEach(category => {\n this.categories.set(category.ID, category);\n });\n \n // Build the category tree\n this.buildCategoryTree(categories);\n \n // Build descendant mapping for efficient filtering\n this.buildDescendantMapping(categories);\n }\n\n private buildCategoryOptions(categories: MJActionCategoryEntity[]): void {\n this.categoryOptions = [\n { text: 'All Categories', value: 'all' },\n ...categories.map(category => ({\n text: category.Name,\n value: category.ID\n }))\n ];\n }\n\n private buildCategoryTree(categories: MJActionCategoryEntity[]): void {\n const categoryMap = new Map<string, CategoryTreeNode>();\n \n // First pass: create all nodes\n categories.forEach(category => {\n categoryMap.set(category.ID, {\n category,\n children: [],\n level: 0\n });\n });\n \n // Second pass: build tree structure\n const rootNodes: CategoryTreeNode[] = [];\n categoryMap.forEach(node => {\n const parentId = node.category.ParentID;\n if (parentId && categoryMap.has(parentId)) {\n const parent = categoryMap.get(parentId)!;\n parent.children.push(node);\n node.level = parent.level + 1;\n } else {\n rootNodes.push(node);\n }\n });\n \n // Sort children at each level by name\n const sortChildren = (nodes: CategoryTreeNode[]) => {\n nodes.sort((a, b) => a.category.Name.localeCompare(b.category.Name));\n nodes.forEach(node => sortChildren(node.children));\n };\n sortChildren(rootNodes);\n \n this.categoryTree = rootNodes;\n }\n\n private buildDescendantMapping(categories: MJActionCategoryEntity[]): void {\n this.categoryDescendants.clear();\n \n // Initialize each category with itself\n categories.forEach(category => {\n this.categoryDescendants.set(category.ID, new Set([category.ID]));\n });\n \n // Build descendant sets\n const addDescendants = (categoryId: string, descendantId: string) => {\n const descendants = this.categoryDescendants.get(categoryId);\n if (descendants) {\n descendants.add(descendantId);\n }\n };\n \n categories.forEach(category => {\n if (category.ParentID) {\n // Add this category as a descendant of all its ancestors\n let currentParentId: string | null = category.ParentID;\n while (currentParentId) {\n addDescendants(currentParentId, category.ID);\n const parent = this.categories.get(currentParentId);\n currentParentId = parent?.ParentID || null;\n }\n }\n });\n }\n\n private applyFilters(): void {\n let filtered = [...this.actions];\n\n // Apply search filter\n const searchTerm = this.searchTerm$.value.toLowerCase();\n if (searchTerm) {\n filtered = filtered.filter(action => \n action.Name.toLowerCase().includes(searchTerm) ||\n (action.Description || '').toLowerCase().includes(searchTerm)\n );\n }\n\n // Apply status filter\n const status = this.selectedStatus$.value;\n if (status !== 'all') {\n filtered = filtered.filter(action => action.Status === status);\n }\n\n // Apply type filter\n const type = this.selectedType$.value;\n if (type !== 'all') {\n filtered = filtered.filter(action => action.Type === type);\n }\n\n // Apply category filter (includes descendants)\n const categoryId = this.selectedCategory$.value;\n if (categoryId !== 'all') {\n const descendantIds = this.categoryDescendants.get(categoryId);\n if (descendantIds) {\n // Filter actions that belong to the selected category or any of its descendants\n filtered = filtered.filter(action => \n action.CategoryID && descendantIds.has(action.CategoryID)\n );\n } else {\n console.warn(`Category ID ${categoryId} not found in category hierarchy`);\n filtered = [];\n }\n }\n\n this.filteredActions = filtered;\n }\n\n public onSearchChange(searchTerm: string): void {\n this.searchTerm$.next(searchTerm);\n }\n\n public onStatusFilterChange(status: string): void {\n this.selectedStatus$.next(status);\n }\n\n public onTypeFilterChange(type: string): void {\n this.selectedType$.next(type);\n }\n\n public onCategoryFilterChange(categoryId: string): void {\n this.selectedCategory$.next(categoryId);\n }\n\n public openAction(action: MJActionEntity): void {\n this.openEntityRecord.emit({\n entityName: 'MJ: Actions',\n recordId: action.ID\n });\n }\n\n public getCategoryName(categoryId: string | null): string {\n if (!categoryId) return 'No Category';\n return this.categories.get(categoryId)?.Name || 'Unknown Category';\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 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 /**\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 // Tree view methods\n public toggleCategoryExpanded(categoryId: string): void {\n if (this.expandedCategories.has(categoryId)) {\n this.expandedCategories.delete(categoryId);\n } else {\n this.expandedCategories.add(categoryId);\n }\n }\n\n public isCategoryExpanded(categoryId: string): boolean {\n return this.expandedCategories.has(categoryId);\n }\n\n public selectCategory(categoryId: string): void {\n this.selectedCategory$.next(categoryId);\n }\n\n public getCategoryActionCount(categoryId: string): number {\n const descendantIds = this.categoryDescendants.get(categoryId);\n if (!descendantIds) return 0;\n \n return this.actions.filter(action => \n action.CategoryID && descendantIds.has(action.CategoryID)\n ).length;\n }\n\n public showCategoryTree = false;\n\n public toggleCategoryTree(): void {\n this.showCategoryTree = !this.showCategoryTree;\n }\n}","<div class=\"actions-list-view\" >\n <!-- Header with filters -->\n <div class=\"list-header\">\n <div class=\"header-title\">\n <h2><i class=\"fa-solid fa-cogs\"></i> Actions</h2>\n <div class=\"results-count\">{{ filteredActions.length }} of {{ actions.length }} actions</div>\n </div>\n \n <div class=\"filters-row\">\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 actions...\"\n [value]=\"searchTerm$.value\"\n (input)=\"onSearchChange($any($event.target).value)\" />\n </div>\n </div>\n \n <div class=\"filter-group\">\n <mj-dropdown\n [Data]=\"statusOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [ngModel]=\"selectedStatus$.value\"\n (ValueChange)=\"onStatusFilterChange($any($event))\">\n </mj-dropdown>\n\n <mj-dropdown\n [Data]=\"typeOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [ngModel]=\"selectedType$.value\"\n (ValueChange)=\"onTypeFilterChange($any($event))\">\n </mj-dropdown>\n \n <button mjButton\n variant=\"outline\"\n (click)=\"toggleCategoryTree()\"\n class=\"category-filter-button\">\n <i class=\"fa-solid fa-folder-tree\"></i>\n @if (selectedCategory$.value === 'all') {\n All Categories\n } @else {\n {{ getCategoryName(selectedCategory$.value) }}\n }\n <span class=\"badge\">{{ getCategoryActionCount(selectedCategory$.value) }}</span>\n </button>\n </div>\n </div>\n </div>\n \n <!-- Category Tree View Panel -->\n @if (showCategoryTree) {\n <div class=\"category-tree-panel\">\n <div class=\"tree-header\">\n <h3>Select Category</h3>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"toggleCategoryTree()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n \n <div class=\"tree-actions\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"selectCategory('all')\"\n [class.selected]=\"selectedCategory$.value === 'all'\">\n <i class=\"fa-solid fa-folder-open\"></i>\n All Categories\n <span class=\"badge\">{{ actions.length }}</span>\n </button>\n </div>\n \n <div class=\"tree-content\">\n <ng-container *ngTemplateOutlet=\"categoryTreeTemplate; context: { nodes: categoryTree }\"></ng-container>\n </div>\n \n <ng-template #categoryTreeTemplate let-nodes=\"nodes\">\n @for (node of nodes; track node.category.ID) {\n <div class=\"tree-node\" [style.padding-left.px]=\"node.level * 20\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n class=\"tree-node-button\"\n [class.selected]=\"selectedCategory$.value === node.category.ID\"\n (click)=\"selectCategory(node.category.ID)\">\n \n @if (node.children.length > 0) {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n class=\"expand-button\"\n (click)=\"toggleCategoryExpanded(node.category.ID); $event.stopPropagation()\">\n @if (isCategoryExpanded(node.category.ID)) {\n <i class=\"fa-solid fa-chevron-down\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-right\"></i>\n }\n </button>\n } @else {\n <span class=\"no-expand\"></span>\n }\n \n <i class=\"fa-solid fa-folder\"></i>\n {{ node.category.Name }}\n <span class=\"badge\">{{ getCategoryActionCount(node.category.ID) }}</span>\n </button>\n \n @if (node.children.length > 0 && isCategoryExpanded(node.category.ID)) {\n <ng-container *ngTemplateOutlet=\"categoryTreeTemplate; context: { nodes: node.children }\"></ng-container>\n }\n </div>\n }\n </ng-template>\n </div>\n }\n\n <!-- Actions List -->\n <div class=\"actions-list\">\n @if (filteredActions.length > 0) {\n @for (action of filteredActions; track action.ID) {\n <div class=\"action-card\" (click)=\"openAction(action)\">\n <div class=\"action-icon\">\n <i [class]=\"getActionIcon(action)\"></i>\n </div>\n \n <div class=\"action-main\">\n <div class=\"action-header\">\n <h3 class=\"action-name\">{{ action.Name }}</h3>\n <div class=\"action-badges\">\n <span class=\"status-chip\" [attr.data-color]=\"getStatusColor(action.Status)\">\n {{ action.Status }}\n </span>\n @if (action.Type === 'Generated') {\n <span class=\"status-chip\" data-color=\"info\">\n <i class=\"fa-solid fa-robot\"></i> AI Generated\n </span>\n }\n </div>\n </div>\n \n <div class=\"action-description\">\n {{ action.Description || 'No description available' }}\n </div>\n \n <div class=\"action-details\">\n <div class=\"detail-item\">\n <i class=\"fa-solid fa-folder\"></i>\n <span>{{ getCategoryName(action.CategoryID) }}</span>\n </div>\n @if (action.__mj_UpdatedAt) {\n <div class=\"detail-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>Updated {{ action.__mj_UpdatedAt | date:'MMM d, yyyy' }}</span>\n </div>\n }\n @if (action.CodeApprovalStatus && action.Type === 'Generated') {\n <div class=\"detail-item\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>{{ action.CodeApprovalStatus }}</span>\n </div>\n }\n </div>\n </div>\n \n <div class=\"action-actions\">\n <button mjButton\n variant=\"flat\"\n (click)=\"$event.stopPropagation()\">\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </button>\n </div>\n </div>\n }\n } @else if (!isLoading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-search\"></i>\n <h3>No actions found</h3>\n <p>Try adjusting your search or filter criteria</p>\n </div>\n }\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>"]}