@memberjunction/ng-dashboards 5.24.0 → 5.26.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 (284) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +15 -33
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +233 -493
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/agents/agent-editor.component.d.ts +2 -2
  6. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  7. package/dist/AI/components/agents/agent-editor.component.js +7 -7
  8. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  9. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +43 -6
  10. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  11. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +1135 -864
  12. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  13. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +4 -3
  14. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  15. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +1 -0
  16. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  17. package/dist/AI/components/execution-monitoring.component.d.ts +4 -5
  18. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  19. package/dist/AI/components/execution-monitoring.component.js +14 -15
  20. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  21. package/dist/AI/components/models/model-management.component.d.ts +4 -4
  22. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  23. package/dist/AI/components/models/model-management.component.js +5 -5
  24. package/dist/AI/components/models/model-management.component.js.map +1 -1
  25. package/dist/AI/components/prompts/prompt-management.component.d.ts +4 -4
  26. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  27. package/dist/AI/components/prompts/prompt-management.component.js +5 -5
  28. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  29. package/dist/AI/components/requests/agent-requests-resource.component.d.ts +2 -1
  30. package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
  31. package/dist/AI/components/requests/agent-requests-resource.component.js +1 -0
  32. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  33. package/dist/AI/components/system/system-configuration.component.d.ts +2 -3
  34. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  35. package/dist/AI/components/system/system-configuration.component.js +9 -11
  36. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  37. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +44 -8
  38. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  39. package/dist/AI/components/vectors/vector-management-resource.component.js +648 -384
  40. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  41. package/dist/APIKeys/api-keys-resource.component.d.ts +2 -1
  42. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  43. package/dist/APIKeys/api-keys-resource.component.js +2 -0
  44. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  45. package/dist/Actions/components/actions-overview.component.d.ts +4 -5
  46. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  47. package/dist/Actions/components/actions-overview.component.js +11 -12
  48. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  49. package/dist/Actions/components/code-management.component.d.ts +2 -3
  50. package/dist/Actions/components/code-management.component.d.ts.map +1 -1
  51. package/dist/Actions/components/code-management.component.js +4 -6
  52. package/dist/Actions/components/code-management.component.js.map +1 -1
  53. package/dist/Actions/components/entity-integration.component.d.ts +2 -3
  54. package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
  55. package/dist/Actions/components/entity-integration.component.js +4 -6
  56. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  57. package/dist/Actions/components/execution-monitoring.component.d.ts +4 -5
  58. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  59. package/dist/Actions/components/execution-monitoring.component.js +10 -11
  60. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  61. package/dist/Actions/components/explorer/action-explorer.component.d.ts +13 -12
  62. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  63. package/dist/Actions/components/explorer/action-explorer.component.js +39 -66
  64. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  65. package/dist/Actions/components/scheduled-actions.component.d.ts +2 -3
  66. package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
  67. package/dist/Actions/components/scheduled-actions.component.js +4 -6
  68. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  69. package/dist/Actions/components/security-permissions.component.d.ts +2 -3
  70. package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
  71. package/dist/Actions/components/security-permissions.component.js +4 -6
  72. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  73. package/dist/ApplicationRoles/application-roles-resource.component.d.ts +112 -0
  74. package/dist/ApplicationRoles/application-roles-resource.component.d.ts.map +1 -0
  75. package/dist/ApplicationRoles/application-roles-resource.component.js +532 -0
  76. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -0
  77. package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
  78. package/dist/Communication/communication-dashboard.component.js +1 -0
  79. package/dist/Communication/communication-dashboard.component.js.map +1 -1
  80. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  81. package/dist/Communication/communication-logs-resource.component.js +4 -1
  82. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  83. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  84. package/dist/Communication/communication-monitor-resource.component.js +4 -1
  85. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  86. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  87. package/dist/Communication/communication-providers-resource.component.js +4 -1
  88. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  89. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  90. package/dist/Communication/communication-runs-resource.component.js +4 -1
  91. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  92. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  93. package/dist/Communication/communication-templates-resource.component.js +4 -1
  94. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  95. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +2 -1
  96. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  97. package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
  98. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  99. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  100. package/dist/Credentials/components/credentials-audit-resource.component.js +2 -0
  101. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  102. package/dist/Credentials/components/credentials-categories-resource.component.d.ts +2 -3
  103. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  104. package/dist/Credentials/components/credentials-categories-resource.component.js +10 -11
  105. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  106. package/dist/Credentials/components/credentials-list-resource.component.d.ts +2 -1
  107. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  108. package/dist/Credentials/components/credentials-list-resource.component.js +2 -0
  109. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  110. package/dist/Credentials/components/credentials-overview-resource.component.d.ts +4 -4
  111. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
  112. package/dist/Credentials/components/credentials-overview-resource.component.js +8 -9
  113. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  114. package/dist/Credentials/components/credentials-types-resource.component.d.ts +2 -3
  115. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  116. package/dist/Credentials/components/credentials-types-resource.component.js +11 -12
  117. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  118. package/dist/Credentials/credentials-dashboard.component.d.ts.map +1 -1
  119. package/dist/Credentials/credentials-dashboard.component.js +1 -0
  120. package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
  121. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +2 -3
  122. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
  123. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +9 -10
  124. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  125. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +2 -2
  126. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +23 -15
  127. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
  128. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +167 -213
  129. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
  130. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +68 -32
  131. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  132. package/dist/DataExplorer/data-explorer-dashboard.component.js +453 -420
  133. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  134. package/dist/DataExplorer/data-explorer-resource.component.d.ts +10 -3
  135. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  136. package/dist/DataExplorer/data-explorer-resource.component.js +35 -11
  137. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  138. package/dist/DataExplorer/models/explorer-state.interface.d.ts +12 -3
  139. package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -1
  140. package/dist/DataExplorer/models/explorer-state.interface.js +5 -1
  141. package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -1
  142. package/dist/Home/home-dashboard.component.d.ts +4 -4
  143. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  144. package/dist/Home/home-dashboard.component.js +4 -5
  145. package/dist/Home/home-dashboard.component.js.map +1 -1
  146. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  147. package/dist/Integration/components/activity/activity.component.js +1 -0
  148. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  149. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  150. package/dist/Integration/components/connections/connections.component.js +2 -0
  151. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  152. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
  153. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +1 -0
  154. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  155. package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
  156. package/dist/Integration/components/overview/overview.component.js +2 -0
  157. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  158. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  159. package/dist/Integration/components/pipelines/pipelines.component.js +2 -0
  160. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  161. package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
  162. package/dist/Integration/components/schedules/schedules.component.js +2 -0
  163. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  164. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +4 -3
  165. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
  166. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1 -0
  167. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  168. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +4 -3
  169. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
  170. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +1 -0
  171. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  172. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +13 -3
  173. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  174. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +220 -138
  175. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  176. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +4 -3
  177. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
  178. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +1 -0
  179. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  180. package/dist/KnowledgeHub/index.d.ts +0 -1
  181. package/dist/KnowledgeHub/index.d.ts.map +1 -1
  182. package/dist/KnowledgeHub/index.js +0 -1
  183. package/dist/KnowledgeHub/index.js.map +1 -1
  184. package/dist/Lists/components/lists-browse-resource.component.d.ts +2 -1
  185. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  186. package/dist/Lists/components/lists-browse-resource.component.js +2 -0
  187. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  188. package/dist/Lists/components/lists-categories-resource.component.d.ts +2 -1
  189. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  190. package/dist/Lists/components/lists-categories-resource.component.js +2 -0
  191. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  192. package/dist/Lists/components/lists-my-lists-resource.component.d.ts +2 -1
  193. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  194. package/dist/Lists/components/lists-my-lists-resource.component.js +2 -0
  195. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  196. package/dist/Lists/components/lists-operations-resource.component.d.ts +2 -1
  197. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  198. package/dist/Lists/components/lists-operations-resource.component.js +2 -0
  199. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  200. package/dist/MCP/mcp-dashboard.component.d.ts +7 -28
  201. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  202. package/dist/MCP/mcp-dashboard.component.js +25 -107
  203. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  204. package/dist/MCP/mcp-resource.component.d.ts.map +1 -1
  205. package/dist/MCP/mcp-resource.component.js +1 -0
  206. package/dist/MCP/mcp-resource.component.js.map +1 -1
  207. package/dist/QueryBrowser/query-browser-resource.component.d.ts +10 -23
  208. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  209. package/dist/QueryBrowser/query-browser-resource.component.js +41 -103
  210. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  211. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  212. package/dist/Scheduling/components/scheduling-activity-resource.component.js +1 -0
  213. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  214. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  215. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +1 -0
  216. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  217. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  218. package/dist/Scheduling/components/scheduling-overview-resource.component.js +1 -0
  219. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  220. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  221. package/dist/Scheduling/scheduling-dashboard.component.js +1 -0
  222. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  223. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +4 -4
  224. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  225. package/dist/SystemDiagnostics/system-diagnostics.component.js +9 -10
  226. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  227. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  228. package/dist/Testing/components/testing-analytics-resource.component.js +2 -0
  229. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  230. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
  231. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  232. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +2 -0
  233. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  234. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  235. package/dist/Testing/components/testing-explorer-resource.component.js +2 -0
  236. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  237. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  238. package/dist/Testing/components/testing-review-resource.component.js +2 -0
  239. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  240. package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
  241. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  242. package/dist/Testing/components/testing-runs-resource.component.js +2 -0
  243. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  244. package/dist/Testing/testing-dashboard.component.d.ts +2 -1
  245. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  246. package/dist/Testing/testing-dashboard.component.js +1 -0
  247. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  248. package/dist/VersionHistory/components/diff-resource.component.d.ts +4 -4
  249. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
  250. package/dist/VersionHistory/components/diff-resource.component.js +9 -10
  251. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  252. package/dist/VersionHistory/components/graph-resource.component.d.ts +2 -1
  253. package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
  254. package/dist/VersionHistory/components/graph-resource.component.js +2 -0
  255. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  256. package/dist/VersionHistory/components/labels-resource.component.d.ts +4 -4
  257. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  258. package/dist/VersionHistory/components/labels-resource.component.js +10 -11
  259. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  260. package/dist/VersionHistory/components/restore-resource.component.d.ts +2 -1
  261. package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -1
  262. package/dist/VersionHistory/components/restore-resource.component.js +2 -0
  263. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  264. package/dist/ai-dashboards.module.d.ts +19 -19
  265. package/dist/ai-dashboards.module.d.ts.map +1 -1
  266. package/dist/ai-dashboards.module.js +4 -5
  267. package/dist/ai-dashboards.module.js.map +1 -1
  268. package/dist/core-dashboards.module.d.ts +19 -18
  269. package/dist/core-dashboards.module.d.ts.map +1 -1
  270. package/dist/core-dashboards.module.js +8 -0
  271. package/dist/core-dashboards.module.js.map +1 -1
  272. package/dist/data-explorer-dashboards.module.d.ts +2 -1
  273. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  274. package/dist/data-explorer-dashboards.module.js +7 -3
  275. package/dist/data-explorer-dashboards.module.js.map +1 -1
  276. package/dist/public-api.d.ts +1 -1
  277. package/dist/public-api.d.ts.map +1 -1
  278. package/dist/public-api.js +2 -1
  279. package/dist/public-api.js.map +1 -1
  280. package/package.json +49 -48
  281. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts +0 -166
  282. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts.map +0 -1
  283. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js +0 -991
  284. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"pipelines.component.js","sourceRoot":"","sources":["../../../../src/Integration/components/pipelines/pipelines.component.ts","../../../../src/Integration/components/pipelines/pipelines.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, OnInit, OnDestroy, inject } from '@angular/core';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { RunView, IRunViewProvider } from '@memberjunction/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { IntegrationEngineBase } from '@memberjunction/integration-engine-base';\nimport {\n IntegrationDataService,\n ResolveIntegrationIcon,\n IntegrationSummary,\n EntityMapRow,\n FieldMapRow\n} from '../../services/integration-data.service';\n\n// ---------------------------------------------------------------------------\n// Data interfaces\n// ---------------------------------------------------------------------------\n\ninterface PipelineCard {\n IntegrationID: string;\n IntegrationName: string;\n Icon: string;\n StatusColor: string;\n StatusLabel: string;\n EntityMapCount: number;\n ActiveMapCount: number;\n UniqueEntityCount: number;\n LastSync: string;\n IsExpanded: boolean;\n EntityMaps: EntityMapRow[];\n /** Filtered subset currently visible */\n FilteredMaps: EntityMapRow[];\n SearchTerm: string;\n}\n\n// --- Visual Editor types ---\n\ntype TransformType = 'direct' | 'regex' | 'split' | 'combine' | 'lookup' | 'format' | 'coerce' | 'substring' | 'custom';\n\ninterface TransformStepUI {\n Type: TransformType;\n Config: Record<string, unknown>;\n OnError: 'Skip' | 'Null' | 'Fail';\n}\n\ninterface VisualSourceField {\n Name: string;\n Label: string;\n Type: string;\n IsRequired: boolean;\n IsPrimaryKey: boolean;\n}\n\ninterface VisualDestField {\n Name: string;\n Type: string;\n IsRequired: boolean;\n}\n\ninterface VisualConnection {\n ID: string | null;\n SourceFieldName: string;\n DestFieldName: string;\n IsKeyField: boolean;\n IsRequired: boolean;\n Direction: 'SourceToDest' | 'DestToSource' | 'Both';\n TransformSteps: TransformStepUI[];\n IsDirty: boolean;\n IsNew: boolean;\n MarkedForDelete: boolean;\n}\n\n@RegisterClass(BaseResourceComponent, 'IntegrationPipelines')\n@Component({\n standalone: false,\n selector: 'app-integration-pipelines',\n templateUrl: './pipelines.component.html',\n styleUrls: ['./pipelines.component.css']\n})\nexport class PipelinesComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n\n // ---------------------------------------------------------------------------\n // Public state — Card list\n // ---------------------------------------------------------------------------\n\n PipelineCards: PipelineCard[] = [];\n IsLoading = false;\n GlobalSearch = '';\n\n // ---------------------------------------------------------------------------\n // Visual Editor state\n // ---------------------------------------------------------------------------\n\n VisualEditorOpen = false;\n EditorEntityMap: EntityMapRow | null = null;\n EditorCard: PipelineCard | null = null;\n EditorSourceFields: VisualSourceField[] = [];\n EditorDestFields: VisualDestField[] = [];\n EditorConnections: VisualConnection[] = [];\n EditorLoading = false;\n EditorSaving = false;\n EditorSaveSuccess = false;\n\n /** Schema pipeline state */\n IsRunningPipeline = false;\n PipelineResultMessage: string | null = null;\n PipelineResultSuccess = false;\n\n /** Currently selected connection index (opens transform panel) */\n SelectedConnectionIdx: number | null = null;\n\n /** When non-null, user is in \"connect mode\" — next dest click creates a mapping */\n ConnectingFromSource: string | null = null;\n\n /** Search/filter within the visual editor columns */\n EditorSearchSource = '';\n EditorSearchDest = '';\n\n /** Data preview state */\n ShowSourcePreview = false;\n ShowDestPreview = false;\n PreviewSourceLoading = false;\n PreviewDestLoading = false;\n PreviewSourceRows: Array<Record<string, string | number | boolean | null>> = [];\n PreviewDestRows: Array<Record<string, string | number | boolean | null>> = [];\n PreviewSourceColumns: string[] = [];\n PreviewDestColumns: string[] = [];\n\n /** Collapsible section state */\n FieldMapsExpanded = true;\n InfoPanelExpanded = false;\n\n /** Info panel data */\n InfoPanelLoading = false;\n InfoDestRecordCount: number | null = null;\n InfoLastSync: { StartedAt: string | null; EndedAt: string | null; Status: string; TotalRecords: number } | null = null;\n\n /** SVG layout constants */\n readonly FIELD_HEIGHT = 40;\n readonly SVG_WIDTH = 200;\n\n /** Transform type metadata */\n readonly TRANSFORM_TYPES: Array<{ Value: TransformType; Label: string; Icon: string }> = [\n { Value: 'direct', Label: 'Direct', Icon: 'fa-solid fa-arrow-right' },\n { Value: 'regex', Label: 'Regex', Icon: 'fa-solid fa-code' },\n { Value: 'split', Label: 'Split', Icon: 'fa-solid fa-scissors' },\n { Value: 'combine', Label: 'Combine', Icon: 'fa-solid fa-object-group' },\n { Value: 'lookup', Label: 'Lookup', Icon: 'fa-solid fa-book' },\n { Value: 'format', Label: 'Format', Icon: 'fa-solid fa-font' },\n { Value: 'coerce', Label: 'Coerce', Icon: 'fa-solid fa-exchange-alt' },\n { Value: 'substring', Label: 'Substring', Icon: 'fa-solid fa-text-width' },\n { Value: 'custom', Label: 'Custom', Icon: 'fa-solid fa-wand-magic-sparkles' }\n ];\n\n // ---------------------------------------------------------------------------\n // Private\n // ---------------------------------------------------------------------------\n\n private dataService = inject(IntegrationDataService);\n private cdr = inject(ChangeDetectorRef);\n\n // ---------------------------------------------------------------------------\n // Lifecycle\n // ---------------------------------------------------------------------------\n\n async ngOnInit(): Promise<void> {\n await this.LoadData();\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy(): void {\n // Clean up if needed\n }\n\n // ---------------------------------------------------------------------------\n // Resource overrides\n // ---------------------------------------------------------------------------\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Pipelines';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-diagram-project';\n }\n\n // ---------------------------------------------------------------------------\n // Data loading\n // ---------------------------------------------------------------------------\n\n async LoadData(): Promise<void> {\n this.IsLoading = true;\n this.cdr.detectChanges();\n try {\n const provider = this.RunViewToUse;\n const [summaries, allEntityMaps] = await Promise.all([\n this.dataService.LoadIntegrationSummaries(provider),\n this.loadAllEntityMaps(provider)\n ]);\n this.BuildCards(summaries, allEntityMaps);\n } catch (err) {\n console.error('[PipelinesComponent] Failed to load data:', err);\n } finally {\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Card building\n // ---------------------------------------------------------------------------\n\n BuildCards(summaries: IntegrationSummary[], allEntityMaps: EntityMapRow[]): void {\n this.PipelineCards = summaries.map(summary => {\n const maps = allEntityMaps.filter(\n m => UUIDsEqual(m.CompanyIntegrationID, summary.Integration.ID)\n );\n const activeMaps = maps.filter(m => m.SyncEnabled);\n const uniqueEntities = new Set(maps.map(m => m.EntityID)).size;\n return {\n IntegrationID: summary.Integration.ID,\n IntegrationName: summary.Integration.Integration ?? summary.Integration.Name,\n Icon: this.resolveIcon(summary),\n StatusColor: this.statusToColor(summary.StatusColor),\n StatusLabel: this.statusToLabel(summary.StatusColor),\n EntityMapCount: maps.length,\n ActiveMapCount: activeMaps.length,\n UniqueEntityCount: uniqueEntities,\n LastSync: summary.RelativeTime,\n IsExpanded: false,\n EntityMaps: maps,\n FilteredMaps: maps,\n SearchTerm: ''\n };\n });\n }\n\n // ---------------------------------------------------------------------------\n // Card expand / collapse\n // ---------------------------------------------------------------------------\n\n ToggleCard(card: PipelineCard): void {\n card.IsExpanded = !card.IsExpanded;\n if (card.IsExpanded) {\n card.FilteredMaps = this.applyMapFilter(card);\n }\n }\n\n ExpandAll(): void {\n for (const card of this.PipelineCards) {\n card.IsExpanded = true;\n card.FilteredMaps = this.applyMapFilter(card);\n }\n }\n\n CollapseAll(): void {\n for (const card of this.PipelineCards) {\n card.IsExpanded = false;\n }\n }\n\n // ---------------------------------------------------------------------------\n // Search / filter\n // ---------------------------------------------------------------------------\n\n OnCardSearch(card: PipelineCard, event: Event): void {\n const input = event.target as HTMLInputElement;\n card.SearchTerm = input.value;\n card.FilteredMaps = this.applyMapFilter(card);\n this.cdr.detectChanges();\n }\n\n OnGlobalSearchChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.GlobalSearch = input.value;\n this.cdr.detectChanges();\n }\n\n get FilteredCards(): PipelineCard[] {\n if (!this.GlobalSearch.trim()) return this.PipelineCards;\n const term = this.GlobalSearch.toLowerCase();\n return this.PipelineCards.filter(card =>\n card.IntegrationName.toLowerCase().includes(term) ||\n card.EntityMaps.some(m =>\n (m.ExternalObjectLabel ?? m.ExternalObjectName).toLowerCase().includes(term) ||\n m.Entity.toLowerCase().includes(term)\n )\n );\n }\n\n // ---------------------------------------------------------------------------\n // Entity map row click → Open Visual Editor\n // ---------------------------------------------------------------------------\n\n OnMapRowClick(card: PipelineCard, entityMap: EntityMapRow): void {\n this.OpenVisualEditor(card, entityMap);\n }\n\n // ---------------------------------------------------------------------------\n // SyncEnabled toggle\n // ---------------------------------------------------------------------------\n\n async OnToggleSyncEnabled(card: PipelineCard, em: EntityMapRow, event: Event): Promise<void> {\n const checkbox = event.target as HTMLInputElement;\n const newValue = checkbox.checked;\n em.SyncEnabled = newValue;\n card.ActiveMapCount = card.EntityMaps.filter(m => m.SyncEnabled).length;\n this.cdr.detectChanges();\n try {\n await this.dataService.ToggleEntityMapEnabled(em.ID, newValue);\n } catch (err) {\n // Revert on failure\n em.SyncEnabled = !newValue;\n card.ActiveMapCount = card.EntityMaps.filter(m => m.SyncEnabled).length;\n checkbox.checked = !newValue;\n console.error('[PipelinesComponent] Failed to toggle SyncEnabled:', err);\n this.cdr.detectChanges();\n }\n }\n\n async OnToggleEditorSyncEnabled(event: Event): Promise<void> {\n if (!this.EditorEntityMap || !this.EditorCard) return;\n const checkbox = event.target as HTMLInputElement;\n const newValue = checkbox.checked;\n this.EditorEntityMap.SyncEnabled = newValue;\n this.EditorCard.ActiveMapCount = this.EditorCard.EntityMaps.filter(m => m.SyncEnabled).length;\n this.cdr.detectChanges();\n try {\n await this.dataService.ToggleEntityMapEnabled(this.EditorEntityMap.ID, newValue);\n } catch (err) {\n this.EditorEntityMap.SyncEnabled = !newValue;\n this.EditorCard.ActiveMapCount = this.EditorCard.EntityMaps.filter(m => m.SyncEnabled).length;\n checkbox.checked = !newValue;\n console.error('[PipelinesComponent] Failed to toggle SyncEnabled:', err);\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Data preview\n // ---------------------------------------------------------------------------\n\n async ToggleSourcePreview(): Promise<void> {\n this.ShowSourcePreview = !this.ShowSourcePreview;\n if (this.ShowSourcePreview && this.PreviewSourceRows.length === 0) {\n await this.loadSourcePreview();\n }\n this.cdr.detectChanges();\n }\n\n async ToggleDestPreview(): Promise<void> {\n this.ShowDestPreview = !this.ShowDestPreview;\n if (this.ShowDestPreview && this.PreviewDestRows.length === 0) {\n await this.loadDestPreview();\n }\n this.cdr.detectChanges();\n }\n\n private async loadSourcePreview(): Promise<void> {\n if (!this.EditorEntityMap || !this.EditorCard) return;\n this.PreviewSourceLoading = true;\n this.cdr.detectChanges();\n try {\n const rows = await this.dataService.PreviewSourceData(\n this.EditorCard.IntegrationID,\n this.EditorEntityMap.ExternalObjectName,\n 5\n );\n this.PreviewSourceRows = rows;\n this.PreviewSourceColumns = rows.length > 0 ? Object.keys(rows[0]) : [];\n } catch (err) {\n console.error('[PipelinesComponent] Failed to load source preview:', err);\n this.PreviewSourceRows = [];\n this.PreviewSourceColumns = [];\n } finally {\n this.PreviewSourceLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n private async loadDestPreview(): Promise<void> {\n if (!this.EditorEntityMap) return;\n this.PreviewDestLoading = true;\n this.cdr.detectChanges();\n try {\n const rows = await this.dataService.PreviewDestinationData(\n this.EditorEntityMap.EntityID,\n 5,\n this.RunViewToUse\n );\n this.PreviewDestRows = rows;\n this.PreviewDestColumns = rows.length > 0 ? Object.keys(rows[0]) : [];\n } catch (err) {\n console.error('[PipelinesComponent] Failed to load dest preview:', err);\n this.PreviewDestRows = [];\n this.PreviewDestColumns = [];\n } finally {\n this.PreviewDestLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Collapsible sections\n // ---------------------------------------------------------------------------\n\n ToggleFieldMaps(): void {\n this.FieldMapsExpanded = !this.FieldMapsExpanded;\n this.cdr.detectChanges();\n }\n\n ToggleInfoPanel(): void {\n this.InfoPanelExpanded = !this.InfoPanelExpanded;\n if (this.InfoPanelExpanded && this.InfoDestRecordCount === null) {\n this.loadInfoPanelData();\n }\n this.cdr.detectChanges();\n }\n\n private async loadInfoPanelData(): Promise<void> {\n if (!this.EditorEntityMap || !this.EditorCard) return;\n this.InfoPanelLoading = true;\n this.cdr.detectChanges();\n try {\n const [destCount, lastSync] = await Promise.all([\n this.dataService.GetDestinationRecordCount(this.EditorEntityMap.EntityID, this.RunViewToUse),\n this.dataService.GetLastSyncForEntity(\n this.EditorCard.IntegrationID,\n this.EditorEntityMap.EntityID,\n this.RunViewToUse\n )\n ]);\n this.InfoDestRecordCount = destCount;\n this.InfoLastSync = lastSync;\n } catch (err) {\n console.error('[PipelinesComponent] Failed to load info panel data:', err);\n } finally {\n this.InfoPanelLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n FormatSyncDate(dateStr: string | null): string {\n if (!dateStr) return 'Never';\n const d = new Date(dateStr);\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n const diffHours = Math.floor(diffMins / 60);\n if (diffHours < 24) return `${diffHours}h ago`;\n const diffDays = Math.floor(diffHours / 24);\n if (diffDays < 7) return `${diffDays}d ago`;\n return d.toLocaleDateString();\n }\n\n SyncStatusClass(status: string): string {\n switch (status) {\n case 'Success': return 'info-status-success';\n case 'Failed': return 'info-status-error';\n case 'In Progress': return 'info-status-running';\n default: return 'info-status-pending';\n }\n }\n\n // ---------------------------------------------------------------------------\n // Template helpers\n // ---------------------------------------------------------------------------\n\n /**\n * Direction arrows for entity-level sync direction.\n * Pull = data flows FROM external source INTO MJ = right arrow (→)\n * Push = data flows FROM MJ OUT to external = left arrow (←)\n */\n DirectionLabel(direction: string): string {\n if (direction === 'Pull') return '\\u2192';\n if (direction === 'Push') return '\\u2190';\n if (direction === 'Bidirectional') return '\\u2194';\n return '\\u2192';\n }\n\n DirectionBadgeClass(direction: string): string {\n if (direction === 'Pull') return 'direction-badge pull';\n if (direction === 'Push') return 'direction-badge push';\n if (direction === 'Bidirectional') return 'direction-badge bidirectional';\n return 'direction-badge';\n }\n\n DirectionText(direction: string): string {\n if (direction === 'Pull') return 'Pull \\u2192';\n if (direction === 'Push') return '\\u2190 Push';\n if (direction === 'Bidirectional') return '\\u2194 Bi';\n return 'Pull \\u2192';\n }\n\n get IntegrationCount(): number {\n return this.PipelineCards.length;\n }\n\n get TotalMapCount(): number {\n return this.PipelineCards.reduce((sum, c) => sum + c.EntityMapCount, 0);\n }\n\n // ===========================================================================\n // VISUAL FIELD MAPPING EDITOR\n // ===========================================================================\n\n // ---------------------------------------------------------------------------\n // Open / Close\n // ---------------------------------------------------------------------------\n\n OpenVisualEditor(card: PipelineCard, entityMap: EntityMapRow): void {\n this.EditorCard = card;\n this.EditorEntityMap = entityMap;\n this.VisualEditorOpen = true;\n this.SelectedConnectionIdx = null;\n this.ConnectingFromSource = null;\n this.EditorSearchSource = '';\n this.EditorSearchDest = '';\n this.EditorSaveSuccess = false;\n this.ShowSourcePreview = false;\n this.ShowDestPreview = false;\n this.PreviewSourceRows = [];\n this.PreviewDestRows = [];\n this.PreviewSourceColumns = [];\n this.PreviewDestColumns = [];\n this.FieldMapsExpanded = true;\n this.InfoPanelExpanded = false;\n this.InfoDestRecordCount = null;\n this.InfoLastSync = null;\n this.cdr.detectChanges();\n this.LoadVisualEditorData();\n }\n\n CloseVisualEditor(): void {\n this.VisualEditorOpen = false;\n this.EditorEntityMap = null;\n this.EditorCard = null;\n this.EditorSourceFields = [];\n this.EditorDestFields = [];\n this.EditorConnections = [];\n this.SelectedConnectionIdx = null;\n this.ConnectingFromSource = null;\n this.cdr.detectChanges();\n }\n\n async LoadVisualEditorData(): Promise<void> {\n if (!this.EditorEntityMap || !this.EditorCard) return;\n this.EditorLoading = true;\n this.cdr.detectChanges();\n\n const entityMap = this.EditorEntityMap;\n\n try {\n // Load field maps and dest fields in parallel\n const [fieldMaps, destFields] = await Promise.all([\n this.dataService.LoadFieldMaps(entityMap.ID, this.RunViewToUse),\n this.dataService.LoadEntityFields(entityMap.EntityID, this.RunViewToUse)\n ]);\n\n // Build source fields from IntegrationObjectField metadata\n const sourceFields = this.resolveSourceFieldsFromMetadata(\n this.EditorCard.IntegrationID,\n entityMap.ExternalObjectName\n );\n\n if (sourceFields.length > 0) {\n this.EditorSourceFields = sourceFields;\n } else {\n // Fallback: derive source fields from existing field maps\n this.EditorSourceFields = fieldMaps.map(fm => ({\n Name: fm.SourceFieldName,\n Label: fm.SourceFieldLabel ?? fm.SourceFieldName,\n Type: '',\n IsRequired: fm.IsRequired,\n IsPrimaryKey: fm.IsKeyField\n }));\n }\n\n // Build dest fields (exclude __mj system fields — they are read-only)\n this.EditorDestFields = destFields\n .filter(f => !f.Name.startsWith('__mj'))\n .map(f => ({\n Name: f.Name,\n Type: f.Type,\n IsRequired: f.IsRequired\n }));\n\n // Build connections\n this.EditorConnections = fieldMaps\n .filter(fm => fm.Status === 'Active')\n .map(fm => ({\n ID: fm.ID,\n SourceFieldName: fm.SourceFieldName,\n DestFieldName: fm.DestinationFieldName,\n IsKeyField: fm.IsKeyField,\n IsRequired: fm.IsRequired,\n Direction: fm.Direction,\n TransformSteps: this.parseTransformPipeline(fm.TransformPipeline),\n IsDirty: false,\n IsNew: false,\n MarkedForDelete: false\n }));\n } catch (err) {\n console.error('[PipelinesComponent] Failed to load editor data:', err);\n } finally {\n this.EditorLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Filtered field lists\n // ---------------------------------------------------------------------------\n\n get FilteredEditorSourceFields(): VisualSourceField[] {\n if (!this.EditorSearchSource.trim()) return this.EditorSourceFields;\n const term = this.EditorSearchSource.toLowerCase();\n return this.EditorSourceFields.filter(f =>\n f.Name.toLowerCase().includes(term) || f.Label.toLowerCase().includes(term)\n );\n }\n\n get FilteredEditorDestFields(): VisualDestField[] {\n if (!this.EditorSearchDest.trim()) return this.EditorDestFields;\n const term = this.EditorSearchDest.toLowerCase();\n return this.EditorDestFields.filter(f => f.Name.toLowerCase().includes(term));\n }\n\n /** Only show connections where both source and dest are visible */\n get VisibleConnections(): VisualConnection[] {\n return this.EditorConnections.filter(c =>\n !c.MarkedForDelete &&\n this.getSourceFieldIndex(c.SourceFieldName) >= 0 &&\n this.getDestFieldIndex(c.DestFieldName) >= 0\n );\n }\n\n // ---------------------------------------------------------------------------\n // SVG Calculations\n // ---------------------------------------------------------------------------\n\n get EditorCanvasHeight(): number {\n const sourceHeight = this.FilteredEditorSourceFields.length * this.FIELD_HEIGHT;\n const destHeight = this.FilteredEditorDestFields.length * this.FIELD_HEIGHT;\n return Math.max(sourceHeight, destHeight, 200);\n }\n\n GetConnectionPath(conn: VisualConnection): string {\n const sourceY = this.getSourceFieldY(conn.SourceFieldName);\n const destY = this.getDestFieldY(conn.DestFieldName);\n if (sourceY < 0 || destY < 0) return '';\n const cp1x = this.SVG_WIDTH * 0.35;\n const cp2x = this.SVG_WIDTH * 0.65;\n return `M 0 ${sourceY} C ${cp1x} ${sourceY}, ${cp2x} ${destY}, ${this.SVG_WIDTH} ${destY}`;\n }\n\n GetConnectionMidY(conn: VisualConnection): number {\n const sourceY = this.getSourceFieldY(conn.SourceFieldName);\n const destY = this.getDestFieldY(conn.DestFieldName);\n return (sourceY + destY) / 2;\n }\n\n GetConnectionLineClass(conn: VisualConnection): string {\n const type = this.getPrimaryTransformType(conn);\n return `conn-${type}`;\n }\n\n GetConnectionBadgeClass(conn: VisualConnection): string {\n const type = this.getPrimaryTransformType(conn);\n return `badge-${type}`;\n }\n\n GetConnectionTransformIcon(conn: VisualConnection): string {\n const type = this.getPrimaryTransformType(conn);\n return this.TRANSFORM_TYPES.find(t => t.Value === type)?.Icon ?? 'fa-solid fa-arrow-right';\n }\n\n /** Direction-aware icon for the SVG connection badge */\n GetConnectionDirectionIcon(conn: VisualConnection): string {\n switch (conn.Direction) {\n case 'DestToSource': return 'fa-solid fa-arrow-left';\n case 'Both': return 'fa-solid fa-right-left';\n default: return 'fa-solid fa-arrow-right';\n }\n }\n\n GetTransformTypeLabel(type: TransformType): string {\n return this.TRANSFORM_TYPES.find(t => t.Value === type)?.Label ?? type;\n }\n\n // ---------------------------------------------------------------------------\n // Field mapped state\n // ---------------------------------------------------------------------------\n\n IsSourceFieldMapped(fieldName: string): boolean {\n return this.EditorConnections.some(c => !c.MarkedForDelete && c.SourceFieldName === fieldName);\n }\n\n IsDestFieldMapped(fieldName: string): boolean {\n return this.EditorConnections.some(c => !c.MarkedForDelete && c.DestFieldName === fieldName);\n }\n\n // ---------------------------------------------------------------------------\n // Creating connections (click source → click dest)\n // ---------------------------------------------------------------------------\n\n OnEditorSourceClick(fieldName: string): void {\n // Don't allow starting a new connection from an already-mapped field\n if (this.IsSourceFieldMapped(fieldName)) return;\n\n if (this.ConnectingFromSource === fieldName) {\n this.ConnectingFromSource = null;\n } else {\n this.ConnectingFromSource = fieldName;\n this.SelectedConnectionIdx = null;\n }\n this.cdr.detectChanges();\n }\n\n OnEditorDestClick(fieldName: string): void {\n if (!this.ConnectingFromSource) return;\n\n // Don't allow mapping to an already-mapped dest field\n if (this.IsDestFieldMapped(fieldName)) return;\n\n // Check if this mapping already exists\n const existing = this.EditorConnections.find(\n c => !c.MarkedForDelete && c.SourceFieldName === this.ConnectingFromSource && c.DestFieldName === fieldName\n );\n if (existing) {\n this.ConnectingFromSource = null;\n return;\n }\n\n // Create new connection\n this.EditorConnections.push({\n ID: null,\n SourceFieldName: this.ConnectingFromSource,\n DestFieldName: fieldName,\n IsKeyField: false,\n IsRequired: false,\n Direction: 'SourceToDest',\n TransformSteps: [{ Type: 'direct', Config: {}, OnError: 'Fail' }],\n IsDirty: true,\n IsNew: true,\n MarkedForDelete: false\n });\n\n this.ConnectingFromSource = null;\n this.SelectedConnectionIdx = this.EditorConnections.length - 1;\n this.cdr.detectChanges();\n }\n\n CancelConnect(): void {\n this.ConnectingFromSource = null;\n this.cdr.detectChanges();\n }\n\n // ---------------------------------------------------------------------------\n // Connection selection / editing\n // ---------------------------------------------------------------------------\n\n SelectConnection(index: number, event: Event): void {\n event.stopPropagation();\n this.SelectedConnectionIdx = this.SelectedConnectionIdx === index ? null : index;\n this.ConnectingFromSource = null;\n this.cdr.detectChanges();\n }\n\n DeselectConnection(): void {\n this.SelectedConnectionIdx = null;\n this.cdr.detectChanges();\n }\n\n get SelectedConnection(): VisualConnection | null {\n if (this.SelectedConnectionIdx == null) return null;\n return this.EditorConnections[this.SelectedConnectionIdx] ?? null;\n }\n\n RemoveSelectedConnection(): void {\n if (this.SelectedConnectionIdx == null) return;\n const conn = this.EditorConnections[this.SelectedConnectionIdx];\n if (conn.IsNew) {\n this.EditorConnections.splice(this.SelectedConnectionIdx, 1);\n } else {\n conn.MarkedForDelete = true;\n conn.IsDirty = true;\n }\n this.SelectedConnectionIdx = null;\n this.cdr.detectChanges();\n }\n\n ToggleConnectionKey(): void {\n const conn = this.SelectedConnection;\n if (!conn) return;\n conn.IsKeyField = !conn.IsKeyField;\n conn.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n ToggleConnectionRequired(): void {\n const conn = this.SelectedConnection;\n if (!conn) return;\n conn.IsRequired = !conn.IsRequired;\n conn.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n GetDirectionArrowClass(direction: string): string {\n switch (direction) {\n case 'DestToSource': return 'fa-arrow-left';\n case 'Both': return 'fa-right-left';\n default: return 'fa-arrow-right';\n }\n }\n\n OnConnectionDirectionChange(direction: 'SourceToDest' | 'DestToSource' | 'Both'): void {\n const conn = this.SelectedConnection;\n if (!conn) return;\n conn.Direction = direction;\n conn.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n OnConnectionTransformChange(stepIndex: number, type: TransformType): void {\n const conn = this.SelectedConnection;\n if (!conn || !conn.TransformSteps[stepIndex]) return;\n conn.TransformSteps[stepIndex].Type = type;\n conn.TransformSteps[stepIndex].Config = this.getDefaultConfigForType(type);\n conn.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n OnTransformConfigChange(conn: VisualConnection, stepIndex: number, key: string, value: string): void {\n if (!conn.TransformSteps[stepIndex]) return;\n conn.TransformSteps[stepIndex].Config[key] = value;\n conn.IsDirty = true;\n }\n\n AddTransformStep(): void {\n const conn = this.SelectedConnection;\n if (!conn) return;\n conn.TransformSteps.push({ Type: 'direct', Config: {}, OnError: 'Fail' });\n conn.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n RemoveTransformStep(stepIndex: number): void {\n const conn = this.SelectedConnection;\n if (!conn) return;\n conn.TransformSteps.splice(stepIndex, 1);\n conn.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n // ---------------------------------------------------------------------------\n // Save / Auto-map\n // ---------------------------------------------------------------------------\n\n get HasEditorChanges(): boolean {\n return this.EditorConnections.some(c => c.IsDirty);\n }\n\n async RunSchemaPipeline(): Promise<void> {\n if (!this.EditorEntityMap || !this.EditorCard) return;\n this.IsRunningPipeline = true;\n this.PipelineResultMessage = null;\n this.PipelineResultSuccess = false;\n this.cdr.detectChanges();\n\n try {\n const result = await this.dataService.RunSchemaPipeline(\n this.EditorCard.IntegrationID,\n this.EditorEntityMap\n );\n this.PipelineResultSuccess = result.Success;\n this.PipelineResultMessage = result.Success\n ? 'Pipeline complete — schema updated'\n : result.Message ?? 'Pipeline failed';\n } catch (err: unknown) {\n this.PipelineResultSuccess = false;\n this.PipelineResultMessage = `Error: ${err instanceof Error ? err.message : String(err)}`;\n } finally {\n this.IsRunningPipeline = false;\n this.cdr.detectChanges();\n }\n }\n\n async SaveVisualEditor(): Promise<void> {\n if (!this.EditorEntityMap) return;\n this.EditorSaving = true;\n this.EditorSaveSuccess = false;\n this.cdr.detectChanges();\n\n try {\n for (const conn of this.EditorConnections) {\n if (!conn.IsDirty) continue;\n\n if (conn.MarkedForDelete && conn.ID) {\n await this.dataService.DeleteFieldMap(conn.ID);\n } else if (conn.IsNew && !conn.MarkedForDelete) {\n await this.dataService.CreateFieldMap({\n EntityMapID: this.EditorEntityMap.ID,\n SourceFieldName: conn.SourceFieldName,\n DestinationFieldName: conn.DestFieldName,\n IsKeyField: conn.IsKeyField,\n IsRequired: conn.IsRequired,\n Direction: conn.Direction,\n TransformPipeline: this.serializeTransformPipeline(conn.TransformSteps)\n });\n } else if (conn.ID && !conn.MarkedForDelete) {\n await this.dataService.UpdateFieldMap(conn.ID, {\n SourceFieldName: conn.SourceFieldName,\n DestinationFieldName: conn.DestFieldName,\n IsKeyField: conn.IsKeyField,\n IsRequired: conn.IsRequired,\n Direction: conn.Direction,\n TransformPipeline: this.serializeTransformPipeline(conn.TransformSteps)\n });\n }\n }\n\n // Reload to get clean state\n await this.LoadVisualEditorData();\n this.EditorSaveSuccess = true;\n this.SelectedConnectionIdx = null;\n } catch (err) {\n console.error('[PipelinesComponent] Failed to save field mappings:', err);\n } finally {\n this.EditorSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n async AutoMapEditorFields(): Promise<void> {\n if (!this.EditorEntityMap || !this.EditorCard) return;\n\n // Match source to dest by name (case-insensitive)\n const destMap = new Map<string, VisualDestField>();\n for (const df of this.EditorDestFields) {\n destMap.set(df.Name.toLowerCase(), df);\n }\n\n let addedCount = 0;\n for (const sf of this.EditorSourceFields) {\n // Skip if already mapped\n if (this.IsSourceFieldMapped(sf.Name)) continue;\n const destMatch = destMap.get(sf.Name.toLowerCase());\n if (!destMatch) continue;\n if (this.IsDestFieldMapped(destMatch.Name)) continue;\n\n this.EditorConnections.push({\n ID: null,\n SourceFieldName: sf.Name,\n DestFieldName: destMatch.Name,\n IsKeyField: sf.IsPrimaryKey,\n IsRequired: sf.IsRequired || destMatch.IsRequired,\n Direction: 'SourceToDest',\n TransformSteps: [{ Type: 'direct', Config: {}, OnError: 'Fail' }],\n IsDirty: true,\n IsNew: true,\n MarkedForDelete: false\n });\n addedCount++;\n }\n\n if (addedCount > 0) {\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Editor computed props\n // ---------------------------------------------------------------------------\n\n get EditorMappedCount(): number {\n return this.EditorConnections.filter(c => !c.MarkedForDelete).length;\n }\n\n get EditorKeyFieldCount(): number {\n return this.EditorConnections.filter(c => !c.MarkedForDelete && c.IsKeyField).length;\n }\n\n get EditorRequiredCount(): number {\n return this.EditorConnections.filter(c => !c.MarkedForDelete && c.IsRequired).length;\n }\n\n /** Get transform config keys for inline editing */\n GetConfigKeys(step: TransformStepUI): string[] {\n return Object.keys(step.Config);\n }\n\n GetConfigValue(step: TransformStepUI, key: string): string {\n const val = step.Config[key];\n if (val == null) return '';\n if (typeof val === 'object') return JSON.stringify(val);\n return String(val);\n }\n\n // ---------------------------------------------------------------------------\n // Private helpers\n // ---------------------------------------------------------------------------\n\n private getSourceFieldIndex(fieldName: string): number {\n return this.FilteredEditorSourceFields.findIndex(f => f.Name === fieldName);\n }\n\n private getDestFieldIndex(fieldName: string): number {\n return this.FilteredEditorDestFields.findIndex(f => f.Name === fieldName);\n }\n\n private getSourceFieldY(fieldName: string): number {\n const idx = this.getSourceFieldIndex(fieldName);\n if (idx < 0) return -1;\n return idx * this.FIELD_HEIGHT + this.FIELD_HEIGHT / 2;\n }\n\n private getDestFieldY(fieldName: string): number {\n const idx = this.getDestFieldIndex(fieldName);\n if (idx < 0) return -1;\n return idx * this.FIELD_HEIGHT + this.FIELD_HEIGHT / 2;\n }\n\n private getPrimaryTransformType(conn: VisualConnection): TransformType {\n if (conn.TransformSteps.length === 0) return 'direct';\n return conn.TransformSteps[0].Type;\n }\n\n private parseTransformPipeline(json: string | null): TransformStepUI[] {\n if (!json || json.trim() === '') return [];\n try {\n const parsed: unknown = JSON.parse(json);\n if (!Array.isArray(parsed)) return [];\n return (parsed as TransformStepUI[]).map(step => ({\n Type: step.Type ?? 'direct',\n Config: (step.Config as Record<string, unknown>) ?? {},\n OnError: step.OnError ?? 'Fail'\n }));\n } catch {\n return [];\n }\n }\n\n private serializeTransformPipeline(steps: TransformStepUI[]): string | null {\n if (steps.length === 0) return null;\n return JSON.stringify(steps.map(s => ({ Type: s.Type, Config: s.Config, OnError: s.OnError })));\n }\n\n private getDefaultConfigForType(type: TransformType): Record<string, unknown> {\n switch (type) {\n case 'direct': return {};\n case 'regex': return { Pattern: '', Replacement: '', Flags: 'g' };\n case 'split': return { Delimiter: ',', Index: 0 };\n case 'combine': return { SourceFields: [], Separator: ' ' };\n case 'lookup': return { Map: {}, Default: '' };\n case 'format': return { FormatString: '', FormatType: 'date' };\n case 'coerce': return { TargetType: 'string' };\n case 'substring': return { Start: 0, Length: 10 };\n case 'custom': return { Expression: 'value' };\n }\n }\n\n /**\n * Resolve source fields from IntegrationObjectField metadata via IntegrationEngineBase.\n * CompanyIntegrationID → Integration → IntegrationObject → IntegrationObjectFields.\n */\n private resolveSourceFieldsFromMetadata(\n companyIntegrationID: string,\n externalObjectName: string\n ): VisualSourceField[] {\n const engine = IntegrationEngineBase.Instance;\n const integration = engine.GetIntegrationForCompanyIntegration(companyIntegrationID);\n if (!integration) return [];\n\n const obj = engine.GetIntegrationObject(integration.ID, externalObjectName);\n if (!obj) return [];\n\n const fields = engine.GetIntegrationObjectFields(obj.ID);\n return fields\n .filter(f => f.Status === 'Active')\n .sort((a, b) => a.Sequence - b.Sequence)\n .map(f => ({\n Name: f.Name,\n Label: f.DisplayName || f.Name,\n Type: f.Type,\n IsRequired: f.IsRequired,\n IsPrimaryKey: f.IsPrimaryKey\n }));\n }\n\n private applyMapFilter(card: PipelineCard): EntityMapRow[] {\n if (!card.SearchTerm.trim()) return card.EntityMaps;\n const term = card.SearchTerm.toLowerCase();\n return card.EntityMaps.filter(m =>\n (m.ExternalObjectLabel ?? m.ExternalObjectName).toLowerCase().includes(term) ||\n m.Entity.toLowerCase().includes(term)\n );\n }\n\n private async loadAllEntityMaps(provider: IRunViewProvider | null): Promise<EntityMapRow[]> {\n const rv = new RunView(provider ?? null);\n const result = await rv.RunView<EntityMapRow>({\n EntityName: 'MJ: Company Integration Entity Maps',\n ExtraFilter: '',\n OrderBy: 'CompanyIntegrationID, Priority, ExternalObjectName',\n Fields: ['ID', 'CompanyIntegrationID', 'ExternalObjectName', 'ExternalObjectLabel',\n 'EntityID', 'SyncDirection', 'SyncEnabled', 'MatchStrategy',\n 'ConflictResolution', 'Priority', 'DeleteBehavior', 'Status', 'Entity'],\n ResultType: 'simple'\n });\n return result.Results;\n }\n\n private resolveIcon(summary: IntegrationSummary): string {\n if (summary.SourceType?.IconClass) {\n return summary.SourceType.IconClass;\n }\n const name = summary.Integration.Integration ?? summary.Integration.Name;\n return ResolveIntegrationIcon(name, summary.Icon);\n }\n\n private statusToColor(color: string): string {\n if (color === 'green') return '#059669';\n if (color === 'amber') return '#d97706';\n if (color === 'red') return '#dc2626';\n return '#9ca3af';\n }\n\n private statusToLabel(color: string): string {\n if (color === 'green') return 'Healthy';\n if (color === 'amber') return 'Warning';\n if (color === 'red') return 'Error';\n return 'Inactive';\n }\n}\n\nexport function LoadPipelinesComponent(): void {\n // Tree-shaking prevention: importing this module causes\n // @RegisterClass decorators to fire, registering components.\n}\n","<div class=\"pipelines-container\">\n\n <!-- ===================================================================== -->\n <!-- MAP LIST VIEW (hidden when editor is open) -->\n <!-- ===================================================================== -->\n @if (!VisualEditorOpen) {\n\n <!-- Toolbar -->\n <div class=\"pipelines-toolbar\">\n <div class=\"toolbar-left\">\n <h2 class=\"toolbar-title\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n Pipelines\n </h2>\n <span class=\"toolbar-count-badge\">{{ IntegrationCount }}</span>\n <span class=\"toolbar-map-count\">{{ TotalMapCount }} entity maps</span>\n </div>\n <div class=\"toolbar-right\">\n <div class=\"global-search\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search integrations or entities...\"\n [value]=\"GlobalSearch\"\n (input)=\"OnGlobalSearchChange($event)\" />\n </div>\n <button class=\"toolbar-btn\" (click)=\"ExpandAll()\" title=\"Expand All\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button class=\"toolbar-btn\" (click)=\"CollapseAll()\" title=\"Collapse All\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n <div class=\"toolbar-divider\"></div>\n <button class=\"toolbar-btn\" (click)=\"LoadData()\" title=\"Refresh\">\n <i class=\"fa-solid fa-arrows-rotate\" [class.fa-spin]=\"IsLoading\"></i>\n </button>\n </div>\n </div>\n\n <!-- Main content area -->\n <div class=\"pipelines-content\">\n @if (IsLoading && PipelineCards.length === 0) {\n <div class=\"content-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading pipelines...</span>\n </div>\n } @else if (PipelineCards.length === 0) {\n <div class=\"content-empty\">\n <i class=\"fa-solid fa-diagram-project empty-icon\"></i>\n <h3>No Integration Pipelines</h3>\n <p>Configure integrations to see data flow pipelines here.</p>\n </div>\n } @else {\n <div class=\"cards-list\">\n @for (card of FilteredCards; track card.IntegrationID) {\n <!-- Pipeline card -->\n <div class=\"pipeline-card\" [class.expanded]=\"card.IsExpanded\">\n\n <!-- Card header (always visible) -->\n <div class=\"card-header\" (click)=\"ToggleCard(card)\">\n <div class=\"card-header-left\">\n <div class=\"card-status-dot\" [style.backgroundColor]=\"card.StatusColor\"></div>\n <i [class]=\"card.Icon + ' card-icon'\"></i>\n <div class=\"card-info\">\n <span class=\"card-name\">{{ card.IntegrationName }}</span>\n <span class=\"card-meta\">\n {{ card.EntityMapCount }} maps\n <span class=\"meta-sep\">&middot;</span>\n {{ card.ActiveMapCount }} active\n <span class=\"meta-sep\">&middot;</span>\n {{ card.UniqueEntityCount }} entities\n </span>\n </div>\n </div>\n <div class=\"card-header-right\">\n <span class=\"card-status-label\" [style.color]=\"card.StatusColor\">\n {{ card.StatusLabel }}\n </span>\n @if (card.LastSync) {\n <span class=\"card-last-sync\">{{ card.LastSync }}</span>\n }\n <!-- Mini flow indicator -->\n <div class=\"mini-flow\">\n <span class=\"mini-flow-dot source\"></span>\n <span class=\"mini-flow-line\"></span>\n <span class=\"mini-flow-count\">{{ card.EntityMapCount }}</span>\n <span class=\"mini-flow-line\"></span>\n <span class=\"mini-flow-dot dest\"></span>\n </div>\n <i class=\"fa-solid card-chevron\"\n [class.fa-chevron-down]=\"!card.IsExpanded\"\n [class.fa-chevron-up]=\"card.IsExpanded\"></i>\n </div>\n </div>\n\n <!-- Expanded entity map table -->\n @if (card.IsExpanded) {\n <div class=\"card-body\">\n <!-- Search within this integration -->\n <div class=\"card-search-bar\">\n <i class=\"fa-solid fa-filter card-search-icon\"></i>\n <input type=\"text\"\n class=\"card-search-input\"\n placeholder=\"Filter entity maps...\"\n [value]=\"card.SearchTerm\"\n (input)=\"OnCardSearch(card, $event)\" />\n <span class=\"card-search-count\">\n {{ card.FilteredMaps.length }} of {{ card.EntityMapCount }}\n </span>\n </div>\n\n <!-- Table header -->\n <div class=\"map-table-head\">\n <span class=\"map-col-toggle\">Sync</span>\n <span class=\"map-col-source\">External Object</span>\n <span class=\"map-col-direction\"></span>\n <span class=\"map-col-dest\">MJ Entity</span>\n <span class=\"map-col-meta\">Config</span>\n </div>\n\n <!-- Table body -->\n <div class=\"map-table-body\">\n @for (em of card.FilteredMaps; track em.ID) {\n <div class=\"map-row\"\n [class.sync-disabled]=\"!em.SyncEnabled\"\n (click)=\"OnMapRowClick(card, em)\">\n <span class=\"map-col-toggle\" (click)=\"$event.stopPropagation()\">\n <label class=\"sync-toggle\" [title]=\"em.SyncEnabled ? 'Sync enabled — click to disable' : 'Sync disabled — click to enable'\">\n <input type=\"checkbox\"\n [checked]=\"em.SyncEnabled\"\n (change)=\"OnToggleSyncEnabled(card, em, $event)\" />\n <span class=\"sync-toggle-track\"></span>\n </label>\n </span>\n <span class=\"map-col-source\" [title]=\"em.ExternalObjectName\">\n {{ em.ExternalObjectLabel ?? em.ExternalObjectName }}\n </span>\n <span class=\"map-col-direction\">\n <span [class]=\"DirectionBadgeClass(em.SyncDirection)\">\n {{ DirectionText(em.SyncDirection) }}\n </span>\n </span>\n <span class=\"map-col-dest\" [title]=\"em.Entity\">\n {{ em.Entity }}\n </span>\n <span class=\"map-col-meta\">\n @if (em.MatchStrategy) {\n <span class=\"map-config-badge\" [title]=\"'Match: ' + em.MatchStrategy\">\n <i class=\"fa-solid fa-link\"></i>\n </span>\n }\n <span class=\"map-config-badge\" [title]=\"'Conflict: ' + em.ConflictResolution\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </span>\n <span class=\"map-edit-hint\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </span>\n </span>\n </div>\n } @empty {\n <div class=\"map-table-empty\">\n No entity maps match your filter.\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n\n } @else {\n\n <!-- ===================================================================== -->\n <!-- VISUAL FIELD MAPPING EDITOR (inline, replaces map list) -->\n <!-- ===================================================================== -->\n\n <div class=\"ve-container\">\n\n <!-- Header -->\n <div class=\"ve-header\">\n <div class=\"ve-header-left\">\n <button class=\"ve-back-btn\" (click)=\"CloseVisualEditor()\" title=\"Back to Pipelines\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n <div class=\"ve-header-title\">\n <span class=\"ve-source-label\">{{ EditorEntityMap?.ExternalObjectLabel ?? EditorEntityMap?.ExternalObjectName }}</span>\n <span class=\"ve-direction-arrow\">\n <i class=\"fa-solid fa-arrow-right-arrow-left\"></i>\n </span>\n <span class=\"ve-dest-label\">{{ EditorEntityMap?.Entity }}</span>\n </div>\n <!-- SyncEnabled toggle in editor header -->\n @if (EditorEntityMap) {\n <label class=\"sync-toggle ve-sync-toggle\"\n [title]=\"EditorEntityMap.SyncEnabled ? 'Sync enabled' : 'Sync disabled'\">\n <input type=\"checkbox\"\n [checked]=\"EditorEntityMap.SyncEnabled\"\n (change)=\"OnToggleEditorSyncEnabled($event)\" />\n <span class=\"sync-toggle-track\"></span>\n </label>\n <span class=\"ve-sync-label\">{{ EditorEntityMap.SyncEnabled ? 'Sync On' : 'Sync Off' }}</span>\n }\n </div>\n <div class=\"ve-header-stats\">\n <span class=\"ve-stat\">\n <strong>{{ EditorMappedCount }}</strong> mapped\n </span>\n <span class=\"ve-stat-sep\"></span>\n <span class=\"ve-stat\">\n <strong>{{ EditorKeyFieldCount }}</strong> key\n </span>\n <span class=\"ve-stat-sep\"></span>\n <span class=\"ve-stat\">\n <strong>{{ EditorRequiredCount }}</strong> required\n </span>\n </div>\n <div class=\"ve-header-actions\">\n <!-- Data preview buttons -->\n <button class=\"ve-btn ve-btn-ghost\"\n (click)=\"ToggleSourcePreview()\"\n [class.active]=\"ShowSourcePreview\"\n title=\"Preview source data\">\n <i class=\"fa-solid fa-cloud\"></i> Source Data\n </button>\n <button class=\"ve-btn ve-btn-ghost\"\n (click)=\"ToggleDestPreview()\"\n [class.active]=\"ShowDestPreview\"\n title=\"Preview MJ data\">\n <i class=\"fa-solid fa-database\"></i> MJ Data\n </button>\n <div class=\"ve-action-sep\"></div>\n <button class=\"ve-btn ve-btn-ghost\"\n [disabled]=\"IsRunningPipeline\"\n (click)=\"RunSchemaPipeline()\"\n title=\"Generate DDL, run CodeGen, and restart MJAPI for this mapping\">\n @if (IsRunningPipeline) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running Pipeline...\n } @else {\n <i class=\"fa-solid fa-gears\"></i> Run Schema Pipeline\n }\n </button>\n @if (PipelineResultMessage) {\n <span [class]=\"PipelineResultSuccess ? 've-save-success' : 've-error-msg'\">\n <i [class]=\"PipelineResultSuccess ? 'fa-solid fa-circle-check' : 'fa-solid fa-circle-xmark'\"></i>\n {{ PipelineResultMessage }}\n </span>\n }\n <div class=\"ve-action-sep\"></div>\n <button class=\"ve-btn ve-btn-ghost\" (click)=\"AutoMapEditorFields()\" title=\"Auto-map fields by name\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map\n </button>\n <button class=\"ve-btn ve-btn-primary\"\n [disabled]=\"!HasEditorChanges || EditorSaving\"\n (click)=\"SaveVisualEditor()\">\n @if (EditorSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n <i class=\"fa-solid fa-check\"></i> Save\n }\n </button>\n @if (EditorSaveSuccess && !HasEditorChanges) {\n <span class=\"ve-save-success\">\n <i class=\"fa-solid fa-circle-check\"></i> Saved\n </span>\n }\n </div>\n </div>\n\n <!-- Data preview panels (collapsible) -->\n @if (ShowSourcePreview || ShowDestPreview) {\n <div class=\"ve-preview-strip\">\n @if (ShowSourcePreview) {\n <div class=\"ve-preview-panel\">\n <div class=\"ve-preview-header\">\n <i class=\"fa-solid fa-cloud\"></i>\n <span>Source Preview: {{ EditorEntityMap?.ExternalObjectLabel ?? EditorEntityMap?.ExternalObjectName }}</span>\n <button class=\"ve-preview-close\" (click)=\"ShowSourcePreview = false\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n @if (PreviewSourceLoading) {\n <div class=\"ve-preview-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else if (PreviewSourceRows.length === 0) {\n <div class=\"ve-preview-empty\">No source data available</div>\n } @else {\n <div class=\"ve-preview-table-wrap\">\n <table class=\"ve-preview-table\">\n <thead>\n <tr>\n @for (col of PreviewSourceColumns; track col) {\n <th>{{ col }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of PreviewSourceRows; track $index) {\n <tr>\n @for (col of PreviewSourceColumns; track col) {\n <td [title]=\"row[col]?.toString() ?? ''\">{{ row[col] ?? '' }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n @if (ShowDestPreview) {\n <div class=\"ve-preview-panel\">\n <div class=\"ve-preview-header\">\n <i class=\"fa-solid fa-database\"></i>\n <span>Dest Preview: {{ EditorEntityMap?.Entity }}</span>\n <button class=\"ve-preview-close\" (click)=\"ShowDestPreview = false\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n @if (PreviewDestLoading) {\n <div class=\"ve-preview-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else if (PreviewDestRows.length === 0) {\n <div class=\"ve-preview-empty\">No destination data available</div>\n } @else {\n <div class=\"ve-preview-table-wrap\">\n <table class=\"ve-preview-table\">\n <thead>\n <tr>\n @for (col of PreviewDestColumns; track col) {\n <th>{{ col }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of PreviewDestRows; track $index) {\n <tr>\n @for (col of PreviewDestColumns; track col) {\n <td [title]=\"row[col]?.toString() ?? ''\">{{ row[col] ?? '' }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Connect mode banner -->\n @if (ConnectingFromSource) {\n <div class=\"ve-connect-banner\">\n <i class=\"fa-solid fa-link\"></i>\n Click a destination field to map from\n <strong>{{ ConnectingFromSource }}</strong>\n <button class=\"ve-connect-cancel\" (click)=\"CancelConnect()\">Cancel</button>\n </div>\n }\n\n <!-- Main content: sections + transform panel -->\n <div class=\"ve-body\" [class.has-transform-panel]=\"SelectedConnectionIdx !== null\">\n\n <!-- Loading state -->\n @if (EditorLoading) {\n <div class=\"ve-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading field mappings...</span>\n </div>\n } @else {\n\n <!-- Left content area (sections stacked vertically) -->\n <div class=\"ve-sections-wrapper\">\n\n <!-- ============================================================= -->\n <!-- FIELD MAPPINGS SECTION (collapsible) -->\n <!-- ============================================================= -->\n <div class=\"ve-section\" [class.collapsed]=\"!FieldMapsExpanded\">\n <div class=\"ve-section-header\" (click)=\"ToggleFieldMaps()\">\n <i class=\"fa-solid\"\n [class.fa-chevron-down]=\"FieldMapsExpanded\"\n [class.fa-chevron-right]=\"!FieldMapsExpanded\"></i>\n <span class=\"ve-section-title\">Field Mappings</span>\n <span class=\"ve-section-badge\">{{ EditorMappedCount }} mapped</span>\n </div>\n\n @if (FieldMapsExpanded) {\n <div class=\"ve-section-body\">\n <!-- Canvas area (scrollable) -->\n <div class=\"ve-canvas-wrapper\">\n\n <!-- Column headers -->\n <div class=\"ve-col-headers\">\n <div class=\"ve-col-header source\">\n <i class=\"fa-solid fa-cloud\"></i>\n Source Fields\n <span class=\"ve-col-count\">{{ EditorSourceFields.length }}</span>\n </div>\n <div class=\"ve-col-header-spacer\"></div>\n <div class=\"ve-col-header dest\">\n <i class=\"fa-solid fa-database\"></i>\n MJ Entity Fields\n <span class=\"ve-col-count\">{{ EditorDestFields.length }}</span>\n </div>\n </div>\n\n <!-- Search bars -->\n <div class=\"ve-col-searches\">\n <div class=\"ve-col-search\">\n <i class=\"fa-solid fa-search\"></i>\n <input type=\"text\"\n placeholder=\"Filter source fields...\"\n [value]=\"EditorSearchSource\"\n (input)=\"EditorSearchSource = $any($event.target).value\" />\n </div>\n <div class=\"ve-col-search-spacer\"></div>\n <div class=\"ve-col-search\">\n <i class=\"fa-solid fa-search\"></i>\n <input type=\"text\"\n placeholder=\"Filter destination fields...\"\n [value]=\"EditorSearchDest\"\n (input)=\"EditorSearchDest = $any($event.target).value\" />\n </div>\n </div>\n\n <!-- Canvas grid (source + SVG + dest) -->\n <div class=\"ve-canvas-scroll\" (click)=\"DeselectConnection()\">\n <div class=\"ve-canvas-grid\" [style.min-height.px]=\"EditorCanvasHeight\">\n\n <!-- Source column -->\n <div class=\"ve-field-col source\">\n @for (sf of FilteredEditorSourceFields; track sf.Name) {\n <div class=\"ve-field-item\"\n [class.mapped]=\"IsSourceFieldMapped(sf.Name)\"\n [class.unmapped]=\"!IsSourceFieldMapped(sf.Name)\"\n [class.connecting]=\"ConnectingFromSource === sf.Name\"\n [style.height.px]=\"FIELD_HEIGHT\"\n (click)=\"OnEditorSourceClick(sf.Name); $event.stopPropagation()\">\n <span class=\"ve-field-name\" [title]=\"sf.Name\">{{ sf.Label || sf.Name }}</span>\n <span class=\"ve-field-type\">{{ sf.Type }}</span>\n <span class=\"ve-field-badges\">\n @if (sf.IsPrimaryKey) {\n <span class=\"ve-fbadge pk\" title=\"Primary Key\">PK</span>\n }\n @if (sf.IsRequired) {\n <span class=\"ve-fbadge req\" title=\"Required\">*</span>\n }\n </span>\n </div>\n }\n @if (FilteredEditorSourceFields.length === 0) {\n <div class=\"ve-field-empty\">No source fields found</div>\n }\n </div>\n\n <!-- SVG connection lines -->\n <svg class=\"ve-svg\"\n [attr.width]=\"SVG_WIDTH\"\n [attr.height]=\"EditorCanvasHeight\"\n [attr.viewBox]=\"'0 0 ' + SVG_WIDTH + ' ' + EditorCanvasHeight\"\n (click)=\"$event.stopPropagation()\">\n @for (conn of VisibleConnections; track conn.SourceFieldName + '-' + conn.DestFieldName; let i = $index) {\n <!-- Connection line -->\n <path [attr.d]=\"GetConnectionPath(conn)\"\n class=\"ve-conn-line\"\n [class]=\"'ve-conn-line ' + GetConnectionLineClass(conn)\"\n [class.selected]=\"SelectedConnectionIdx === i\"\n (click)=\"SelectConnection(i, $event)\" />\n <!-- Transform badge at midpoint -->\n <foreignObject\n [attr.x]=\"SVG_WIDTH / 2 - 14\"\n [attr.y]=\"GetConnectionMidY(conn) - 14\"\n width=\"28\" height=\"28\"\n class=\"ve-badge-fo\">\n <div xmlns=\"http://www.w3.org/1999/xhtml\"\n class=\"ve-conn-badge\"\n [class]=\"'ve-conn-badge ' + GetConnectionBadgeClass(conn)\"\n [class.selected]=\"SelectedConnectionIdx === i\"\n (click)=\"SelectConnection(i, $event)\">\n <i [class]=\"GetConnectionDirectionIcon(conn)\"></i>\n </div>\n </foreignObject>\n }\n </svg>\n\n <!-- Dest column -->\n <div class=\"ve-field-col dest\">\n @for (df of FilteredEditorDestFields; track df.Name) {\n <div class=\"ve-field-item\"\n [class.mapped]=\"IsDestFieldMapped(df.Name)\"\n [class.unmapped]=\"!IsDestFieldMapped(df.Name)\"\n [class.connect-target]=\"ConnectingFromSource !== null\"\n [style.height.px]=\"FIELD_HEIGHT\"\n (click)=\"OnEditorDestClick(df.Name); $event.stopPropagation()\">\n <span class=\"ve-field-name\" [title]=\"df.Name\">{{ df.Name }}</span>\n <span class=\"ve-field-type\">{{ df.Type }}</span>\n <span class=\"ve-field-badges\">\n @if (df.IsRequired) {\n <span class=\"ve-fbadge req\" title=\"Required\">*</span>\n }\n </span>\n </div>\n }\n @if (FilteredEditorDestFields.length === 0) {\n <div class=\"ve-field-empty\">No destination fields found</div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- ============================================================= -->\n <!-- INFO PANEL SECTION (collapsible) -->\n <!-- ============================================================= -->\n <div class=\"ve-section\" [class.collapsed]=\"!InfoPanelExpanded\">\n <div class=\"ve-section-header\" (click)=\"ToggleInfoPanel()\">\n <i class=\"fa-solid\"\n [class.fa-chevron-down]=\"InfoPanelExpanded\"\n [class.fa-chevron-right]=\"!InfoPanelExpanded\"></i>\n <span class=\"ve-section-title\">Sync Info</span>\n </div>\n\n @if (InfoPanelExpanded) {\n <div class=\"ve-section-body ve-info-body\">\n @if (InfoPanelLoading) {\n <div class=\"ve-info-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading stats...\n </div>\n } @else {\n <div class=\"ve-info-grid\">\n <!-- Destination record count -->\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon\">\n <i class=\"fa-solid fa-database\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ InfoDestRecordCount ?? '-' }}</span>\n <span class=\"ve-info-card-label\">MJ Records</span>\n </div>\n </div>\n <!-- Source fields count -->\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon source\">\n <i class=\"fa-solid fa-cloud\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ EditorSourceFields.length }}</span>\n <span class=\"ve-info-card-label\">Source Fields</span>\n </div>\n </div>\n <!-- Last sync -->\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon sync\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ FormatSyncDate(InfoLastSync?.StartedAt ?? null) }}</span>\n <span class=\"ve-info-card-label\">Last Sync</span>\n </div>\n </div>\n <!-- Sync status -->\n @if (InfoLastSync) {\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon\" [ngClass]=\"SyncStatusClass(InfoLastSync.Status)\">\n <i class=\"fa-solid\"\n [class.fa-circle-check]=\"InfoLastSync.Status === 'Success'\"\n [class.fa-circle-xmark]=\"InfoLastSync.Status === 'Failed'\"\n [class.fa-spinner]=\"InfoLastSync.Status === 'In Progress'\"\n [class.fa-clock]=\"InfoLastSync.Status === 'Pending'\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ InfoLastSync.Status }}</span>\n <span class=\"ve-info-card-label\">{{ InfoLastSync.TotalRecords }} records processed</span>\n </div>\n </div>\n }\n </div>\n\n <!-- Configuration details -->\n <div class=\"ve-info-details\">\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Sync Direction</span>\n <span class=\"ve-info-detail-value\">{{ EditorEntityMap?.SyncDirection }}</span>\n </div>\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Conflict Resolution</span>\n <span class=\"ve-info-detail-value\">{{ EditorEntityMap?.ConflictResolution }}</span>\n </div>\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Delete Behavior</span>\n <span class=\"ve-info-detail-value\">{{ EditorEntityMap?.DeleteBehavior }}</span>\n </div>\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Priority</span>\n <span class=\"ve-info-detail-value\">{{ EditorEntityMap?.Priority }}</span>\n </div>\n @if (EditorEntityMap?.MatchStrategy) {\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Match Strategy</span>\n <span class=\"ve-info-detail-value\">Configured</span>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Transform editor panel (right side, appears when connection selected) -->\n @if (SelectedConnection; as conn) {\n <div class=\"ve-transform-panel\" (click)=\"$event.stopPropagation()\">\n <div class=\"ve-tp-header\">\n <span class=\"ve-tp-title\">Mapping Details</span>\n <button class=\"ve-tp-close\" (click)=\"DeselectConnection()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <!-- Source → Dest -->\n <div class=\"ve-tp-mapping-info\">\n <div class=\"ve-tp-field-pair\">\n <span class=\"ve-tp-field source\">{{ conn.SourceFieldName }}</span>\n <i class=\"fa-solid ve-tp-arrow\"\n [class.fa-arrow-right]=\"conn.Direction === 'SourceToDest'\"\n [class.fa-arrow-left]=\"conn.Direction === 'DestToSource'\"\n [class.fa-right-left]=\"conn.Direction === 'Both'\"></i>\n <span class=\"ve-tp-field dest\">{{ conn.DestFieldName }}</span>\n </div>\n </div>\n\n <!-- Toggles -->\n <div class=\"ve-tp-toggles\">\n <label class=\"ve-tp-toggle\" (click)=\"ToggleConnectionKey()\">\n <span class=\"ve-tp-toggle-box\" [class.active]=\"conn.IsKeyField\">\n @if (conn.IsKeyField) { <i class=\"fa-solid fa-check\"></i> }\n </span>\n <span>Key Field</span>\n </label>\n <label class=\"ve-tp-toggle\" (click)=\"ToggleConnectionRequired()\">\n <span class=\"ve-tp-toggle-box\" [class.active]=\"conn.IsRequired\">\n @if (conn.IsRequired) { <i class=\"fa-solid fa-check\"></i> }\n </span>\n <span>Required</span>\n </label>\n </div>\n\n <!-- Direction -->\n <div class=\"ve-tp-section\">\n <label class=\"ve-tp-section-label\">Direction</label>\n <div class=\"ve-tp-direction-btns\">\n <button [class.active]=\"conn.Direction === 'SourceToDest'\"\n (click)=\"OnConnectionDirectionChange('SourceToDest')\">\n Source &rarr; Dest\n </button>\n <button [class.active]=\"conn.Direction === 'DestToSource'\"\n (click)=\"OnConnectionDirectionChange('DestToSource')\">\n Dest &rarr; Source\n </button>\n <button [class.active]=\"conn.Direction === 'Both'\"\n (click)=\"OnConnectionDirectionChange('Both')\">\n Both\n </button>\n </div>\n </div>\n\n <!-- Transform pipeline -->\n <div class=\"ve-tp-section\">\n <div class=\"ve-tp-section-header\">\n <label class=\"ve-tp-section-label\">Transform Pipeline</label>\n <button class=\"ve-tp-add-step\" (click)=\"AddTransformStep()\">\n <i class=\"fa-solid fa-plus\"></i> Add Step\n </button>\n </div>\n\n @for (step of conn.TransformSteps; track $index; let si = $index) {\n <div class=\"ve-tp-step\">\n <div class=\"ve-tp-step-header\">\n <span class=\"ve-tp-step-num\">{{ si + 1 }}</span>\n <select class=\"ve-tp-type-select\"\n [value]=\"step.Type\"\n (change)=\"OnConnectionTransformChange(si, $any($event.target).value)\">\n @for (tt of TRANSFORM_TYPES; track tt.Value) {\n <option [value]=\"tt.Value\" [selected]=\"tt.Value === step.Type\">{{ tt.Label }}</option>\n }\n </select>\n <button class=\"ve-tp-remove-step\" (click)=\"RemoveTransformStep(si)\" title=\"Remove step\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n\n <!-- Config fields based on transform type -->\n @if (step.Type !== 'direct') {\n <div class=\"ve-tp-step-config\">\n @for (key of GetConfigKeys(step); track key) {\n <div class=\"ve-tp-config-row\">\n <label>{{ key }}</label>\n <input type=\"text\"\n [value]=\"GetConfigValue(step, key)\"\n (input)=\"OnTransformConfigChange(conn, si, key, $any($event.target).value)\"\n placeholder=\"{{ key }}\" />\n </div>\n }\n </div>\n }\n\n <!-- On error -->\n <div class=\"ve-tp-step-onerror\">\n <label>On Error:</label>\n <select [value]=\"step.OnError\"\n (change)=\"step.OnError = $any($event.target).value; conn.IsDirty = true\">\n <option value=\"Fail\">Fail</option>\n <option value=\"Skip\">Skip</option>\n <option value=\"Null\">Null</option>\n </select>\n </div>\n </div>\n }\n\n @if (conn.TransformSteps.length === 0) {\n <div class=\"ve-tp-no-steps\">\n No transform steps. Data passes through as-is.\n </div>\n }\n </div>\n\n <!-- Delete mapping button -->\n <div class=\"ve-tp-footer\">\n <button class=\"ve-btn ve-btn-danger\" (click)=\"RemoveSelectedConnection()\">\n <i class=\"fa-solid fa-trash-can\"></i> Remove Mapping\n </button>\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n</div>\n"]}
1
+ {"version":3,"file":"pipelines.component.js","sourceRoot":"","sources":["../../../../src/Integration/components/pipelines/pipelines.component.ts","../../../../src/Integration/components/pipelines/pipelines.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, OnInit, OnDestroy, inject } from '@angular/core';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { RunView, IRunViewProvider } from '@memberjunction/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { IntegrationEngineBase } from '@memberjunction/integration-engine-base';\nimport {\n IntegrationDataService,\n ResolveIntegrationIcon,\n IntegrationSummary,\n EntityMapRow,\n FieldMapRow\n} from '../../services/integration-data.service';\n\n// ---------------------------------------------------------------------------\n// Data interfaces\n// ---------------------------------------------------------------------------\n\ninterface PipelineCard {\n IntegrationID: string;\n IntegrationName: string;\n Icon: string;\n StatusColor: string;\n StatusLabel: string;\n EntityMapCount: number;\n ActiveMapCount: number;\n UniqueEntityCount: number;\n LastSync: string;\n IsExpanded: boolean;\n EntityMaps: EntityMapRow[];\n /** Filtered subset currently visible */\n FilteredMaps: EntityMapRow[];\n SearchTerm: string;\n}\n\n// --- Visual Editor types ---\n\ntype TransformType = 'direct' | 'regex' | 'split' | 'combine' | 'lookup' | 'format' | 'coerce' | 'substring' | 'custom';\n\ninterface TransformStepUI {\n Type: TransformType;\n Config: Record<string, unknown>;\n OnError: 'Skip' | 'Null' | 'Fail';\n}\n\ninterface VisualSourceField {\n Name: string;\n Label: string;\n Type: string;\n IsRequired: boolean;\n IsPrimaryKey: boolean;\n}\n\ninterface VisualDestField {\n Name: string;\n Type: string;\n IsRequired: boolean;\n}\n\ninterface VisualConnection {\n ID: string | null;\n SourceFieldName: string;\n DestFieldName: string;\n IsKeyField: boolean;\n IsRequired: boolean;\n Direction: 'SourceToDest' | 'DestToSource' | 'Both';\n TransformSteps: TransformStepUI[];\n IsDirty: boolean;\n IsNew: boolean;\n MarkedForDelete: boolean;\n}\n\n@RegisterClass(BaseResourceComponent, 'IntegrationPipelines')\n@Component({\n standalone: false,\n selector: 'app-integration-pipelines',\n templateUrl: './pipelines.component.html',\n styleUrls: ['./pipelines.component.css']\n})\nexport class PipelinesComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n\n // ---------------------------------------------------------------------------\n // Public state — Card list\n // ---------------------------------------------------------------------------\n\n PipelineCards: PipelineCard[] = [];\n IsLoading = false;\n GlobalSearch = '';\n\n // ---------------------------------------------------------------------------\n // Visual Editor state\n // ---------------------------------------------------------------------------\n\n VisualEditorOpen = false;\n EditorEntityMap: EntityMapRow | null = null;\n EditorCard: PipelineCard | null = null;\n EditorSourceFields: VisualSourceField[] = [];\n EditorDestFields: VisualDestField[] = [];\n EditorConnections: VisualConnection[] = [];\n EditorLoading = false;\n EditorSaving = false;\n EditorSaveSuccess = false;\n\n /** Schema pipeline state */\n IsRunningPipeline = false;\n PipelineResultMessage: string | null = null;\n PipelineResultSuccess = false;\n\n /** Currently selected connection index (opens transform panel) */\n SelectedConnectionIdx: number | null = null;\n\n /** When non-null, user is in \"connect mode\" — next dest click creates a mapping */\n ConnectingFromSource: string | null = null;\n\n /** Search/filter within the visual editor columns */\n EditorSearchSource = '';\n EditorSearchDest = '';\n\n /** Data preview state */\n ShowSourcePreview = false;\n ShowDestPreview = false;\n PreviewSourceLoading = false;\n PreviewDestLoading = false;\n PreviewSourceRows: Array<Record<string, string | number | boolean | null>> = [];\n PreviewDestRows: Array<Record<string, string | number | boolean | null>> = [];\n PreviewSourceColumns: string[] = [];\n PreviewDestColumns: string[] = [];\n\n /** Collapsible section state */\n FieldMapsExpanded = true;\n InfoPanelExpanded = false;\n\n /** Info panel data */\n InfoPanelLoading = false;\n InfoDestRecordCount: number | null = null;\n InfoLastSync: { StartedAt: string | null; EndedAt: string | null; Status: string; TotalRecords: number } | null = null;\n\n /** SVG layout constants */\n readonly FIELD_HEIGHT = 40;\n readonly SVG_WIDTH = 200;\n\n /** Transform type metadata */\n readonly TRANSFORM_TYPES: Array<{ Value: TransformType; Label: string; Icon: string }> = [\n { Value: 'direct', Label: 'Direct', Icon: 'fa-solid fa-arrow-right' },\n { Value: 'regex', Label: 'Regex', Icon: 'fa-solid fa-code' },\n { Value: 'split', Label: 'Split', Icon: 'fa-solid fa-scissors' },\n { Value: 'combine', Label: 'Combine', Icon: 'fa-solid fa-object-group' },\n { Value: 'lookup', Label: 'Lookup', Icon: 'fa-solid fa-book' },\n { Value: 'format', Label: 'Format', Icon: 'fa-solid fa-font' },\n { Value: 'coerce', Label: 'Coerce', Icon: 'fa-solid fa-exchange-alt' },\n { Value: 'substring', Label: 'Substring', Icon: 'fa-solid fa-text-width' },\n { Value: 'custom', Label: 'Custom', Icon: 'fa-solid fa-wand-magic-sparkles' }\n ];\n\n // ---------------------------------------------------------------------------\n // Private\n // ---------------------------------------------------------------------------\n\n private dataService = inject(IntegrationDataService);\n private cdr = inject(ChangeDetectorRef);\n\n // ---------------------------------------------------------------------------\n // Lifecycle\n // ---------------------------------------------------------------------------\n\n async ngOnInit(): Promise<void> {\n super.ngOnInit();\n await this.LoadData();\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n // Clean up if needed\n }\n\n // ---------------------------------------------------------------------------\n // Resource overrides\n // ---------------------------------------------------------------------------\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Pipelines';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-diagram-project';\n }\n\n // ---------------------------------------------------------------------------\n // Data loading\n // ---------------------------------------------------------------------------\n\n async LoadData(): Promise<void> {\n this.IsLoading = true;\n this.cdr.detectChanges();\n try {\n const provider = this.RunViewToUse;\n const [summaries, allEntityMaps] = await Promise.all([\n this.dataService.LoadIntegrationSummaries(provider),\n this.loadAllEntityMaps(provider)\n ]);\n this.BuildCards(summaries, allEntityMaps);\n } catch (err) {\n console.error('[PipelinesComponent] Failed to load data:', err);\n } finally {\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Card building\n // ---------------------------------------------------------------------------\n\n BuildCards(summaries: IntegrationSummary[], allEntityMaps: EntityMapRow[]): void {\n this.PipelineCards = summaries.map(summary => {\n const maps = allEntityMaps.filter(\n m => UUIDsEqual(m.CompanyIntegrationID, summary.Integration.ID)\n );\n const activeMaps = maps.filter(m => m.SyncEnabled);\n const uniqueEntities = new Set(maps.map(m => m.EntityID)).size;\n return {\n IntegrationID: summary.Integration.ID,\n IntegrationName: summary.Integration.Integration ?? summary.Integration.Name,\n Icon: this.resolveIcon(summary),\n StatusColor: this.statusToColor(summary.StatusColor),\n StatusLabel: this.statusToLabel(summary.StatusColor),\n EntityMapCount: maps.length,\n ActiveMapCount: activeMaps.length,\n UniqueEntityCount: uniqueEntities,\n LastSync: summary.RelativeTime,\n IsExpanded: false,\n EntityMaps: maps,\n FilteredMaps: maps,\n SearchTerm: ''\n };\n });\n }\n\n // ---------------------------------------------------------------------------\n // Card expand / collapse\n // ---------------------------------------------------------------------------\n\n ToggleCard(card: PipelineCard): void {\n card.IsExpanded = !card.IsExpanded;\n if (card.IsExpanded) {\n card.FilteredMaps = this.applyMapFilter(card);\n }\n }\n\n ExpandAll(): void {\n for (const card of this.PipelineCards) {\n card.IsExpanded = true;\n card.FilteredMaps = this.applyMapFilter(card);\n }\n }\n\n CollapseAll(): void {\n for (const card of this.PipelineCards) {\n card.IsExpanded = false;\n }\n }\n\n // ---------------------------------------------------------------------------\n // Search / filter\n // ---------------------------------------------------------------------------\n\n OnCardSearch(card: PipelineCard, event: Event): void {\n const input = event.target as HTMLInputElement;\n card.SearchTerm = input.value;\n card.FilteredMaps = this.applyMapFilter(card);\n this.cdr.detectChanges();\n }\n\n OnGlobalSearchChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.GlobalSearch = input.value;\n this.cdr.detectChanges();\n }\n\n get FilteredCards(): PipelineCard[] {\n if (!this.GlobalSearch.trim()) return this.PipelineCards;\n const term = this.GlobalSearch.toLowerCase();\n return this.PipelineCards.filter(card =>\n card.IntegrationName.toLowerCase().includes(term) ||\n card.EntityMaps.some(m =>\n (m.ExternalObjectLabel ?? m.ExternalObjectName).toLowerCase().includes(term) ||\n m.Entity.toLowerCase().includes(term)\n )\n );\n }\n\n // ---------------------------------------------------------------------------\n // Entity map row click → Open Visual Editor\n // ---------------------------------------------------------------------------\n\n OnMapRowClick(card: PipelineCard, entityMap: EntityMapRow): void {\n this.OpenVisualEditor(card, entityMap);\n }\n\n // ---------------------------------------------------------------------------\n // SyncEnabled toggle\n // ---------------------------------------------------------------------------\n\n async OnToggleSyncEnabled(card: PipelineCard, em: EntityMapRow, event: Event): Promise<void> {\n const checkbox = event.target as HTMLInputElement;\n const newValue = checkbox.checked;\n em.SyncEnabled = newValue;\n card.ActiveMapCount = card.EntityMaps.filter(m => m.SyncEnabled).length;\n this.cdr.detectChanges();\n try {\n await this.dataService.ToggleEntityMapEnabled(em.ID, newValue);\n } catch (err) {\n // Revert on failure\n em.SyncEnabled = !newValue;\n card.ActiveMapCount = card.EntityMaps.filter(m => m.SyncEnabled).length;\n checkbox.checked = !newValue;\n console.error('[PipelinesComponent] Failed to toggle SyncEnabled:', err);\n this.cdr.detectChanges();\n }\n }\n\n async OnToggleEditorSyncEnabled(event: Event): Promise<void> {\n if (!this.EditorEntityMap || !this.EditorCard) return;\n const checkbox = event.target as HTMLInputElement;\n const newValue = checkbox.checked;\n this.EditorEntityMap.SyncEnabled = newValue;\n this.EditorCard.ActiveMapCount = this.EditorCard.EntityMaps.filter(m => m.SyncEnabled).length;\n this.cdr.detectChanges();\n try {\n await this.dataService.ToggleEntityMapEnabled(this.EditorEntityMap.ID, newValue);\n } catch (err) {\n this.EditorEntityMap.SyncEnabled = !newValue;\n this.EditorCard.ActiveMapCount = this.EditorCard.EntityMaps.filter(m => m.SyncEnabled).length;\n checkbox.checked = !newValue;\n console.error('[PipelinesComponent] Failed to toggle SyncEnabled:', err);\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Data preview\n // ---------------------------------------------------------------------------\n\n async ToggleSourcePreview(): Promise<void> {\n this.ShowSourcePreview = !this.ShowSourcePreview;\n if (this.ShowSourcePreview && this.PreviewSourceRows.length === 0) {\n await this.loadSourcePreview();\n }\n this.cdr.detectChanges();\n }\n\n async ToggleDestPreview(): Promise<void> {\n this.ShowDestPreview = !this.ShowDestPreview;\n if (this.ShowDestPreview && this.PreviewDestRows.length === 0) {\n await this.loadDestPreview();\n }\n this.cdr.detectChanges();\n }\n\n private async loadSourcePreview(): Promise<void> {\n if (!this.EditorEntityMap || !this.EditorCard) return;\n this.PreviewSourceLoading = true;\n this.cdr.detectChanges();\n try {\n const rows = await this.dataService.PreviewSourceData(\n this.EditorCard.IntegrationID,\n this.EditorEntityMap.ExternalObjectName,\n 5\n );\n this.PreviewSourceRows = rows;\n this.PreviewSourceColumns = rows.length > 0 ? Object.keys(rows[0]) : [];\n } catch (err) {\n console.error('[PipelinesComponent] Failed to load source preview:', err);\n this.PreviewSourceRows = [];\n this.PreviewSourceColumns = [];\n } finally {\n this.PreviewSourceLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n private async loadDestPreview(): Promise<void> {\n if (!this.EditorEntityMap) return;\n this.PreviewDestLoading = true;\n this.cdr.detectChanges();\n try {\n const rows = await this.dataService.PreviewDestinationData(\n this.EditorEntityMap.EntityID,\n 5,\n this.RunViewToUse\n );\n this.PreviewDestRows = rows;\n this.PreviewDestColumns = rows.length > 0 ? Object.keys(rows[0]) : [];\n } catch (err) {\n console.error('[PipelinesComponent] Failed to load dest preview:', err);\n this.PreviewDestRows = [];\n this.PreviewDestColumns = [];\n } finally {\n this.PreviewDestLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Collapsible sections\n // ---------------------------------------------------------------------------\n\n ToggleFieldMaps(): void {\n this.FieldMapsExpanded = !this.FieldMapsExpanded;\n this.cdr.detectChanges();\n }\n\n ToggleInfoPanel(): void {\n this.InfoPanelExpanded = !this.InfoPanelExpanded;\n if (this.InfoPanelExpanded && this.InfoDestRecordCount === null) {\n this.loadInfoPanelData();\n }\n this.cdr.detectChanges();\n }\n\n private async loadInfoPanelData(): Promise<void> {\n if (!this.EditorEntityMap || !this.EditorCard) return;\n this.InfoPanelLoading = true;\n this.cdr.detectChanges();\n try {\n const [destCount, lastSync] = await Promise.all([\n this.dataService.GetDestinationRecordCount(this.EditorEntityMap.EntityID, this.RunViewToUse),\n this.dataService.GetLastSyncForEntity(\n this.EditorCard.IntegrationID,\n this.EditorEntityMap.EntityID,\n this.RunViewToUse\n )\n ]);\n this.InfoDestRecordCount = destCount;\n this.InfoLastSync = lastSync;\n } catch (err) {\n console.error('[PipelinesComponent] Failed to load info panel data:', err);\n } finally {\n this.InfoPanelLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n FormatSyncDate(dateStr: string | null): string {\n if (!dateStr) return 'Never';\n const d = new Date(dateStr);\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n const diffHours = Math.floor(diffMins / 60);\n if (diffHours < 24) return `${diffHours}h ago`;\n const diffDays = Math.floor(diffHours / 24);\n if (diffDays < 7) return `${diffDays}d ago`;\n return d.toLocaleDateString();\n }\n\n SyncStatusClass(status: string): string {\n switch (status) {\n case 'Success': return 'info-status-success';\n case 'Failed': return 'info-status-error';\n case 'In Progress': return 'info-status-running';\n default: return 'info-status-pending';\n }\n }\n\n // ---------------------------------------------------------------------------\n // Template helpers\n // ---------------------------------------------------------------------------\n\n /**\n * Direction arrows for entity-level sync direction.\n * Pull = data flows FROM external source INTO MJ = right arrow (→)\n * Push = data flows FROM MJ OUT to external = left arrow (←)\n */\n DirectionLabel(direction: string): string {\n if (direction === 'Pull') return '\\u2192';\n if (direction === 'Push') return '\\u2190';\n if (direction === 'Bidirectional') return '\\u2194';\n return '\\u2192';\n }\n\n DirectionBadgeClass(direction: string): string {\n if (direction === 'Pull') return 'direction-badge pull';\n if (direction === 'Push') return 'direction-badge push';\n if (direction === 'Bidirectional') return 'direction-badge bidirectional';\n return 'direction-badge';\n }\n\n DirectionText(direction: string): string {\n if (direction === 'Pull') return 'Pull \\u2192';\n if (direction === 'Push') return '\\u2190 Push';\n if (direction === 'Bidirectional') return '\\u2194 Bi';\n return 'Pull \\u2192';\n }\n\n get IntegrationCount(): number {\n return this.PipelineCards.length;\n }\n\n get TotalMapCount(): number {\n return this.PipelineCards.reduce((sum, c) => sum + c.EntityMapCount, 0);\n }\n\n // ===========================================================================\n // VISUAL FIELD MAPPING EDITOR\n // ===========================================================================\n\n // ---------------------------------------------------------------------------\n // Open / Close\n // ---------------------------------------------------------------------------\n\n OpenVisualEditor(card: PipelineCard, entityMap: EntityMapRow): void {\n this.EditorCard = card;\n this.EditorEntityMap = entityMap;\n this.VisualEditorOpen = true;\n this.SelectedConnectionIdx = null;\n this.ConnectingFromSource = null;\n this.EditorSearchSource = '';\n this.EditorSearchDest = '';\n this.EditorSaveSuccess = false;\n this.ShowSourcePreview = false;\n this.ShowDestPreview = false;\n this.PreviewSourceRows = [];\n this.PreviewDestRows = [];\n this.PreviewSourceColumns = [];\n this.PreviewDestColumns = [];\n this.FieldMapsExpanded = true;\n this.InfoPanelExpanded = false;\n this.InfoDestRecordCount = null;\n this.InfoLastSync = null;\n this.cdr.detectChanges();\n this.LoadVisualEditorData();\n }\n\n CloseVisualEditor(): void {\n this.VisualEditorOpen = false;\n this.EditorEntityMap = null;\n this.EditorCard = null;\n this.EditorSourceFields = [];\n this.EditorDestFields = [];\n this.EditorConnections = [];\n this.SelectedConnectionIdx = null;\n this.ConnectingFromSource = null;\n this.cdr.detectChanges();\n }\n\n async LoadVisualEditorData(): Promise<void> {\n if (!this.EditorEntityMap || !this.EditorCard) return;\n this.EditorLoading = true;\n this.cdr.detectChanges();\n\n const entityMap = this.EditorEntityMap;\n\n try {\n // Load field maps and dest fields in parallel\n const [fieldMaps, destFields] = await Promise.all([\n this.dataService.LoadFieldMaps(entityMap.ID, this.RunViewToUse),\n this.dataService.LoadEntityFields(entityMap.EntityID, this.RunViewToUse)\n ]);\n\n // Build source fields from IntegrationObjectField metadata\n const sourceFields = this.resolveSourceFieldsFromMetadata(\n this.EditorCard.IntegrationID,\n entityMap.ExternalObjectName\n );\n\n if (sourceFields.length > 0) {\n this.EditorSourceFields = sourceFields;\n } else {\n // Fallback: derive source fields from existing field maps\n this.EditorSourceFields = fieldMaps.map(fm => ({\n Name: fm.SourceFieldName,\n Label: fm.SourceFieldLabel ?? fm.SourceFieldName,\n Type: '',\n IsRequired: fm.IsRequired,\n IsPrimaryKey: fm.IsKeyField\n }));\n }\n\n // Build dest fields (exclude __mj system fields — they are read-only)\n this.EditorDestFields = destFields\n .filter(f => !f.Name.startsWith('__mj'))\n .map(f => ({\n Name: f.Name,\n Type: f.Type,\n IsRequired: f.IsRequired\n }));\n\n // Build connections\n this.EditorConnections = fieldMaps\n .filter(fm => fm.Status === 'Active')\n .map(fm => ({\n ID: fm.ID,\n SourceFieldName: fm.SourceFieldName,\n DestFieldName: fm.DestinationFieldName,\n IsKeyField: fm.IsKeyField,\n IsRequired: fm.IsRequired,\n Direction: fm.Direction,\n TransformSteps: this.parseTransformPipeline(fm.TransformPipeline),\n IsDirty: false,\n IsNew: false,\n MarkedForDelete: false\n }));\n } catch (err) {\n console.error('[PipelinesComponent] Failed to load editor data:', err);\n } finally {\n this.EditorLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Filtered field lists\n // ---------------------------------------------------------------------------\n\n get FilteredEditorSourceFields(): VisualSourceField[] {\n if (!this.EditorSearchSource.trim()) return this.EditorSourceFields;\n const term = this.EditorSearchSource.toLowerCase();\n return this.EditorSourceFields.filter(f =>\n f.Name.toLowerCase().includes(term) || f.Label.toLowerCase().includes(term)\n );\n }\n\n get FilteredEditorDestFields(): VisualDestField[] {\n if (!this.EditorSearchDest.trim()) return this.EditorDestFields;\n const term = this.EditorSearchDest.toLowerCase();\n return this.EditorDestFields.filter(f => f.Name.toLowerCase().includes(term));\n }\n\n /** Only show connections where both source and dest are visible */\n get VisibleConnections(): VisualConnection[] {\n return this.EditorConnections.filter(c =>\n !c.MarkedForDelete &&\n this.getSourceFieldIndex(c.SourceFieldName) >= 0 &&\n this.getDestFieldIndex(c.DestFieldName) >= 0\n );\n }\n\n // ---------------------------------------------------------------------------\n // SVG Calculations\n // ---------------------------------------------------------------------------\n\n get EditorCanvasHeight(): number {\n const sourceHeight = this.FilteredEditorSourceFields.length * this.FIELD_HEIGHT;\n const destHeight = this.FilteredEditorDestFields.length * this.FIELD_HEIGHT;\n return Math.max(sourceHeight, destHeight, 200);\n }\n\n GetConnectionPath(conn: VisualConnection): string {\n const sourceY = this.getSourceFieldY(conn.SourceFieldName);\n const destY = this.getDestFieldY(conn.DestFieldName);\n if (sourceY < 0 || destY < 0) return '';\n const cp1x = this.SVG_WIDTH * 0.35;\n const cp2x = this.SVG_WIDTH * 0.65;\n return `M 0 ${sourceY} C ${cp1x} ${sourceY}, ${cp2x} ${destY}, ${this.SVG_WIDTH} ${destY}`;\n }\n\n GetConnectionMidY(conn: VisualConnection): number {\n const sourceY = this.getSourceFieldY(conn.SourceFieldName);\n const destY = this.getDestFieldY(conn.DestFieldName);\n return (sourceY + destY) / 2;\n }\n\n GetConnectionLineClass(conn: VisualConnection): string {\n const type = this.getPrimaryTransformType(conn);\n return `conn-${type}`;\n }\n\n GetConnectionBadgeClass(conn: VisualConnection): string {\n const type = this.getPrimaryTransformType(conn);\n return `badge-${type}`;\n }\n\n GetConnectionTransformIcon(conn: VisualConnection): string {\n const type = this.getPrimaryTransformType(conn);\n return this.TRANSFORM_TYPES.find(t => t.Value === type)?.Icon ?? 'fa-solid fa-arrow-right';\n }\n\n /** Direction-aware icon for the SVG connection badge */\n GetConnectionDirectionIcon(conn: VisualConnection): string {\n switch (conn.Direction) {\n case 'DestToSource': return 'fa-solid fa-arrow-left';\n case 'Both': return 'fa-solid fa-right-left';\n default: return 'fa-solid fa-arrow-right';\n }\n }\n\n GetTransformTypeLabel(type: TransformType): string {\n return this.TRANSFORM_TYPES.find(t => t.Value === type)?.Label ?? type;\n }\n\n // ---------------------------------------------------------------------------\n // Field mapped state\n // ---------------------------------------------------------------------------\n\n IsSourceFieldMapped(fieldName: string): boolean {\n return this.EditorConnections.some(c => !c.MarkedForDelete && c.SourceFieldName === fieldName);\n }\n\n IsDestFieldMapped(fieldName: string): boolean {\n return this.EditorConnections.some(c => !c.MarkedForDelete && c.DestFieldName === fieldName);\n }\n\n // ---------------------------------------------------------------------------\n // Creating connections (click source → click dest)\n // ---------------------------------------------------------------------------\n\n OnEditorSourceClick(fieldName: string): void {\n // Don't allow starting a new connection from an already-mapped field\n if (this.IsSourceFieldMapped(fieldName)) return;\n\n if (this.ConnectingFromSource === fieldName) {\n this.ConnectingFromSource = null;\n } else {\n this.ConnectingFromSource = fieldName;\n this.SelectedConnectionIdx = null;\n }\n this.cdr.detectChanges();\n }\n\n OnEditorDestClick(fieldName: string): void {\n if (!this.ConnectingFromSource) return;\n\n // Don't allow mapping to an already-mapped dest field\n if (this.IsDestFieldMapped(fieldName)) return;\n\n // Check if this mapping already exists\n const existing = this.EditorConnections.find(\n c => !c.MarkedForDelete && c.SourceFieldName === this.ConnectingFromSource && c.DestFieldName === fieldName\n );\n if (existing) {\n this.ConnectingFromSource = null;\n return;\n }\n\n // Create new connection\n this.EditorConnections.push({\n ID: null,\n SourceFieldName: this.ConnectingFromSource,\n DestFieldName: fieldName,\n IsKeyField: false,\n IsRequired: false,\n Direction: 'SourceToDest',\n TransformSteps: [{ Type: 'direct', Config: {}, OnError: 'Fail' }],\n IsDirty: true,\n IsNew: true,\n MarkedForDelete: false\n });\n\n this.ConnectingFromSource = null;\n this.SelectedConnectionIdx = this.EditorConnections.length - 1;\n this.cdr.detectChanges();\n }\n\n CancelConnect(): void {\n this.ConnectingFromSource = null;\n this.cdr.detectChanges();\n }\n\n // ---------------------------------------------------------------------------\n // Connection selection / editing\n // ---------------------------------------------------------------------------\n\n SelectConnection(index: number, event: Event): void {\n event.stopPropagation();\n this.SelectedConnectionIdx = this.SelectedConnectionIdx === index ? null : index;\n this.ConnectingFromSource = null;\n this.cdr.detectChanges();\n }\n\n DeselectConnection(): void {\n this.SelectedConnectionIdx = null;\n this.cdr.detectChanges();\n }\n\n get SelectedConnection(): VisualConnection | null {\n if (this.SelectedConnectionIdx == null) return null;\n return this.EditorConnections[this.SelectedConnectionIdx] ?? null;\n }\n\n RemoveSelectedConnection(): void {\n if (this.SelectedConnectionIdx == null) return;\n const conn = this.EditorConnections[this.SelectedConnectionIdx];\n if (conn.IsNew) {\n this.EditorConnections.splice(this.SelectedConnectionIdx, 1);\n } else {\n conn.MarkedForDelete = true;\n conn.IsDirty = true;\n }\n this.SelectedConnectionIdx = null;\n this.cdr.detectChanges();\n }\n\n ToggleConnectionKey(): void {\n const conn = this.SelectedConnection;\n if (!conn) return;\n conn.IsKeyField = !conn.IsKeyField;\n conn.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n ToggleConnectionRequired(): void {\n const conn = this.SelectedConnection;\n if (!conn) return;\n conn.IsRequired = !conn.IsRequired;\n conn.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n GetDirectionArrowClass(direction: string): string {\n switch (direction) {\n case 'DestToSource': return 'fa-arrow-left';\n case 'Both': return 'fa-right-left';\n default: return 'fa-arrow-right';\n }\n }\n\n OnConnectionDirectionChange(direction: 'SourceToDest' | 'DestToSource' | 'Both'): void {\n const conn = this.SelectedConnection;\n if (!conn) return;\n conn.Direction = direction;\n conn.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n OnConnectionTransformChange(stepIndex: number, type: TransformType): void {\n const conn = this.SelectedConnection;\n if (!conn || !conn.TransformSteps[stepIndex]) return;\n conn.TransformSteps[stepIndex].Type = type;\n conn.TransformSteps[stepIndex].Config = this.getDefaultConfigForType(type);\n conn.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n OnTransformConfigChange(conn: VisualConnection, stepIndex: number, key: string, value: string): void {\n if (!conn.TransformSteps[stepIndex]) return;\n conn.TransformSteps[stepIndex].Config[key] = value;\n conn.IsDirty = true;\n }\n\n AddTransformStep(): void {\n const conn = this.SelectedConnection;\n if (!conn) return;\n conn.TransformSteps.push({ Type: 'direct', Config: {}, OnError: 'Fail' });\n conn.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n RemoveTransformStep(stepIndex: number): void {\n const conn = this.SelectedConnection;\n if (!conn) return;\n conn.TransformSteps.splice(stepIndex, 1);\n conn.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n // ---------------------------------------------------------------------------\n // Save / Auto-map\n // ---------------------------------------------------------------------------\n\n get HasEditorChanges(): boolean {\n return this.EditorConnections.some(c => c.IsDirty);\n }\n\n async RunSchemaPipeline(): Promise<void> {\n if (!this.EditorEntityMap || !this.EditorCard) return;\n this.IsRunningPipeline = true;\n this.PipelineResultMessage = null;\n this.PipelineResultSuccess = false;\n this.cdr.detectChanges();\n\n try {\n const result = await this.dataService.RunSchemaPipeline(\n this.EditorCard.IntegrationID,\n this.EditorEntityMap\n );\n this.PipelineResultSuccess = result.Success;\n this.PipelineResultMessage = result.Success\n ? 'Pipeline complete — schema updated'\n : result.Message ?? 'Pipeline failed';\n } catch (err: unknown) {\n this.PipelineResultSuccess = false;\n this.PipelineResultMessage = `Error: ${err instanceof Error ? err.message : String(err)}`;\n } finally {\n this.IsRunningPipeline = false;\n this.cdr.detectChanges();\n }\n }\n\n async SaveVisualEditor(): Promise<void> {\n if (!this.EditorEntityMap) return;\n this.EditorSaving = true;\n this.EditorSaveSuccess = false;\n this.cdr.detectChanges();\n\n try {\n for (const conn of this.EditorConnections) {\n if (!conn.IsDirty) continue;\n\n if (conn.MarkedForDelete && conn.ID) {\n await this.dataService.DeleteFieldMap(conn.ID);\n } else if (conn.IsNew && !conn.MarkedForDelete) {\n await this.dataService.CreateFieldMap({\n EntityMapID: this.EditorEntityMap.ID,\n SourceFieldName: conn.SourceFieldName,\n DestinationFieldName: conn.DestFieldName,\n IsKeyField: conn.IsKeyField,\n IsRequired: conn.IsRequired,\n Direction: conn.Direction,\n TransformPipeline: this.serializeTransformPipeline(conn.TransformSteps)\n });\n } else if (conn.ID && !conn.MarkedForDelete) {\n await this.dataService.UpdateFieldMap(conn.ID, {\n SourceFieldName: conn.SourceFieldName,\n DestinationFieldName: conn.DestFieldName,\n IsKeyField: conn.IsKeyField,\n IsRequired: conn.IsRequired,\n Direction: conn.Direction,\n TransformPipeline: this.serializeTransformPipeline(conn.TransformSteps)\n });\n }\n }\n\n // Reload to get clean state\n await this.LoadVisualEditorData();\n this.EditorSaveSuccess = true;\n this.SelectedConnectionIdx = null;\n } catch (err) {\n console.error('[PipelinesComponent] Failed to save field mappings:', err);\n } finally {\n this.EditorSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n async AutoMapEditorFields(): Promise<void> {\n if (!this.EditorEntityMap || !this.EditorCard) return;\n\n // Match source to dest by name (case-insensitive)\n const destMap = new Map<string, VisualDestField>();\n for (const df of this.EditorDestFields) {\n destMap.set(df.Name.toLowerCase(), df);\n }\n\n let addedCount = 0;\n for (const sf of this.EditorSourceFields) {\n // Skip if already mapped\n if (this.IsSourceFieldMapped(sf.Name)) continue;\n const destMatch = destMap.get(sf.Name.toLowerCase());\n if (!destMatch) continue;\n if (this.IsDestFieldMapped(destMatch.Name)) continue;\n\n this.EditorConnections.push({\n ID: null,\n SourceFieldName: sf.Name,\n DestFieldName: destMatch.Name,\n IsKeyField: sf.IsPrimaryKey,\n IsRequired: sf.IsRequired || destMatch.IsRequired,\n Direction: 'SourceToDest',\n TransformSteps: [{ Type: 'direct', Config: {}, OnError: 'Fail' }],\n IsDirty: true,\n IsNew: true,\n MarkedForDelete: false\n });\n addedCount++;\n }\n\n if (addedCount > 0) {\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Editor computed props\n // ---------------------------------------------------------------------------\n\n get EditorMappedCount(): number {\n return this.EditorConnections.filter(c => !c.MarkedForDelete).length;\n }\n\n get EditorKeyFieldCount(): number {\n return this.EditorConnections.filter(c => !c.MarkedForDelete && c.IsKeyField).length;\n }\n\n get EditorRequiredCount(): number {\n return this.EditorConnections.filter(c => !c.MarkedForDelete && c.IsRequired).length;\n }\n\n /** Get transform config keys for inline editing */\n GetConfigKeys(step: TransformStepUI): string[] {\n return Object.keys(step.Config);\n }\n\n GetConfigValue(step: TransformStepUI, key: string): string {\n const val = step.Config[key];\n if (val == null) return '';\n if (typeof val === 'object') return JSON.stringify(val);\n return String(val);\n }\n\n // ---------------------------------------------------------------------------\n // Private helpers\n // ---------------------------------------------------------------------------\n\n private getSourceFieldIndex(fieldName: string): number {\n return this.FilteredEditorSourceFields.findIndex(f => f.Name === fieldName);\n }\n\n private getDestFieldIndex(fieldName: string): number {\n return this.FilteredEditorDestFields.findIndex(f => f.Name === fieldName);\n }\n\n private getSourceFieldY(fieldName: string): number {\n const idx = this.getSourceFieldIndex(fieldName);\n if (idx < 0) return -1;\n return idx * this.FIELD_HEIGHT + this.FIELD_HEIGHT / 2;\n }\n\n private getDestFieldY(fieldName: string): number {\n const idx = this.getDestFieldIndex(fieldName);\n if (idx < 0) return -1;\n return idx * this.FIELD_HEIGHT + this.FIELD_HEIGHT / 2;\n }\n\n private getPrimaryTransformType(conn: VisualConnection): TransformType {\n if (conn.TransformSteps.length === 0) return 'direct';\n return conn.TransformSteps[0].Type;\n }\n\n private parseTransformPipeline(json: string | null): TransformStepUI[] {\n if (!json || json.trim() === '') return [];\n try {\n const parsed: unknown = JSON.parse(json);\n if (!Array.isArray(parsed)) return [];\n return (parsed as TransformStepUI[]).map(step => ({\n Type: step.Type ?? 'direct',\n Config: (step.Config as Record<string, unknown>) ?? {},\n OnError: step.OnError ?? 'Fail'\n }));\n } catch {\n return [];\n }\n }\n\n private serializeTransformPipeline(steps: TransformStepUI[]): string | null {\n if (steps.length === 0) return null;\n return JSON.stringify(steps.map(s => ({ Type: s.Type, Config: s.Config, OnError: s.OnError })));\n }\n\n private getDefaultConfigForType(type: TransformType): Record<string, unknown> {\n switch (type) {\n case 'direct': return {};\n case 'regex': return { Pattern: '', Replacement: '', Flags: 'g' };\n case 'split': return { Delimiter: ',', Index: 0 };\n case 'combine': return { SourceFields: [], Separator: ' ' };\n case 'lookup': return { Map: {}, Default: '' };\n case 'format': return { FormatString: '', FormatType: 'date' };\n case 'coerce': return { TargetType: 'string' };\n case 'substring': return { Start: 0, Length: 10 };\n case 'custom': return { Expression: 'value' };\n }\n }\n\n /**\n * Resolve source fields from IntegrationObjectField metadata via IntegrationEngineBase.\n * CompanyIntegrationID → Integration → IntegrationObject → IntegrationObjectFields.\n */\n private resolveSourceFieldsFromMetadata(\n companyIntegrationID: string,\n externalObjectName: string\n ): VisualSourceField[] {\n const engine = IntegrationEngineBase.Instance;\n const integration = engine.GetIntegrationForCompanyIntegration(companyIntegrationID);\n if (!integration) return [];\n\n const obj = engine.GetIntegrationObject(integration.ID, externalObjectName);\n if (!obj) return [];\n\n const fields = engine.GetIntegrationObjectFields(obj.ID);\n return fields\n .filter(f => f.Status === 'Active')\n .sort((a, b) => a.Sequence - b.Sequence)\n .map(f => ({\n Name: f.Name,\n Label: f.DisplayName || f.Name,\n Type: f.Type,\n IsRequired: f.IsRequired,\n IsPrimaryKey: f.IsPrimaryKey\n }));\n }\n\n private applyMapFilter(card: PipelineCard): EntityMapRow[] {\n if (!card.SearchTerm.trim()) return card.EntityMaps;\n const term = card.SearchTerm.toLowerCase();\n return card.EntityMaps.filter(m =>\n (m.ExternalObjectLabel ?? m.ExternalObjectName).toLowerCase().includes(term) ||\n m.Entity.toLowerCase().includes(term)\n );\n }\n\n private async loadAllEntityMaps(provider: IRunViewProvider | null): Promise<EntityMapRow[]> {\n const rv = new RunView(provider ?? null);\n const result = await rv.RunView<EntityMapRow>({\n EntityName: 'MJ: Company Integration Entity Maps',\n ExtraFilter: '',\n OrderBy: 'CompanyIntegrationID, Priority, ExternalObjectName',\n Fields: ['ID', 'CompanyIntegrationID', 'ExternalObjectName', 'ExternalObjectLabel',\n 'EntityID', 'SyncDirection', 'SyncEnabled', 'MatchStrategy',\n 'ConflictResolution', 'Priority', 'DeleteBehavior', 'Status', 'Entity'],\n ResultType: 'simple'\n });\n return result.Results;\n }\n\n private resolveIcon(summary: IntegrationSummary): string {\n if (summary.SourceType?.IconClass) {\n return summary.SourceType.IconClass;\n }\n const name = summary.Integration.Integration ?? summary.Integration.Name;\n return ResolveIntegrationIcon(name, summary.Icon);\n }\n\n private statusToColor(color: string): string {\n if (color === 'green') return '#059669';\n if (color === 'amber') return '#d97706';\n if (color === 'red') return '#dc2626';\n return '#9ca3af';\n }\n\n private statusToLabel(color: string): string {\n if (color === 'green') return 'Healthy';\n if (color === 'amber') return 'Warning';\n if (color === 'red') return 'Error';\n return 'Inactive';\n }\n}\n\nexport function LoadPipelinesComponent(): void {\n // Tree-shaking prevention: importing this module causes\n // @RegisterClass decorators to fire, registering components.\n}\n","<div class=\"pipelines-container\">\n\n <!-- ===================================================================== -->\n <!-- MAP LIST VIEW (hidden when editor is open) -->\n <!-- ===================================================================== -->\n @if (!VisualEditorOpen) {\n\n <!-- Toolbar -->\n <div class=\"pipelines-toolbar\">\n <div class=\"toolbar-left\">\n <h2 class=\"toolbar-title\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n Pipelines\n </h2>\n <span class=\"toolbar-count-badge\">{{ IntegrationCount }}</span>\n <span class=\"toolbar-map-count\">{{ TotalMapCount }} entity maps</span>\n </div>\n <div class=\"toolbar-right\">\n <div class=\"global-search\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search integrations or entities...\"\n [value]=\"GlobalSearch\"\n (input)=\"OnGlobalSearchChange($event)\" />\n </div>\n <button class=\"toolbar-btn\" (click)=\"ExpandAll()\" title=\"Expand All\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button class=\"toolbar-btn\" (click)=\"CollapseAll()\" title=\"Collapse All\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n <div class=\"toolbar-divider\"></div>\n <button class=\"toolbar-btn\" (click)=\"LoadData()\" title=\"Refresh\">\n <i class=\"fa-solid fa-arrows-rotate\" [class.fa-spin]=\"IsLoading\"></i>\n </button>\n </div>\n </div>\n\n <!-- Main content area -->\n <div class=\"pipelines-content\">\n @if (IsLoading && PipelineCards.length === 0) {\n <div class=\"content-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading pipelines...</span>\n </div>\n } @else if (PipelineCards.length === 0) {\n <div class=\"content-empty\">\n <i class=\"fa-solid fa-diagram-project empty-icon\"></i>\n <h3>No Integration Pipelines</h3>\n <p>Configure integrations to see data flow pipelines here.</p>\n </div>\n } @else {\n <div class=\"cards-list\">\n @for (card of FilteredCards; track card.IntegrationID) {\n <!-- Pipeline card -->\n <div class=\"pipeline-card\" [class.expanded]=\"card.IsExpanded\">\n\n <!-- Card header (always visible) -->\n <div class=\"card-header\" (click)=\"ToggleCard(card)\">\n <div class=\"card-header-left\">\n <div class=\"card-status-dot\" [style.backgroundColor]=\"card.StatusColor\"></div>\n <i [class]=\"card.Icon + ' card-icon'\"></i>\n <div class=\"card-info\">\n <span class=\"card-name\">{{ card.IntegrationName }}</span>\n <span class=\"card-meta\">\n {{ card.EntityMapCount }} maps\n <span class=\"meta-sep\">&middot;</span>\n {{ card.ActiveMapCount }} active\n <span class=\"meta-sep\">&middot;</span>\n {{ card.UniqueEntityCount }} entities\n </span>\n </div>\n </div>\n <div class=\"card-header-right\">\n <span class=\"card-status-label\" [style.color]=\"card.StatusColor\">\n {{ card.StatusLabel }}\n </span>\n @if (card.LastSync) {\n <span class=\"card-last-sync\">{{ card.LastSync }}</span>\n }\n <!-- Mini flow indicator -->\n <div class=\"mini-flow\">\n <span class=\"mini-flow-dot source\"></span>\n <span class=\"mini-flow-line\"></span>\n <span class=\"mini-flow-count\">{{ card.EntityMapCount }}</span>\n <span class=\"mini-flow-line\"></span>\n <span class=\"mini-flow-dot dest\"></span>\n </div>\n <i class=\"fa-solid card-chevron\"\n [class.fa-chevron-down]=\"!card.IsExpanded\"\n [class.fa-chevron-up]=\"card.IsExpanded\"></i>\n </div>\n </div>\n\n <!-- Expanded entity map table -->\n @if (card.IsExpanded) {\n <div class=\"card-body\">\n <!-- Search within this integration -->\n <div class=\"card-search-bar\">\n <i class=\"fa-solid fa-filter card-search-icon\"></i>\n <input type=\"text\"\n class=\"card-search-input\"\n placeholder=\"Filter entity maps...\"\n [value]=\"card.SearchTerm\"\n (input)=\"OnCardSearch(card, $event)\" />\n <span class=\"card-search-count\">\n {{ card.FilteredMaps.length }} of {{ card.EntityMapCount }}\n </span>\n </div>\n\n <!-- Table header -->\n <div class=\"map-table-head\">\n <span class=\"map-col-toggle\">Sync</span>\n <span class=\"map-col-source\">External Object</span>\n <span class=\"map-col-direction\"></span>\n <span class=\"map-col-dest\">MJ Entity</span>\n <span class=\"map-col-meta\">Config</span>\n </div>\n\n <!-- Table body -->\n <div class=\"map-table-body\">\n @for (em of card.FilteredMaps; track em.ID) {\n <div class=\"map-row\"\n [class.sync-disabled]=\"!em.SyncEnabled\"\n (click)=\"OnMapRowClick(card, em)\">\n <span class=\"map-col-toggle\" (click)=\"$event.stopPropagation()\">\n <label class=\"sync-toggle\" [title]=\"em.SyncEnabled ? 'Sync enabled — click to disable' : 'Sync disabled — click to enable'\">\n <input type=\"checkbox\"\n [checked]=\"em.SyncEnabled\"\n (change)=\"OnToggleSyncEnabled(card, em, $event)\" />\n <span class=\"sync-toggle-track\"></span>\n </label>\n </span>\n <span class=\"map-col-source\" [title]=\"em.ExternalObjectName\">\n {{ em.ExternalObjectLabel ?? em.ExternalObjectName }}\n </span>\n <span class=\"map-col-direction\">\n <span [class]=\"DirectionBadgeClass(em.SyncDirection)\">\n {{ DirectionText(em.SyncDirection) }}\n </span>\n </span>\n <span class=\"map-col-dest\" [title]=\"em.Entity\">\n {{ em.Entity }}\n </span>\n <span class=\"map-col-meta\">\n @if (em.MatchStrategy) {\n <span class=\"map-config-badge\" [title]=\"'Match: ' + em.MatchStrategy\">\n <i class=\"fa-solid fa-link\"></i>\n </span>\n }\n <span class=\"map-config-badge\" [title]=\"'Conflict: ' + em.ConflictResolution\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </span>\n <span class=\"map-edit-hint\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </span>\n </span>\n </div>\n } @empty {\n <div class=\"map-table-empty\">\n No entity maps match your filter.\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n\n } @else {\n\n <!-- ===================================================================== -->\n <!-- VISUAL FIELD MAPPING EDITOR (inline, replaces map list) -->\n <!-- ===================================================================== -->\n\n <div class=\"ve-container\">\n\n <!-- Header -->\n <div class=\"ve-header\">\n <div class=\"ve-header-left\">\n <button class=\"ve-back-btn\" (click)=\"CloseVisualEditor()\" title=\"Back to Pipelines\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n <div class=\"ve-header-title\">\n <span class=\"ve-source-label\">{{ EditorEntityMap?.ExternalObjectLabel ?? EditorEntityMap?.ExternalObjectName }}</span>\n <span class=\"ve-direction-arrow\">\n <i class=\"fa-solid fa-arrow-right-arrow-left\"></i>\n </span>\n <span class=\"ve-dest-label\">{{ EditorEntityMap?.Entity }}</span>\n </div>\n <!-- SyncEnabled toggle in editor header -->\n @if (EditorEntityMap) {\n <label class=\"sync-toggle ve-sync-toggle\"\n [title]=\"EditorEntityMap.SyncEnabled ? 'Sync enabled' : 'Sync disabled'\">\n <input type=\"checkbox\"\n [checked]=\"EditorEntityMap.SyncEnabled\"\n (change)=\"OnToggleEditorSyncEnabled($event)\" />\n <span class=\"sync-toggle-track\"></span>\n </label>\n <span class=\"ve-sync-label\">{{ EditorEntityMap.SyncEnabled ? 'Sync On' : 'Sync Off' }}</span>\n }\n </div>\n <div class=\"ve-header-stats\">\n <span class=\"ve-stat\">\n <strong>{{ EditorMappedCount }}</strong> mapped\n </span>\n <span class=\"ve-stat-sep\"></span>\n <span class=\"ve-stat\">\n <strong>{{ EditorKeyFieldCount }}</strong> key\n </span>\n <span class=\"ve-stat-sep\"></span>\n <span class=\"ve-stat\">\n <strong>{{ EditorRequiredCount }}</strong> required\n </span>\n </div>\n <div class=\"ve-header-actions\">\n <!-- Data preview buttons -->\n <button class=\"ve-btn ve-btn-ghost\"\n (click)=\"ToggleSourcePreview()\"\n [class.active]=\"ShowSourcePreview\"\n title=\"Preview source data\">\n <i class=\"fa-solid fa-cloud\"></i> Source Data\n </button>\n <button class=\"ve-btn ve-btn-ghost\"\n (click)=\"ToggleDestPreview()\"\n [class.active]=\"ShowDestPreview\"\n title=\"Preview MJ data\">\n <i class=\"fa-solid fa-database\"></i> MJ Data\n </button>\n <div class=\"ve-action-sep\"></div>\n <button class=\"ve-btn ve-btn-ghost\"\n [disabled]=\"IsRunningPipeline\"\n (click)=\"RunSchemaPipeline()\"\n title=\"Generate DDL, run CodeGen, and restart MJAPI for this mapping\">\n @if (IsRunningPipeline) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running Pipeline...\n } @else {\n <i class=\"fa-solid fa-gears\"></i> Run Schema Pipeline\n }\n </button>\n @if (PipelineResultMessage) {\n <span [class]=\"PipelineResultSuccess ? 've-save-success' : 've-error-msg'\">\n <i [class]=\"PipelineResultSuccess ? 'fa-solid fa-circle-check' : 'fa-solid fa-circle-xmark'\"></i>\n {{ PipelineResultMessage }}\n </span>\n }\n <div class=\"ve-action-sep\"></div>\n <button class=\"ve-btn ve-btn-ghost\" (click)=\"AutoMapEditorFields()\" title=\"Auto-map fields by name\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map\n </button>\n <button class=\"ve-btn ve-btn-primary\"\n [disabled]=\"!HasEditorChanges || EditorSaving\"\n (click)=\"SaveVisualEditor()\">\n @if (EditorSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n <i class=\"fa-solid fa-check\"></i> Save\n }\n </button>\n @if (EditorSaveSuccess && !HasEditorChanges) {\n <span class=\"ve-save-success\">\n <i class=\"fa-solid fa-circle-check\"></i> Saved\n </span>\n }\n </div>\n </div>\n\n <!-- Data preview panels (collapsible) -->\n @if (ShowSourcePreview || ShowDestPreview) {\n <div class=\"ve-preview-strip\">\n @if (ShowSourcePreview) {\n <div class=\"ve-preview-panel\">\n <div class=\"ve-preview-header\">\n <i class=\"fa-solid fa-cloud\"></i>\n <span>Source Preview: {{ EditorEntityMap?.ExternalObjectLabel ?? EditorEntityMap?.ExternalObjectName }}</span>\n <button class=\"ve-preview-close\" (click)=\"ShowSourcePreview = false\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n @if (PreviewSourceLoading) {\n <div class=\"ve-preview-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else if (PreviewSourceRows.length === 0) {\n <div class=\"ve-preview-empty\">No source data available</div>\n } @else {\n <div class=\"ve-preview-table-wrap\">\n <table class=\"ve-preview-table\">\n <thead>\n <tr>\n @for (col of PreviewSourceColumns; track col) {\n <th>{{ col }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of PreviewSourceRows; track $index) {\n <tr>\n @for (col of PreviewSourceColumns; track col) {\n <td [title]=\"row[col]?.toString() ?? ''\">{{ row[col] ?? '' }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n @if (ShowDestPreview) {\n <div class=\"ve-preview-panel\">\n <div class=\"ve-preview-header\">\n <i class=\"fa-solid fa-database\"></i>\n <span>Dest Preview: {{ EditorEntityMap?.Entity }}</span>\n <button class=\"ve-preview-close\" (click)=\"ShowDestPreview = false\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n @if (PreviewDestLoading) {\n <div class=\"ve-preview-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else if (PreviewDestRows.length === 0) {\n <div class=\"ve-preview-empty\">No destination data available</div>\n } @else {\n <div class=\"ve-preview-table-wrap\">\n <table class=\"ve-preview-table\">\n <thead>\n <tr>\n @for (col of PreviewDestColumns; track col) {\n <th>{{ col }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of PreviewDestRows; track $index) {\n <tr>\n @for (col of PreviewDestColumns; track col) {\n <td [title]=\"row[col]?.toString() ?? ''\">{{ row[col] ?? '' }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Connect mode banner -->\n @if (ConnectingFromSource) {\n <div class=\"ve-connect-banner\">\n <i class=\"fa-solid fa-link\"></i>\n Click a destination field to map from\n <strong>{{ ConnectingFromSource }}</strong>\n <button class=\"ve-connect-cancel\" (click)=\"CancelConnect()\">Cancel</button>\n </div>\n }\n\n <!-- Main content: sections + transform panel -->\n <div class=\"ve-body\" [class.has-transform-panel]=\"SelectedConnectionIdx !== null\">\n\n <!-- Loading state -->\n @if (EditorLoading) {\n <div class=\"ve-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading field mappings...</span>\n </div>\n } @else {\n\n <!-- Left content area (sections stacked vertically) -->\n <div class=\"ve-sections-wrapper\">\n\n <!-- ============================================================= -->\n <!-- FIELD MAPPINGS SECTION (collapsible) -->\n <!-- ============================================================= -->\n <div class=\"ve-section\" [class.collapsed]=\"!FieldMapsExpanded\">\n <div class=\"ve-section-header\" (click)=\"ToggleFieldMaps()\">\n <i class=\"fa-solid\"\n [class.fa-chevron-down]=\"FieldMapsExpanded\"\n [class.fa-chevron-right]=\"!FieldMapsExpanded\"></i>\n <span class=\"ve-section-title\">Field Mappings</span>\n <span class=\"ve-section-badge\">{{ EditorMappedCount }} mapped</span>\n </div>\n\n @if (FieldMapsExpanded) {\n <div class=\"ve-section-body\">\n <!-- Canvas area (scrollable) -->\n <div class=\"ve-canvas-wrapper\">\n\n <!-- Column headers -->\n <div class=\"ve-col-headers\">\n <div class=\"ve-col-header source\">\n <i class=\"fa-solid fa-cloud\"></i>\n Source Fields\n <span class=\"ve-col-count\">{{ EditorSourceFields.length }}</span>\n </div>\n <div class=\"ve-col-header-spacer\"></div>\n <div class=\"ve-col-header dest\">\n <i class=\"fa-solid fa-database\"></i>\n MJ Entity Fields\n <span class=\"ve-col-count\">{{ EditorDestFields.length }}</span>\n </div>\n </div>\n\n <!-- Search bars -->\n <div class=\"ve-col-searches\">\n <div class=\"ve-col-search\">\n <i class=\"fa-solid fa-search\"></i>\n <input type=\"text\"\n placeholder=\"Filter source fields...\"\n [value]=\"EditorSearchSource\"\n (input)=\"EditorSearchSource = $any($event.target).value\" />\n </div>\n <div class=\"ve-col-search-spacer\"></div>\n <div class=\"ve-col-search\">\n <i class=\"fa-solid fa-search\"></i>\n <input type=\"text\"\n placeholder=\"Filter destination fields...\"\n [value]=\"EditorSearchDest\"\n (input)=\"EditorSearchDest = $any($event.target).value\" />\n </div>\n </div>\n\n <!-- Canvas grid (source + SVG + dest) -->\n <div class=\"ve-canvas-scroll\" (click)=\"DeselectConnection()\">\n <div class=\"ve-canvas-grid\" [style.min-height.px]=\"EditorCanvasHeight\">\n\n <!-- Source column -->\n <div class=\"ve-field-col source\">\n @for (sf of FilteredEditorSourceFields; track sf.Name) {\n <div class=\"ve-field-item\"\n [class.mapped]=\"IsSourceFieldMapped(sf.Name)\"\n [class.unmapped]=\"!IsSourceFieldMapped(sf.Name)\"\n [class.connecting]=\"ConnectingFromSource === sf.Name\"\n [style.height.px]=\"FIELD_HEIGHT\"\n (click)=\"OnEditorSourceClick(sf.Name); $event.stopPropagation()\">\n <span class=\"ve-field-name\" [title]=\"sf.Name\">{{ sf.Label || sf.Name }}</span>\n <span class=\"ve-field-type\">{{ sf.Type }}</span>\n <span class=\"ve-field-badges\">\n @if (sf.IsPrimaryKey) {\n <span class=\"ve-fbadge pk\" title=\"Primary Key\">PK</span>\n }\n @if (sf.IsRequired) {\n <span class=\"ve-fbadge req\" title=\"Required\">*</span>\n }\n </span>\n </div>\n }\n @if (FilteredEditorSourceFields.length === 0) {\n <div class=\"ve-field-empty\">No source fields found</div>\n }\n </div>\n\n <!-- SVG connection lines -->\n <svg class=\"ve-svg\"\n [attr.width]=\"SVG_WIDTH\"\n [attr.height]=\"EditorCanvasHeight\"\n [attr.viewBox]=\"'0 0 ' + SVG_WIDTH + ' ' + EditorCanvasHeight\"\n (click)=\"$event.stopPropagation()\">\n @for (conn of VisibleConnections; track conn.SourceFieldName + '-' + conn.DestFieldName; let i = $index) {\n <!-- Connection line -->\n <path [attr.d]=\"GetConnectionPath(conn)\"\n class=\"ve-conn-line\"\n [class]=\"'ve-conn-line ' + GetConnectionLineClass(conn)\"\n [class.selected]=\"SelectedConnectionIdx === i\"\n (click)=\"SelectConnection(i, $event)\" />\n <!-- Transform badge at midpoint -->\n <foreignObject\n [attr.x]=\"SVG_WIDTH / 2 - 14\"\n [attr.y]=\"GetConnectionMidY(conn) - 14\"\n width=\"28\" height=\"28\"\n class=\"ve-badge-fo\">\n <div xmlns=\"http://www.w3.org/1999/xhtml\"\n class=\"ve-conn-badge\"\n [class]=\"'ve-conn-badge ' + GetConnectionBadgeClass(conn)\"\n [class.selected]=\"SelectedConnectionIdx === i\"\n (click)=\"SelectConnection(i, $event)\">\n <i [class]=\"GetConnectionDirectionIcon(conn)\"></i>\n </div>\n </foreignObject>\n }\n </svg>\n\n <!-- Dest column -->\n <div class=\"ve-field-col dest\">\n @for (df of FilteredEditorDestFields; track df.Name) {\n <div class=\"ve-field-item\"\n [class.mapped]=\"IsDestFieldMapped(df.Name)\"\n [class.unmapped]=\"!IsDestFieldMapped(df.Name)\"\n [class.connect-target]=\"ConnectingFromSource !== null\"\n [style.height.px]=\"FIELD_HEIGHT\"\n (click)=\"OnEditorDestClick(df.Name); $event.stopPropagation()\">\n <span class=\"ve-field-name\" [title]=\"df.Name\">{{ df.Name }}</span>\n <span class=\"ve-field-type\">{{ df.Type }}</span>\n <span class=\"ve-field-badges\">\n @if (df.IsRequired) {\n <span class=\"ve-fbadge req\" title=\"Required\">*</span>\n }\n </span>\n </div>\n }\n @if (FilteredEditorDestFields.length === 0) {\n <div class=\"ve-field-empty\">No destination fields found</div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- ============================================================= -->\n <!-- INFO PANEL SECTION (collapsible) -->\n <!-- ============================================================= -->\n <div class=\"ve-section\" [class.collapsed]=\"!InfoPanelExpanded\">\n <div class=\"ve-section-header\" (click)=\"ToggleInfoPanel()\">\n <i class=\"fa-solid\"\n [class.fa-chevron-down]=\"InfoPanelExpanded\"\n [class.fa-chevron-right]=\"!InfoPanelExpanded\"></i>\n <span class=\"ve-section-title\">Sync Info</span>\n </div>\n\n @if (InfoPanelExpanded) {\n <div class=\"ve-section-body ve-info-body\">\n @if (InfoPanelLoading) {\n <div class=\"ve-info-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading stats...\n </div>\n } @else {\n <div class=\"ve-info-grid\">\n <!-- Destination record count -->\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon\">\n <i class=\"fa-solid fa-database\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ InfoDestRecordCount ?? '-' }}</span>\n <span class=\"ve-info-card-label\">MJ Records</span>\n </div>\n </div>\n <!-- Source fields count -->\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon source\">\n <i class=\"fa-solid fa-cloud\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ EditorSourceFields.length }}</span>\n <span class=\"ve-info-card-label\">Source Fields</span>\n </div>\n </div>\n <!-- Last sync -->\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon sync\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ FormatSyncDate(InfoLastSync?.StartedAt ?? null) }}</span>\n <span class=\"ve-info-card-label\">Last Sync</span>\n </div>\n </div>\n <!-- Sync status -->\n @if (InfoLastSync) {\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon\" [ngClass]=\"SyncStatusClass(InfoLastSync.Status)\">\n <i class=\"fa-solid\"\n [class.fa-circle-check]=\"InfoLastSync.Status === 'Success'\"\n [class.fa-circle-xmark]=\"InfoLastSync.Status === 'Failed'\"\n [class.fa-spinner]=\"InfoLastSync.Status === 'In Progress'\"\n [class.fa-clock]=\"InfoLastSync.Status === 'Pending'\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ InfoLastSync.Status }}</span>\n <span class=\"ve-info-card-label\">{{ InfoLastSync.TotalRecords }} records processed</span>\n </div>\n </div>\n }\n </div>\n\n <!-- Configuration details -->\n <div class=\"ve-info-details\">\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Sync Direction</span>\n <span class=\"ve-info-detail-value\">{{ EditorEntityMap?.SyncDirection }}</span>\n </div>\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Conflict Resolution</span>\n <span class=\"ve-info-detail-value\">{{ EditorEntityMap?.ConflictResolution }}</span>\n </div>\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Delete Behavior</span>\n <span class=\"ve-info-detail-value\">{{ EditorEntityMap?.DeleteBehavior }}</span>\n </div>\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Priority</span>\n <span class=\"ve-info-detail-value\">{{ EditorEntityMap?.Priority }}</span>\n </div>\n @if (EditorEntityMap?.MatchStrategy) {\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Match Strategy</span>\n <span class=\"ve-info-detail-value\">Configured</span>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Transform editor panel (right side, appears when connection selected) -->\n @if (SelectedConnection; as conn) {\n <div class=\"ve-transform-panel\" (click)=\"$event.stopPropagation()\">\n <div class=\"ve-tp-header\">\n <span class=\"ve-tp-title\">Mapping Details</span>\n <button class=\"ve-tp-close\" (click)=\"DeselectConnection()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <!-- Source → Dest -->\n <div class=\"ve-tp-mapping-info\">\n <div class=\"ve-tp-field-pair\">\n <span class=\"ve-tp-field source\">{{ conn.SourceFieldName }}</span>\n <i class=\"fa-solid ve-tp-arrow\"\n [class.fa-arrow-right]=\"conn.Direction === 'SourceToDest'\"\n [class.fa-arrow-left]=\"conn.Direction === 'DestToSource'\"\n [class.fa-right-left]=\"conn.Direction === 'Both'\"></i>\n <span class=\"ve-tp-field dest\">{{ conn.DestFieldName }}</span>\n </div>\n </div>\n\n <!-- Toggles -->\n <div class=\"ve-tp-toggles\">\n <label class=\"ve-tp-toggle\" (click)=\"ToggleConnectionKey()\">\n <span class=\"ve-tp-toggle-box\" [class.active]=\"conn.IsKeyField\">\n @if (conn.IsKeyField) { <i class=\"fa-solid fa-check\"></i> }\n </span>\n <span>Key Field</span>\n </label>\n <label class=\"ve-tp-toggle\" (click)=\"ToggleConnectionRequired()\">\n <span class=\"ve-tp-toggle-box\" [class.active]=\"conn.IsRequired\">\n @if (conn.IsRequired) { <i class=\"fa-solid fa-check\"></i> }\n </span>\n <span>Required</span>\n </label>\n </div>\n\n <!-- Direction -->\n <div class=\"ve-tp-section\">\n <label class=\"ve-tp-section-label\">Direction</label>\n <div class=\"ve-tp-direction-btns\">\n <button [class.active]=\"conn.Direction === 'SourceToDest'\"\n (click)=\"OnConnectionDirectionChange('SourceToDest')\">\n Source &rarr; Dest\n </button>\n <button [class.active]=\"conn.Direction === 'DestToSource'\"\n (click)=\"OnConnectionDirectionChange('DestToSource')\">\n Dest &rarr; Source\n </button>\n <button [class.active]=\"conn.Direction === 'Both'\"\n (click)=\"OnConnectionDirectionChange('Both')\">\n Both\n </button>\n </div>\n </div>\n\n <!-- Transform pipeline -->\n <div class=\"ve-tp-section\">\n <div class=\"ve-tp-section-header\">\n <label class=\"ve-tp-section-label\">Transform Pipeline</label>\n <button class=\"ve-tp-add-step\" (click)=\"AddTransformStep()\">\n <i class=\"fa-solid fa-plus\"></i> Add Step\n </button>\n </div>\n\n @for (step of conn.TransformSteps; track $index; let si = $index) {\n <div class=\"ve-tp-step\">\n <div class=\"ve-tp-step-header\">\n <span class=\"ve-tp-step-num\">{{ si + 1 }}</span>\n <select class=\"ve-tp-type-select\"\n [value]=\"step.Type\"\n (change)=\"OnConnectionTransformChange(si, $any($event.target).value)\">\n @for (tt of TRANSFORM_TYPES; track tt.Value) {\n <option [value]=\"tt.Value\" [selected]=\"tt.Value === step.Type\">{{ tt.Label }}</option>\n }\n </select>\n <button class=\"ve-tp-remove-step\" (click)=\"RemoveTransformStep(si)\" title=\"Remove step\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n\n <!-- Config fields based on transform type -->\n @if (step.Type !== 'direct') {\n <div class=\"ve-tp-step-config\">\n @for (key of GetConfigKeys(step); track key) {\n <div class=\"ve-tp-config-row\">\n <label>{{ key }}</label>\n <input type=\"text\"\n [value]=\"GetConfigValue(step, key)\"\n (input)=\"OnTransformConfigChange(conn, si, key, $any($event.target).value)\"\n placeholder=\"{{ key }}\" />\n </div>\n }\n </div>\n }\n\n <!-- On error -->\n <div class=\"ve-tp-step-onerror\">\n <label>On Error:</label>\n <select [value]=\"step.OnError\"\n (change)=\"step.OnError = $any($event.target).value; conn.IsDirty = true\">\n <option value=\"Fail\">Fail</option>\n <option value=\"Skip\">Skip</option>\n <option value=\"Null\">Null</option>\n </select>\n </div>\n </div>\n }\n\n @if (conn.TransformSteps.length === 0) {\n <div class=\"ve-tp-no-steps\">\n No transform steps. Data passes through as-is.\n </div>\n }\n </div>\n\n <!-- Delete mapping button -->\n <div class=\"ve-tp-footer\">\n <button class=\"ve-btn ve-btn-danger\" (click)=\"RemoveSelectedConnection()\">\n <i class=\"fa-solid fa-trash-can\"></i> Remove Mapping\n </button>\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n</div>\n"]}