@memberjunction/ng-dashboards 5.38.0 → 5.40.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 (321) hide show
  1. package/README.md +14 -7
  2. package/dist/AI/components/agents/agent-configuration.component.js +199 -198
  3. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  4. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  5. package/dist/AI/components/analytics/ai-analytics-resource.component.js +20 -17
  6. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  7. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +15 -0
  8. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  9. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +166 -58
  10. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  11. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  12. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +2 -1
  13. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  14. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +1 -0
  15. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  16. package/dist/AI/components/analytics/model-performance/model-performance.component.js +55 -36
  17. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  18. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +9 -1
  19. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  20. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +158 -117
  21. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  22. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +1 -0
  23. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  24. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +22 -8
  25. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  26. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +217 -860
  27. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  28. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +1717 -7802
  29. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  30. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts +56 -0
  31. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts.map +1 -0
  32. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js +423 -0
  33. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js.map +1 -0
  34. package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts +70 -0
  35. package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts.map +1 -0
  36. package/dist/AI/components/autotagging/components/classify-item-grid.component.js +308 -0
  37. package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -0
  38. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts +29 -0
  39. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -0
  40. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +186 -0
  41. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -0
  42. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts +69 -0
  43. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts.map +1 -0
  44. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js +278 -0
  45. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js.map +1 -0
  46. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts +73 -0
  47. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts.map +1 -0
  48. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js +393 -0
  49. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js.map +1 -0
  50. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts +122 -0
  51. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts.map +1 -0
  52. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js +908 -0
  53. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js.map +1 -0
  54. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts +87 -0
  55. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts.map +1 -0
  56. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js +475 -0
  57. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js.map +1 -0
  58. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts +29 -0
  59. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts.map +1 -0
  60. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js +208 -0
  61. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js.map +1 -0
  62. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts +21 -0
  63. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts.map +1 -0
  64. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js +70 -0
  65. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js.map +1 -0
  66. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts +333 -0
  67. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -0
  68. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +2125 -0
  69. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -0
  70. package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts +61 -0
  71. package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts.map +1 -0
  72. package/dist/AI/components/autotagging/shared/classify.dryrun.js +78 -0
  73. package/dist/AI/components/autotagging/shared/classify.dryrun.js.map +1 -0
  74. package/dist/AI/components/autotagging/shared/classify.format.d.ts +58 -0
  75. package/dist/AI/components/autotagging/shared/classify.format.d.ts.map +1 -0
  76. package/dist/AI/components/autotagging/shared/classify.format.js +260 -0
  77. package/dist/AI/components/autotagging/shared/classify.format.js.map +1 -0
  78. package/dist/AI/components/autotagging/shared/classify.types.d.ts +319 -0
  79. package/dist/AI/components/autotagging/shared/classify.types.d.ts.map +1 -0
  80. package/dist/AI/components/autotagging/shared/classify.types.js +6 -0
  81. package/dist/AI/components/autotagging/shared/classify.types.js.map +1 -0
  82. package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts +103 -0
  83. package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts.map +1 -0
  84. package/dist/AI/components/autotagging/tabs/health-tab.component.js +571 -0
  85. package/dist/AI/components/autotagging/tabs/health-tab.component.js.map +1 -0
  86. package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts +77 -0
  87. package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts.map +1 -0
  88. package/dist/AI/components/autotagging/tabs/history-tab.component.js +519 -0
  89. package/dist/AI/components/autotagging/tabs/history-tab.component.js.map +1 -0
  90. package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts +107 -0
  91. package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts.map +1 -0
  92. package/dist/AI/components/autotagging/tabs/inbox-tab.component.js +719 -0
  93. package/dist/AI/components/autotagging/tabs/inbox-tab.component.js.map +1 -0
  94. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts +131 -0
  95. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts.map +1 -0
  96. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js +813 -0
  97. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js.map +1 -0
  98. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts +177 -0
  99. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -0
  100. package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1465 -0
  101. package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -0
  102. package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts +78 -0
  103. package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts.map +1 -0
  104. package/dist/AI/components/autotagging/tabs/tags-tab.component.js +492 -0
  105. package/dist/AI/components/autotagging/tabs/tags-tab.component.js.map +1 -0
  106. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts +397 -0
  107. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts.map +1 -0
  108. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js +3490 -0
  109. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js.map +1 -0
  110. package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts +56 -0
  111. package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts.map +1 -0
  112. package/dist/AI/components/autotagging/tabs/types-tab.component.js +271 -0
  113. package/dist/AI/components/autotagging/tabs/types-tab.component.js.map +1 -0
  114. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +3 -0
  115. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  116. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +306 -290
  117. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  118. package/dist/AI/components/execution-monitoring.component.js +1 -1
  119. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  120. package/dist/AI/components/models/model-management.component.js +209 -208
  121. package/dist/AI/components/models/model-management.component.js.map +1 -1
  122. package/dist/AI/components/prompts/prompt-management.component.js +130 -128
  123. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  124. package/dist/AI/components/requests/agent-requests-resource.component.js +61 -61
  125. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  126. package/dist/AI/components/system/system-configuration.component.js +17 -17
  127. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  128. package/dist/AI/components/tags/tags-resource.component.d.ts +1 -0
  129. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  130. package/dist/AI/components/tags/tags-resource.component.js +578 -538
  131. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  132. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +3 -0
  133. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  134. package/dist/AI/components/vectors/vector-management-resource.component.js +331 -303
  135. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  136. package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
  137. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  138. package/dist/AI/services/ai-instrumentation.service.js +14 -2
  139. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  140. package/dist/AI/services/cache-metrics.d.ts +50 -0
  141. package/dist/AI/services/cache-metrics.d.ts.map +1 -0
  142. package/dist/AI/services/cache-metrics.js +43 -0
  143. package/dist/AI/services/cache-metrics.js.map +1 -0
  144. package/dist/APIKeys/api-applications-panel.component.js +2 -2
  145. package/dist/APIKeys/api-key-create-dialog.component.js +2 -2
  146. package/dist/APIKeys/api-key-edit-panel.component.js +2 -2
  147. package/dist/APIKeys/api-keys-resource.component.js +132 -131
  148. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  149. package/dist/Actions/components/actions-overview.component.js +141 -141
  150. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  151. package/dist/Actions/components/execution-monitoring.component.js +15 -15
  152. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  153. package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -5
  154. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  155. package/dist/Actions/components/explorer/action-explorer.component.js +139 -212
  156. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  157. package/dist/Admin/admin-data-schema.component.js +2 -2
  158. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  159. package/dist/Admin/admin-dev-tools-resource.component.js +2 -2
  160. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  161. package/dist/Admin/admin-identity-access.component.js +2 -2
  162. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  163. package/dist/Admin/admin-monitoring.component.js +2 -2
  164. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  165. package/dist/ApplicationRoles/application-roles-resource.component.js +54 -49
  166. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  167. package/dist/Communication/communication-logs-resource.component.d.ts +6 -0
  168. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  169. package/dist/Communication/communication-logs-resource.component.js +72 -50
  170. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  171. package/dist/Communication/communication-monitor-resource.component.js +103 -102
  172. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  173. package/dist/Communication/communication-providers-resource.component.js +52 -51
  174. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  175. package/dist/Communication/communication-runs-resource.component.js +39 -38
  176. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  177. package/dist/Communication/communication-templates-resource.component.d.ts +6 -0
  178. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  179. package/dist/Communication/communication-templates-resource.component.js +92 -89
  180. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  181. package/dist/Credentials/components/credentials-audit-resource.component.js +136 -135
  182. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  183. package/dist/Credentials/components/credentials-categories-resource.component.js +155 -152
  184. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  185. package/dist/Credentials/components/credentials-list-resource.component.js +119 -118
  186. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  187. package/dist/Credentials/components/credentials-overview-resource.component.js +129 -128
  188. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  189. package/dist/Credentials/components/credentials-types-resource.component.js +107 -106
  190. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  191. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +31 -340
  192. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  193. package/dist/DataExplorer/data-explorer-dashboard.component.js +468 -1958
  194. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  195. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  196. package/dist/DataExplorer/data-explorer-resource.component.js +10 -0
  197. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  198. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +1 -1
  199. package/dist/DatabaseDesigner/components/entity-list.component.js +115 -114
  200. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  201. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +5 -6
  202. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  203. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +4 -5
  204. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  205. package/dist/DevTools/app-state-inspector.component.js +18 -17
  206. package/dist/DevTools/app-state-inspector.component.js.map +1 -1
  207. package/dist/DevTools/class-registry.component.js +88 -85
  208. package/dist/DevTools/class-registry.component.js.map +1 -1
  209. package/dist/DevTools/event-monitor.component.js +155 -150
  210. package/dist/DevTools/event-monitor.component.js.map +1 -1
  211. package/dist/DevTools/graphql-console.component.js +245 -243
  212. package/dist/DevTools/graphql-console.component.js.map +1 -1
  213. package/dist/DevTools/layout-inspector.component.js +18 -17
  214. package/dist/DevTools/layout-inspector.component.js.map +1 -1
  215. package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -19
  216. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  217. package/dist/Home/home-dashboard.component.js +2 -2
  218. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  219. package/dist/Integration/components/activity/activity.component.js +236 -229
  220. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  221. package/dist/Integration/components/connections/connections.component.js +390 -389
  222. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  223. package/dist/Integration/components/overview/overview.component.js +2 -2
  224. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
  225. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +14 -11
  226. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  227. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +27 -2
  228. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
  229. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +244 -119
  230. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  231. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +293 -291
  232. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  233. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +62 -61
  234. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  235. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts +65 -0
  236. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts.map +1 -0
  237. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js +176 -0
  238. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js.map +1 -0
  239. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts +81 -0
  240. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts.map +1 -0
  241. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js +308 -0
  242. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js.map +1 -0
  243. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts +85 -0
  244. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts.map +1 -0
  245. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js +362 -0
  246. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js.map +1 -0
  247. package/dist/KnowledgeHub/index.d.ts +3 -0
  248. package/dist/KnowledgeHub/index.d.ts.map +1 -1
  249. package/dist/KnowledgeHub/index.js +3 -0
  250. package/dist/KnowledgeHub/index.js.map +1 -1
  251. package/dist/Lists/components/lists-browse-resource.component.d.ts +6 -2
  252. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  253. package/dist/Lists/components/lists-browse-resource.component.js +525 -566
  254. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  255. package/dist/Lists/components/lists-categories-resource.component.js +135 -134
  256. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  257. package/dist/Lists/components/lists-my-lists-resource.component.js +199 -198
  258. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  259. package/dist/MCP/components/mcp-server-dialog.component.js +2 -2
  260. package/dist/MCP/mcp-dashboard.component.js +443 -438
  261. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  262. package/dist/QueryBrowser/query-browser-resource.component.js +1 -1
  263. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  264. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  265. package/dist/Scheduling/components/scheduling-activity.component.js +146 -147
  266. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  267. package/dist/Scheduling/components/scheduling-jobs.component.js +76 -75
  268. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  269. package/dist/Scheduling/components/scheduling-overview.component.js +97 -96
  270. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  271. package/dist/Scheduling/scheduling-dashboard.component.js +24 -22
  272. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  273. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +2 -0
  274. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
  275. package/dist/Scheduling/services/scheduling-instrumentation.service.js +1 -0
  276. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  277. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +1 -1
  278. package/dist/Testing/components/testing-explorer.component.d.ts +14 -4
  279. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  280. package/dist/Testing/components/testing-explorer.component.js +436 -427
  281. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  282. package/dist/Testing/components/testing-runs-resource.component.js +1 -1
  283. package/dist/Testing/components/testing-runs.component.js +116 -115
  284. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  285. package/dist/Testing/testing-dashboard.component.js +6 -7
  286. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  287. package/dist/VersionHistory/components/labels-resource.component.js +173 -172
  288. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  289. package/dist/VersionHistory/components/restore-resource.component.d.ts +6 -0
  290. package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -1
  291. package/dist/VersionHistory/components/restore-resource.component.js +116 -92
  292. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  293. package/dist/ai-dashboards.module.d.ts +57 -35
  294. package/dist/ai-dashboards.module.d.ts.map +1 -1
  295. package/dist/ai-dashboards.module.js +80 -1
  296. package/dist/ai-dashboards.module.js.map +1 -1
  297. package/dist/communication-dashboards.module.d.ts +1 -1
  298. package/dist/communication-dashboards.module.d.ts.map +1 -1
  299. package/dist/communication-dashboards.module.js +7 -1
  300. package/dist/communication-dashboards.module.js.map +1 -1
  301. package/dist/data-explorer-dashboards.module.d.ts +12 -14
  302. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  303. package/dist/data-explorer-dashboards.module.js +5 -14
  304. package/dist/data-explorer-dashboards.module.js.map +1 -1
  305. package/dist/public-api.d.ts +3 -0
  306. package/dist/public-api.d.ts.map +1 -1
  307. package/dist/public-api.js +3 -0
  308. package/dist/public-api.js.map +1 -1
  309. package/dist/testing-dashboards.module.d.ts +4 -5
  310. package/dist/testing-dashboards.module.d.ts.map +1 -1
  311. package/dist/testing-dashboards.module.js +7 -5
  312. package/dist/testing-dashboards.module.js.map +1 -1
  313. package/package.json +57 -54
  314. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts +0 -79
  315. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +0 -1
  316. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +0 -195
  317. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +0 -1
  318. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +0 -226
  319. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +0 -1
  320. package/dist/DataExplorer/components/view-selector/view-selector.component.js +0 -861
  321. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"scheduling-overview.component.js","sourceRoot":"","sources":["../../../src/Scheduling/components/scheduling-overview.component.ts","../../../src/Scheduling/components/scheduling-overview.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { Subscription, interval } from 'rxjs';\nimport {\n SchedulingInstrumentationService,\n SchedulingKPIs,\n JobExecution,\n UpcomingExecution,\n LockInfo,\n AlertCondition\n} from '../services/scheduling-instrumentation.service';\n\n@Component({\n standalone: false,\n selector: 'app-scheduling-overview',\n templateUrl: './scheduling-overview.component.html',\n styleUrls: ['./scheduling-overview.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SchedulingOverviewComponent implements OnInit, OnDestroy {\n @Input() initialState: Record<string, unknown> = {};\n /** When true, the inner toolbar is hidden — the parent shell is rendering it in `<mj-page-header>` instead. */\n @Input() HideToolbar = false;\n @Output() stateChange = new EventEmitter<Record<string, unknown>>();\n\n public Kpis: SchedulingKPIs | null = null;\n public LiveExecutions: JobExecution[] = [];\n public UpcomingExecutions: UpcomingExecution[] = [];\n public Locks: LockInfo[] = [];\n public Alerts: AlertCondition[] = [];\n public IsLoading = true;\n public AutoRefreshEnabled = true;\n\n private subscriptions: Subscription[] = [];\n private autoRefreshSub: Subscription | undefined;\n\n constructor(\n private schedulingService: SchedulingInstrumentationService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n if (this.initialState) {\n if (this.initialState['autoRefreshEnabled'] != null) {\n this.AutoRefreshEnabled = this.initialState['autoRefreshEnabled'] as boolean;\n }\n }\n\n this.subscriptions.push(\n this.schedulingService.kpis$.subscribe(kpis => {\n this.Kpis = kpis;\n this.IsLoading = false;\n this.cdr.markForCheck();\n }),\n this.schedulingService.liveExecutions$.subscribe(execs => {\n this.LiveExecutions = execs;\n this.cdr.markForCheck();\n }),\n this.schedulingService.upcomingExecutions$.subscribe(upcoming => {\n this.UpcomingExecutions = upcoming;\n this.cdr.markForCheck();\n }),\n this.schedulingService.lockInfo$.subscribe(locks => {\n this.Locks = locks;\n this.cdr.markForCheck();\n }),\n this.schedulingService.alerts$.subscribe(alerts => {\n this.Alerts = alerts;\n this.cdr.markForCheck();\n })\n );\n\n if (this.AutoRefreshEnabled) {\n this.startAutoRefresh();\n }\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(s => s.unsubscribe());\n this.stopAutoRefresh();\n }\n\n public Refresh(): void {\n this.schedulingService.refresh();\n }\n\n public ToggleAutoRefresh(): void {\n this.AutoRefreshEnabled = !this.AutoRefreshEnabled;\n if (this.AutoRefreshEnabled) {\n this.startAutoRefresh();\n } else {\n this.stopAutoRefresh();\n }\n this.emitState();\n }\n\n public async ReleaseLock(jobId: string): Promise<void> {\n await this.schedulingService.releaseLock(jobId);\n }\n\n public GetStatusIcon(status: string): string {\n switch (status) {\n case 'Running': return 'fa-solid fa-spinner fa-spin';\n case 'Completed': return 'fa-solid fa-circle-check';\n case 'Failed': return 'fa-solid fa-circle-xmark';\n case 'Cancelled': return 'fa-solid fa-ban';\n case 'Timeout': return 'fa-solid fa-clock';\n default: return 'fa-solid fa-circle-question';\n }\n }\n\n public GetStatusClass(status: string): string {\n switch (status) {\n case 'Running': return 'status-running';\n case 'Completed': return 'status-success';\n case 'Failed': return 'status-error';\n case 'Cancelled': return 'status-warning';\n case 'Timeout': return 'status-warning';\n default: return '';\n }\n }\n\n public GetAlertIcon(severity: string): string {\n return severity === 'error' ? 'fa-solid fa-circle-xmark' : 'fa-solid fa-triangle-exclamation';\n }\n\n public FormatDuration(ms: number | undefined): string {\n if (ms == null) return '-';\n const seconds = Math.floor(ms / 1000);\n if (seconds < 60) return `${seconds}s`;\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = seconds % 60;\n if (minutes < 60) return `${minutes}m ${remainingSeconds}s`;\n const hours = Math.floor(minutes / 60);\n const remainingMinutes = minutes % 60;\n return `${hours}h ${remainingMinutes}m`;\n }\n\n public FormatTimeAgo(date: Date): string {\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSec = Math.floor(diffMs / 1000);\n if (diffSec < 60) return `${diffSec}s ago`;\n const diffMin = Math.floor(diffSec / 60);\n if (diffMin < 60) return `${diffMin}m ago`;\n const diffHr = Math.floor(diffMin / 60);\n if (diffHr < 24) return `${diffHr}h ago`;\n return date.toLocaleDateString();\n }\n\n public FormatTimeUntil(date: Date): string {\n const now = new Date();\n const diffMs = date.getTime() - now.getTime();\n if (diffMs <= 0) return 'Now';\n const diffMin = Math.floor(diffMs / 60000);\n if (diffMin < 60) return `${diffMin}m`;\n const diffHr = Math.floor(diffMin / 60);\n const remainingMin = diffMin % 60;\n return `${diffHr}h ${remainingMin}m`;\n }\n\n public FormatCost(cost: number): string {\n if (cost < 0.01) return `$${cost.toFixed(4)}`;\n if (cost < 1) return `$${cost.toFixed(3)}`;\n return `$${cost.toFixed(2)}`;\n }\n\n public FormatPercentage(value: number): string {\n return `${(value * 100).toFixed(1)}%`;\n }\n\n public FormatDateTime(date: Date): string {\n return date.toLocaleString(undefined, {\n month: 'numeric',\n day: 'numeric',\n year: '2-digit',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true\n });\n }\n\n public GetSuccessRateColor(rate: number): string {\n if (rate >= 0.9) return '#10b981';\n if (rate >= 0.7) return '#f59e0b';\n return '#ef4444';\n }\n\n public GetHealthScore(): number {\n if (!this.Kpis) return 100;\n let score = 100;\n score -= this.Kpis.totalFailures7d * 2;\n score -= this.Kpis.lockedJobs * 10;\n score -= this.Alerts.filter(a => a.severity === 'error').length * 15;\n score -= this.Alerts.filter(a => a.severity === 'warning').length * 5;\n return Math.max(0, Math.min(100, score));\n }\n\n public GetHealthColor(): string {\n const score = this.GetHealthScore();\n if (score >= 80) return '#10b981';\n if (score >= 50) return '#f59e0b';\n return '#ef4444';\n }\n\n public GetHealthStrokeDasharray(): string {\n const score = this.GetHealthScore();\n const circumference = 2 * Math.PI * 36;\n const filled = (score / 100) * circumference;\n return `${filled} ${circumference - filled}`;\n }\n\n private startAutoRefresh(): void {\n this.stopAutoRefresh();\n this.autoRefreshSub = interval(30000).subscribe(() => {\n this.schedulingService.refresh();\n });\n }\n\n private stopAutoRefresh(): void {\n if (this.autoRefreshSub) {\n this.autoRefreshSub.unsubscribe();\n this.autoRefreshSub = undefined;\n }\n }\n\n private emitState(): void {\n this.stateChange.emit({\n autoRefreshEnabled: this.AutoRefreshEnabled\n });\n }\n}\n","@if (HideToolbar) {\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n} @else {\n <mj-page-layout>\n <mj-page-header\n Title=\"Scheduling Dashboard\"\n Icon=\"fa-solid fa-gauge-high\"\n Subtitle=\"System health, KPIs, and alerts\">\n <div actions>\n <mj-refresh-button (Clicked)=\"Refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"AutoRefreshEnabled ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"ToggleAutoRefresh()\"\n title=\"Toggle auto-refresh\">\n <i class=\"fa-solid fa-rotate\"></i>\n Auto: {{AutoRefreshEnabled ? 'ON' : 'OFF'}}\n </button>\n </div>\n </mj-page-header>\n <mj-page-body>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </mj-page-body>\n </mj-page-layout>\n}\n\n<ng-template #content>\n<div class=\"overview-container\">\n\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading dashboard...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n @if (!IsLoading && Kpis) {\n <div class=\"overview-content\">\n <!-- Health Banner -->\n <div class=\"health-banner\" [style.border-color]=\"GetHealthColor()\">\n <div class=\"health-ring\">\n <svg viewBox=\"0 0 80 80\" class=\"health-svg\">\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"none\" class=\"health-ring-track\" stroke-width=\"6\"/>\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"none\"\n [attr.stroke]=\"GetHealthColor()\"\n stroke-width=\"6\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"GetHealthStrokeDasharray()\"\n transform=\"rotate(-90 40 40)\"/>\n </svg>\n <div class=\"health-score\" [style.color]=\"GetHealthColor()\">{{GetHealthScore()}}</div>\n </div>\n <div class=\"health-details\">\n <div class=\"health-title\">System Health</div>\n <div class=\"health-stats\">\n <span><i class=\"fa-solid fa-check-circle status-success\"></i> {{Kpis.totalActiveJobs}} active</span>\n <span><i class=\"fa-solid fa-lock status-warning\"></i> {{Kpis.lockedJobs}} locked</span>\n <span><i class=\"fa-solid fa-xmark-circle status-error\"></i> {{Kpis.totalFailures7d}} failures (7d)</span>\n </div>\n </div>\n </div>\n <!-- KPI Cards -->\n <div class=\"kpi-grid\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon blue\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.totalActiveJobs}}</div>\n <div class=\"kpi-label\">Active Jobs</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon amber\">\n <i class=\"fa-solid fa-clock\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.jobsDueInNextHour}}</div>\n <div class=\"kpi-label\">Due Next Hour</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon purple\">\n <i class=\"fa-solid fa-chart-bar\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.recentExecutions24h}}</div>\n <div class=\"kpi-label\">Runs (24h)</div>\n <div class=\"kpi-sub\" [style.color]=\"GetSuccessRateColor(Kpis.successRate24h)\">\n {{FormatPercentage(Kpis.successRate24h)}} success\n </div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon green\">\n <i class=\"fa-solid fa-play\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.currentlyRunning}}</div>\n <div class=\"kpi-label\">Running Now</div>\n </div>\n </div>\n </div>\n <!-- Two-Column Layout: Live Executions + Alerts/Upcoming -->\n <div class=\"panels-grid\">\n <!-- Live Executions -->\n <div class=\"panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-bolt\"></i> Live Executions\n </div>\n <span class=\"panel-badge\">{{LiveExecutions.length}}</span>\n </div>\n <div class=\"panel-body\">\n @if (LiveExecutions.length === 0) {\n <div class=\"empty-state-small\">\n <i class=\"fa-solid fa-inbox\"></i>\n <span>No recent executions</span>\n </div>\n }\n @for (exec of LiveExecutions; track exec) {\n <div class=\"execution-item\">\n <div class=\"exec-status\">\n <i [class]=\"GetStatusIcon(exec.status)\" [ngClass]=\"GetStatusClass(exec.status)\"></i>\n </div>\n <div class=\"exec-details\">\n <div class=\"exec-name\">{{exec.jobName}}</div>\n <div class=\"exec-meta\">{{FormatTimeAgo(exec.startedAt)}} &middot; {{FormatDuration(exec.duration)}}</div>\n </div>\n <div class=\"exec-status-badge\" [ngClass]=\"GetStatusClass(exec.status)\">\n {{exec.status}}\n </div>\n </div>\n }\n </div>\n </div>\n <!-- Right Column: Alerts + Upcoming -->\n <div class=\"right-column\">\n <!-- Alerts -->\n <div class=\"panel\">\n <div class=\"panel-header\" [ngClass]=\"Alerts.length > 0 ? 'alert-header' : 'clear-header'\">\n <div class=\"panel-title\">\n <i [class]=\"Alerts.length > 0 ? 'fa-solid fa-triangle-exclamation' : 'fa-solid fa-shield-check'\"></i>\n {{Alerts.length > 0 ? 'Alerts' : 'All Clear'}}\n </div>\n @if (Alerts.length > 0) {\n <span class=\"panel-badge error\">{{Alerts.length}}</span>\n }\n @if (Alerts.length === 0) {\n <span class=\"panel-badge clear\">0</span>\n }\n </div>\n <div class=\"panel-body\">\n @if (Alerts.length === 0) {\n <div class=\"empty-state-small all-clear\">\n <i class=\"fa-solid fa-circle-check\"></i>\n <span>No active alerts</span>\n </div>\n }\n @for (alert of Alerts; track alert) {\n <div class=\"alert-item\" [ngClass]=\"'alert-' + alert.severity\">\n <i [class]=\"GetAlertIcon(alert.severity)\" class=\"alert-icon\"></i>\n <div class=\"alert-content\">\n <div class=\"alert-title\">{{alert.title}}</div>\n <div class=\"alert-message\">{{alert.message}}</div>\n </div>\n @if (alert.type === 'stale-lock' && alert.jobId) {\n <button\n class=\"alert-action-btn\"\n (click)=\"ReleaseLock(alert.jobId!)\">\n Release\n </button>\n }\n </div>\n }\n </div>\n </div>\n <!-- Upcoming -->\n <div class=\"panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-calendar-day\"></i> Upcoming (24h)\n </div>\n <span class=\"panel-badge\">{{UpcomingExecutions.length}}</span>\n </div>\n <div class=\"panel-body\">\n @if (UpcomingExecutions.length === 0) {\n <div class=\"empty-state-small\">\n <i class=\"fa-solid fa-calendar-xmark\"></i>\n <span>No upcoming executions</span>\n </div>\n }\n @for (upcoming of UpcomingExecutions; track upcoming) {\n <div class=\"upcoming-item\">\n <div class=\"upcoming-info\">\n <div class=\"upcoming-name\">{{upcoming.jobName}}</div>\n <div class=\"upcoming-meta\">\n {{FormatDateTime(upcoming.nextRunAt)}}\n <span class=\"upcoming-type\">{{upcoming.jobType}}</span>\n </div>\n </div>\n <div class=\"upcoming-countdown\" [class.soon]=\"FormatTimeUntil(upcoming.nextRunAt).includes('m') && !FormatTimeUntil(upcoming.nextRunAt).includes('h')\">\n {{FormatTimeUntil(upcoming.nextRunAt)}}\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n <!-- Locks Section -->\n @if (Locks.length > 0) {\n <div class=\"panel\" style=\"margin-top: 20px;\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-lock\"></i> Active Locks\n </div>\n <span class=\"panel-badge\">{{Locks.length}}</span>\n </div>\n <div class=\"panel-body\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Job</th>\n <th>Locked By</th>\n <th>Locked At</th>\n <th>Expected Completion</th>\n <th>Status</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (lock of Locks; track lock) {\n <tr [class.stale-row]=\"lock.isStale\">\n <td class=\"cell-name\">{{lock.jobName}}</td>\n <td class=\"cell-meta\">{{lock.lockedBy}}</td>\n <td class=\"cell-meta\">{{FormatTimeAgo(lock.lockedAt)}}</td>\n <td class=\"cell-meta\">{{FormatDateTime(lock.expectedCompletion)}}</td>\n <td>\n <span class=\"lock-status-badge\" [class.stale]=\"lock.isStale\">\n {{lock.isStale ? 'Stale' : 'Active'}}\n </span>\n </td>\n <td>\n @if (lock.isStale) {\n <button class=\"release-btn\" (click)=\"ReleaseLock(lock.jobId)\">\n <i class=\"fa-solid fa-lock-open\"></i> Release\n </button>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n </div>\n }\n</div>\n</ng-template>\n"]}
1
+ {"version":3,"file":"scheduling-overview.component.js","sourceRoot":"","sources":["../../../src/Scheduling/components/scheduling-overview.component.ts","../../../src/Scheduling/components/scheduling-overview.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { Subscription, interval } from 'rxjs';\nimport {\n SchedulingInstrumentationService,\n SchedulingKPIs,\n JobExecution,\n UpcomingExecution,\n LockInfo,\n AlertCondition\n} from '../services/scheduling-instrumentation.service';\n\n@Component({\n standalone: false,\n selector: 'app-scheduling-overview',\n templateUrl: './scheduling-overview.component.html',\n styleUrls: ['./scheduling-overview.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SchedulingOverviewComponent implements OnInit, OnDestroy {\n @Input() initialState: Record<string, unknown> = {};\n /** When true, the inner toolbar is hidden — the parent shell is rendering it in `<mj-page-header>` instead. */\n @Input() HideToolbar = false;\n @Output() stateChange = new EventEmitter<Record<string, unknown>>();\n\n public Kpis: SchedulingKPIs | null = null;\n public LiveExecutions: JobExecution[] = [];\n public UpcomingExecutions: UpcomingExecution[] = [];\n public Locks: LockInfo[] = [];\n public Alerts: AlertCondition[] = [];\n public IsLoading = true;\n public AutoRefreshEnabled = true;\n\n private subscriptions: Subscription[] = [];\n private autoRefreshSub: Subscription | undefined;\n\n constructor(\n private schedulingService: SchedulingInstrumentationService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n if (this.initialState) {\n if (this.initialState['autoRefreshEnabled'] != null) {\n this.AutoRefreshEnabled = this.initialState['autoRefreshEnabled'] as boolean;\n }\n }\n\n this.subscriptions.push(\n this.schedulingService.kpis$.subscribe(kpis => {\n this.Kpis = kpis;\n this.IsLoading = false;\n this.cdr.markForCheck();\n }),\n this.schedulingService.liveExecutions$.subscribe(execs => {\n this.LiveExecutions = execs;\n this.cdr.markForCheck();\n }),\n this.schedulingService.upcomingExecutions$.subscribe(upcoming => {\n this.UpcomingExecutions = upcoming;\n this.cdr.markForCheck();\n }),\n this.schedulingService.lockInfo$.subscribe(locks => {\n this.Locks = locks;\n this.cdr.markForCheck();\n }),\n this.schedulingService.alerts$.subscribe(alerts => {\n this.Alerts = alerts;\n this.cdr.markForCheck();\n })\n );\n\n if (this.AutoRefreshEnabled) {\n this.startAutoRefresh();\n }\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(s => s.unsubscribe());\n this.stopAutoRefresh();\n }\n\n public Refresh(): void {\n this.schedulingService.refresh();\n }\n\n public ToggleAutoRefresh(): void {\n this.AutoRefreshEnabled = !this.AutoRefreshEnabled;\n if (this.AutoRefreshEnabled) {\n this.startAutoRefresh();\n } else {\n this.stopAutoRefresh();\n }\n this.emitState();\n }\n\n public async ReleaseLock(jobId: string): Promise<void> {\n await this.schedulingService.releaseLock(jobId);\n }\n\n public GetStatusIcon(status: string): string {\n switch (status) {\n case 'Running': return 'fa-solid fa-spinner fa-spin';\n case 'Completed': return 'fa-solid fa-circle-check';\n case 'Failed': return 'fa-solid fa-circle-xmark';\n case 'Cancelled': return 'fa-solid fa-ban';\n case 'Timeout': return 'fa-solid fa-clock';\n default: return 'fa-solid fa-circle-question';\n }\n }\n\n public GetStatusClass(status: string): string {\n switch (status) {\n case 'Running': return 'status-running';\n case 'Completed': return 'status-success';\n case 'Failed': return 'status-error';\n case 'Cancelled': return 'status-warning';\n case 'Timeout': return 'status-warning';\n default: return '';\n }\n }\n\n public GetAlertIcon(severity: string): string {\n return severity === 'error' ? 'fa-solid fa-circle-xmark' : 'fa-solid fa-triangle-exclamation';\n }\n\n public FormatDuration(ms: number | undefined): string {\n if (ms == null) return '-';\n const seconds = Math.floor(ms / 1000);\n if (seconds < 60) return `${seconds}s`;\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = seconds % 60;\n if (minutes < 60) return `${minutes}m ${remainingSeconds}s`;\n const hours = Math.floor(minutes / 60);\n const remainingMinutes = minutes % 60;\n return `${hours}h ${remainingMinutes}m`;\n }\n\n public FormatTimeAgo(date: Date): string {\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSec = Math.floor(diffMs / 1000);\n if (diffSec < 60) return `${diffSec}s ago`;\n const diffMin = Math.floor(diffSec / 60);\n if (diffMin < 60) return `${diffMin}m ago`;\n const diffHr = Math.floor(diffMin / 60);\n if (diffHr < 24) return `${diffHr}h ago`;\n return date.toLocaleDateString();\n }\n\n public FormatTimeUntil(date: Date): string {\n const now = new Date();\n const diffMs = date.getTime() - now.getTime();\n if (diffMs <= 0) return 'Now';\n const diffMin = Math.floor(diffMs / 60000);\n if (diffMin < 60) return `${diffMin}m`;\n const diffHr = Math.floor(diffMin / 60);\n const remainingMin = diffMin % 60;\n return `${diffHr}h ${remainingMin}m`;\n }\n\n public FormatCost(cost: number): string {\n if (cost < 0.01) return `$${cost.toFixed(4)}`;\n if (cost < 1) return `$${cost.toFixed(3)}`;\n return `$${cost.toFixed(2)}`;\n }\n\n public FormatPercentage(value: number): string {\n return `${(value * 100).toFixed(1)}%`;\n }\n\n public FormatDateTime(date: Date): string {\n return date.toLocaleString(undefined, {\n month: 'numeric',\n day: 'numeric',\n year: '2-digit',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true\n });\n }\n\n public GetSuccessRateColor(rate: number): string {\n if (rate >= 0.9) return '#10b981';\n if (rate >= 0.7) return '#f59e0b';\n return '#ef4444';\n }\n\n public GetHealthScore(): number {\n if (!this.Kpis) return 100;\n let score = 100;\n score -= this.Kpis.totalFailures7d * 2;\n score -= this.Kpis.lockedJobs * 10;\n score -= this.Alerts.filter(a => a.severity === 'error').length * 15;\n score -= this.Alerts.filter(a => a.severity === 'warning').length * 5;\n return Math.max(0, Math.min(100, score));\n }\n\n public GetHealthColor(): string {\n const score = this.GetHealthScore();\n if (score >= 80) return '#10b981';\n if (score >= 50) return '#f59e0b';\n return '#ef4444';\n }\n\n public GetHealthStrokeDasharray(): string {\n const score = this.GetHealthScore();\n const circumference = 2 * Math.PI * 36;\n const filled = (score / 100) * circumference;\n return `${filled} ${circumference - filled}`;\n }\n\n private startAutoRefresh(): void {\n this.stopAutoRefresh();\n this.autoRefreshSub = interval(30000).subscribe(() => {\n this.schedulingService.refresh();\n });\n }\n\n private stopAutoRefresh(): void {\n if (this.autoRefreshSub) {\n this.autoRefreshSub.unsubscribe();\n this.autoRefreshSub = undefined;\n }\n }\n\n private emitState(): void {\n this.stateChange.emit({\n autoRefreshEnabled: this.AutoRefreshEnabled\n });\n }\n}\n","@if (HideToolbar) {\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n} @else {\n <mj-page-layout>\n <mj-page-header\n Title=\"Scheduling Dashboard\"\n Icon=\"fa-solid fa-gauge-high\"\n Subtitle=\"System health, KPIs, and alerts\">\n <div actions>\n <mj-refresh-button (Clicked)=\"Refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"AutoRefreshEnabled ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"ToggleAutoRefresh()\"\n title=\"Toggle auto-refresh\">\n <i class=\"fa-solid fa-rotate\"></i>\n <span class=\"action-btn-label\">Auto: {{AutoRefreshEnabled ? 'ON' : 'OFF'}}</span>\n </button>\n </div>\n </mj-page-header>\n <mj-page-body>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </mj-page-body>\n </mj-page-layout>\n}\n\n<ng-template #content>\n<div class=\"overview-container\">\n\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading dashboard...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n @if (!IsLoading && Kpis) {\n <div class=\"overview-content\">\n <!-- Health Banner -->\n <div class=\"health-banner\" [style.border-color]=\"GetHealthColor()\">\n <div class=\"health-ring\">\n <svg viewBox=\"0 0 80 80\" class=\"health-svg\">\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"none\" class=\"health-ring-track\" stroke-width=\"6\"/>\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"none\"\n [attr.stroke]=\"GetHealthColor()\"\n stroke-width=\"6\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"GetHealthStrokeDasharray()\"\n transform=\"rotate(-90 40 40)\"/>\n </svg>\n <div class=\"health-score\" [style.color]=\"GetHealthColor()\">{{GetHealthScore()}}</div>\n </div>\n <div class=\"health-details\">\n <div class=\"health-title\">System Health</div>\n <div class=\"health-stats\">\n <span><i class=\"fa-solid fa-check-circle status-success\"></i> {{Kpis.totalActiveJobs}} active</span>\n <span><i class=\"fa-solid fa-lock status-warning\"></i> {{Kpis.lockedJobs}} locked</span>\n <span><i class=\"fa-solid fa-xmark-circle status-error\"></i> {{Kpis.totalFailures7d}} failures (7d)</span>\n </div>\n </div>\n </div>\n <!-- KPI Cards -->\n <div class=\"kpi-grid\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon blue\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.totalActiveJobs}}</div>\n <div class=\"kpi-label\">Active Jobs</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon amber\">\n <i class=\"fa-solid fa-clock\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.jobsDueInNextHour}}</div>\n <div class=\"kpi-label\">Due Next Hour</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon purple\">\n <i class=\"fa-solid fa-chart-bar\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.recentExecutions24h}}</div>\n <div class=\"kpi-label\">Runs (24h)</div>\n <div class=\"kpi-sub\" [style.color]=\"GetSuccessRateColor(Kpis.successRate24h)\">\n {{FormatPercentage(Kpis.successRate24h)}} success\n </div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon green\">\n <i class=\"fa-solid fa-play\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.currentlyRunning}}</div>\n <div class=\"kpi-label\">Running Now</div>\n </div>\n </div>\n </div>\n <!-- Two-Column Layout: Live Executions + Alerts/Upcoming -->\n <div class=\"panels-grid\">\n <!-- Live Executions -->\n <div class=\"panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-bolt\"></i> Live Executions\n </div>\n <span class=\"panel-badge\">{{LiveExecutions.length}}</span>\n </div>\n <div class=\"panel-body\">\n @if (LiveExecutions.length === 0) {\n <div class=\"empty-state-small\">\n <i class=\"fa-solid fa-inbox\"></i>\n <span>No recent executions</span>\n </div>\n }\n @for (exec of LiveExecutions; track exec) {\n <div class=\"execution-item\">\n <div class=\"exec-status\">\n <i [class]=\"GetStatusIcon(exec.status)\" [ngClass]=\"GetStatusClass(exec.status)\"></i>\n </div>\n <div class=\"exec-details\">\n <div class=\"exec-name\">{{exec.jobName}}</div>\n <div class=\"exec-meta\">{{FormatTimeAgo(exec.startedAt)}} &middot; {{FormatDuration(exec.duration)}}</div>\n </div>\n <div class=\"exec-status-badge\" [ngClass]=\"GetStatusClass(exec.status)\">\n {{exec.status}}\n </div>\n </div>\n }\n </div>\n </div>\n <!-- Right Column: Alerts + Upcoming -->\n <div class=\"right-column\">\n <!-- Alerts -->\n <div class=\"panel\">\n <div class=\"panel-header\" [ngClass]=\"Alerts.length > 0 ? 'alert-header' : 'clear-header'\">\n <div class=\"panel-title\">\n <i [class]=\"Alerts.length > 0 ? 'fa-solid fa-triangle-exclamation' : 'fa-solid fa-shield-check'\"></i>\n {{Alerts.length > 0 ? 'Alerts' : 'All Clear'}}\n </div>\n @if (Alerts.length > 0) {\n <span class=\"panel-badge error\">{{Alerts.length}}</span>\n }\n @if (Alerts.length === 0) {\n <span class=\"panel-badge clear\">0</span>\n }\n </div>\n <div class=\"panel-body\">\n @if (Alerts.length === 0) {\n <div class=\"empty-state-small all-clear\">\n <i class=\"fa-solid fa-circle-check\"></i>\n <span>No active alerts</span>\n </div>\n }\n @for (alert of Alerts; track alert) {\n <div class=\"alert-item\" [ngClass]=\"'alert-' + alert.severity\">\n <i [class]=\"GetAlertIcon(alert.severity)\" class=\"alert-icon\"></i>\n <div class=\"alert-content\">\n <div class=\"alert-title\">{{alert.title}}</div>\n <div class=\"alert-message\">{{alert.message}}</div>\n </div>\n @if (alert.type === 'stale-lock' && alert.jobId) {\n <button\n class=\"alert-action-btn\"\n (click)=\"ReleaseLock(alert.jobId!)\">\n Release\n </button>\n }\n </div>\n }\n </div>\n </div>\n <!-- Upcoming -->\n <div class=\"panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-calendar-day\"></i> Upcoming (24h)\n </div>\n <span class=\"panel-badge\">{{UpcomingExecutions.length}}</span>\n </div>\n <div class=\"panel-body\">\n @if (UpcomingExecutions.length === 0) {\n <div class=\"empty-state-small\">\n <i class=\"fa-solid fa-calendar-xmark\"></i>\n <span>No upcoming executions</span>\n </div>\n }\n @for (upcoming of UpcomingExecutions; track upcoming) {\n <div class=\"upcoming-item\">\n <div class=\"upcoming-info\">\n <div class=\"upcoming-name\">{{upcoming.jobName}}</div>\n <div class=\"upcoming-meta\">\n {{FormatDateTime(upcoming.nextRunAt)}}\n <span class=\"upcoming-type\">{{upcoming.jobType}}</span>\n </div>\n </div>\n <div class=\"upcoming-countdown\" [class.soon]=\"FormatTimeUntil(upcoming.nextRunAt).includes('m') && !FormatTimeUntil(upcoming.nextRunAt).includes('h')\">\n {{FormatTimeUntil(upcoming.nextRunAt)}}\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n <!-- Locks Section -->\n @if (Locks.length > 0) {\n <div class=\"panel\" style=\"margin-top: 20px;\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-lock\"></i> Active Locks\n </div>\n <span class=\"panel-badge\">{{Locks.length}}</span>\n </div>\n <div class=\"panel-body\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Job</th>\n <th>Locked By</th>\n <th>Locked At</th>\n <th>Expected Completion</th>\n <th>Status</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (lock of Locks; track lock) {\n <tr [class.stale-row]=\"lock.isStale\">\n <td class=\"cell-name\">{{lock.jobName}}</td>\n <td class=\"cell-meta\">{{lock.lockedBy}}</td>\n <td class=\"cell-meta\">{{FormatTimeAgo(lock.lockedAt)}}</td>\n <td class=\"cell-meta\">{{FormatDateTime(lock.expectedCompletion)}}</td>\n <td>\n <span class=\"lock-status-badge\" [class.stale]=\"lock.isStale\">\n {{lock.isStale ? 'Stale' : 'Active'}}\n </span>\n </td>\n <td>\n @if (lock.isStale) {\n <button class=\"release-btn\" (click)=\"ReleaseLock(lock.jobId)\">\n <i class=\"fa-solid fa-lock-open\"></i> Release\n </button>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n </div>\n }\n</div>\n</ng-template>\n"]}
@@ -43,30 +43,32 @@ function SchedulingDashboardComponent_Case_7_Template(rf, ctx) { if (rf & 1) {
43
43
  i0.ɵɵelementStart(1, "button", 14);
44
44
  i0.ɵɵlistener("click", function SchedulingDashboardComponent_Case_7_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.overviewCmp == null ? null : ctx_r0.overviewCmp.ToggleAutoRefresh()); });
45
45
  i0.ɵɵelement(2, "i", 15);
46
- i0.ɵɵtext(3);
47
- i0.ɵɵelementEnd();
46
+ i0.ɵɵelementStart(3, "span", 16);
47
+ i0.ɵɵtext(4);
48
+ i0.ɵɵelementEnd()();
48
49
  } if (rf & 2) {
49
50
  const ctx_r0 = i0.ɵɵnextContext();
50
51
  i0.ɵɵadvance();
51
52
  i0.ɵɵproperty("variant", (ctx_r0.overviewCmp == null ? null : ctx_r0.overviewCmp.AutoRefreshEnabled) ? "primary" : "secondary");
52
- i0.ɵɵadvance(2);
53
- i0.ɵɵtextInterpolate1(" Auto: ", (ctx_r0.overviewCmp == null ? null : ctx_r0.overviewCmp.AutoRefreshEnabled) ? "ON" : "OFF", " ");
53
+ i0.ɵɵadvance(3);
54
+ i0.ɵɵtextInterpolate1("Auto: ", (ctx_r0.overviewCmp == null ? null : ctx_r0.overviewCmp.AutoRefreshEnabled) ? "ON" : "OFF");
54
55
  } }
55
56
  function SchedulingDashboardComponent_Case_8_Template(rf, ctx) { if (rf & 1) {
56
57
  const _r3 = i0.ɵɵgetCurrentView();
57
- i0.ɵɵelementStart(0, "mj-filter-popover", 16);
58
+ i0.ɵɵelementStart(0, "mj-filter-popover", 17);
58
59
  i0.ɵɵlistener("ClearAllRequested", function SchedulingDashboardComponent_Case_8_Template_mj_filter_popover_ClearAllRequested_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.resetJobsFilters()); });
59
- i0.ɵɵelementStart(1, "mj-filter-panel", 17);
60
+ i0.ɵɵelementStart(1, "mj-filter-panel", 18);
60
61
  i0.ɵɵlistener("ValuesChange", function SchedulingDashboardComponent_Case_8_Template_mj_filter_panel_ValuesChange_1_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onJobsFilterValuesChange($event)); })("Reset", function SchedulingDashboardComponent_Case_8_Template_mj_filter_panel_Reset_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.resetJobsFilters()); });
61
62
  i0.ɵɵelementEnd()();
62
63
  i0.ɵɵelementStart(2, "mj-refresh-button", 13);
63
64
  i0.ɵɵlistener("Clicked", function SchedulingDashboardComponent_Case_8_Template_mj_refresh_button_Clicked_2_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.jobsCmp == null ? null : ctx_r0.jobsCmp.Refresh()); });
64
65
  i0.ɵɵelementEnd();
65
- i0.ɵɵelementStart(3, "button", 18);
66
+ i0.ɵɵelementStart(3, "button", 19);
66
67
  i0.ɵɵlistener("click", function SchedulingDashboardComponent_Case_8_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.jobsCmp == null ? null : ctx_r0.jobsCmp.OpenCreateSlideout()); });
67
- i0.ɵɵelement(4, "i", 19);
68
- i0.ɵɵtext(5, " New Job ");
69
- i0.ɵɵelementEnd();
68
+ i0.ɵɵelement(4, "i", 20);
69
+ i0.ɵɵelementStart(5, "span", 16);
70
+ i0.ɵɵtext(6, "New Job");
71
+ i0.ɵɵelementEnd()();
70
72
  } if (rf & 2) {
71
73
  const ctx_r0 = i0.ɵɵnextContext();
72
74
  i0.ɵɵproperty("ActiveCount", ctx_r0.JobsActiveFilterCount)("ShowClearAll", ctx_r0.JobsActiveFilterCount > 0);
@@ -75,9 +77,9 @@ function SchedulingDashboardComponent_Case_8_Template(rf, ctx) { if (rf & 1) {
75
77
  } }
76
78
  function SchedulingDashboardComponent_Case_9_Template(rf, ctx) { if (rf & 1) {
77
79
  const _r4 = i0.ɵɵgetCurrentView();
78
- i0.ɵɵelementStart(0, "mj-filter-popover", 16);
80
+ i0.ɵɵelementStart(0, "mj-filter-popover", 17);
79
81
  i0.ɵɵlistener("ClearAllRequested", function SchedulingDashboardComponent_Case_9_Template_mj_filter_popover_ClearAllRequested_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.resetActivityFilters()); });
80
- i0.ɵɵelementStart(1, "mj-filter-panel", 17);
82
+ i0.ɵɵelementStart(1, "mj-filter-panel", 18);
81
83
  i0.ɵɵlistener("ValuesChange", function SchedulingDashboardComponent_Case_9_Template_mj_filter_panel_ValuesChange_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onActivityFilterValuesChange($event)); })("Reset", function SchedulingDashboardComponent_Case_9_Template_mj_filter_panel_Reset_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.resetActivityFilters()); });
82
84
  i0.ɵɵelementEnd()();
83
85
  i0.ɵɵelementStart(2, "mj-refresh-button", 13);
@@ -91,7 +93,7 @@ function SchedulingDashboardComponent_Case_9_Template(rf, ctx) { if (rf & 1) {
91
93
  } }
92
94
  function SchedulingDashboardComponent_Case_12_Template(rf, ctx) { if (rf & 1) {
93
95
  const _r5 = i0.ɵɵgetCurrentView();
94
- i0.ɵɵelementStart(0, "mj-page-search", 20);
96
+ i0.ɵɵelementStart(0, "mj-page-search", 21);
95
97
  i0.ɵɵlistener("ValueChange", function SchedulingDashboardComponent_Case_12_Template_mj_page_search_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.jobsCmp == null ? null : ctx_r0.jobsCmp.OnSearchChange($event)); });
96
98
  i0.ɵɵelementEnd();
97
99
  } if (rf & 2) {
@@ -100,7 +102,7 @@ function SchedulingDashboardComponent_Case_12_Template(rf, ctx) { if (rf & 1) {
100
102
  } }
101
103
  function SchedulingDashboardComponent_Case_13_For_2_Template(rf, ctx) { if (rf & 1) {
102
104
  const _r7 = i0.ɵɵgetCurrentView();
103
- i0.ɵɵelementStart(0, "mj-filter-chip", 23);
105
+ i0.ɵɵelementStart(0, "mj-filter-chip", 24);
104
106
  i0.ɵɵlistener("Clicked", function SchedulingDashboardComponent_Case_13_For_2_Template_mj_filter_chip_Clicked_0_listener() { const range_r8 = i0.ɵɵrestoreView(_r7).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.activityCmp == null ? null : ctx_r0.activityCmp.OnTimeRangeChange(range_r8.value)); });
105
107
  i0.ɵɵelementEnd();
106
108
  } if (rf & 2) {
@@ -110,10 +112,10 @@ function SchedulingDashboardComponent_Case_13_For_2_Template(rf, ctx) { if (rf &
110
112
  } }
111
113
  function SchedulingDashboardComponent_Case_13_Template(rf, ctx) { if (rf & 1) {
112
114
  const _r6 = i0.ɵɵgetCurrentView();
113
- i0.ɵɵelementStart(0, "mj-page-search", 21);
115
+ i0.ɵɵelementStart(0, "mj-page-search", 22);
114
116
  i0.ɵɵlistener("ValueChange", function SchedulingDashboardComponent_Case_13_Template_mj_page_search_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.activityCmp == null ? null : ctx_r0.activityCmp.OnSearchChange($event)); });
115
117
  i0.ɵɵelementEnd();
116
- i0.ɵɵrepeaterCreate(1, SchedulingDashboardComponent_Case_13_For_2_Template, 1, 2, "mj-filter-chip", 22, _forTrack0);
118
+ i0.ɵɵrepeaterCreate(1, SchedulingDashboardComponent_Case_13_For_2_Template, 1, 2, "mj-filter-chip", 23, _forTrack0);
117
119
  } if (rf & 2) {
118
120
  const ctx_r0 = i0.ɵɵnextContext();
119
121
  i0.ɵɵproperty("Value", (ctx_r0.activityCmp == null ? null : ctx_r0.activityCmp.SearchTerm) ?? "");
@@ -122,7 +124,7 @@ function SchedulingDashboardComponent_Case_13_Template(rf, ctx) { if (rf & 1) {
122
124
  } }
123
125
  function SchedulingDashboardComponent_Case_15_Template(rf, ctx) { if (rf & 1) {
124
126
  const _r9 = i0.ɵɵgetCurrentView();
125
- i0.ɵɵelementStart(0, "app-scheduling-overview", 24, 0);
127
+ i0.ɵɵelementStart(0, "app-scheduling-overview", 25, 0);
126
128
  i0.ɵɵlistener("stateChange", function SchedulingDashboardComponent_Case_15_Template_app_scheduling_overview_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnDashboardStateChange($event)); });
127
129
  i0.ɵɵelementEnd();
128
130
  } if (rf & 2) {
@@ -131,7 +133,7 @@ function SchedulingDashboardComponent_Case_15_Template(rf, ctx) { if (rf & 1) {
131
133
  } }
132
134
  function SchedulingDashboardComponent_Case_16_Template(rf, ctx) { if (rf & 1) {
133
135
  const _r10 = i0.ɵɵgetCurrentView();
134
- i0.ɵɵelementStart(0, "app-scheduling-jobs", 24, 1);
136
+ i0.ɵɵelementStart(0, "app-scheduling-jobs", 25, 1);
135
137
  i0.ɵɵlistener("stateChange", function SchedulingDashboardComponent_Case_16_Template_app_scheduling_jobs_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnJobsStateChange($event)); });
136
138
  i0.ɵɵelementEnd();
137
139
  } if (rf & 2) {
@@ -140,7 +142,7 @@ function SchedulingDashboardComponent_Case_16_Template(rf, ctx) { if (rf & 1) {
140
142
  } }
141
143
  function SchedulingDashboardComponent_Case_17_Template(rf, ctx) { if (rf & 1) {
142
144
  const _r11 = i0.ɵɵgetCurrentView();
143
- i0.ɵɵelementStart(0, "app-scheduling-activity", 24, 2);
145
+ i0.ɵɵelementStart(0, "app-scheduling-activity", 25, 2);
144
146
  i0.ɵɵlistener("stateChange", function SchedulingDashboardComponent_Case_17_Template_app_scheduling_activity_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnActivityStateChange($event)); });
145
147
  i0.ɵɵelementEnd();
146
148
  } if (rf & 2) {
@@ -360,13 +362,13 @@ let SchedulingDashboardComponent = class SchedulingDashboardComponent extends Ba
360
362
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.overviewCmp = _t.first);
361
363
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.jobsCmp = _t.first);
362
364
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.activityCmp = _t.first);
363
- } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 18, vars: 7, consts: [["overviewCmp", ""], ["jobsCmp", ""], ["activityCmp", ""], ["Title", "Scheduling", "Icon", "fa-solid fa-calendar-check", "Subtitle", "Background jobs, executions, and system health"], ["meta", ""], ["Icon", "fa-solid fa-triangle-exclamation", "Variant", "error", 3, "Count", "Label"], ["Icon", "fa-solid fa-circle-check", "Label", "Healthy", "Variant", "success"], ["Label", "jobs", 3, "Count", "Total"], ["actions", ""], ["toolbar", "", 1, "scheduling-toolbar"], [3, "TabChange", "Tabs", "ActiveKey"], ["Placeholder", "Search jobs...", 3, "Value"], [3, "initialState", "HideToolbar"], [3, "Clicked"], ["mjButton", "", "size", "sm", "title", "Toggle auto-refresh", 3, "click", "variant"], [1, "fa-solid", "fa-rotate"], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], ["Placeholder", "Search jobs...", 3, "ValueChange", "Value"], ["Placeholder", "Search executions...", 3, "ValueChange", "Value"], [3, "Label", "Active"], [3, "Clicked", "Label", "Active"], [3, "stateChange", "initialState", "HideToolbar"]], template: function SchedulingDashboardComponent_Template(rf, ctx) { if (rf & 1) {
365
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 18, vars: 7, consts: [["overviewCmp", ""], ["jobsCmp", ""], ["activityCmp", ""], ["Title", "Scheduling", "Icon", "fa-solid fa-calendar-check", "Subtitle", "Background jobs, executions, and system health"], ["meta", ""], ["Icon", "fa-solid fa-triangle-exclamation", "Variant", "error", 3, "Count", "Label"], ["Icon", "fa-solid fa-circle-check", "Label", "Healthy", "Variant", "success"], ["Label", "jobs", 3, "Count", "Total"], ["actions", ""], ["toolbar", "", 1, "scheduling-toolbar"], [3, "TabChange", "Tabs", "ActiveKey"], ["Placeholder", "Search jobs...", 3, "Value"], [3, "initialState", "HideToolbar"], [3, "Clicked"], ["mjButton", "", "size", "sm", "title", "Toggle auto-refresh", 3, "click", "variant"], [1, "fa-solid", "fa-rotate"], [1, "action-btn-label"], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], ["Placeholder", "Search jobs...", 3, "ValueChange", "Value"], ["Placeholder", "Search executions...", 3, "ValueChange", "Value"], [3, "Label", "Active"], [3, "Clicked", "Label", "Active"], [3, "stateChange", "initialState", "HideToolbar"]], template: function SchedulingDashboardComponent_Template(rf, ctx) { if (rf & 1) {
364
366
  i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 3)(2, "div", 4);
365
367
  i0.ɵɵconditionalCreate(3, SchedulingDashboardComponent_Conditional_3_Template, 1, 2, "mj-stat-badge", 5)(4, SchedulingDashboardComponent_Conditional_4_Template, 1, 0, "mj-stat-badge", 6);
366
368
  i0.ɵɵconditionalCreate(5, SchedulingDashboardComponent_Conditional_5_Template, 1, 2, "mj-stat-badge", 7);
367
369
  i0.ɵɵelementEnd();
368
370
  i0.ɵɵelementStart(6, "div", 8);
369
- i0.ɵɵconditionalCreate(7, SchedulingDashboardComponent_Case_7_Template, 4, 2)(8, SchedulingDashboardComponent_Case_8_Template, 6, 4)(9, SchedulingDashboardComponent_Case_9_Template, 3, 4);
371
+ i0.ɵɵconditionalCreate(7, SchedulingDashboardComponent_Case_7_Template, 5, 2)(8, SchedulingDashboardComponent_Case_8_Template, 7, 4)(9, SchedulingDashboardComponent_Case_9_Template, 3, 4);
370
372
  i0.ɵɵelementEnd();
371
373
  i0.ɵɵelementStart(10, "div", 9)(11, "mj-tab-nav", 10);
372
374
  i0.ɵɵlistener("TabChange", function SchedulingDashboardComponent_Template_mj_tab_nav_TabChange_11_listener($event) { return ctx.OnTabChange($event); });
@@ -400,7 +402,7 @@ SchedulingDashboardComponent = __decorate([
400
402
  export { SchedulingDashboardComponent };
401
403
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SchedulingDashboardComponent, [{
402
404
  type: Component,
403
- args: [{ standalone: false, selector: 'mj-scheduling-dashboard', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header\n Title=\"Scheduling\"\n Icon=\"fa-solid fa-calendar-check\"\n Subtitle=\"Background jobs, executions, and system health\">\n <div meta>\n @if (AlertCount > 0) {\n <mj-stat-badge\n Icon=\"fa-solid fa-triangle-exclamation\"\n [Count]=\"AlertCount\"\n [Label]=\"AlertCount === 1 ? 'Alert' : 'Alerts'\"\n Variant=\"error\">\n </mj-stat-badge>\n } @else {\n <mj-stat-badge\n Icon=\"fa-solid fa-circle-check\"\n Label=\"Healthy\"\n Variant=\"success\">\n </mj-stat-badge>\n }\n @if (ActiveTab === 'jobs') {\n <mj-stat-badge\n [Count]=\"jobsCmp?.FilteredJobs?.length ?? 0\"\n [Total]=\"jobsCmp?.Jobs?.length ?? 0\"\n Label=\"jobs\">\n </mj-stat-badge>\n }\n </div>\n <div actions>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <mj-refresh-button (Clicked)=\"overviewCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"overviewCmp?.AutoRefreshEnabled ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"overviewCmp?.ToggleAutoRefresh()\"\n title=\"Toggle auto-refresh\">\n <i class=\"fa-solid fa-rotate\"></i>\n Auto: {{overviewCmp?.AutoRefreshEnabled ? 'ON' : 'OFF'}}\n </button>\n }\n @case ('jobs') {\n <mj-filter-popover\n [ActiveCount]=\"JobsActiveFilterCount\"\n [ShowClearAll]=\"JobsActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetJobsFilters()\">\n <mj-filter-panel\n [Fields]=\"JobsFilterFields\"\n [Values]=\"JobsFilterValues\"\n (ValuesChange)=\"onJobsFilterValuesChange($event)\"\n (Reset)=\"resetJobsFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"jobsCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"jobsCmp?.OpenCreateSlideout()\">\n <i class=\"fa-solid fa-plus\"></i> New Job\n </button>\n }\n @case ('activity') {\n <mj-filter-popover\n [ActiveCount]=\"ActivityActiveFilterCount\"\n [ShowClearAll]=\"ActivityActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetActivityFilters()\">\n <mj-filter-panel\n [Fields]=\"ActivityFilterFields\"\n [Values]=\"ActivityFilterValues\"\n (ValuesChange)=\"onActivityFilterValuesChange($event)\"\n (Reset)=\"resetActivityFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"activityCmp?.Refresh()\"></mj-refresh-button>\n }\n }\n </div>\n\n <div toolbar class=\"scheduling-toolbar\">\n <mj-tab-nav\n [Tabs]=\"Tabs\"\n [ActiveKey]=\"ActiveTab\"\n (TabChange)=\"OnTabChange($any($event))\">\n </mj-tab-nav>\n @switch (ActiveTab) {\n @case ('jobs') {\n <mj-page-search\n Placeholder=\"Search jobs...\"\n [Value]=\"jobsCmp?.SearchTerm ?? ''\"\n (ValueChange)=\"jobsCmp?.OnSearchChange($event)\">\n </mj-page-search>\n }\n @case ('activity') {\n <mj-page-search\n Placeholder=\"Search executions...\"\n [Value]=\"activityCmp?.SearchTerm ?? ''\"\n (ValueChange)=\"activityCmp?.OnSearchChange($event)\">\n </mj-page-search>\n @for (range of activityCmp?.TimeRanges; track range.value) {\n <mj-filter-chip\n [Label]=\"range.label\"\n [Active]=\"activityCmp?.SelectedTimeRange === range.value\"\n (Clicked)=\"activityCmp?.OnTimeRangeChange(range.value)\">\n </mj-filter-chip>\n }\n }\n }\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <app-scheduling-overview\n #overviewCmp\n [initialState]=\"DashboardState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnDashboardStateChange($event)\">\n </app-scheduling-overview>\n }\n @case ('jobs') {\n <app-scheduling-jobs\n #jobsCmp\n [initialState]=\"JobsState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnJobsStateChange($event)\">\n </app-scheduling-jobs>\n }\n @case ('activity') {\n <app-scheduling-activity\n #activityCmp\n [initialState]=\"ActivityState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnActivityStateChange($event)\">\n </app-scheduling-activity>\n }\n }\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* Per-tab toolbar rendered in the [toolbar] slot of <mj-page-header>. */\n.scheduling-toolbar {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n"] }]
405
+ args: [{ standalone: false, selector: 'mj-scheduling-dashboard', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header\n Title=\"Scheduling\"\n Icon=\"fa-solid fa-calendar-check\"\n Subtitle=\"Background jobs, executions, and system health\">\n <div meta>\n @if (AlertCount > 0) {\n <mj-stat-badge\n Icon=\"fa-solid fa-triangle-exclamation\"\n [Count]=\"AlertCount\"\n [Label]=\"AlertCount === 1 ? 'Alert' : 'Alerts'\"\n Variant=\"error\">\n </mj-stat-badge>\n } @else {\n <mj-stat-badge\n Icon=\"fa-solid fa-circle-check\"\n Label=\"Healthy\"\n Variant=\"success\">\n </mj-stat-badge>\n }\n @if (ActiveTab === 'jobs') {\n <mj-stat-badge\n [Count]=\"jobsCmp?.FilteredJobs?.length ?? 0\"\n [Total]=\"jobsCmp?.Jobs?.length ?? 0\"\n Label=\"jobs\">\n </mj-stat-badge>\n }\n </div>\n <div actions>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <mj-refresh-button (Clicked)=\"overviewCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"overviewCmp?.AutoRefreshEnabled ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"overviewCmp?.ToggleAutoRefresh()\"\n title=\"Toggle auto-refresh\">\n <i class=\"fa-solid fa-rotate\"></i>\n <span class=\"action-btn-label\">Auto: {{overviewCmp?.AutoRefreshEnabled ? 'ON' : 'OFF'}}</span>\n </button>\n }\n @case ('jobs') {\n <mj-filter-popover\n [ActiveCount]=\"JobsActiveFilterCount\"\n [ShowClearAll]=\"JobsActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetJobsFilters()\">\n <mj-filter-panel\n [Fields]=\"JobsFilterFields\"\n [Values]=\"JobsFilterValues\"\n (ValuesChange)=\"onJobsFilterValuesChange($event)\"\n (Reset)=\"resetJobsFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"jobsCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"jobsCmp?.OpenCreateSlideout()\">\n <i class=\"fa-solid fa-plus\"></i> <span class=\"action-btn-label\">New Job</span>\n </button>\n }\n @case ('activity') {\n <mj-filter-popover\n [ActiveCount]=\"ActivityActiveFilterCount\"\n [ShowClearAll]=\"ActivityActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetActivityFilters()\">\n <mj-filter-panel\n [Fields]=\"ActivityFilterFields\"\n [Values]=\"ActivityFilterValues\"\n (ValuesChange)=\"onActivityFilterValuesChange($event)\"\n (Reset)=\"resetActivityFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"activityCmp?.Refresh()\"></mj-refresh-button>\n }\n }\n </div>\n\n <div toolbar class=\"scheduling-toolbar\">\n <mj-tab-nav\n [Tabs]=\"Tabs\"\n [ActiveKey]=\"ActiveTab\"\n (TabChange)=\"OnTabChange($any($event))\">\n </mj-tab-nav>\n @switch (ActiveTab) {\n @case ('jobs') {\n <mj-page-search\n Placeholder=\"Search jobs...\"\n [Value]=\"jobsCmp?.SearchTerm ?? ''\"\n (ValueChange)=\"jobsCmp?.OnSearchChange($event)\">\n </mj-page-search>\n }\n @case ('activity') {\n <mj-page-search\n Placeholder=\"Search executions...\"\n [Value]=\"activityCmp?.SearchTerm ?? ''\"\n (ValueChange)=\"activityCmp?.OnSearchChange($event)\">\n </mj-page-search>\n @for (range of activityCmp?.TimeRanges; track range.value) {\n <mj-filter-chip\n [Label]=\"range.label\"\n [Active]=\"activityCmp?.SelectedTimeRange === range.value\"\n (Clicked)=\"activityCmp?.OnTimeRangeChange(range.value)\">\n </mj-filter-chip>\n }\n }\n }\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <app-scheduling-overview\n #overviewCmp\n [initialState]=\"DashboardState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnDashboardStateChange($event)\">\n </app-scheduling-overview>\n }\n @case ('jobs') {\n <app-scheduling-jobs\n #jobsCmp\n [initialState]=\"JobsState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnJobsStateChange($event)\">\n </app-scheduling-jobs>\n }\n @case ('activity') {\n <app-scheduling-activity\n #activityCmp\n [initialState]=\"ActivityState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnActivityStateChange($event)\">\n </app-scheduling-activity>\n }\n }\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* Per-tab toolbar rendered in the [toolbar] slot of <mj-page-header>. */\n.scheduling-toolbar {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n"] }]
404
406
  }], () => [{ type: i0.ChangeDetectorRef }, { type: i1.SchedulingInstrumentationService }], { overviewCmp: [{
405
407
  type: ViewChild,
406
408
  args: ['overviewCmp']
@@ -1 +1 @@
1
- {"version":3,"file":"scheduling-dashboard.component.js","sourceRoot":"","sources":["../../src/Scheduling/scheduling-dashboard.component.ts","../../src/Scheduling/scheduling-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, AfterViewInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy, ViewChild } from '@angular/core';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { TabConfig, FilterFieldConfig } from '@memberjunction/ng-ui-components';\nimport { SchedulingInstrumentationService } from './services/scheduling-instrumentation.service';\nimport { SchedulingOverviewComponent } from './components/scheduling-overview.component';\nimport { SchedulingJobsComponent } from './components/scheduling-jobs.component';\nimport { SchedulingActivityComponent } from './components/scheduling-activity.component';\n\ninterface SchedulingDashboardState {\n activeTab: string;\n dashboardState: Record<string, unknown>;\n jobsState: Record<string, unknown>;\n activityState: Record<string, unknown>;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-scheduling-dashboard',\n templateUrl: './scheduling-dashboard.component.html',\n styleUrls: ['./scheduling-dashboard.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n@RegisterClass(BaseDashboard, 'SchedulingDashboard')\nexport class SchedulingDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n public IsLoading = false;\n public ActiveTab = 'dashboard';\n\n public DashboardState: Record<string, unknown> = {};\n public JobsState: Record<string, unknown> = {};\n public ActivityState: Record<string, unknown> = {};\n\n private visitedTabs = new Set<string>();\n private stateChangeSubject = new Subject<SchedulingDashboardState>();\n\n public ActiveJobCount = 0;\n public AlertCount = 0;\n\n /** ViewChild references to the active inner tab component — drive the toolbar UI rendered in <mj-page-header>. */\n @ViewChild('overviewCmp') overviewCmp?: SchedulingOverviewComponent;\n @ViewChild('jobsCmp') jobsCmp?: SchedulingJobsComponent;\n @ViewChild('activityCmp') activityCmp?: SchedulingActivityComponent;\n\n private kpiSub: Subscription | undefined;\n private alertSub: Subscription | undefined;\n\n public get Tabs(): TabConfig[] {\n return [\n { key: 'dashboard', label: 'Dashboard', icon: 'fa-solid fa-gauge-high' },\n {\n key: 'jobs',\n label: 'Jobs',\n icon: 'fa-solid fa-calendar-check',\n badge: this.ActiveJobCount > 0 ? this.ActiveJobCount : null\n },\n { key: 'activity', label: 'Activity', icon: 'fa-solid fa-clock-rotate-left' }\n ];\n }\n\n constructor(\n private cdr: ChangeDetectorRef,\n private schedulingService: SchedulingInstrumentationService\n ) {\n super();\n this.setupStateManagement();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Scheduling';\n }\n\n ngAfterViewInit(): void {\n this.visitedTabs.add(this.ActiveTab);\n this.loadSidebarCounts();\n this.cdr.detectChanges();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.stateChangeSubject.complete();\n if (this.kpiSub) this.kpiSub.unsubscribe();\n if (this.alertSub) this.alertSub.unsubscribe();\n }\n\n private loadSidebarCounts(): void {\n this.kpiSub = this.schedulingService.kpis$.subscribe(kpis => {\n this.ActiveJobCount = kpis.totalActiveJobs;\n this.cdr.markForCheck();\n });\n\n this.alertSub = this.schedulingService.alerts$.subscribe(alerts => {\n this.AlertCount = alerts.length;\n this.cdr.markForCheck();\n });\n }\n\n public OnTabChange(tabId: string): void {\n this.ActiveTab = tabId;\n this.visitedTabs.add(tabId);\n\n setTimeout(() => {\n SharedService.Instance.InvokeManualResize();\n }, 100);\n\n this.emitStateChange();\n this.cdr.markForCheck();\n }\n\n public HasVisited(tabId: string): boolean {\n return this.visitedTabs.has(tabId);\n }\n\n // ───── Filter-popover plumbing for the [actions]/[toolbar] slots ─────\n\n public get JobsFilterFields(): FilterFieldConfig[] {\n const statusOptions = (this.jobsCmp?.StatusOptions ?? ['']).map(s => ({\n text: s === '' ? 'All Statuses' : s,\n value: s\n }));\n const typeOptions = (this.jobsCmp?.TypeOptions ?? ['']).map(t => ({\n text: t === '' ? 'All Types' : t,\n value: t\n }));\n return [\n { key: 'statusFilter', type: 'dropdown', label: 'Status', icon: 'fa-solid fa-circle-info', placeholder: 'All Statuses', options: statusOptions },\n { key: 'typeFilter', type: 'dropdown', label: 'Type', icon: 'fa-solid fa-shapes', placeholder: 'All Types', options: typeOptions }\n ];\n }\n public get JobsFilterValues(): Record<string, unknown> {\n return {\n statusFilter: this.jobsCmp?.StatusFilter ?? '',\n typeFilter: this.jobsCmp?.TypeFilter ?? ''\n };\n }\n public get JobsActiveFilterCount(): number {\n let n = 0;\n if (this.jobsCmp?.StatusFilter) n++;\n if (this.jobsCmp?.TypeFilter) n++;\n return n;\n }\n public onJobsFilterValuesChange(v: Record<string, unknown>): void {\n if (!this.jobsCmp) return;\n const next = (v ?? {}) as { statusFilter?: string; typeFilter?: string };\n if ((next.statusFilter ?? '') !== this.jobsCmp.StatusFilter) this.jobsCmp.OnStatusFilterChange(next.statusFilter ?? '');\n if ((next.typeFilter ?? '') !== this.jobsCmp.TypeFilter) this.jobsCmp.OnTypeFilterChange(next.typeFilter ?? '');\n }\n public resetJobsFilters(): void {\n if (this.jobsCmp?.StatusFilter) this.jobsCmp.OnStatusFilterChange('');\n if (this.jobsCmp?.TypeFilter) this.jobsCmp.OnTypeFilterChange('');\n }\n\n public get ActivityFilterFields(): FilterFieldConfig[] {\n const statusOptions = (this.activityCmp?.StatusOptions ?? ['']).map(s => ({\n text: s === '' ? 'All Statuses' : s,\n value: s\n }));\n const jobNames = this.activityCmp?.UniqueJobNames ?? [];\n const jobOptions = [{ text: 'All Jobs', value: '' }, ...jobNames.map(n => ({ text: n, value: n }))];\n return [\n { key: 'statusFilter', type: 'dropdown', label: 'Status', icon: 'fa-solid fa-circle-info', placeholder: 'All Statuses', options: statusOptions },\n { key: 'jobNameFilter', type: 'dropdown', label: 'Job', icon: 'fa-solid fa-tag', placeholder: 'All Jobs', filterable: true, options: jobOptions }\n ];\n }\n public get ActivityFilterValues(): Record<string, unknown> {\n return {\n statusFilter: this.activityCmp?.StatusFilter ?? '',\n jobNameFilter: this.activityCmp?.JobNameFilter ?? ''\n };\n }\n public get ActivityActiveFilterCount(): number {\n let n = 0;\n if (this.activityCmp?.StatusFilter) n++;\n if (this.activityCmp?.JobNameFilter) n++;\n return n;\n }\n public onActivityFilterValuesChange(v: Record<string, unknown>): void {\n if (!this.activityCmp) return;\n const next = (v ?? {}) as { statusFilter?: string; jobNameFilter?: string };\n if ((next.statusFilter ?? '') !== this.activityCmp.StatusFilter) this.activityCmp.OnStatusFilterChange(next.statusFilter ?? '');\n if ((next.jobNameFilter ?? '') !== this.activityCmp.JobNameFilter) this.activityCmp.OnJobNameFilterChange(next.jobNameFilter ?? '');\n }\n public resetActivityFilters(): void {\n if (this.activityCmp?.StatusFilter) this.activityCmp.OnStatusFilterChange('');\n if (this.activityCmp?.JobNameFilter) this.activityCmp.OnJobNameFilterChange('');\n }\n\n private setupStateManagement(): void {\n this.stateChangeSubject.pipe(\n debounceTime(50)\n ).subscribe(state => {\n this.UserStateChanged.emit(state);\n });\n }\n\n private emitStateChange(): void {\n this.stateChangeSubject.next({\n activeTab: this.ActiveTab,\n dashboardState: this.DashboardState,\n jobsState: this.JobsState,\n activityState: this.ActivityState\n });\n }\n\n public OnDashboardStateChange(state: Record<string, unknown>): void {\n this.DashboardState = state;\n this.emitStateChange();\n }\n\n public OnJobsStateChange(state: Record<string, unknown>): void {\n this.JobsState = state;\n this.emitStateChange();\n }\n\n public OnActivityStateChange(state: Record<string, unknown>): void {\n this.ActivityState = state;\n this.emitStateChange();\n }\n\n initDashboard(): void {\n this.schedulingService.Provider = this.ProviderToUse;\n this.IsLoading = false;\n }\n\n loadData(): void {\n if (this.Config?.userState) {\n const state = this.Config.userState as Partial<SchedulingDashboardState>;\n if (state.activeTab) {\n this.ActiveTab = state.activeTab;\n this.visitedTabs.add(state.activeTab);\n }\n if (state.dashboardState) this.DashboardState = state.dashboardState;\n if (state.jobsState) this.JobsState = state.jobsState;\n if (state.activityState) this.ActivityState = state.activityState;\n this.cdr.markForCheck();\n }\n this.NotifyLoadComplete();\n }\n}\n","<mj-page-layout>\n <mj-page-header\n Title=\"Scheduling\"\n Icon=\"fa-solid fa-calendar-check\"\n Subtitle=\"Background jobs, executions, and system health\">\n <div meta>\n @if (AlertCount > 0) {\n <mj-stat-badge\n Icon=\"fa-solid fa-triangle-exclamation\"\n [Count]=\"AlertCount\"\n [Label]=\"AlertCount === 1 ? 'Alert' : 'Alerts'\"\n Variant=\"error\">\n </mj-stat-badge>\n } @else {\n <mj-stat-badge\n Icon=\"fa-solid fa-circle-check\"\n Label=\"Healthy\"\n Variant=\"success\">\n </mj-stat-badge>\n }\n @if (ActiveTab === 'jobs') {\n <mj-stat-badge\n [Count]=\"jobsCmp?.FilteredJobs?.length ?? 0\"\n [Total]=\"jobsCmp?.Jobs?.length ?? 0\"\n Label=\"jobs\">\n </mj-stat-badge>\n }\n </div>\n <div actions>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <mj-refresh-button (Clicked)=\"overviewCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"overviewCmp?.AutoRefreshEnabled ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"overviewCmp?.ToggleAutoRefresh()\"\n title=\"Toggle auto-refresh\">\n <i class=\"fa-solid fa-rotate\"></i>\n Auto: {{overviewCmp?.AutoRefreshEnabled ? 'ON' : 'OFF'}}\n </button>\n }\n @case ('jobs') {\n <mj-filter-popover\n [ActiveCount]=\"JobsActiveFilterCount\"\n [ShowClearAll]=\"JobsActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetJobsFilters()\">\n <mj-filter-panel\n [Fields]=\"JobsFilterFields\"\n [Values]=\"JobsFilterValues\"\n (ValuesChange)=\"onJobsFilterValuesChange($event)\"\n (Reset)=\"resetJobsFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"jobsCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"jobsCmp?.OpenCreateSlideout()\">\n <i class=\"fa-solid fa-plus\"></i> New Job\n </button>\n }\n @case ('activity') {\n <mj-filter-popover\n [ActiveCount]=\"ActivityActiveFilterCount\"\n [ShowClearAll]=\"ActivityActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetActivityFilters()\">\n <mj-filter-panel\n [Fields]=\"ActivityFilterFields\"\n [Values]=\"ActivityFilterValues\"\n (ValuesChange)=\"onActivityFilterValuesChange($event)\"\n (Reset)=\"resetActivityFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"activityCmp?.Refresh()\"></mj-refresh-button>\n }\n }\n </div>\n\n <div toolbar class=\"scheduling-toolbar\">\n <mj-tab-nav\n [Tabs]=\"Tabs\"\n [ActiveKey]=\"ActiveTab\"\n (TabChange)=\"OnTabChange($any($event))\">\n </mj-tab-nav>\n @switch (ActiveTab) {\n @case ('jobs') {\n <mj-page-search\n Placeholder=\"Search jobs...\"\n [Value]=\"jobsCmp?.SearchTerm ?? ''\"\n (ValueChange)=\"jobsCmp?.OnSearchChange($event)\">\n </mj-page-search>\n }\n @case ('activity') {\n <mj-page-search\n Placeholder=\"Search executions...\"\n [Value]=\"activityCmp?.SearchTerm ?? ''\"\n (ValueChange)=\"activityCmp?.OnSearchChange($event)\">\n </mj-page-search>\n @for (range of activityCmp?.TimeRanges; track range.value) {\n <mj-filter-chip\n [Label]=\"range.label\"\n [Active]=\"activityCmp?.SelectedTimeRange === range.value\"\n (Clicked)=\"activityCmp?.OnTimeRangeChange(range.value)\">\n </mj-filter-chip>\n }\n }\n }\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <app-scheduling-overview\n #overviewCmp\n [initialState]=\"DashboardState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnDashboardStateChange($event)\">\n </app-scheduling-overview>\n }\n @case ('jobs') {\n <app-scheduling-jobs\n #jobsCmp\n [initialState]=\"JobsState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnJobsStateChange($event)\">\n </app-scheduling-jobs>\n }\n @case ('activity') {\n <app-scheduling-activity\n #activityCmp\n [initialState]=\"ActivityState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnActivityStateChange($event)\">\n </app-scheduling-activity>\n }\n }\n </mj-page-body>\n</mj-page-layout>\n"]}
1
+ {"version":3,"file":"scheduling-dashboard.component.js","sourceRoot":"","sources":["../../src/Scheduling/scheduling-dashboard.component.ts","../../src/Scheduling/scheduling-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, AfterViewInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy, ViewChild } from '@angular/core';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { TabConfig, FilterFieldConfig } from '@memberjunction/ng-ui-components';\nimport { SchedulingInstrumentationService } from './services/scheduling-instrumentation.service';\nimport { SchedulingOverviewComponent } from './components/scheduling-overview.component';\nimport { SchedulingJobsComponent } from './components/scheduling-jobs.component';\nimport { SchedulingActivityComponent } from './components/scheduling-activity.component';\n\ninterface SchedulingDashboardState {\n activeTab: string;\n dashboardState: Record<string, unknown>;\n jobsState: Record<string, unknown>;\n activityState: Record<string, unknown>;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-scheduling-dashboard',\n templateUrl: './scheduling-dashboard.component.html',\n styleUrls: ['./scheduling-dashboard.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n@RegisterClass(BaseDashboard, 'SchedulingDashboard')\nexport class SchedulingDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n public IsLoading = false;\n public ActiveTab = 'dashboard';\n\n public DashboardState: Record<string, unknown> = {};\n public JobsState: Record<string, unknown> = {};\n public ActivityState: Record<string, unknown> = {};\n\n private visitedTabs = new Set<string>();\n private stateChangeSubject = new Subject<SchedulingDashboardState>();\n\n public ActiveJobCount = 0;\n public AlertCount = 0;\n\n /** ViewChild references to the active inner tab component — drive the toolbar UI rendered in <mj-page-header>. */\n @ViewChild('overviewCmp') overviewCmp?: SchedulingOverviewComponent;\n @ViewChild('jobsCmp') jobsCmp?: SchedulingJobsComponent;\n @ViewChild('activityCmp') activityCmp?: SchedulingActivityComponent;\n\n private kpiSub: Subscription | undefined;\n private alertSub: Subscription | undefined;\n\n public get Tabs(): TabConfig[] {\n return [\n { key: 'dashboard', label: 'Dashboard', icon: 'fa-solid fa-gauge-high' },\n {\n key: 'jobs',\n label: 'Jobs',\n icon: 'fa-solid fa-calendar-check',\n badge: this.ActiveJobCount > 0 ? this.ActiveJobCount : null\n },\n { key: 'activity', label: 'Activity', icon: 'fa-solid fa-clock-rotate-left' }\n ];\n }\n\n constructor(\n private cdr: ChangeDetectorRef,\n private schedulingService: SchedulingInstrumentationService\n ) {\n super();\n this.setupStateManagement();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Scheduling';\n }\n\n ngAfterViewInit(): void {\n this.visitedTabs.add(this.ActiveTab);\n this.loadSidebarCounts();\n this.cdr.detectChanges();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.stateChangeSubject.complete();\n if (this.kpiSub) this.kpiSub.unsubscribe();\n if (this.alertSub) this.alertSub.unsubscribe();\n }\n\n private loadSidebarCounts(): void {\n this.kpiSub = this.schedulingService.kpis$.subscribe(kpis => {\n this.ActiveJobCount = kpis.totalActiveJobs;\n this.cdr.markForCheck();\n });\n\n this.alertSub = this.schedulingService.alerts$.subscribe(alerts => {\n this.AlertCount = alerts.length;\n this.cdr.markForCheck();\n });\n }\n\n public OnTabChange(tabId: string): void {\n this.ActiveTab = tabId;\n this.visitedTabs.add(tabId);\n\n setTimeout(() => {\n SharedService.Instance.InvokeManualResize();\n }, 100);\n\n this.emitStateChange();\n this.cdr.markForCheck();\n }\n\n public HasVisited(tabId: string): boolean {\n return this.visitedTabs.has(tabId);\n }\n\n // ───── Filter-popover plumbing for the [actions]/[toolbar] slots ─────\n\n public get JobsFilterFields(): FilterFieldConfig[] {\n const statusOptions = (this.jobsCmp?.StatusOptions ?? ['']).map(s => ({\n text: s === '' ? 'All Statuses' : s,\n value: s\n }));\n const typeOptions = (this.jobsCmp?.TypeOptions ?? ['']).map(t => ({\n text: t === '' ? 'All Types' : t,\n value: t\n }));\n return [\n { key: 'statusFilter', type: 'dropdown', label: 'Status', icon: 'fa-solid fa-circle-info', placeholder: 'All Statuses', options: statusOptions },\n { key: 'typeFilter', type: 'dropdown', label: 'Type', icon: 'fa-solid fa-shapes', placeholder: 'All Types', options: typeOptions }\n ];\n }\n public get JobsFilterValues(): Record<string, unknown> {\n return {\n statusFilter: this.jobsCmp?.StatusFilter ?? '',\n typeFilter: this.jobsCmp?.TypeFilter ?? ''\n };\n }\n public get JobsActiveFilterCount(): number {\n let n = 0;\n if (this.jobsCmp?.StatusFilter) n++;\n if (this.jobsCmp?.TypeFilter) n++;\n return n;\n }\n public onJobsFilterValuesChange(v: Record<string, unknown>): void {\n if (!this.jobsCmp) return;\n const next = (v ?? {}) as { statusFilter?: string; typeFilter?: string };\n if ((next.statusFilter ?? '') !== this.jobsCmp.StatusFilter) this.jobsCmp.OnStatusFilterChange(next.statusFilter ?? '');\n if ((next.typeFilter ?? '') !== this.jobsCmp.TypeFilter) this.jobsCmp.OnTypeFilterChange(next.typeFilter ?? '');\n }\n public resetJobsFilters(): void {\n if (this.jobsCmp?.StatusFilter) this.jobsCmp.OnStatusFilterChange('');\n if (this.jobsCmp?.TypeFilter) this.jobsCmp.OnTypeFilterChange('');\n }\n\n public get ActivityFilterFields(): FilterFieldConfig[] {\n const statusOptions = (this.activityCmp?.StatusOptions ?? ['']).map(s => ({\n text: s === '' ? 'All Statuses' : s,\n value: s\n }));\n const jobNames = this.activityCmp?.UniqueJobNames ?? [];\n const jobOptions = [{ text: 'All Jobs', value: '' }, ...jobNames.map(n => ({ text: n, value: n }))];\n return [\n { key: 'statusFilter', type: 'dropdown', label: 'Status', icon: 'fa-solid fa-circle-info', placeholder: 'All Statuses', options: statusOptions },\n { key: 'jobNameFilter', type: 'dropdown', label: 'Job', icon: 'fa-solid fa-tag', placeholder: 'All Jobs', filterable: true, options: jobOptions }\n ];\n }\n public get ActivityFilterValues(): Record<string, unknown> {\n return {\n statusFilter: this.activityCmp?.StatusFilter ?? '',\n jobNameFilter: this.activityCmp?.JobNameFilter ?? ''\n };\n }\n public get ActivityActiveFilterCount(): number {\n let n = 0;\n if (this.activityCmp?.StatusFilter) n++;\n if (this.activityCmp?.JobNameFilter) n++;\n return n;\n }\n public onActivityFilterValuesChange(v: Record<string, unknown>): void {\n if (!this.activityCmp) return;\n const next = (v ?? {}) as { statusFilter?: string; jobNameFilter?: string };\n if ((next.statusFilter ?? '') !== this.activityCmp.StatusFilter) this.activityCmp.OnStatusFilterChange(next.statusFilter ?? '');\n if ((next.jobNameFilter ?? '') !== this.activityCmp.JobNameFilter) this.activityCmp.OnJobNameFilterChange(next.jobNameFilter ?? '');\n }\n public resetActivityFilters(): void {\n if (this.activityCmp?.StatusFilter) this.activityCmp.OnStatusFilterChange('');\n if (this.activityCmp?.JobNameFilter) this.activityCmp.OnJobNameFilterChange('');\n }\n\n private setupStateManagement(): void {\n this.stateChangeSubject.pipe(\n debounceTime(50)\n ).subscribe(state => {\n this.UserStateChanged.emit(state);\n });\n }\n\n private emitStateChange(): void {\n this.stateChangeSubject.next({\n activeTab: this.ActiveTab,\n dashboardState: this.DashboardState,\n jobsState: this.JobsState,\n activityState: this.ActivityState\n });\n }\n\n public OnDashboardStateChange(state: Record<string, unknown>): void {\n this.DashboardState = state;\n this.emitStateChange();\n }\n\n public OnJobsStateChange(state: Record<string, unknown>): void {\n this.JobsState = state;\n this.emitStateChange();\n }\n\n public OnActivityStateChange(state: Record<string, unknown>): void {\n this.ActivityState = state;\n this.emitStateChange();\n }\n\n initDashboard(): void {\n this.schedulingService.Provider = this.ProviderToUse;\n this.IsLoading = false;\n }\n\n loadData(): void {\n if (this.Config?.userState) {\n const state = this.Config.userState as Partial<SchedulingDashboardState>;\n if (state.activeTab) {\n this.ActiveTab = state.activeTab;\n this.visitedTabs.add(state.activeTab);\n }\n if (state.dashboardState) this.DashboardState = state.dashboardState;\n if (state.jobsState) this.JobsState = state.jobsState;\n if (state.activityState) this.ActivityState = state.activityState;\n this.cdr.markForCheck();\n }\n this.NotifyLoadComplete();\n }\n}\n","<mj-page-layout>\n <mj-page-header\n Title=\"Scheduling\"\n Icon=\"fa-solid fa-calendar-check\"\n Subtitle=\"Background jobs, executions, and system health\">\n <div meta>\n @if (AlertCount > 0) {\n <mj-stat-badge\n Icon=\"fa-solid fa-triangle-exclamation\"\n [Count]=\"AlertCount\"\n [Label]=\"AlertCount === 1 ? 'Alert' : 'Alerts'\"\n Variant=\"error\">\n </mj-stat-badge>\n } @else {\n <mj-stat-badge\n Icon=\"fa-solid fa-circle-check\"\n Label=\"Healthy\"\n Variant=\"success\">\n </mj-stat-badge>\n }\n @if (ActiveTab === 'jobs') {\n <mj-stat-badge\n [Count]=\"jobsCmp?.FilteredJobs?.length ?? 0\"\n [Total]=\"jobsCmp?.Jobs?.length ?? 0\"\n Label=\"jobs\">\n </mj-stat-badge>\n }\n </div>\n <div actions>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <mj-refresh-button (Clicked)=\"overviewCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"overviewCmp?.AutoRefreshEnabled ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"overviewCmp?.ToggleAutoRefresh()\"\n title=\"Toggle auto-refresh\">\n <i class=\"fa-solid fa-rotate\"></i>\n <span class=\"action-btn-label\">Auto: {{overviewCmp?.AutoRefreshEnabled ? 'ON' : 'OFF'}}</span>\n </button>\n }\n @case ('jobs') {\n <mj-filter-popover\n [ActiveCount]=\"JobsActiveFilterCount\"\n [ShowClearAll]=\"JobsActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetJobsFilters()\">\n <mj-filter-panel\n [Fields]=\"JobsFilterFields\"\n [Values]=\"JobsFilterValues\"\n (ValuesChange)=\"onJobsFilterValuesChange($event)\"\n (Reset)=\"resetJobsFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"jobsCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"jobsCmp?.OpenCreateSlideout()\">\n <i class=\"fa-solid fa-plus\"></i> <span class=\"action-btn-label\">New Job</span>\n </button>\n }\n @case ('activity') {\n <mj-filter-popover\n [ActiveCount]=\"ActivityActiveFilterCount\"\n [ShowClearAll]=\"ActivityActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetActivityFilters()\">\n <mj-filter-panel\n [Fields]=\"ActivityFilterFields\"\n [Values]=\"ActivityFilterValues\"\n (ValuesChange)=\"onActivityFilterValuesChange($event)\"\n (Reset)=\"resetActivityFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"activityCmp?.Refresh()\"></mj-refresh-button>\n }\n }\n </div>\n\n <div toolbar class=\"scheduling-toolbar\">\n <mj-tab-nav\n [Tabs]=\"Tabs\"\n [ActiveKey]=\"ActiveTab\"\n (TabChange)=\"OnTabChange($any($event))\">\n </mj-tab-nav>\n @switch (ActiveTab) {\n @case ('jobs') {\n <mj-page-search\n Placeholder=\"Search jobs...\"\n [Value]=\"jobsCmp?.SearchTerm ?? ''\"\n (ValueChange)=\"jobsCmp?.OnSearchChange($event)\">\n </mj-page-search>\n }\n @case ('activity') {\n <mj-page-search\n Placeholder=\"Search executions...\"\n [Value]=\"activityCmp?.SearchTerm ?? ''\"\n (ValueChange)=\"activityCmp?.OnSearchChange($event)\">\n </mj-page-search>\n @for (range of activityCmp?.TimeRanges; track range.value) {\n <mj-filter-chip\n [Label]=\"range.label\"\n [Active]=\"activityCmp?.SelectedTimeRange === range.value\"\n (Clicked)=\"activityCmp?.OnTimeRangeChange(range.value)\">\n </mj-filter-chip>\n }\n }\n }\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <app-scheduling-overview\n #overviewCmp\n [initialState]=\"DashboardState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnDashboardStateChange($event)\">\n </app-scheduling-overview>\n }\n @case ('jobs') {\n <app-scheduling-jobs\n #jobsCmp\n [initialState]=\"JobsState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnJobsStateChange($event)\">\n </app-scheduling-jobs>\n }\n @case ('activity') {\n <app-scheduling-activity\n #activityCmp\n [initialState]=\"ActivityState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnActivityStateChange($event)\">\n </app-scheduling-activity>\n }\n }\n </mj-page-body>\n</mj-page-layout>\n"]}
@@ -52,6 +52,8 @@ export interface JobStatistics {
52
52
  ownerUser: string | null;
53
53
  notifyOnSuccess: boolean;
54
54
  notifyOnFailure: boolean;
55
+ /** When true AND lastRunAt is unset, the scheduler runs the job immediately on its next poll instead of waiting for the next cron tick. */
56
+ runImmediatelyIfNeverRun: boolean;
55
57
  startAt?: Date;
56
58
  endAt?: Date;
57
59
  createdAt: Date;
@@ -1 +1 @@
1
- {"version":3,"file":"scheduling-instrumentation.service.d.ts","sourceRoot":"","sources":["../../../src/Scheduling/services/scheduling-instrumentation.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheduling-instrumentation.service.d.ts","sourceRoot":"","sources":["../../../src/Scheduling/services/scheduling-instrumentation.service.ts"],"names":[],"mappings":"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"}
@@ -211,6 +211,7 @@ export class SchedulingInstrumentationService {
211
211
  ownerUser: job.OwnerUser,
212
212
  notifyOnSuccess: job.NotifyOnSuccess,
213
213
  notifyOnFailure: job.NotifyOnFailure,
214
+ runImmediatelyIfNeverRun: job.RunImmediatelyIfNeverRun === true,
214
215
  startAt: job.StartAt ? new Date(job.StartAt) : undefined,
215
216
  endAt: job.EndAt ? new Date(job.EndAt) : undefined,
216
217
  createdAt: new Date(job.__mj_CreatedAt)