@memberjunction/ng-dashboards 6.2.0-edge.5 → 6.2.0-edge.7

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 (293) hide show
  1. package/README.md +35 -0
  2. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +2 -2
  3. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  4. package/dist/AI/components/analytics/realtime/realtime-management.component.d.ts.map +1 -1
  5. package/dist/AI/components/analytics/realtime/realtime-management.component.js +3 -1
  6. package/dist/AI/components/analytics/realtime/realtime-management.component.js.map +1 -1
  7. package/dist/AI/components/analytics/realtime/realtime-overview.component.d.ts +1 -1
  8. package/dist/AI/components/analytics/realtime/realtime-overview.component.js +3 -3
  9. package/dist/AI/components/analytics/realtime/realtime-overview.component.js.map +1 -1
  10. package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts +6 -4
  11. package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts.map +1 -1
  12. package/dist/AI/components/analytics/realtime/realtime-session-data.js +8 -2
  13. package/dist/AI/components/analytics/realtime/realtime-session-data.js.map +1 -1
  14. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +1 -1
  15. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  16. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +21 -13
  17. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  18. package/dist/AI/components/autotagging/components/classify-item-grid.component.js +1 -1
  19. package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -1
  20. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -1
  21. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +1 -0
  22. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -1
  23. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -1
  24. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +1 -0
  25. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -1
  26. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -1
  27. package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1 -0
  28. package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -1
  29. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +7 -1
  30. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  31. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +210 -57
  32. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  33. package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts +12 -11
  34. package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts.map +1 -1
  35. package/dist/AI/components/duplicates/duplicate-detection-run-scope.js +15 -15
  36. package/dist/AI/components/duplicates/duplicate-detection-run-scope.js.map +1 -1
  37. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  38. package/dist/AI/components/execution-monitoring.component.js +28 -16
  39. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  40. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +1 -0
  41. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  42. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +32 -8
  43. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  44. package/dist/AI/components/tags/tags-resource.component.d.ts +1 -1
  45. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  46. package/dist/AI/components/tags/tags-resource.component.js +18 -9
  47. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  48. package/dist/AI/components/vectors/sensitive-fields.d.ts +9 -4
  49. package/dist/AI/components/vectors/sensitive-fields.d.ts.map +1 -1
  50. package/dist/AI/components/vectors/sensitive-fields.js +39 -14
  51. package/dist/AI/components/vectors/sensitive-fields.js.map +1 -1
  52. package/dist/AI/components/vectors/vector-document-rules.d.ts +13 -0
  53. package/dist/AI/components/vectors/vector-document-rules.d.ts.map +1 -1
  54. package/dist/AI/components/vectors/vector-document-rules.js +14 -0
  55. package/dist/AI/components/vectors/vector-document-rules.js.map +1 -1
  56. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +34 -14
  57. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  58. package/dist/AI/components/vectors/vector-management-resource.component.js +134 -51
  59. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  60. package/dist/AI/components/vectors/vector-store-selection.d.ts +32 -0
  61. package/dist/AI/components/vectors/vector-store-selection.d.ts.map +1 -0
  62. package/dist/AI/components/vectors/vector-store-selection.js +57 -0
  63. package/dist/AI/components/vectors/vector-store-selection.js.map +1 -0
  64. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  65. package/dist/AI/services/ai-instrumentation.service.js +4 -2
  66. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  67. package/dist/Actions/action-result-code.d.ts +80 -0
  68. package/dist/Actions/action-result-code.d.ts.map +1 -0
  69. package/dist/Actions/action-result-code.js +163 -0
  70. package/dist/Actions/action-result-code.js.map +1 -0
  71. package/dist/Actions/components/actions-overview.component.d.ts +8 -0
  72. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  73. package/dist/Actions/components/actions-overview.component.js +12 -9
  74. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  75. package/dist/Actions/components/execution-monitoring.component.d.ts +29 -9
  76. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  77. package/dist/Actions/components/execution-monitoring.component.js +65 -42
  78. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  79. package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
  80. package/dist/Actions/components/explorer/action-card.component.js +5 -4
  81. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  82. package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts +198 -0
  83. package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts.map +1 -0
  84. package/dist/ChiefOfStaff/chief-of-staff-agent-context.js +289 -0
  85. package/dist/ChiefOfStaff/chief-of-staff-agent-context.js.map +1 -0
  86. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts +29 -0
  87. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts.map +1 -0
  88. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js +666 -0
  89. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js.map +1 -0
  90. package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts +56 -0
  91. package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts.map +1 -0
  92. package/dist/ChiefOfStaff/chief-of-staff-governance.component.js +515 -0
  93. package/dist/ChiefOfStaff/chief-of-staff-governance.component.js.map +1 -0
  94. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts +14 -0
  95. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts.map +1 -0
  96. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js +39 -0
  97. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js.map +1 -0
  98. package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts +17 -0
  99. package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts.map +1 -0
  100. package/dist/ChiefOfStaff/chief-of-staff-overview.component.js +485 -0
  101. package/dist/ChiefOfStaff/chief-of-staff-overview.component.js.map +1 -0
  102. package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts +139 -0
  103. package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts.map +1 -0
  104. package/dist/ChiefOfStaff/chief-of-staff-page-base.js +602 -0
  105. package/dist/ChiefOfStaff/chief-of-staff-page-base.js.map +1 -0
  106. package/dist/ChiefOfStaff/index.d.ts +6 -0
  107. package/dist/ChiefOfStaff/index.d.ts.map +1 -0
  108. package/dist/ChiefOfStaff/index.js +6 -0
  109. package/dist/ChiefOfStaff/index.js.map +1 -0
  110. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  111. package/dist/Communication/communication-logs-resource.component.js +2 -1
  112. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  113. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  114. package/dist/Communication/communication-monitor-resource.component.js +26 -21
  115. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  116. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  117. package/dist/Communication/communication-runs-resource.component.js +14 -13
  118. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  119. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  120. package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
  121. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  122. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  123. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +2 -1
  124. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  125. package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
  126. package/dist/ComponentStudio/services/component-version.service.js +3 -0
  127. package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
  128. package/dist/DashboardEditor/dashboard-editor.component.d.ts +17 -2
  129. package/dist/DashboardEditor/dashboard-editor.component.d.ts.map +1 -1
  130. package/dist/DashboardEditor/dashboard-editor.component.js +94 -43
  131. package/dist/DashboardEditor/dashboard-editor.component.js.map +1 -1
  132. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +45 -2
  133. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  134. package/dist/DataExplorer/data-explorer-dashboard.component.js +178 -55
  135. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  136. package/dist/DataExplorer/models/explorer-state.interface.d.ts +2 -0
  137. package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -1
  138. package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -1
  139. package/dist/DevTools/graphql-console.component.js +2 -2
  140. package/dist/DevTools/lazy-module-status.component.js +2 -2
  141. package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -1
  142. package/dist/FormBuilder/form-builder-resource.component.js +5 -0
  143. package/dist/FormBuilder/form-builder-resource.component.js.map +1 -1
  144. package/dist/Integration/components/connections/connections.component.js +2 -2
  145. package/dist/Integration/services/integration-data.service.d.ts +1 -1
  146. package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
  147. package/dist/Integration/services/integration-data.service.js +4 -3
  148. package/dist/Integration/services/integration-data.service.js.map +1 -1
  149. package/dist/Lists/components/lists-browse-resource.component.js +1 -1
  150. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  151. package/dist/Lists/components/lists-my-lists-resource.component.js +1 -1
  152. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  153. package/dist/LoginStudio/login-studio-resource.component.d.ts +10 -2
  154. package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -1
  155. package/dist/LoginStudio/login-studio-resource.component.js +111 -77
  156. package/dist/LoginStudio/login-studio-resource.component.js.map +1 -1
  157. package/dist/MCP/mcp-dashboard.component.d.ts +24 -4
  158. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  159. package/dist/MCP/mcp-dashboard.component.js +118 -65
  160. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  161. package/dist/PredictiveStudio/business-predictions.view-models.d.ts +1 -1
  162. package/dist/PredictiveStudio/business-predictions.view-models.d.ts.map +1 -1
  163. package/dist/PredictiveStudio/business-predictions.view-models.js +3 -3
  164. package/dist/PredictiveStudio/business-predictions.view-models.js.map +1 -1
  165. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts +6 -63
  166. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
  167. package/dist/PredictiveStudio/components/ps-experiments.component.js +257 -521
  168. package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
  169. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts +0 -18
  170. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts.map +1 -1
  171. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +124 -251
  172. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js.map +1 -1
  173. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts +5 -9
  174. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
  175. package/dist/PredictiveStudio/components/ps-pipelines.component.js +98 -130
  176. package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
  177. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts +53 -4
  178. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -1
  179. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +338 -326
  180. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -1
  181. package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts +19 -0
  182. package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts.map +1 -0
  183. package/dist/PredictiveStudio/components/ps-row-drivers.component.js +85 -0
  184. package/dist/PredictiveStudio/components/ps-row-drivers.component.js.map +1 -0
  185. package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts +19 -1
  186. package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts.map +1 -1
  187. package/dist/PredictiveStudio/engine/predictive-studio.engine.js +52 -2
  188. package/dist/PredictiveStudio/engine/predictive-studio.engine.js.map +1 -1
  189. package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts +3 -1
  190. package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts.map +1 -1
  191. package/dist/PredictiveStudio/predictive-studio-agent-context.js +3 -0
  192. package/dist/PredictiveStudio/predictive-studio-agent-context.js.map +1 -1
  193. package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts +27 -4
  194. package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts.map +1 -1
  195. package/dist/PredictiveStudio/predictive-studio-score-history.service.js +94 -61
  196. package/dist/PredictiveStudio/predictive-studio-score-history.service.js.map +1 -1
  197. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +29 -5
  198. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
  199. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +186 -103
  200. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
  201. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +1 -1
  202. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
  203. package/dist/QueryBrowser/query-browser-resource.component.d.ts +26 -0
  204. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  205. package/dist/QueryBrowser/query-browser-resource.component.js +375 -252
  206. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  207. package/dist/UserRoutines/user-routines-resource.component.d.ts +8 -1
  208. package/dist/UserRoutines/user-routines-resource.component.d.ts.map +1 -1
  209. package/dist/UserRoutines/user-routines-resource.component.js +22 -4
  210. package/dist/UserRoutines/user-routines-resource.component.js.map +1 -1
  211. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
  212. package/dist/VersionHistory/components/diff-resource.component.js +1 -0
  213. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  214. package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts +162 -0
  215. package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts.map +1 -0
  216. package/dist/VideoStudio/components/vs-archetype-editor.component.js +1105 -0
  217. package/dist/VideoStudio/components/vs-archetype-editor.component.js.map +1 -0
  218. package/dist/VideoStudio/components/vs-audio-options.component.d.ts +27 -0
  219. package/dist/VideoStudio/components/vs-audio-options.component.d.ts.map +1 -0
  220. package/dist/VideoStudio/components/vs-audio-options.component.js +119 -0
  221. package/dist/VideoStudio/components/vs-audio-options.component.js.map +1 -0
  222. package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts +105 -0
  223. package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts.map +1 -0
  224. package/dist/VideoStudio/components/vs-copilot-panel.component.js +560 -0
  225. package/dist/VideoStudio/components/vs-copilot-panel.component.js.map +1 -0
  226. package/dist/VideoStudio/components/vs-production-brief.component.d.ts +163 -0
  227. package/dist/VideoStudio/components/vs-production-brief.component.d.ts.map +1 -0
  228. package/dist/VideoStudio/components/vs-production-brief.component.js +1054 -0
  229. package/dist/VideoStudio/components/vs-production-brief.component.js.map +1 -0
  230. package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts +43 -0
  231. package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts.map +1 -0
  232. package/dist/VideoStudio/components/vs-setup-health-card.component.js +412 -0
  233. package/dist/VideoStudio/components/vs-setup-health-card.component.js.map +1 -0
  234. package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts +73 -0
  235. package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts.map +1 -0
  236. package/dist/VideoStudio/components/vs-studio-slide-in.component.js +271 -0
  237. package/dist/VideoStudio/components/vs-studio-slide-in.component.js.map +1 -0
  238. package/dist/VideoStudio/index.d.ts +12 -0
  239. package/dist/VideoStudio/index.d.ts.map +1 -0
  240. package/dist/VideoStudio/index.js +12 -0
  241. package/dist/VideoStudio/index.js.map +1 -0
  242. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts +118 -0
  243. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts.map +1 -0
  244. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js +964 -0
  245. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js.map +1 -0
  246. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts +70 -0
  247. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts.map +1 -0
  248. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js +600 -0
  249. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js.map +1 -0
  250. package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts +182 -0
  251. package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts.map +1 -0
  252. package/dist/VideoStudio/resources/video-studio-productions-resource.component.js +1481 -0
  253. package/dist/VideoStudio/resources/video-studio-productions-resource.component.js.map +1 -0
  254. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts +102 -0
  255. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts.map +1 -0
  256. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js +240 -0
  257. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js.map +1 -0
  258. package/dist/VideoStudio/video-studio-agent-context.d.ts +495 -0
  259. package/dist/VideoStudio/video-studio-agent-context.d.ts.map +1 -0
  260. package/dist/VideoStudio/video-studio-agent-context.js +992 -0
  261. package/dist/VideoStudio/video-studio-agent-context.js.map +1 -0
  262. package/dist/ai-dashboards.module.d.ts +25 -21
  263. package/dist/ai-dashboards.module.d.ts.map +1 -1
  264. package/dist/ai-dashboards.module.js +25 -3
  265. package/dist/ai-dashboards.module.js.map +1 -1
  266. package/dist/module.d.ts +13 -12
  267. package/dist/module.d.ts.map +1 -1
  268. package/dist/module.js +7 -0
  269. package/dist/module.js.map +1 -1
  270. package/dist/public-api.d.ts +8 -0
  271. package/dist/public-api.d.ts.map +1 -1
  272. package/dist/public-api.js +10 -0
  273. package/dist/public-api.js.map +1 -1
  274. package/dist/shared/action-scheduled-job.d.ts.map +1 -1
  275. package/dist/shared/action-scheduled-job.js +2 -0
  276. package/dist/shared/action-scheduled-job.js.map +1 -1
  277. package/dist/video-studio-dashboards.module.d.ts +40 -0
  278. package/dist/video-studio-dashboards.module.d.ts.map +1 -0
  279. package/dist/video-studio-dashboards.module.js +159 -0
  280. package/dist/video-studio-dashboards.module.js.map +1 -0
  281. package/package.json +77 -71
  282. package/dist/PredictiveStudio/at-risk.view-models.d.ts +0 -120
  283. package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +0 -1
  284. package/dist/PredictiveStudio/at-risk.view-models.js +0 -261
  285. package/dist/PredictiveStudio/at-risk.view-models.js.map +0 -1
  286. package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts +0 -109
  287. package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts.map +0 -1
  288. package/dist/PredictiveStudio/components/ps-confirm-modal.component.js +0 -323
  289. package/dist/PredictiveStudio/components/ps-confirm-modal.component.js.map +0 -1
  290. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts +0 -137
  291. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts.map +0 -1
  292. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js +0 -826
  293. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js.map +0 -1
@@ -19,10 +19,10 @@ import { debounceTime, takeUntil } from 'rxjs/operators';
19
19
  import { CompositeKey, LogStatus, RecordMergeRequest, RunView } from '@memberjunction/core';
20
20
  import { MJNotificationService } from '@memberjunction/ng-notifications';
21
21
  import { KnowledgeHubMetadataEngine } from '@memberjunction/core-entities';
22
- import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
22
+ import { EscapeSQLString, RegisterClass, UUIDsEqual } from '@memberjunction/global';
23
23
  import { BaseResourceComponent, NavigationService, ActivityService } from '@memberjunction/ng-shared';
24
24
  import { BuildDuplicateAgentContext, ResolveEntityDoc, ResolveEntityFilter, } from './duplicate-detection-agent-context';
25
- import { BuildMatchQueriesForDetailIDs, BuildRunScopedDetailsQuery, GroupMatchesByDetail, PickDefaultEntityDocument, SelectCurrentRunForEntity, } from './duplicate-detection-run-scope';
25
+ import { BuildMatchQueriesForDetailIDs, BuildRunScopedDetailsQuery, GroupMatchesByDetail, PickDefaultEntityDocument, SelectCurrentRunForDocument, } from './duplicate-detection-run-scope';
26
26
  import { ValidateStringParam } from '../../../shared/agent-tool-validation';
27
27
  import * as i0 from "@angular/core";
28
28
  import * as i1 from "./compare-value.component";
@@ -1530,6 +1530,11 @@ let DuplicateDetectionResourceComponent = class DuplicateDetectionResourceCompon
1530
1530
  DetectionStage = '';
1531
1531
  /** Raw stage key from the last progress event — used to detect phase transitions */
1532
1532
  detectionRawStage = '';
1533
+ /** Run IDs that were found unresponsive so reconnectToActiveRun does not loop on them */
1534
+ staleRunIDs = new Set();
1535
+ activeProgressSub = null;
1536
+ idleTimer = null;
1537
+ closeComparisonTimer = null;
1533
1538
  /** Runtime threshold overrides — initialized from entity doc, adjustable via sliders */
1534
1539
  RunPotentialThreshold = 0.70;
1535
1540
  RunAbsoluteThreshold = 0.95;
@@ -1601,9 +1606,7 @@ let DuplicateDetectionResourceComponent = class DuplicateDetectionResourceCompon
1601
1606
  FilterByEntity(entityName) {
1602
1607
  this.SelectedEntityFilter = entityName;
1603
1608
  this.Filters.EntityName = entityName;
1604
- this.autoSelectDisplayMode();
1605
- this.emitAgentContext();
1606
- this.cdr.detectChanges();
1609
+ this.applyFilters();
1607
1610
  }
1608
1611
  /** Get paged groups for table view */
1609
1612
  GetPagedGroups() {
@@ -1826,6 +1829,16 @@ let DuplicateDetectionResourceComponent = class DuplicateDetectionResourceCompon
1826
1829
  }
1827
1830
  ngOnDestroy() {
1828
1831
  super.ngOnDestroy();
1832
+ if (this.idleTimer) {
1833
+ clearTimeout(this.idleTimer);
1834
+ this.idleTimer = null;
1835
+ }
1836
+ if (this.closeComparisonTimer) {
1837
+ clearTimeout(this.closeComparisonTimer);
1838
+ this.closeComparisonTimer = null;
1839
+ }
1840
+ this.activeProgressSub?.unsubscribe();
1841
+ this.activeProgressSub = null;
1829
1842
  this.destroy$.next();
1830
1843
  this.destroy$.complete();
1831
1844
  }
@@ -1936,7 +1949,7 @@ let DuplicateDetectionResourceComponent = class DuplicateDetectionResourceCompon
1936
1949
  * current (see reviewLoadGeneration).
1937
1950
  */
1938
1951
  async fetchReviewRowsForSelectedDocument() {
1939
- const run = SelectCurrentRunForEntity(this.Runs, this.SelectedDocumentThresholds?.EntityID);
1952
+ const run = SelectCurrentRunForDocument(this.Runs, this.SelectedEntityDocumentID);
1940
1953
  if (!run) {
1941
1954
  return { run: null, details: [], matches: [] };
1942
1955
  }
@@ -2001,17 +2014,31 @@ let DuplicateDetectionResourceComponent = class DuplicateDetectionResourceCompon
2001
2014
  /**
2002
2015
  * Check if there's an in-progress detection run and reconnect to its
2003
2016
  * progress subscription. This handles the case where the user navigated
2004
- * away and came back while a run was active.
2017
+ * away and came back while a run was active, while ignoring abandoned/stale runs.
2005
2018
  */
2006
2019
  reconnectToActiveRun() {
2007
2020
  if (this.IsDetecting)
2008
2021
  return; // Already tracking a run
2009
- const activeRun = this.Runs.find(r => r.ProcessingStatus === 'In Progress');
2022
+ const now = Date.now();
2023
+ const maxStaleAgeMs = 5 * 60 * 1000; // 5 minutes without a DB update
2024
+ const activeRun = this.Runs.find(r => {
2025
+ if (r.ProcessingStatus !== 'In Progress' || r.EndedAt != null || r.CancellationRequested) {
2026
+ return false;
2027
+ }
2028
+ if (this.staleRunIDs.has(r.ID)) {
2029
+ return false;
2030
+ }
2031
+ const lastActivity = r.__mj_UpdatedAt ?? r.StartedAt;
2032
+ const lastTime = lastActivity ? new Date(lastActivity).getTime() : 0;
2033
+ return lastTime > 0 && (now - lastTime) < maxStaleAgeMs;
2034
+ });
2010
2035
  if (!activeRun)
2011
2036
  return;
2012
2037
  LogStatus(`[DuplicateDetection] Reconnecting to in-progress run ${activeRun.ID}`);
2013
2038
  this.IsDetecting = true;
2014
- this.DetectionProgress = 0;
2039
+ this.DetectionProgress = (activeRun.TotalItemCount && activeRun.TotalItemCount > 0 && activeRun.ProcessedItemCount != null)
2040
+ ? Math.min(99, Math.round((activeRun.ProcessedItemCount / activeRun.TotalItemCount) * 100))
2041
+ : 0;
2015
2042
  this.DetectionStage = 'Reconnecting...';
2016
2043
  this.cdr.detectChanges();
2017
2044
  this.subscribeToPipelineProgress(activeRun.ID);
@@ -2034,10 +2061,8 @@ let DuplicateDetectionResourceComponent = class DuplicateDetectionResourceCompon
2034
2061
  this.cdr.detectChanges();
2035
2062
  try {
2036
2063
  const md = this.ProviderToUse;
2037
- const dupeRun = await md.GetEntityObject('MJ: Duplicate Runs');
2038
- dupeRun.NewRecord();
2039
2064
  // Look up the EntityID from the entity document's entity name
2040
- const entityInfo = md.Entities.find(e => e.Name === selectedDoc.EntityName);
2065
+ const entityInfo = md.EntityByName(selectedDoc.EntityName);
2041
2066
  if (!entityInfo) {
2042
2067
  MJNotificationService.Instance.CreateSimpleNotification(`Entity "${selectedDoc.EntityName}" not found in metadata`, 'error', 5000);
2043
2068
  this.IsDetecting = false;
@@ -2046,16 +2071,43 @@ let DuplicateDetectionResourceComponent = class DuplicateDetectionResourceCompon
2046
2071
  this.cdr.detectChanges();
2047
2072
  return;
2048
2073
  }
2074
+ // Persist threshold slider overrides onto the selected Entity Document so the
2075
+ // server hook (which reads thresholds from MJ: Entity Documents) uses them.
2076
+ if (this.RunPotentialThreshold !== selectedDoc.PotentialMatchThreshold ||
2077
+ this.RunAbsoluteThreshold !== selectedDoc.AbsoluteMatchThreshold) {
2078
+ const ed = await md.GetEntityObject('MJ: Entity Documents', md.CurrentUser);
2079
+ if (await ed.Load(selectedDoc.ID)) {
2080
+ ed.PotentialMatchThreshold = this.RunPotentialThreshold;
2081
+ ed.AbsoluteMatchThreshold = this.RunAbsoluteThreshold;
2082
+ if (await ed.Save()) {
2083
+ selectedDoc.PotentialMatchThreshold = this.RunPotentialThreshold;
2084
+ selectedDoc.AbsoluteMatchThreshold = this.RunAbsoluteThreshold;
2085
+ }
2086
+ }
2087
+ }
2049
2088
  // DD-1: Track whether merging is available for the selected entity
2050
2089
  this.MergeEnabled = entityInfo.AllowRecordMerge;
2051
2090
  this.ShowMergeWarningBanner = !entityInfo.AllowRecordMerge;
2091
+ const dupeRun = await md.GetEntityObject('MJ: Duplicate Runs');
2092
+ dupeRun.NewRecord();
2052
2093
  dupeRun.EntityID = entityInfo.ID;
2094
+ // The run uses the document picked here, not whichever document the entity updated last.
2095
+ dupeRun.EntityDocumentID = selectedDoc.ID;
2053
2096
  dupeRun.StartedByUserID = this.ProviderToUse.CurrentUser.ID;
2054
2097
  dupeRun.StartedAt = new Date();
2055
2098
  dupeRun.ProcessingStatus = 'In Progress';
2056
2099
  dupeRun.ApprovalStatus = 'Pending';
2100
+ this.detectionActivityID = this.activityService.Start('Duplicate detection', {
2101
+ icon: 'fa-solid fa-clone',
2102
+ detail: selectedDoc.EntityName,
2103
+ progress: 0,
2104
+ });
2057
2105
  const saved = await dupeRun.Save();
2058
2106
  if (!saved) {
2107
+ if (this.detectionActivityID) {
2108
+ this.activityService.Complete(this.detectionActivityID, 'error');
2109
+ this.detectionActivityID = null;
2110
+ }
2059
2111
  console.error('Failed to create duplicate run:', dupeRun.LatestResult?.Message || 'unknown error');
2060
2112
  MJNotificationService.Instance.CreateSimpleNotification(`Failed to start detection: ${dupeRun.LatestResult?.Message || 'unknown error'}`, 'error', 5000);
2061
2113
  this.IsDetecting = false;
@@ -2064,17 +2116,28 @@ let DuplicateDetectionResourceComponent = class DuplicateDetectionResourceCompon
2064
2116
  this.cdr.detectChanges();
2065
2117
  return;
2066
2118
  }
2067
- this.detectionActivityID = this.activityService.Start('Duplicate detection', {
2068
- icon: 'fa-solid fa-clone',
2069
- detail: selectedDoc.EntityName,
2070
- progress: 0,
2071
- });
2072
- // Subscribe to progress using the run ID as PipelineRunID
2119
+ // Subscribe only now, with the saved ID. A new record's create request carries no
2120
+ // primary key, so the server assigns the run's ID and the ID NewRecord() generated
2121
+ // in the browser never matches it: a subscription opened before Save() listens for a
2122
+ // run that never publishes, and its status check finds no such run. A run that
2123
+ // finishes during Save() publishes before this subscription exists, so
2124
+ // subscribeToPipelineProgress checks the run's status right away to catch it.
2073
2125
  this.subscribeToPipelineProgress(dupeRun.ID);
2074
2126
  }
2075
2127
  catch (error) {
2076
2128
  const msg = error instanceof Error ? error.message : String(error);
2077
2129
  console.error('[DuplicateDetection] Error starting detection:', msg);
2130
+ if (this.idleTimer) {
2131
+ clearTimeout(this.idleTimer);
2132
+ this.idleTimer = null;
2133
+ }
2134
+ this.activeProgressSub?.unsubscribe();
2135
+ this.activeProgressSub = null;
2136
+ if (this.detectionActivityID) {
2137
+ this.activityService.Complete(this.detectionActivityID, 'error');
2138
+ this.detectionActivityID = null;
2139
+ }
2140
+ MJNotificationService.Instance.CreateSimpleNotification(`Failed to start duplicate detection: ${msg}`, 'error', 5000);
2078
2141
  this.IsDetecting = false;
2079
2142
  this.DetectionStage = '';
2080
2143
  this.emitAgentContext();
@@ -2384,11 +2447,21 @@ let DuplicateDetectionResourceComponent = class DuplicateDetectionResourceCompon
2384
2447
  }
2385
2448
  }
2386
2449
  `;
2387
- let idleTimer = null;
2388
- const finishDetection = (success) => {
2389
- if (idleTimer)
2390
- clearTimeout(idleTimer);
2391
- rxSub?.unsubscribe();
2450
+ if (this.idleTimer) {
2451
+ clearTimeout(this.idleTimer);
2452
+ this.idleTimer = null;
2453
+ }
2454
+ this.activeProgressSub?.unsubscribe();
2455
+ this.activeProgressSub = null;
2456
+ let consecutiveUnchangedPolls = 0;
2457
+ let lastPolledProcessed = -1;
2458
+ const finishDetection = (success, errorMessage) => {
2459
+ if (this.idleTimer) {
2460
+ clearTimeout(this.idleTimer);
2461
+ this.idleTimer = null;
2462
+ }
2463
+ this.activeProgressSub?.unsubscribe();
2464
+ this.activeProgressSub = null;
2392
2465
  Promise.resolve().then(async () => {
2393
2466
  this.IsDetecting = false;
2394
2467
  this.DetectionStage = success ? 'Complete' : 'Error';
@@ -2397,6 +2470,9 @@ let DuplicateDetectionResourceComponent = class DuplicateDetectionResourceCompon
2397
2470
  this.activityService.Complete(this.detectionActivityID, success ? 'success' : 'error');
2398
2471
  this.detectionActivityID = null;
2399
2472
  }
2473
+ if (!success && errorMessage) {
2474
+ MJNotificationService.Instance.CreateSimpleNotification(errorMessage, 'error', 6000);
2475
+ }
2400
2476
  if (success) {
2401
2477
  await this.LoadData();
2402
2478
  }
@@ -2404,16 +2480,73 @@ let DuplicateDetectionResourceComponent = class DuplicateDetectionResourceCompon
2404
2480
  this.cdr.detectChanges();
2405
2481
  });
2406
2482
  };
2407
- const resetIdleTimer = () => {
2408
- if (idleTimer)
2409
- clearTimeout(idleTimer);
2410
- idleTimer = setTimeout(() => {
2411
- if (this.IsDetecting) {
2412
- finishDetection(true);
2483
+ const checkRunStatusOnIdle = async () => {
2484
+ if (!this.IsDetecting)
2485
+ return;
2486
+ try {
2487
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
2488
+ const res = await rv.RunView({
2489
+ EntityName: 'MJ: Duplicate Runs',
2490
+ ExtraFilter: `ID='${EscapeSQLString(pipelineRunID)}'`,
2491
+ MaxRows: 1,
2492
+ SkipTotalRowCount: true,
2493
+ ResultType: 'entity_object'
2494
+ });
2495
+ if (!this.IsDetecting)
2496
+ return;
2497
+ if (res.Success && res.Results.length > 0) {
2498
+ const run = res.Results[0];
2499
+ if (run.ProcessingStatus === 'Complete') {
2500
+ finishDetection(true);
2501
+ return;
2502
+ }
2503
+ if (run.ProcessingStatus === 'Failed') {
2504
+ finishDetection(false, run.ProcessingErrorMessage || 'Duplicate detection run failed');
2505
+ return;
2506
+ }
2507
+ if (run.EndedAt != null) {
2508
+ finishDetection(true);
2509
+ return;
2510
+ }
2511
+ if (run.TotalItemCount && run.TotalItemCount > 0 && run.ProcessedItemCount != null) {
2512
+ const dbPct = Math.min(99, Math.round((run.ProcessedItemCount / run.TotalItemCount) * 100));
2513
+ if (dbPct > this.DetectionProgress) {
2514
+ this.DetectionProgress = dbPct;
2515
+ this.cdr.detectChanges();
2516
+ }
2517
+ }
2518
+ const currentProcessed = run.ProcessedItemCount ?? 0;
2519
+ if (currentProcessed === lastPolledProcessed) {
2520
+ consecutiveUnchangedPolls++;
2521
+ }
2522
+ else {
2523
+ lastPolledProcessed = currentProcessed;
2524
+ consecutiveUnchangedPolls = 0;
2525
+ }
2526
+ }
2527
+ else {
2528
+ consecutiveUnchangedPolls++;
2529
+ }
2530
+ if (consecutiveUnchangedPolls >= 8) {
2531
+ // 8 consecutive 15s checks (2 minutes) with zero DB or WS progress
2532
+ this.staleRunIDs.add(pipelineRunID);
2533
+ finishDetection(false, 'Duplicate detection timed out with no progress from the server.');
2534
+ return;
2413
2535
  }
2414
- }, 60000); // 60s timeout for duplicate detection (can be very long)
2536
+ resetIdleTimer();
2537
+ }
2538
+ catch (err) {
2539
+ console.error('[DuplicateDetection] Error polling run status:', err);
2540
+ resetIdleTimer();
2541
+ }
2542
+ };
2543
+ const resetIdleTimer = () => {
2544
+ if (this.idleTimer)
2545
+ clearTimeout(this.idleTimer);
2546
+ this.idleTimer = setTimeout(() => {
2547
+ void checkRunStatusOnIdle();
2548
+ }, 15000); // Check DB status after 15s of subscription silence
2415
2549
  };
2416
- resetIdleTimer();
2417
2550
  // Reset phase tracking for this new subscription
2418
2551
  this.detectionRawStage = '';
2419
2552
  const sub = provider.subscribe(subscriptionQuery, { pipelineRunID });
@@ -2425,37 +2558,42 @@ let DuplicateDetectionResourceComponent = class DuplicateDetectionResourceCompon
2425
2558
  const stage = progress['Stage'];
2426
2559
  const pct = Math.max(0, Math.min(100, progress['PercentComplete']));
2427
2560
  const currentItem = progress['CurrentItem'];
2428
- // Detect phase transitions vs. within-phase updates
2429
- const isNewPhase = stage !== this.detectionRawStage;
2430
- if (isNewPhase) {
2431
- // New phase: reset progress and update display
2432
- this.detectionRawStage = stage;
2561
+ // Only reset progress when transitioning out of 'vectorize' into the detection pass;
2562
+ // within the detection pass ('extract' and 'autotag' share the global record counter),
2563
+ // keep progress strictly monotonic so the bar never jumps backward.
2564
+ const isLeavingVectorize = this.detectionRawStage === 'vectorize' && stage !== 'vectorize';
2565
+ this.detectionRawStage = stage;
2566
+ this.DetectionStage = this.formatDetectionStage(stage);
2567
+ if (isLeavingVectorize) {
2433
2568
  this.DetectionProgress = pct;
2434
- this.DetectionStage = this.formatDetectionStage(stage);
2435
2569
  }
2436
- else {
2437
- // Same phase: only move forward (never backward)
2438
- if (pct >= this.DetectionProgress) {
2439
- this.DetectionProgress = pct;
2440
- }
2570
+ else if (pct >= this.DetectionProgress) {
2571
+ this.DetectionProgress = pct;
2441
2572
  }
2442
2573
  this.DetectionCurrentItem = currentItem ?? '';
2574
+ consecutiveUnchangedPolls = 0;
2443
2575
  this.cdr.detectChanges();
2444
2576
  if (stage === 'complete') {
2445
2577
  finishDetection(true);
2446
2578
  }
2447
2579
  else if (stage === 'error') {
2448
- finishDetection(false);
2580
+ finishDetection(false, currentItem || 'Duplicate detection failed');
2449
2581
  }
2450
2582
  else {
2451
2583
  resetIdleTimer();
2452
2584
  }
2453
2585
  },
2454
2586
  error: (err) => {
2587
+ const msg = err instanceof Error ? err.message : String(err);
2455
2588
  console.error('[DuplicateDetection] Pipeline subscription error:', err);
2456
- finishDetection(false);
2589
+ finishDetection(false, `Progress stream error: ${msg}`);
2457
2590
  }
2458
2591
  });
2592
+ this.activeProgressSub = rxSub;
2593
+ // Read the run's status now rather than after the first 15s of silence: a run that
2594
+ // completed or failed before this subscription connected publishes nothing more, and
2595
+ // this check is what finishes it. The check re-arms the idle timer itself.
2596
+ void checkRunStatusOnIdle();
2459
2597
  }
2460
2598
  /** Format detection stage names for display */
2461
2599
  formatDetectionStage(stage) {
@@ -2546,6 +2684,10 @@ let DuplicateDetectionResourceComponent = class DuplicateDetectionResourceCompon
2546
2684
  // ════════════════════════════════════════════
2547
2685
  /** Open the comparison slide-in panel for a group — loads real entity records */
2548
2686
  async OpenComparison(group) {
2687
+ if (this.closeComparisonTimer) {
2688
+ clearTimeout(this.closeComparisonTimer);
2689
+ this.closeComparisonTimer = null;
2690
+ }
2549
2691
  this.ComparisonGroup = group;
2550
2692
  this.ComparisonShowAllFields = true;
2551
2693
  this.SurvivorColumnIndex = 0;
@@ -2577,7 +2719,11 @@ let DuplicateDetectionResourceComponent = class DuplicateDetectionResourceCompon
2577
2719
  this.ShowMergeConfirm = false;
2578
2720
  this.ComparisonClosing = true;
2579
2721
  this.cdr.detectChanges();
2580
- setTimeout(() => {
2722
+ if (this.closeComparisonTimer) {
2723
+ clearTimeout(this.closeComparisonTimer);
2724
+ }
2725
+ this.closeComparisonTimer = setTimeout(() => {
2726
+ this.closeComparisonTimer = null;
2581
2727
  this.ComparisonGroup = null;
2582
2728
  this.ComparisonClosing = false;
2583
2729
  this.ComparisonFields = [];
@@ -3132,26 +3278,33 @@ let DuplicateDetectionResourceComponent = class DuplicateDetectionResourceCompon
3132
3278
  }
3133
3279
  /** Approve an individual match */
3134
3280
  async ApproveIndividualMatch(matchInfo) {
3135
- this.IsSaving = true;
3136
- matchInfo.Match.ApprovalStatus = 'Approved';
3137
- await matchInfo.Match.Save();
3138
- this.IsSaving = false;
3139
- this.cdr.detectChanges();
3281
+ await this.updateIndividualMatchStatus(matchInfo, 'Approved');
3140
3282
  }
3141
3283
  /** Reject an individual match (skip it from merge) */
3142
3284
  async RejectIndividualMatch(matchInfo) {
3143
- this.IsSaving = true;
3144
- matchInfo.Match.ApprovalStatus = 'Rejected';
3145
- await matchInfo.Match.Save();
3146
- this.IsSaving = false;
3147
- this.cdr.detectChanges();
3285
+ await this.updateIndividualMatchStatus(matchInfo, 'Rejected');
3148
3286
  }
3149
3287
  /** Undo a rejected individual match (restore to Pending) */
3150
3288
  async UndoRejectIndividualMatch(matchInfo) {
3289
+ await this.updateIndividualMatchStatus(matchInfo, 'Pending');
3290
+ }
3291
+ async updateIndividualMatchStatus(matchInfo, status) {
3292
+ const previousStatus = matchInfo.Match.ApprovalStatus;
3151
3293
  this.IsSaving = true;
3152
- matchInfo.Match.ApprovalStatus = 'Pending';
3153
- await matchInfo.Match.Save();
3294
+ matchInfo.Match.ApprovalStatus = status;
3295
+ const saved = await matchInfo.Match.Save();
3154
3296
  this.IsSaving = false;
3297
+ if (!saved) {
3298
+ matchInfo.Match.ApprovalStatus = previousStatus;
3299
+ MJNotificationService.Instance.CreateSimpleNotification(`Failed to update match status to ${status}`, 'error', 4000);
3300
+ this.cdr.detectChanges();
3301
+ return;
3302
+ }
3303
+ if (this.ComparisonGroup) {
3304
+ this.ComparisonGroup.ApprovalStatus = this.computeDominantApprovalStatus(this.ComparisonGroup.Matches);
3305
+ this.applyFilters();
3306
+ this.emitAgentContext();
3307
+ }
3155
3308
  this.cdr.detectChanges();
3156
3309
  }
3157
3310
  /**