@memberjunction/ng-dashboards 5.10.1 → 5.12.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 (231) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +34 -2
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +586 -223
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/agents/agent-editor.component.js +2 -2
  6. package/dist/AI/components/agents/agent-filter-panel.component.d.ts +8 -0
  7. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +1 -1
  8. package/dist/AI/components/agents/agent-filter-panel.component.js +85 -52
  9. package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
  10. package/dist/AI/components/charts/performance-heatmap.component.d.ts +1 -0
  11. package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -1
  12. package/dist/AI/components/charts/performance-heatmap.component.js +27 -5
  13. package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -1
  14. package/dist/AI/components/charts/time-series-chart.component.d.ts +5 -0
  15. package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -1
  16. package/dist/AI/components/charts/time-series-chart.component.js +23 -8
  17. package/dist/AI/components/charts/time-series-chart.component.js.map +1 -1
  18. package/dist/AI/components/execution-monitoring.component.js +2 -2
  19. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  20. package/dist/AI/components/models/model-management.component.js +2 -2
  21. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +2 -2
  22. package/dist/AI/components/prompts/prompt-filter-panel.component.js +2 -2
  23. package/dist/AI/components/prompts/prompt-management.component.js +3 -3
  24. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  25. package/dist/AI/components/prompts/prompt-version-control.component.js +2 -2
  26. package/dist/AI/components/requests/agent-requests-resource.component.d.ts +83 -0
  27. package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -0
  28. package/dist/AI/components/requests/agent-requests-resource.component.js +547 -0
  29. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -0
  30. package/dist/AI/components/system/system-config-filter-panel.component.js +2 -2
  31. package/dist/AI/components/system/system-configuration.component.js +2 -2
  32. package/dist/AI/components/widgets/kpi-card.component.js +7 -7
  33. package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
  34. package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -1
  35. package/dist/AI/components/widgets/live-execution-widget.component.js +6 -6
  36. package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -1
  37. package/dist/AI/index.d.ts +1 -0
  38. package/dist/AI/index.d.ts.map +1 -1
  39. package/dist/AI/index.js +2 -0
  40. package/dist/AI/index.js.map +1 -1
  41. package/dist/APIKeys/api-applications-panel.component.js +3 -3
  42. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  43. package/dist/APIKeys/api-key-create-dialog.component.js +3 -3
  44. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  45. package/dist/APIKeys/api-key-edit-panel.component.js +1 -1
  46. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  47. package/dist/APIKeys/api-key-list.component.js +3 -3
  48. package/dist/APIKeys/api-key-list.component.js.map +1 -1
  49. package/dist/APIKeys/api-keys-resource.component.js +1 -1
  50. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  51. package/dist/APIKeys/api-scopes-panel.component.js +2 -2
  52. package/dist/APIKeys/api-usage-panel.component.js +2 -2
  53. package/dist/Actions/components/actions-overview.component.js +2 -2
  54. package/dist/Actions/components/execution-monitoring.component.js +2 -2
  55. package/dist/Actions/components/explorer/action-breadcrumb.component.js +2 -2
  56. package/dist/Actions/components/explorer/action-card.component.js +2 -2
  57. package/dist/Actions/components/explorer/action-explorer.component.js +2 -2
  58. package/dist/Actions/components/explorer/action-list-item.component.js +2 -2
  59. package/dist/Actions/components/explorer/action-toolbar.component.js +2 -2
  60. package/dist/Actions/components/explorer/action-tree-panel.component.js +2 -2
  61. package/dist/Actions/components/explorer/new-action-panel.component.js +2 -2
  62. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  63. package/dist/Actions/components/explorer/new-category-panel.component.js +2 -2
  64. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  65. package/dist/Communication/communication-dashboard.component.js +2 -2
  66. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  67. package/dist/Communication/communication-logs-resource.component.js +3 -3
  68. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  69. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  70. package/dist/Communication/communication-monitor-resource.component.js +5 -5
  71. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  72. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  73. package/dist/Communication/communication-providers-resource.component.js +3 -3
  74. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  75. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  76. package/dist/Communication/communication-runs-resource.component.js +3 -3
  77. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  78. package/dist/Communication/communication-templates-resource.component.js +2 -2
  79. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  80. package/dist/ComponentStudio/component-studio-dashboard.component.js +2 -2
  81. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +2 -2
  82. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +2 -2
  83. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +2 -2
  84. package/dist/ComponentStudio/components/browser/component-browser.component.js +2 -2
  85. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +2 -2
  86. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
  87. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +2 -2
  88. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  89. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +2 -2
  90. package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
  91. package/dist/ComponentStudio/components/editors/spec-editor.component.js +2 -2
  92. package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
  93. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +2 -2
  94. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +2 -2
  95. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
  96. package/dist/ComponentStudio/components/text-import-dialog.component.js +2 -2
  97. package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
  98. package/dist/ComponentStudio/components/workspace/component-preview.component.js +2 -2
  99. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +2 -2
  100. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -1
  101. package/dist/Credentials/components/credentials-audit-resource.component.js +9 -9
  102. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  103. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  104. package/dist/Credentials/components/credentials-categories-resource.component.js +11 -3
  105. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  106. package/dist/Credentials/components/credentials-list-resource.component.js +2 -2
  107. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
  108. package/dist/Credentials/components/credentials-overview-resource.component.js +12 -11
  109. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  110. package/dist/Credentials/components/credentials-types-resource.component.js +9 -9
  111. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  112. package/dist/Credentials/credentials-dashboard.component.js +2 -2
  113. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +2 -2
  114. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +2 -2
  115. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +2 -2
  116. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +2 -2
  117. package/dist/DataExplorer/components/view-selector/view-selector.component.js +2 -2
  118. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +6 -2
  119. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  120. package/dist/DataExplorer/data-explorer-dashboard.component.js +26 -8
  121. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  122. package/dist/Home/home-dashboard.component.js +2 -2
  123. package/dist/Integration/components/activity/activity.component.d.ts +1 -1
  124. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  125. package/dist/Integration/components/activity/activity.component.js +5 -5
  126. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  127. package/dist/Integration/components/connections/connections.component.d.ts +31 -2
  128. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  129. package/dist/Integration/components/connections/connections.component.js +753 -412
  130. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  131. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +3 -3
  132. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  133. package/dist/Integration/components/overview/overview.component.d.ts +0 -1
  134. package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
  135. package/dist/Integration/components/overview/overview.component.js +3 -6
  136. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  137. package/dist/Integration/components/pipelines/pipelines.component.js +3 -3
  138. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  139. package/dist/Integration/components/schedules/schedules.component.d.ts +20 -0
  140. package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
  141. package/dist/Integration/components/schedules/schedules.component.js +97 -5
  142. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  143. package/dist/Integration/components/visual-editor/visual-editor.component.js +2 -2
  144. package/dist/Integration/components/widgets/integration-card.component.d.ts.map +1 -1
  145. package/dist/Integration/components/widgets/integration-card.component.js +5 -1
  146. package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
  147. package/dist/Integration/components/widgets/run-history-panel.component.js +2 -2
  148. package/dist/Integration/components/widgets/run-history-panel.component.js.map +1 -1
  149. package/dist/Integration/integration.module.d.ts +2 -1
  150. package/dist/Integration/integration.module.d.ts.map +1 -1
  151. package/dist/Integration/integration.module.js +7 -3
  152. package/dist/Integration/integration.module.js.map +1 -1
  153. package/dist/Integration/services/integration-data.service.d.ts +27 -2
  154. package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
  155. package/dist/Integration/services/integration-data.service.js +107 -4
  156. package/dist/Integration/services/integration-data.service.js.map +1 -1
  157. package/dist/Lists/components/lists-browse-resource.component.js +2 -2
  158. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  159. package/dist/Lists/components/lists-categories-resource.component.js +2 -2
  160. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  161. package/dist/Lists/components/lists-my-lists-resource.component.js +2 -2
  162. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  163. package/dist/Lists/components/lists-operations-resource.component.js +2 -2
  164. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  165. package/dist/Lists/components/venn-diagram/venn-diagram.component.js +3 -3
  166. package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
  167. package/dist/MCP/components/mcp-connection-dialog.component.js +2 -2
  168. package/dist/MCP/components/mcp-log-detail-panel.component.js +2 -2
  169. package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
  170. package/dist/MCP/components/mcp-server-dialog.component.js +2 -2
  171. package/dist/MCP/components/mcp-test-tool-dialog.component.js +2 -2
  172. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  173. package/dist/MCP/mcp-dashboard.component.js +2 -2
  174. package/dist/MCP/mcp-filter-panel.component.js +2 -2
  175. package/dist/QueryBrowser/query-browser-resource.component.d.ts +55 -1
  176. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  177. package/dist/QueryBrowser/query-browser-resource.component.js +664 -199
  178. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  179. package/dist/Scheduling/components/index.d.ts +0 -1
  180. package/dist/Scheduling/components/index.d.ts.map +1 -1
  181. package/dist/Scheduling/components/index.js +0 -1
  182. package/dist/Scheduling/components/index.js.map +1 -1
  183. package/dist/Scheduling/components/scheduling-activity.component.js +2 -2
  184. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +6 -9
  185. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  186. package/dist/Scheduling/components/scheduling-jobs.component.js +118 -110
  187. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  188. package/dist/Scheduling/components/scheduling-overview.component.js +3 -3
  189. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  190. package/dist/Scheduling/scheduling-dashboard.component.js +2 -2
  191. package/dist/SystemDiagnostics/system-diagnostics.component.js +4 -4
  192. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  193. package/dist/Testing/components/testing-analytics.component.js +2 -2
  194. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  195. package/dist/Testing/components/testing-dashboard-tab.component.js +4 -4
  196. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  197. package/dist/Testing/components/testing-explorer.component.js +2 -2
  198. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  199. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  200. package/dist/Testing/components/testing-review.component.js +5 -5
  201. package/dist/Testing/components/testing-review.component.js.map +1 -1
  202. package/dist/Testing/components/testing-runs.component.js +2 -2
  203. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  204. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +2 -2
  205. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js.map +1 -1
  206. package/dist/Testing/components/widgets/suite-tree.component.js +4 -4
  207. package/dist/Testing/components/widgets/suite-tree.component.js.map +1 -1
  208. package/dist/Testing/components/widgets/test-run-detail-panel.component.js +2 -2
  209. package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
  210. package/dist/Testing/testing-dashboard.component.js +2 -2
  211. package/dist/VersionHistory/components/diff-resource.component.js +2 -2
  212. package/dist/VersionHistory/components/graph-resource.component.js +2 -2
  213. package/dist/VersionHistory/components/labels-resource.component.js +3 -3
  214. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  215. package/dist/VersionHistory/components/restore-resource.component.js +3 -3
  216. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  217. package/dist/__tests__/integration-data-service.test.js +1 -0
  218. package/dist/__tests__/integration-data-service.test.js.map +1 -1
  219. package/dist/module.d.ts +52 -49
  220. package/dist/module.d.ts.map +1 -1
  221. package/dist/module.js +25 -6
  222. package/dist/module.js.map +1 -1
  223. package/dist/public-api.d.ts +1 -1
  224. package/dist/public-api.d.ts.map +1 -1
  225. package/dist/public-api.js +1 -1
  226. package/dist/public-api.js.map +1 -1
  227. package/package.json +42 -40
  228. package/dist/Scheduling/components/job-slideout.component.d.ts +0 -45
  229. package/dist/Scheduling/components/job-slideout.component.d.ts.map +0 -1
  230. package/dist/Scheduling/components/job-slideout.component.js +0 -459
  231. package/dist/Scheduling/components/job-slideout.component.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"connections.component.js","sourceRoot":"","sources":["../../../../src/Integration/components/connections/connections.component.ts","../../../../src/Integration/components/connections/connections.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, OnInit, OnDestroy, inject, ViewChild } from '@angular/core';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { CompositeKey, Metadata, RunView } from '@memberjunction/core';\nimport { IntegrationEngineBase } from '@memberjunction/integration-engine-base';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData, MJCompanyIntegrationEntity, MJCredentialEntity, MJIntegrationEntity } from '@memberjunction/core-entities';\nimport { CredentialDialogResult } from '@memberjunction/ng-credentials';\nimport { TreeBranchConfig, TreeLeafConfig, TreeNode, TreeDropdownComponent } from '@memberjunction/ng-trees';\nimport { SchemaPreviewObjectInput, SchemaPreviewResult } from '@memberjunction/graphql-dataprovider';\nimport {\n IntegrationDataService,\n ResolveIntegrationIcon,\n IntegrationSummary,\n EntityMapRow\n} from '../../services/integration-data.service';\n\n/** Brand color mapping for known integration names */\nconst BRAND_COLOR_MAP: Array<{ Pattern: RegExp; Color: string }> = [\n { Pattern: /hubspot/i, Color: '#ff7a59' },\n { Pattern: /salesforce/i, Color: '#00a1e0' },\n { Pattern: /stripe/i, Color: '#635bff' },\n { Pattern: /slack/i, Color: '#4a154b' },\n { Pattern: /google/i, Color: '#4285f4' },\n { Pattern: /microsoft|azure|dynamics/i, Color: '#00a4ef' },\n { Pattern: /github/i, Color: '#24292f' },\n { Pattern: /jira|atlassian/i, Color: '#0052cc' },\n { Pattern: /mailchimp/i, Color: '#ffe01b' },\n { Pattern: /shopify/i, Color: '#96bf48' },\n { Pattern: /wordpress/i, Color: '#21759b' },\n { Pattern: /dropbox/i, Color: '#0061ff' },\n { Pattern: /aws|amazon/i, Color: '#ff9900' },\n { Pattern: /yourmembership|ym/i, Color: '#1a73e8' },\n { Pattern: /quickbooks|intuit/i, Color: '#2ca01c' },\n { Pattern: /zendesk/i, Color: '#03363d' },\n { Pattern: /database|sql|mysql|postgres/i, Color: '#336791' },\n { Pattern: /api|rest|graphql/i, Color: '#e535ab' },\n { Pattern: /file|csv|excel/i, Color: '#217346' },\n { Pattern: /ftp|sftp/i, Color: '#555' }\n];\n\ntype StatusBadgeType = 'Connected' | 'Error' | 'Inactive' | 'Syncing';\ntype WizardStepType = 1 | 2 | 3;\ntype CardMenuAction = 'edit' | 'disable' | 'delete';\n\ninterface WizardStep {\n Number: number;\n Label: string;\n}\n\ninterface CompanyRow {\n ID: string;\n Name: string;\n}\n\nconst WIZARD_STEPS: WizardStep[] = [\n { Number: 1, Label: 'Choose Integration' },\n { Number: 2, Label: 'Configure' },\n { Number: 3, Label: 'Test' }\n];\n\n@RegisterClass(BaseResourceComponent, 'IntegrationConnections')\n@Component({\n standalone: false,\n selector: 'app-integration-connections',\n templateUrl: './connections.component.html',\n styleUrls: ['./connections.component.css']\n})\nexport class ConnectionsComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n\n // --- Main view state ---\n Connections: IntegrationSummary[] = [];\n EntityMapCounts = new Map<string, number>();\n IsLoading = true;\n\n // --- Card test state ---\n TestingCardID: string | null = null;\n TestCardResults = new Map<string, { Success: boolean; Message: string }>();\n\n // --- Wizard state ---\n WizardOpen = false;\n WizardStep: WizardStepType = 1;\n WizardSteps = WIZARD_STEPS;\n AvailableIntegrations: MJIntegrationEntity[] = [];\n SearchQuery = '';\n\n // Step 1\n SelectedIntegration: MJIntegrationEntity | null = null;\n\n // Step 2\n ConnectionName = '';\n SelectedCompanyID: string | null = null;\n ConnectionDescription = '';\n Companies: CompanyRow[] = [];\n SelectedCredentialID: string | null = null;\n ShowCredentialDialog = false;\n PreselectedCredentialTypeId: string | undefined;\n ExistingCredentials: MJCredentialEntity[] = [];\n IsLoadingCredentials = false;\n SelectedCredential: MJCredentialEntity | null = null;\n\n // Step 3\n TestResult: { Success: boolean; Message: string; ServerVersion?: string } | null = null;\n IsTesting = false;\n\n // Save state\n IsSaving = false;\n SavedIntegrationID: string | null = null;\n\n // Card menu\n OpenMenuID: string | null = null;\n\n // Edit panel state\n EditPanelOpen = false;\n EditingSummary: IntegrationSummary | null = null;\n EditEntity: MJCompanyIntegrationEntity | null = null;\n EditName = '';\n EditDescription = '';\n EditCredentialID: string | null = null;\n EditCredential: MJCredentialEntity | null = null;\n EditCredentials: MJCredentialEntity[] = [];\n EditIsActive = false;\n IsEditSaving = false;\n IsEditLoading = false;\n\n // Detail view state (replaces card grid when an integration is selected)\n SelectedSummary: IntegrationSummary | null = null;\n DetailEntityMaps: EntityMapRow[] = [];\n DetailFilteredMaps: EntityMapRow[] = [];\n DetailSearchTerm = '';\n IsDetailLoading = false;\n\n // Entity map editor state (field mapping detail view)\n EditorEntityMap: EntityMapRow | null = null;\n\n // Add entity map state\n ShowAddMapPanel = false;\n AvailableSourceObjects: Array<{ Name: string; Label: string }> = [];\n IsLoadingSourceObjects = false;\n AddMapSourceObjectName = '';\n AddMapEntityID = '';\n AddMapDirection: 'Pull' | 'Push' | 'Bidirectional' = 'Pull';\n IsSavingAddMap = false;\n\n // Tree dropdown config for MJ Entity picker (schema → entities)\n @ViewChild('entityTreeDropdown') entityTreeDropdown: TreeDropdownComponent | undefined;\n\n EntityBranchConfig: TreeBranchConfig = {\n EntityName: 'MJ: Schema Info',\n DisplayField: 'SchemaName',\n IDField: 'SchemaName',\n ParentIDField: '', // flat list of schemas, no nesting\n DefaultIcon: 'fa-solid fa-database',\n OrderBy: 'SchemaName ASC'\n };\n\n EntityLeafConfig: TreeLeafConfig = {\n EntityName: 'MJ: Entities',\n DisplayField: 'Name',\n IDField: 'ID',\n ParentField: 'SchemaName',\n DefaultIcon: 'fa-solid fa-table',\n OrderBy: 'Name ASC'\n };\n\n // Create New Entity state\n ShowCreateEntity = false;\n NewEntitySchema = '';\n NewEntityTable = '';\n DDLPreview: string | null = null;\n DDLPreviewWarnings: string[] = [];\n IsGeneratingDDL = false;\n IsCreatingEntity = false;\n\n // Delete confirmation state\n DeleteConfirmID: string | null = null;\n IsDeleting = false;\n\n private dataService = inject(IntegrationDataService);\n private cdr = inject(ChangeDetectorRef);\n private documentClickHandler: ((e: Event) => void) | null = null;\n\n async ngOnInit(): Promise<void> {\n this.documentClickHandler = (e: Event) => this.onDocumentClick(e);\n document.addEventListener('click', this.documentClickHandler);\n await this.LoadData();\n }\n\n ngOnDestroy(): void {\n if (this.documentClickHandler) {\n document.removeEventListener('click', this.documentClickHandler);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Resource overrides\n // ---------------------------------------------------------------------------\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Integrations';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-plug';\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, entityMaps] = await Promise.all([\n this.dataService.LoadIntegrationSummaries(provider),\n this.loadAllEntityMaps()\n ]);\n this.Connections = summaries;\n this.EntityMapCounts = this.countMapsByIntegration(entityMaps);\n } catch (err) {\n console.error('[IntegrationConnections] Failed to load data:', err);\n } finally {\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Card helpers\n // ---------------------------------------------------------------------------\n\n GetStatusBadge(summary: IntegrationSummary): StatusBadgeType {\n if (summary.LatestRun?.Status === 'In Progress') return 'Syncing';\n if (summary.StatusColor === 'green') return 'Connected';\n if (summary.StatusColor === 'red') return 'Error';\n return 'Inactive';\n }\n\n GetStatusBadgeClass(summary: IntegrationSummary): string {\n const badge = this.GetStatusBadge(summary);\n return `status-badge status-badge-${badge.toLowerCase()}`;\n }\n\n GetIntegrationIcon(name: string): string {\n return this.resolveIconByName(name);\n }\n\n GetIconBrandColor(name: string): string {\n return this.resolveBrandColor(name);\n }\n\n GetEntityMapCount(integrationID: string): number {\n for (const [key, value] of this.EntityMapCounts) {\n if (UUIDsEqual(key, integrationID)) return value;\n }\n return 0;\n }\n\n GetCredentialHint(summary: IntegrationSummary): string {\n const driverClass = summary.Integration.DriverClassName;\n if (driverClass?.toLowerCase().includes('oauth')) return 'OAuth2 Connected';\n return 'API Key configured';\n }\n\n GetSourceTypeLabel(summary: IntegrationSummary): string {\n return summary.SourceType?.Name ?? 'API';\n }\n\n IsConnectionActive(summary: IntegrationSummary): boolean {\n return summary.Integration.IsActive === true;\n }\n\n // ---------------------------------------------------------------------------\n // Card menu\n // ---------------------------------------------------------------------------\n\n ToggleMenu(integrationID: string, event: Event): void {\n event.stopPropagation();\n this.OpenMenuID = this.OpenMenuID === integrationID ? null : integrationID;\n this.cdr.detectChanges();\n }\n\n IsMenuOpen(integrationID: string): boolean {\n return this.OpenMenuID === integrationID;\n }\n\n OnMenuAction(action: CardMenuAction, summary: IntegrationSummary): void {\n this.OpenMenuID = null;\n switch (action) {\n case 'edit':\n this.OpenEditPanel(summary);\n break;\n case 'disable':\n this.toggleConnectionActive(summary);\n break;\n case 'delete':\n this.ShowDeleteConfirm(summary.Integration.ID);\n break;\n }\n }\n\n GetMenuActionLabel(summary: IntegrationSummary): string {\n return this.IsConnectionActive(summary) ? 'Disable' : 'Enable';\n }\n\n // ---------------------------------------------------------------------------\n // Edit panel\n // ---------------------------------------------------------------------------\n\n async OpenEditPanel(summary: IntegrationSummary): Promise<void> {\n this.EditingSummary = summary;\n this.EditName = summary.Integration.Name;\n this.EditDescription = '';\n this.EditIsActive = summary.Integration.IsActive === true;\n this.EditCredentialID = null;\n this.EditCredential = null;\n this.EditCredentials = [];\n this.EditEntity = null;\n this.EditPanelOpen = true;\n this.IsEditLoading = true;\n this.cdr.detectChanges();\n\n try {\n const md = new Metadata();\n const ci = await md.GetEntityObject<MJCompanyIntegrationEntity>('MJ: Company Integrations');\n await ci.Load(summary.Integration.ID);\n this.EditEntity = ci;\n this.EditName = ci.Name;\n this.EditIsActive = ci.IsActive === true;\n if (ci.CredentialID) {\n this.EditCredentialID = ci.CredentialID;\n }\n await this.loadEditCredentials();\n } catch (err) {\n console.error('[IntegrationConnections] Failed to load connection for editing:', err);\n } finally {\n this.IsEditLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n CloseEditPanel(): void {\n this.EditPanelOpen = false;\n setTimeout(() => {\n if (!this.EditPanelOpen) {\n this.EditingSummary = null;\n this.EditEntity = null;\n this.cdr.detectChanges();\n }\n }, 350);\n this.cdr.detectChanges();\n }\n\n async SaveEditChanges(): Promise<void> {\n if (!this.EditEntity) return;\n this.IsEditSaving = true;\n this.cdr.detectChanges();\n\n try {\n this.EditEntity.Name = this.EditName;\n this.EditEntity.IsActive = this.EditIsActive;\n if (this.EditCredentialID) {\n this.EditEntity.CredentialID = this.EditCredentialID;\n }\n const saved = await this.EditEntity.Save();\n if (saved) {\n this.CloseEditPanel();\n await this.LoadData();\n } else {\n console.error('[IntegrationConnections] Save failed:',\n this.EditEntity.LatestResult?.CompleteMessage ?? this.EditEntity.LatestResult?.Message);\n }\n } catch (err) {\n console.error('[IntegrationConnections] Save error:', err);\n } finally {\n this.IsEditSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n SelectEditCredential(credential: MJCredentialEntity): void {\n this.EditCredential = credential;\n this.EditCredentialID = credential.ID;\n }\n\n ClearEditCredential(): void {\n this.EditCredential = null;\n this.EditCredentialID = null;\n }\n\n OpenEditCredentialDialog(): void {\n this.PreselectedCredentialTypeId = undefined;\n this.ShowCredentialDialog = true;\n this.cdr.detectChanges();\n }\n\n OnEditCredentialDialogClose(result: CredentialDialogResult): void {\n this.ShowCredentialDialog = false;\n if (result.success && result.credential) {\n this.EditCredential = result.credential;\n this.EditCredentialID = result.credential.ID;\n }\n this.cdr.detectChanges();\n }\n\n // ---------------------------------------------------------------------------\n // Delete confirmation\n // ---------------------------------------------------------------------------\n\n ShowDeleteConfirm(integrationID: string): void {\n this.DeleteConfirmID = integrationID;\n this.cdr.detectChanges();\n }\n\n CancelDelete(): void {\n this.DeleteConfirmID = null;\n this.cdr.detectChanges();\n }\n\n async ConfirmDelete(integrationID: string): Promise<void> {\n this.IsDeleting = true;\n this.cdr.detectChanges();\n\n try {\n const md = new Metadata();\n const ci = await md.GetEntityObject<MJCompanyIntegrationEntity>('MJ: Company Integrations');\n await ci.Load(integrationID);\n const deleted = await ci.Delete();\n if (deleted) {\n this.DeleteConfirmID = null;\n await this.LoadData();\n } else {\n console.error('[IntegrationConnections] Delete failed:',\n ci.LatestResult?.CompleteMessage ?? ci.LatestResult?.Message);\n }\n } catch (err) {\n console.error('[IntegrationConnections] Delete error:', err);\n } finally {\n this.IsDeleting = false;\n this.cdr.detectChanges();\n }\n }\n\n IsDeleteConfirming(integrationID: string): boolean {\n return UUIDsEqual(this.DeleteConfirmID, integrationID);\n }\n\n // ---------------------------------------------------------------------------\n // Card test\n // ---------------------------------------------------------------------------\n\n async TestExistingConnection(integrationID: string): Promise<void> {\n if (this.TestingCardID) return;\n this.TestingCardID = integrationID;\n this.TestCardResults.delete(integrationID);\n this.cdr.detectChanges();\n\n try {\n const result = await this.dataService.TestConnection(integrationID);\n this.TestCardResults.set(integrationID, {\n Success: result.Success,\n Message: result.Message\n });\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n this.TestCardResults.set(integrationID, {\n Success: false,\n Message: `Test failed: ${message}`\n });\n } finally {\n this.TestingCardID = null;\n this.cdr.detectChanges();\n }\n }\n\n IsTestingCard(integrationID: string): boolean {\n return UUIDsEqual(this.TestingCardID, integrationID);\n }\n\n GetCardTestResult(integrationID: string): { Success: boolean; Message: string } | null {\n for (const [key, value] of this.TestCardResults) {\n if (UUIDsEqual(key, integrationID)) return value;\n }\n return null;\n }\n\n // ---------------------------------------------------------------------------\n // Sync action\n // ---------------------------------------------------------------------------\n\n async RunSync(integrationID: string): Promise<void> {\n try {\n const result = await this.dataService.RunSync(integrationID);\n if (!result.Success) {\n console.error('[IntegrationConnections] Sync failed:', result.Message);\n }\n await this.LoadData();\n } catch (err) {\n console.error('[IntegrationConnections] RunSync error:', err);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Detail view (entity maps for a selected integration)\n // ---------------------------------------------------------------------------\n\n async SelectIntegrationCard(summary: IntegrationSummary): Promise<void> {\n this.SelectedSummary = summary;\n this.DetailSearchTerm = '';\n this.IsDetailLoading = true;\n this.cdr.detectChanges();\n\n try {\n const maps = await this.loadEntityMapsForIntegration(summary.Integration.ID);\n this.DetailEntityMaps = maps;\n this.DetailFilteredMaps = maps;\n } catch (err) {\n console.error('[IntegrationConnections] Failed to load entity maps:', err);\n } finally {\n this.IsDetailLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n CloseDetailView(): void {\n this.SelectedSummary = null;\n this.DetailEntityMaps = [];\n this.DetailFilteredMaps = [];\n this.DetailSearchTerm = '';\n this.cdr.detectChanges();\n }\n\n OnDetailSearch(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.DetailSearchTerm = input.value;\n this.DetailFilteredMaps = this.applyDetailFilter();\n this.cdr.detectChanges();\n }\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 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 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 async OnToggleMapEnabled(em: EntityMapRow, event: Event): Promise<void> {\n const checkbox = event.target as HTMLInputElement;\n const newValue = checkbox.checked;\n em.SyncEnabled = newValue;\n this.cdr.detectChanges();\n try {\n await this.dataService.ToggleEntityMapEnabled(em.ID, newValue);\n } catch (err) {\n em.SyncEnabled = !newValue;\n checkbox.checked = !newValue;\n console.error('[IntegrationConnections] Failed to toggle SyncEnabled:', err);\n this.cdr.detectChanges();\n }\n }\n\n get DetailActiveMapCount(): number {\n return this.DetailEntityMaps.filter(m => m.SyncEnabled).length;\n }\n\n private applyDetailFilter(): EntityMapRow[] {\n if (!this.DetailSearchTerm.trim()) return this.DetailEntityMaps;\n const term = this.DetailSearchTerm.toLowerCase();\n return this.DetailEntityMaps.filter(m =>\n (m.ExternalObjectLabel ?? m.ExternalObjectName).toLowerCase().includes(term) ||\n m.Entity.toLowerCase().includes(term)\n );\n }\n\n // ---------------------------------------------------------------------------\n // Entity map editor (field mapping detail)\n // ---------------------------------------------------------------------------\n\n OnEntityMapClick(em: EntityMapRow): void {\n this.EditorEntityMap = em;\n this.cdr.detectChanges();\n }\n\n CloseEntityMapEditor(): void {\n this.EditorEntityMap = null;\n this.cdr.detectChanges();\n }\n\n // ---------------------------------------------------------------------------\n // Add entity map\n // ---------------------------------------------------------------------------\n\n async ToggleAddMapPanel(): Promise<void> {\n this.ShowAddMapPanel = !this.ShowAddMapPanel;\n if (this.ShowAddMapPanel) {\n this.resetAddMapState();\n await this.loadAddMapData();\n }\n this.cdr.detectChanges();\n }\n\n CloseAddMapPanel(): void {\n this.ShowAddMapPanel = false;\n this.cdr.detectChanges();\n }\n\n get CanSaveAddMap(): boolean {\n return !!this.AddMapSourceObjectName && !!this.AddMapEntityID;\n }\n\n get AddMapEntityIDAsKey(): CompositeKey | null {\n return this.AddMapEntityID ? CompositeKey.FromID(this.AddMapEntityID) : null;\n }\n\n OnEntityTreeSelection(node: TreeNode | TreeNode[] | null): void {\n if (!node || Array.isArray(node)) return;\n if (node.Type === 'leaf') {\n this.AddMapEntityID = node.ID;\n }\n }\n\n // ---------------------------------------------------------------------------\n // New Entity dialog (generates SQL migration for a new table)\n // ---------------------------------------------------------------------------\n\n OpenNewEntityDialog(): void {\n this.ShowCreateEntity = true;\n this.NewEntitySchema = '';\n this.NewEntityTable = '';\n this.DDLPreview = null;\n this.DDLPreviewWarnings = [];\n this.DDLCopied = false;\n this.cdr.detectChanges();\n }\n\n CloseNewEntityDialog(): void {\n this.ShowCreateEntity = false;\n this.DDLPreview = null;\n this.DDLPreviewWarnings = [];\n this.DDLCopied = false;\n this.cdr.detectChanges();\n }\n\n DDLCopied = false;\n\n async CopyDDLToClipboard(): Promise<void> {\n if (!this.DDLPreview) return;\n try {\n await navigator.clipboard.writeText(this.DDLPreview);\n this.DDLCopied = true;\n this.cdr.detectChanges();\n setTimeout(() => {\n this.DDLCopied = false;\n this.cdr.detectChanges();\n }, 2000);\n } catch {\n // Fallback: select text in the pre block\n console.warn('[IntegrationConnections] Clipboard API not available');\n }\n }\n\n get CanGenerateSQL(): boolean {\n return !!this.NewEntitySchema.trim()\n && !!this.NewEntityTable.trim()\n && !!this.AddMapSourceObjectName;\n }\n\n get NewEntityName(): string {\n if (!this.NewEntityTable.trim()) return '';\n return this.NewEntityTable.trim()\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/_/g, ' ');\n }\n\n async PreviewDDL(): Promise<void> {\n if (!this.CanGenerateSQL || !this.SelectedSummary) return;\n this.IsGeneratingDDL = true;\n this.DDLPreview = null;\n this.DDLPreviewWarnings = [];\n this.cdr.detectChanges();\n\n try {\n const objects: SchemaPreviewObjectInput[] = [{\n SourceObjectName: this.AddMapSourceObjectName,\n SchemaName: this.NewEntitySchema.trim(),\n TableName: this.NewEntityTable.trim(),\n EntityName: this.NewEntityName\n }];\n\n const result: SchemaPreviewResult = await this.dataService.SchemaPreview(\n this.SelectedSummary.Integration.ID,\n objects\n );\n\n if (result.Success) {\n this.DDLPreview = result.Files.map(f => f.Content).join('\\n\\n');\n this.DDLPreviewWarnings = result.Warnings ?? [];\n } else {\n this.DDLPreview = `-- Error: ${result.Message}`;\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n this.DDLPreview = `-- Failed to generate DDL: ${msg}`;\n } finally {\n this.IsGeneratingDDL = false;\n this.cdr.detectChanges();\n }\n }\n\n async SaveAddMap(): Promise<void> {\n if (!this.CanSaveAddMap || !this.SelectedSummary) return;\n this.IsSavingAddMap = true;\n this.cdr.detectChanges();\n\n try {\n const sourceObj = this.AvailableSourceObjects.find(o => o.Name === this.AddMapSourceObjectName);\n const result = await this.dataService.CreateEntityMap({\n CompanyIntegrationID: this.SelectedSummary.Integration.ID,\n ExternalObjectName: this.AddMapSourceObjectName,\n ExternalObjectLabel: sourceObj?.Label !== sourceObj?.Name ? sourceObj?.Label : undefined,\n EntityID: this.AddMapEntityID,\n SyncDirection: this.AddMapDirection\n });\n\n if (result) {\n this.ShowAddMapPanel = false;\n const maps = await this.loadEntityMapsForIntegration(this.SelectedSummary.Integration.ID);\n this.DetailEntityMaps = maps;\n this.DetailFilteredMaps = this.applyDetailFilter();\n // Update entity map count\n this.EntityMapCounts = this.countMapsByIntegration(await this.loadAllEntityMaps());\n }\n } catch (err) {\n console.error('[IntegrationConnections] Failed to create entity map:', err);\n } finally {\n this.IsSavingAddMap = false;\n this.cdr.detectChanges();\n }\n }\n\n private resetAddMapState(): void {\n this.AddMapSourceObjectName = '';\n this.AddMapEntityID = '';\n this.AddMapDirection = 'Pull';\n this.AvailableSourceObjects = [];\n this.ShowCreateEntity = false;\n this.NewEntitySchema = '';\n this.NewEntityTable = '';\n this.DDLPreview = null;\n this.DDLPreviewWarnings = [];\n }\n\n private async loadAddMapData(): Promise<void> {\n if (!this.SelectedSummary) return;\n\n this.IsLoadingSourceObjects = true;\n this.cdr.detectChanges();\n\n try {\n // Load source objects from IntegrationEngineBase metadata\n const engine = IntegrationEngineBase.Instance;\n const integration = engine.GetIntegrationForCompanyIntegration(this.SelectedSummary.Integration.ID);\n if (integration) {\n const objects = engine.GetActiveIntegrationObjects(integration.ID);\n // Filter out objects that already have entity maps\n const existingNames = new Set(this.DetailEntityMaps.map(m => m.ExternalObjectName));\n this.AvailableSourceObjects = objects\n .filter(o => !existingNames.has(o.Name))\n .map(o => ({\n Name: o.Name,\n Label: o.DisplayName || o.Name\n }));\n }\n } catch (err) {\n console.error('[IntegrationConnections] Failed to load source objects:', err);\n } finally {\n this.IsLoadingSourceObjects = false;\n this.cdr.detectChanges();\n }\n }\n\n private async loadEntityMapsForIntegration(companyIntegrationID: string): Promise<EntityMapRow[]> {\n const rv = new RunView(this.RunViewToUse ?? null);\n const result = await rv.RunView<EntityMapRow>({\n EntityName: 'MJ: Company Integration Entity Maps',\n ExtraFilter: `CompanyIntegrationID='${companyIntegrationID}'`,\n OrderBy: '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 // ---------------------------------------------------------------------------\n // Wizard: open/close\n // ---------------------------------------------------------------------------\n\n async OpenWizard(): Promise<void> {\n this.resetWizardState();\n this.WizardOpen = true;\n this.cdr.detectChanges();\n await this.loadWizardData();\n }\n\n CloseWizard(): void {\n this.WizardOpen = false;\n if (this.SavedIntegrationID) {\n this.LoadData();\n }\n this.cdr.detectChanges();\n }\n\n OnKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n this.CloseWizard();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Wizard: navigation\n // ---------------------------------------------------------------------------\n\n NextStep(): void {\n if (this.WizardStep < 3) {\n this.WizardStep = (this.WizardStep + 1) as WizardStepType;\n if (this.WizardStep === 3) {\n this.TestResult = null;\n }\n this.cdr.detectChanges();\n }\n }\n\n PreviousStep(): void {\n if (this.WizardStep > 1) {\n this.WizardStep = (this.WizardStep - 1) as WizardStepType;\n this.cdr.detectChanges();\n }\n }\n\n get IsNextDisabled(): boolean {\n if (this.WizardStep === 1) return !this.SelectedIntegration;\n if (this.WizardStep === 2) return !this.ConnectionName.trim() || !this.SelectedCompanyID;\n if (this.WizardStep === 3) return !this.TestResult?.Success;\n return false;\n }\n\n get NextButtonLabel(): string {\n if (this.WizardStep === 3) return 'Finish';\n return 'Next';\n }\n\n IsStepCompleted(stepNumber: number): boolean {\n return stepNumber < this.WizardStep;\n }\n\n IsStepActive(stepNumber: number): boolean {\n return stepNumber === this.WizardStep;\n }\n\n // ---------------------------------------------------------------------------\n // Wizard Step 1: Choose integration\n // ---------------------------------------------------------------------------\n\n SelectIntegration(def: MJIntegrationEntity): void {\n this.SelectedIntegration = def;\n this.ConnectionName = def.Name;\n }\n\n IsSelectedIntegration(def: MJIntegrationEntity): boolean {\n return UUIDsEqual(this.SelectedIntegration?.ID, def.ID);\n }\n\n get FilteredIntegrations(): MJIntegrationEntity[] {\n if (!this.SearchQuery.trim()) return this.AvailableIntegrations;\n const query = this.SearchQuery.toLowerCase();\n return this.AvailableIntegrations.filter(i =>\n i.Name.toLowerCase().includes(query) ||\n (i.Description?.toLowerCase().includes(query) ?? false)\n );\n }\n\n // ---------------------------------------------------------------------------\n // Wizard Step 2: Configure\n // ---------------------------------------------------------------------------\n\n get NeedsCompanyPicker(): boolean {\n return this.Companies.length > 1;\n }\n\n get IntegrationCredentialTypeID(): string | null {\n return this.SelectedIntegration?.CredentialTypeID ?? null;\n }\n\n async ShowExistingCredentials(): Promise<void> {\n this.IsLoadingCredentials = true;\n this.cdr.detectChanges();\n\n const rv = new RunView();\n const filter = this.IntegrationCredentialTypeID\n ? `CredentialTypeID='${this.IntegrationCredentialTypeID}' AND IsActive=1`\n : 'IsActive=1';\n const result = await rv.RunView<MJCredentialEntity>({\n EntityName: 'MJ: Credentials',\n ExtraFilter: filter,\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n this.ExistingCredentials = result.Results;\n this.IsLoadingCredentials = false;\n this.cdr.detectChanges();\n }\n\n SelectExistingCredential(credential: MJCredentialEntity): void {\n this.SelectedCredential = credential;\n this.SelectedCredentialID = credential.ID;\n }\n\n OpenCredentialDialog(): void {\n this.PreselectedCredentialTypeId = this.IntegrationCredentialTypeID ?? undefined;\n this.ShowCredentialDialog = true;\n this.cdr.detectChanges();\n }\n\n OnCredentialDialogClose(result: CredentialDialogResult): void {\n this.ShowCredentialDialog = false;\n if (result.success && result.credential) {\n this.SelectedCredential = result.credential;\n this.SelectedCredentialID = result.credential.ID;\n }\n this.cdr.detectChanges();\n }\n\n ClearCredential(): void {\n this.SelectedCredential = null;\n this.SelectedCredentialID = null;\n }\n\n // ---------------------------------------------------------------------------\n // Wizard Step 3: Test connection\n // ---------------------------------------------------------------------------\n\n async TestNewConnection(): Promise<void> {\n this.IsTesting = true;\n this.TestResult = null;\n this.cdr.detectChanges();\n\n try {\n const companyIntegrationID = await this.saveCompanyIntegration();\n if (!companyIntegrationID) {\n this.TestResult = {\n Success: false,\n Message: 'Could not save integration to test. Check your configuration.'\n };\n this.IsTesting = false;\n this.cdr.detectChanges();\n return;\n }\n\n const result = await this.dataService.TestConnection(companyIntegrationID);\n this.TestResult = {\n Success: result.Success,\n Message: result.Message,\n ServerVersion: result.ServerVersion ?? undefined\n };\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n this.TestResult = {\n Success: false,\n Message: `Connection test failed: ${message}`\n };\n } finally {\n this.IsTesting = false;\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Wizard: finish\n // ---------------------------------------------------------------------------\n\n async FinishWizard(): Promise<void> {\n if (this.WizardStep < 3) {\n this.NextStep();\n return;\n }\n\n // On step 3 with a successful test — activate the integration and close\n if (!this.SavedIntegrationID) return;\n this.IsSaving = true;\n this.cdr.detectChanges();\n\n try {\n const md = new Metadata();\n const ci = await md.GetEntityObject<MJCompanyIntegrationEntity>('MJ: Company Integrations');\n await ci.Load(this.SavedIntegrationID);\n ci.IsActive = true;\n ci.Name = this.ConnectionName;\n await ci.Save();\n } catch (err) {\n console.error('[IntegrationConnections] Failed to activate integration:', err);\n } finally {\n this.IsSaving = false;\n this.WizardOpen = false;\n await this.LoadData();\n\n // Auto-select the newly created integration to show its detail view\n if (this.SavedIntegrationID) {\n const newSummary = this.Connections.find(c =>\n UUIDsEqual(c.Integration.ID, this.SavedIntegrationID!)\n );\n if (newSummary) {\n await this.SelectIntegrationCard(newSummary);\n }\n }\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Private helpers\n // ---------------------------------------------------------------------------\n\n private async loadWizardData(): Promise<void> {\n try {\n const provider = this.RunViewToUse;\n const rv = new RunView(provider ?? null);\n const [integrations, companyResult] = await Promise.all([\n this.dataService.LoadIntegrationDefinitions(provider),\n rv.RunView<CompanyRow>({\n EntityName: 'MJ: Companies',\n Fields: ['ID', 'Name'],\n OrderBy: 'Name',\n ResultType: 'simple'\n })\n ]);\n this.AvailableIntegrations = integrations;\n this.Companies = companyResult.Success ? companyResult.Results : [];\n if (this.Companies.length === 1) {\n this.SelectedCompanyID = this.Companies[0].ID;\n }\n } catch (err) {\n console.error('[IntegrationConnections] Failed to load wizard data:', err);\n }\n this.cdr.detectChanges();\n }\n\n private async saveCompanyIntegration(): Promise<string | null> {\n if (this.SavedIntegrationID) return this.SavedIntegrationID;\n if (!this.SelectedCompanyID || !this.SelectedIntegration) return null;\n\n const md = new Metadata();\n const ci = await md.GetEntityObject<MJCompanyIntegrationEntity>('MJ: Company Integrations');\n ci.NewRecord();\n ci.CompanyID = this.SelectedCompanyID;\n ci.IntegrationID = this.SelectedIntegration.ID;\n ci.Name = this.ConnectionName || this.SelectedIntegration.Name;\n ci.IsActive = false;\n if (this.SelectedCredential) {\n ci.CredentialID = this.SelectedCredential.ID;\n }\n\n const saved = await ci.Save();\n if (saved) {\n this.SavedIntegrationID = ci.ID;\n return ci.ID;\n }\n console.error('[IntegrationConnections] Failed to save company integration:',\n ci.LatestResult?.CompleteMessage ?? ci.LatestResult?.Message);\n return null;\n }\n\n private async loadAllEntityMaps(): Promise<EntityMapRow[]> {\n const rv = new RunView(this.RunViewToUse ?? null);\n const result = await rv.RunView<EntityMapRow>({\n EntityName: 'MJ: Company Integration Entity Maps',\n ExtraFilter: '',\n OrderBy: 'CompanyIntegrationID',\n Fields: ['ID', 'CompanyIntegrationID'],\n ResultType: 'simple'\n });\n return result.Results;\n }\n\n private countMapsByIntegration(maps: EntityMapRow[]): Map<string, number> {\n const counts = new Map<string, number>();\n for (const map of maps) {\n const current = counts.get(map.CompanyIntegrationID) ?? 0;\n counts.set(map.CompanyIntegrationID, current + 1);\n }\n return counts;\n }\n\n private resolveIconByName(name: string): string {\n return ResolveIntegrationIcon(name);\n }\n\n private resolveBrandColor(name: string): string {\n const match = BRAND_COLOR_MAP.find(m => m.Pattern.test(name));\n return match ? match.Color : '#6366f1';\n }\n\n private async toggleConnectionActive(summary: IntegrationSummary): Promise<void> {\n const md = new Metadata();\n const ci = await md.GetEntityObject<MJCompanyIntegrationEntity>('MJ: Company Integrations');\n await ci.Load(summary.Integration.ID);\n ci.IsActive = !summary.Integration.IsActive;\n const saved = await ci.Save();\n if (saved) {\n await this.LoadData();\n }\n }\n\n private async loadEditCredentials(): Promise<void> {\n const rv = new RunView();\n const result = await rv.RunView<MJCredentialEntity>({\n EntityName: 'MJ: Credentials',\n ExtraFilter: 'IsActive=1',\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n this.EditCredentials = result.Results;\n\n // Pre-select the current credential if one is set\n if (this.EditCredentialID) {\n this.EditCredential = this.EditCredentials.find(c =>\n UUIDsEqual(c.ID, this.EditCredentialID!)\n ) ?? null;\n }\n }\n\n private resetWizardState(): void {\n this.WizardStep = 1;\n this.AvailableIntegrations = [];\n this.SearchQuery = '';\n this.SelectedIntegration = null;\n this.ConnectionName = '';\n this.SelectedCompanyID = null;\n this.ConnectionDescription = '';\n this.SelectedCredentialID = null;\n this.SelectedCredential = null;\n this.ShowCredentialDialog = false;\n this.ExistingCredentials = [];\n this.Companies = [];\n this.TestResult = null;\n this.IsTesting = false;\n this.IsSaving = false;\n this.SavedIntegrationID = null;\n this.OpenMenuID = null;\n }\n\n private onDocumentClick(e: Event): void {\n if (this.OpenMenuID) {\n const target = e.target as HTMLElement;\n if (!target.closest('.card-menu-wrapper')) {\n this.OpenMenuID = null;\n this.cdr.detectChanges();\n }\n }\n }\n}\n\nexport function LoadConnectionsComponent(): void {\n // Tree-shaking prevention: importing this module causes\n // @RegisterClass decorators to fire, registering components.\n}\n","<!-- Main container -->\n<div class=\"connections-container\" [class.detail-active]=\"!!SelectedSummary\"\n [class.editor-active]=\"!!EditorEntityMap\">\n\n <!-- ======================================================================\n CARD GRID VIEW (shown when no wizard and no detail selected)\n ====================================================================== -->\n @if (!WizardOpen && !SelectedSummary) {\n <!-- Header -->\n <div class=\"connections-header\">\n <div class=\"header-left\">\n <h2 class=\"header-title\">Integrations</h2>\n <span class=\"header-count\">{{ Connections.length }} integration{{ Connections.length !== 1 ? 's' : '' }}</span>\n </div>\n <button kendoButton (click)=\"OpenWizard()\" class=\"add-connection-btn\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Integration\n </button>\n </div>\n\n <!-- Loading state -->\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading integrations...\"></mj-loading>\n </div>\n }\n\n <!-- Empty state -->\n @if (!IsLoading && Connections.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-plug empty-icon\"></i>\n <h3>No integrations yet</h3>\n <p>Connect your first external system to start syncing data.</p>\n <button kendoButton (click)=\"OpenWizard()\" themeColor=\"primary\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Your First Integration\n </button>\n </div>\n }\n\n <!-- Card grid -->\n @if (!IsLoading && Connections.length > 0) {\n <div class=\"card-grid\">\n @for (summary of Connections; track summary.Integration.ID) {\n <div class=\"connection-card\">\n <!-- Card header + body: clickable to open detail view -->\n <div class=\"card-clickable\" (click)=\"SelectIntegrationCard(summary)\">\n <div class=\"card-header\">\n <div class=\"icon-circle\" [style.background-color]=\"GetIconBrandColor(summary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(summary.Integration.Integration)\" class=\"icon-large\"></i>\n </div>\n <span [class]=\"GetStatusBadgeClass(summary)\">{{ GetStatusBadge(summary) }}</span>\n </div>\n\n <!-- Card body -->\n <div class=\"card-body\">\n <div class=\"card-name\">{{ summary.Integration.Name }}</div>\n <div class=\"card-company\">{{ summary.Integration.Company }}</div>\n <div class=\"card-meta\">\n <span class=\"meta-label\">{{ GetSourceTypeLabel(summary) }}</span>\n <span class=\"meta-separator\">&middot;</span>\n <span class=\"meta-value\">{{ GetCredentialHint(summary) }}</span>\n </div>\n <div class=\"card-sync-info\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n Syncing {{ GetEntityMapCount(summary.Integration.ID) }} entities\n </div>\n\n <!-- Inline test result -->\n @if (GetCardTestResult(summary.Integration.ID); as testResult) {\n <div class=\"card-test-result\" [class.test-success]=\"testResult.Success\" [class.test-failure]=\"!testResult.Success\">\n @if (testResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ testResult.Message }}</span>\n </div>\n }\n </div>\n </div><!-- /card-clickable -->\n\n <!-- Delete confirmation overlay -->\n @if (IsDeleteConfirming(summary.Integration.ID)) {\n <div class=\"delete-confirm-overlay\">\n <div class=\"delete-confirm-content\">\n <i class=\"fa-solid fa-triangle-exclamation delete-warn-icon\"></i>\n <span class=\"delete-confirm-text\">Delete this integration and all its entity maps?</span>\n <div class=\"delete-confirm-actions\">\n <button kendoButton\n themeColor=\"error\"\n [disabled]=\"IsDeleting\"\n (click)=\"ConfirmDelete(summary.Integration.ID)\">\n @if (IsDeleting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Deleting...\n } @else {\n Delete\n }\n </button>\n <button kendoButton look=\"outline\" (click)=\"CancelDelete()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Card footer -->\n <div class=\"card-footer\">\n <button kendoButton\n look=\"outline\"\n [disabled]=\"!!TestingCardID\"\n (click)=\"TestExistingConnection(summary.Integration.ID)\">\n @if (IsTestingCard(summary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n Test\n }\n </button>\n <button kendoButton look=\"outline\" (click)=\"OnMenuAction('edit', summary)\">\n Configure\n </button>\n @if (IsConnectionActive(summary)) {\n <button kendoButton themeColor=\"primary\" (click)=\"RunSync(summary.Integration.ID)\">\n Sync Now\n </button>\n }\n <div class=\"card-menu-wrapper\">\n <button class=\"menu-trigger\" (click)=\"ToggleMenu(summary.Integration.ID, $event)\">\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </button>\n @if (IsMenuOpen(summary.Integration.ID)) {\n <div class=\"card-menu-dropdown\">\n <button class=\"menu-item\" (click)=\"OnMenuAction('edit', summary)\">\n <i class=\"fa-solid fa-pen-to-square\"></i> Edit\n </button>\n <button class=\"menu-item\" (click)=\"OnMenuAction('disable', summary)\">\n <i class=\"fa-solid fa-toggle-off\"></i> {{ GetMenuActionLabel(summary) }}\n </button>\n <button class=\"menu-item menu-item-danger\" (click)=\"OnMenuAction('delete', summary)\">\n <i class=\"fa-solid fa-trash-can\"></i> Delete\n </button>\n </div>\n }\n </div>\n </div>\n </div>\n }\n\n <!-- New connection card -->\n <div class=\"connection-card new-connection-card\" (click)=\"OpenWizard()\">\n <div class=\"new-card-content\">\n <div class=\"new-card-icon\">\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n <span class=\"new-card-label\">Add Integration</span>\n </div>\n </div>\n </div>\n }\n }\n\n <!-- ======================================================================\n DETAIL VIEW (entity maps for selected integration)\n ====================================================================== -->\n @if (!WizardOpen && SelectedSummary) {\n <div class=\"detail-view\">\n\n <!-- ================================================================\n ENTITY MAP EDITOR (field mapping detail for a selected map)\n ================================================================ -->\n @if (EditorEntityMap) {\n <app-visual-field-editor\n [EntityMap]=\"EditorEntityMap\"\n [CompanyIntegrationID]=\"SelectedSummary!.Integration.ID\"\n [RunViewProvider]=\"RunViewToUse\"\n (Close)=\"CloseEntityMapEditor()\">\n </app-visual-field-editor>\n\n <!-- ================================================================\n ENTITY MAPS LIST (shown when no editor map is selected)\n ================================================================ -->\n } @else {\n <!-- Detail header -->\n <div class=\"detail-header\">\n <button class=\"detail-back-btn\" (click)=\"CloseDetailView()\" title=\"Back to Integrations\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n <div class=\"detail-header-info\">\n <div class=\"icon-circle\" [style.background-color]=\"GetIconBrandColor(SelectedSummary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(SelectedSummary.Integration.Integration)\" class=\"icon-large\"></i>\n </div>\n <div class=\"detail-header-text\">\n <h2 class=\"detail-title\">{{ SelectedSummary.Integration.Name }}</h2>\n <span class=\"detail-subtitle\">\n {{ SelectedSummary.Integration.Company }}\n <span class=\"meta-separator\">&middot;</span>\n {{ GetSourceTypeLabel(SelectedSummary) }}\n <span class=\"meta-separator\">&middot;</span>\n <span [class]=\"GetStatusBadgeClass(SelectedSummary)\">{{ GetStatusBadge(SelectedSummary) }}</span>\n </span>\n </div>\n </div>\n <div class=\"detail-header-actions\">\n <button class=\"detail-edit-btn\" (click)=\"OpenEditPanel(SelectedSummary)\" title=\"Configure\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n </button>\n @if (IsConnectionActive(SelectedSummary)) {\n <button kendoButton themeColor=\"primary\" (click)=\"RunSync(SelectedSummary.Integration.ID)\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Sync Now\n </button>\n }\n </div>\n </div>\n\n <!-- Entity maps toolbar -->\n <div class=\"detail-toolbar\">\n <div class=\"detail-toolbar-left\">\n <span class=\"detail-map-count\">\n {{ DetailEntityMaps.length }} entity map{{ DetailEntityMaps.length !== 1 ? 's' : '' }}\n <span class=\"meta-separator\">&middot;</span>\n {{ DetailActiveMapCount }} active\n </span>\n </div>\n <div class=\"detail-toolbar-right\">\n <div class=\"detail-search\">\n <i class=\"fa-solid fa-filter\"></i>\n <input type=\"text\"\n placeholder=\"Filter entity maps...\"\n [value]=\"DetailSearchTerm\"\n (input)=\"OnDetailSearch($event)\" />\n </div>\n <button class=\"add-map-btn\" (click)=\"ToggleAddMapPanel()\" [class.active]=\"ShowAddMapPanel\">\n <i class=\"fa-solid fa-plus\"></i> Add Map\n </button>\n </div>\n </div>\n\n <!-- Add Entity Map inline form -->\n @if (ShowAddMapPanel) {\n <div class=\"add-map-panel\">\n <div class=\"add-map-row\">\n <div class=\"add-map-field\">\n <label class=\"add-map-label\">Source Object</label>\n @if (IsLoadingSourceObjects) {\n <div class=\"add-map-loading\"><i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...</div>\n } @else if (AvailableSourceObjects.length === 0) {\n <div class=\"add-map-hint\">No source objects found in metadata</div>\n } @else {\n <select class=\"add-map-select\" [(ngModel)]=\"AddMapSourceObjectName\">\n <option [ngValue]=\"''\" disabled>Select source object...</option>\n @for (obj of AvailableSourceObjects; track obj.Name) {\n <option [value]=\"obj.Name\">{{ obj.Label || obj.Name }}</option>\n }\n </select>\n }\n </div>\n\n <div class=\"add-map-direction-col\">\n <label class=\"add-map-label\">Direction</label>\n <div class=\"add-map-direction-btns\">\n <button [class.active]=\"AddMapDirection === 'Pull'\" (click)=\"AddMapDirection = 'Pull'\" title=\"Pull from source\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n <button [class.active]=\"AddMapDirection === 'Bidirectional'\" (click)=\"AddMapDirection = 'Bidirectional'\" title=\"Bidirectional sync\">\n <i class=\"fa-solid fa-right-left\"></i>\n </button>\n <button [class.active]=\"AddMapDirection === 'Push'\" (click)=\"AddMapDirection = 'Push'\" title=\"Push to source\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"add-map-field add-map-entity-field\">\n <label class=\"add-map-label\">MJ Entity</label>\n <div class=\"entity-picker-row\">\n <mj-tree-dropdown\n #entityTreeDropdown\n [BranchConfig]=\"EntityBranchConfig\"\n [LeafConfig]=\"EntityLeafConfig\"\n [Value]=\"AddMapEntityIDAsKey\"\n [SelectableTypes]=\"'leaf'\"\n [SelectionMode]=\"'single'\"\n [Placeholder]=\"'Search entities by schema...'\"\n [EnableSearch]=\"true\"\n (SelectionChange)=\"OnEntityTreeSelection($event)\">\n </mj-tree-dropdown>\n <button class=\"new-entity-btn\" (click)=\"OpenNewEntityDialog()\" title=\"Create new entity table\">\n <i class=\"fa-solid fa-plus\"></i> New\n </button>\n </div>\n </div>\n\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanSaveAddMap || IsSavingAddMap\"\n (click)=\"SaveAddMap()\">\n @if (IsSavingAddMap) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-check\"></i> Add\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseAddMapPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Entity maps table -->\n @if (IsDetailLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading entity maps...\"></mj-loading>\n </div>\n } @else if (DetailEntityMaps.length === 0 && !ShowAddMapPanel) {\n <div class=\"detail-empty\">\n <i class=\"fa-solid fa-cube\"></i>\n <h3>No entity maps configured</h3>\n <p>Entity maps define how external objects sync to MJ entities.</p>\n <button class=\"add-map-btn add-map-btn-lg\" (click)=\"ToggleAddMapPanel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Your First Entity Map\n </button>\n </div>\n } @else if (DetailEntityMaps.length > 0) {\n <!-- Table header -->\n <div class=\"detail-table-head\">\n <span class=\"dt-col-toggle\">Sync</span>\n <span class=\"dt-col-source\">External Object</span>\n <span class=\"dt-col-direction\"></span>\n <span class=\"dt-col-dest\">MJ Entity</span>\n <span class=\"dt-col-meta\">Config</span>\n </div>\n\n <!-- Table body -->\n <div class=\"detail-table-body\">\n @for (em of DetailFilteredMaps; track em.ID) {\n <div class=\"detail-map-row\" [class.sync-disabled]=\"!em.SyncEnabled\" (click)=\"OnEntityMapClick(em)\">\n <span class=\"dt-col-toggle\" (click)=\"$event.stopPropagation()\">\n <label class=\"toggle-switch\" [title]=\"em.SyncEnabled ? 'Sync enabled' : 'Sync disabled'\">\n <input type=\"checkbox\"\n [checked]=\"em.SyncEnabled\"\n (change)=\"OnToggleMapEnabled(em, $event)\" />\n <span class=\"toggle-slider\"></span>\n </label>\n </span>\n <span class=\"dt-col-source\" [title]=\"em.ExternalObjectName\">\n {{ em.ExternalObjectLabel ?? em.ExternalObjectName }}\n </span>\n <span class=\"dt-col-direction\">\n <span [class]=\"DirectionBadgeClass(em.SyncDirection)\">\n {{ DirectionText(em.SyncDirection) }}\n </span>\n </span>\n <span class=\"dt-col-dest\" [title]=\"em.Entity\">\n {{ em.Entity }}\n </span>\n <span class=\"dt-col-meta\">\n @if (em.MatchStrategy) {\n <span class=\"detail-config-badge\" title=\"Match strategy configured\">\n <i class=\"fa-solid fa-link\"></i>\n </span>\n }\n <span class=\"detail-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=\"detail-table-empty\">\n No entity maps match your filter.\n </div>\n }\n </div>\n }\n }\n\n </div>\n }\n\n <!-- ======================================================================\n WIZARD (inline, replaces card grid when open)\n ====================================================================== -->\n @if (WizardOpen) {\n <div class=\"wizard-inline\">\n <!-- Wizard header -->\n <div class=\"wizard-header\">\n <button class=\"wizard-back-btn\" (click)=\"CloseWizard()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back to Integrations\n </button>\n <h2 class=\"wizard-title\">New Integration</h2>\n </div>\n\n <!-- Step indicator -->\n <div class=\"step-indicator\">\n @for (step of WizardSteps; track step.Number) {\n <div class=\"step-item\" [class.step-active]=\"IsStepActive(step.Number)\" [class.step-completed]=\"IsStepCompleted(step.Number)\">\n <div class=\"step-circle\">\n @if (IsStepCompleted(step.Number)) {\n <i class=\"fa-solid fa-check\"></i>\n } @else {\n {{ step.Number }}\n }\n </div>\n <span class=\"step-label\">{{ step.Label }}</span>\n </div>\n @if (step.Number < WizardSteps.length) {\n <div class=\"step-line\" [class.step-line-active]=\"IsStepCompleted(step.Number)\"></div>\n }\n }\n </div>\n\n <!-- Step content -->\n <div class=\"wizard-body\">\n\n <!-- Step 1: Choose Integration -->\n @if (WizardStep === 1) {\n <div class=\"step-content\">\n <h3 class=\"step-title\">What system do you want to connect?</h3>\n <div class=\"search-bar\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search integrations...\"\n [(ngModel)]=\"SearchQuery\" />\n </div>\n\n @if (FilteredIntegrations.length === 0 && AvailableIntegrations.length === 0) {\n <div class=\"no-integrations\">\n <i class=\"fa-solid fa-puzzle-piece\"></i>\n <p>No integrations configured</p>\n <span class=\"no-integrations-hint\">Configure integration definitions in the admin area first.</span>\n </div>\n } @else if (FilteredIntegrations.length === 0) {\n <div class=\"no-integrations\">\n <i class=\"fa-solid fa-search\"></i>\n <p>No matching integrations</p>\n </div>\n } @else {\n <div class=\"integration-picker-grid\">\n @for (def of FilteredIntegrations; track def.ID) {\n <div class=\"integration-picker-card\"\n [class.picker-selected]=\"IsSelectedIntegration(def)\"\n (click)=\"SelectIntegration(def)\">\n <div class=\"picker-icon-circle\" [style.background-color]=\"GetIconBrandColor(def.Name)\">\n <i [class]=\"GetIntegrationIcon(def.Name)\"></i>\n </div>\n <div class=\"picker-name\">{{ def.Name }}</div>\n @if (def.Description) {\n <div class=\"picker-description\">{{ def.Description }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Step 2: Configure Connection -->\n @if (WizardStep === 2) {\n <div class=\"step-content\">\n <h3 class=\"step-title\">Set up your connection</h3>\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"connectionName\">Connection Name</label>\n <input id=\"connectionName\"\n type=\"text\"\n class=\"form-input\"\n placeholder=\"e.g. Production HubSpot\"\n [(ngModel)]=\"ConnectionName\" />\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"companySelect\">Company</label>\n @if (NeedsCompanyPicker) {\n <select id=\"companySelect\" class=\"form-input\" [(ngModel)]=\"SelectedCompanyID\">\n <option [ngValue]=\"null\" disabled>Select a company...</option>\n @for (company of Companies; track company.ID) {\n <option [value]=\"company.ID\">{{ company.Name }}</option>\n }\n </select>\n } @else if (Companies.length === 1) {\n <input type=\"text\" class=\"form-input\" [value]=\"Companies[0].Name\" disabled />\n } @else {\n <div class=\"form-hint\">No companies available. Create one in the admin area.</div>\n }\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"connectionDescription\">Description <span class=\"optional-label\">(optional)</span></label>\n <textarea id=\"connectionDescription\"\n class=\"form-input form-textarea\"\n placeholder=\"Notes about this connection...\"\n [(ngModel)]=\"ConnectionDescription\"\n rows=\"3\"></textarea>\n </div>\n\n <!-- Credential section -->\n <div class=\"form-group\">\n <label class=\"form-label\">Credential</label>\n @if (SelectedCredential) {\n <div class=\"credential-selected\">\n <div class=\"credential-info\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ SelectedCredential.Name }}</span>\n </div>\n <button class=\"credential-clear\" (click)=\"ClearCredential()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n } @else {\n <div class=\"credential-actions\">\n <button kendoButton look=\"outline\" (click)=\"ShowExistingCredentials()\">\n <i class=\"fa-solid fa-key\"></i>\n Choose Existing Credential\n </button>\n <button kendoButton look=\"outline\" (click)=\"OpenCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create New Credential\n </button>\n </div>\n }\n\n @if (IsLoadingCredentials) {\n <div class=\"credential-loading\">\n <mj-loading text=\"Loading credentials...\" size=\"small\"></mj-loading>\n </div>\n }\n\n @if (!IsLoadingCredentials && ExistingCredentials.length > 0 && !SelectedCredential) {\n <div class=\"credential-list\">\n @for (cred of ExistingCredentials; track cred.ID) {\n <div class=\"credential-list-item\" (click)=\"SelectExistingCredential(cred)\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ cred.Name }}</span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Step 3: Test Connection -->\n @if (WizardStep === 3) {\n <div class=\"step-content step-content-centered\">\n <h3 class=\"step-title\">Let's verify everything works</h3>\n\n @if (!TestResult && !IsTesting) {\n <div class=\"test-prompt\">\n <button kendoButton\n themeColor=\"primary\"\n size=\"large\"\n (click)=\"TestNewConnection()\">\n <i class=\"fa-solid fa-vial\"></i>\n Test Connection\n </button>\n <p class=\"test-hint\">We'll verify we can reach your system and authenticate.</p>\n </div>\n }\n\n @if (IsTesting) {\n <div class=\"test-running\">\n <div class=\"test-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-3x\"></i>\n </div>\n <p>Testing connection...</p>\n </div>\n }\n\n @if (TestResult) {\n <div class=\"test-result\" [class.test-result-success]=\"TestResult.Success\" [class.test-result-failure]=\"!TestResult.Success\">\n <div class=\"test-result-icon\">\n @if (TestResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n </div>\n <div class=\"test-result-message\">{{ TestResult.Message }}</div>\n @if (TestResult.Success && TestResult.ServerVersion) {\n <div class=\"test-result-detail\">\n Server version: {{ TestResult.ServerVersion }}\n </div>\n }\n @if (!TestResult.Success) {\n <button kendoButton look=\"outline\" (click)=\"TestNewConnection()\" class=\"test-retry-btn\">\n <i class=\"fa-solid fa-rotate-right\"></i>\n Retry\n </button>\n }\n </div>\n }\n </div>\n }\n\n </div>\n\n <!-- Wizard footer -->\n <div class=\"wizard-footer\">\n <div class=\"footer-left\"></div>\n <div class=\"footer-right\">\n @if (WizardStep > 1) {\n <button kendoButton look=\"outline\" (click)=\"PreviousStep()\">\n Back\n </button>\n }\n <button kendoButton\n themeColor=\"primary\"\n [disabled]=\"IsNextDisabled || IsSaving\"\n (click)=\"FinishWizard()\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n {{ NextButtonLabel }}\n }\n </button>\n </div>\n </div>\n </div>\n }\n\n</div>\n\n<!-- Edit panel (slide-in) -->\n<div class=\"edit-panel-backdrop\"\n [class.open]=\"EditPanelOpen\"\n (click)=\"CloseEditPanel()\"></div>\n<div class=\"edit-panel\" [class.open]=\"EditPanelOpen\">\n @if (EditingSummary) {\n <!-- Header -->\n <div class=\"edit-panel-header\">\n <div class=\"edit-panel-title\">\n <div class=\"edit-icon-circle\"\n [style.background-color]=\"GetIconBrandColor(EditingSummary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(EditingSummary.Integration.Integration)\"></i>\n </div>\n <span>Configure Integration</span>\n </div>\n <button class=\"edit-close-btn\" (click)=\"CloseEditPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n @if (IsEditLoading) {\n <div class=\"edit-panel-loading\">\n <mj-loading text=\"Loading...\" size=\"small\"></mj-loading>\n </div>\n } @else {\n <!-- Edit form -->\n <div class=\"edit-panel-body\">\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Connection Name</label>\n <input type=\"text\"\n class=\"edit-form-input\"\n [(ngModel)]=\"EditName\"\n placeholder=\"Connection name...\" />\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Status</label>\n <div class=\"edit-toggle-row\">\n <label class=\"toggle-switch\">\n <input type=\"checkbox\" [(ngModel)]=\"EditIsActive\" />\n <span class=\"toggle-slider\"></span>\n </label>\n <span class=\"edit-toggle-label\" [class.active]=\"EditIsActive\">\n {{ EditIsActive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Credential</label>\n @if (EditCredential) {\n <div class=\"edit-credential-selected\">\n <div class=\"edit-credential-info\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ EditCredential.Name }}</span>\n </div>\n <button class=\"edit-credential-clear\" (click)=\"ClearEditCredential()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n } @else {\n <div class=\"edit-credential-actions\">\n <button kendoButton look=\"outline\" size=\"small\" (click)=\"OpenEditCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i> New Credential\n </button>\n </div>\n @if (EditCredentials.length > 0) {\n <div class=\"edit-credential-list\">\n @for (cred of EditCredentials; track cred.ID) {\n <div class=\"edit-credential-item\" (click)=\"SelectEditCredential(cred)\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ cred.Name }}</span>\n </div>\n }\n </div>\n }\n }\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Integration</label>\n <div class=\"edit-readonly-field\">\n {{ EditingSummary.Integration.Integration }}\n </div>\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Company</label>\n <div class=\"edit-readonly-field\">\n {{ EditingSummary.Integration.Company }}\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"edit-panel-footer\">\n <button kendoButton\n themeColor=\"primary\"\n [disabled]=\"IsEditSaving || !EditName.trim()\"\n (click)=\"SaveEditChanges()\">\n @if (IsEditSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n Save Changes\n }\n </button>\n <button kendoButton look=\"outline\" (click)=\"CloseEditPanel()\">\n Cancel\n </button>\n </div>\n }\n }\n</div>\n\n<!-- Credential dialog (shared between wizard and edit panel) -->\n@if (ShowCredentialDialog) {\n <mj-credential-dialog\n [Visible]=\"true\"\n [PreselectedTypeId]=\"PreselectedCredentialTypeId\"\n (close)=\"EditPanelOpen ? OnEditCredentialDialogClose($event) : OnCredentialDialogClose($event)\">\n </mj-credential-dialog>\n}\n\n<!-- New Entity dialog -->\n@if (ShowCreateEntity) {\n <div class=\"new-entity-backdrop\" (click)=\"CloseNewEntityDialog()\"></div>\n <div class=\"new-entity-dialog\">\n <div class=\"new-entity-dialog-header\">\n <h3>Create New Entity Table</h3>\n <button class=\"new-entity-dialog-close\" (click)=\"CloseNewEntityDialog()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"new-entity-dialog-body\">\n <p class=\"new-entity-dialog-desc\">\n Generate a SQL migration to create a new database table for this integration's data.\n After running the migration and CodeGen, the new entity will appear in the entity picker.\n </p>\n\n <div class=\"new-entity-dialog-form\">\n <div class=\"new-entity-dialog-row\">\n <div class=\"new-entity-dialog-field\">\n <label class=\"new-entity-dialog-label\">Source Object</label>\n <div class=\"new-entity-dialog-value\">\n @if (AddMapSourceObjectName) {\n {{ AddMapSourceObjectName }}\n } @else {\n <span class=\"new-entity-dialog-hint\">Select a source object in the Add Map form first</span>\n }\n </div>\n </div>\n </div>\n <div class=\"new-entity-dialog-row\">\n <div class=\"new-entity-dialog-field\">\n <label class=\"new-entity-dialog-label\">Schema</label>\n <input type=\"text\"\n class=\"new-entity-dialog-input\"\n placeholder=\"e.g. hubspot\"\n [(ngModel)]=\"NewEntitySchema\" />\n </div>\n <span class=\"new-entity-dialog-dot\">.</span>\n <div class=\"new-entity-dialog-field new-entity-dialog-field-wide\">\n <label class=\"new-entity-dialog-label\">Table Name</label>\n <input type=\"text\"\n class=\"new-entity-dialog-input\"\n placeholder=\"e.g. Contact\"\n [(ngModel)]=\"NewEntityTable\" />\n </div>\n </div>\n </div>\n\n @if (DDLPreviewWarnings.length > 0) {\n <div class=\"ddl-warnings\">\n @for (warn of DDLPreviewWarnings; track warn) {\n <div class=\"ddl-warning\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ warn }}</div>\n }\n </div>\n }\n\n @if (DDLPreview) {\n <div class=\"ddl-preview-block\">\n <div class=\"ddl-preview-header\">\n <span>SQL Preview</span>\n <button class=\"ddl-copy-btn\" (click)=\"CopyDDLToClipboard()\" title=\"Copy to clipboard\">\n @if (DDLCopied) {\n <i class=\"fa-solid fa-check\"></i> Copied\n } @else {\n <i class=\"fa-regular fa-copy\"></i> Copy\n }\n </button>\n </div>\n <pre class=\"ddl-preview-code\">{{ DDLPreview }}</pre>\n </div>\n }\n\n @if (DDLPreview) {\n <div class=\"new-entity-next-steps\">\n <h4><i class=\"fa-solid fa-list-check\"></i> Next Steps</h4>\n <ol>\n <li>Copy the SQL above and save it as a migration file</li>\n <li>Run the migration against your database</li>\n <li>Run CodeGen to register the new entity in MemberJunction</li>\n <li>Refresh the page &mdash; the new entity will appear in the entity picker</li>\n </ol>\n </div>\n }\n </div>\n <div class=\"new-entity-dialog-footer\">\n <button class=\"new-entity-preview-btn\"\n [disabled]=\"!CanGenerateSQL || IsGeneratingDDL\"\n (click)=\"PreviewDDL()\">\n @if (IsGeneratingDDL) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Generating...\n } @else {\n <i class=\"fa-solid fa-code\"></i> Generate SQL\n }\n </button>\n <button class=\"new-entity-dialog-done-btn\" (click)=\"CloseNewEntityDialog()\">\n Done\n </button>\n </div>\n </div>\n}\n"]}
1
+ {"version":3,"file":"connections.component.js","sourceRoot":"","sources":["../../../../src/Integration/components/connections/connections.component.ts","../../../../src/Integration/components/connections/connections.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, OnInit, OnDestroy, inject, ViewChild } from '@angular/core';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { CompositeKey, Metadata, RunView } from '@memberjunction/core';\nimport { IntegrationEngineBase } from '@memberjunction/integration-engine-base';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData, MJCompanyIntegrationEntity, MJCredentialEntity, MJIntegrationEntity } from '@memberjunction/core-entities';\nimport { CredentialDialogResult } from '@memberjunction/ng-credentials';\nimport { TreeBranchConfig, TreeLeafConfig, TreeNode, TreeDropdownComponent } from '@memberjunction/ng-trees';\nimport { SchemaPreviewObjectInput, SchemaPreviewResult } from '@memberjunction/graphql-dataprovider';\nimport {\n IntegrationDataService,\n ResolveIntegrationIcon,\n IntegrationSummary,\n EntityMapRow\n} from '../../services/integration-data.service';\n\n/** Brand color mapping for known integration names */\nconst BRAND_COLOR_MAP: Array<{ Pattern: RegExp; Color: string }> = [\n { Pattern: /hubspot/i, Color: '#ff7a59' },\n { Pattern: /salesforce/i, Color: '#00a1e0' },\n { Pattern: /stripe/i, Color: '#635bff' },\n { Pattern: /slack/i, Color: '#4a154b' },\n { Pattern: /google/i, Color: '#4285f4' },\n { Pattern: /microsoft|azure|dynamics/i, Color: '#00a4ef' },\n { Pattern: /github/i, Color: '#24292f' },\n { Pattern: /jira|atlassian/i, Color: '#0052cc' },\n { Pattern: /mailchimp/i, Color: '#ffe01b' },\n { Pattern: /shopify/i, Color: '#96bf48' },\n { Pattern: /wordpress/i, Color: '#21759b' },\n { Pattern: /dropbox/i, Color: '#0061ff' },\n { Pattern: /aws|amazon/i, Color: '#ff9900' },\n { Pattern: /yourmembership|ym/i, Color: '#1a73e8' },\n { Pattern: /quickbooks|intuit/i, Color: '#2ca01c' },\n { Pattern: /zendesk/i, Color: '#03363d' },\n { Pattern: /database|sql|mysql|postgres/i, Color: '#336791' },\n { Pattern: /api|rest|graphql/i, Color: '#e535ab' },\n { Pattern: /file|csv|excel/i, Color: '#217346' },\n { Pattern: /ftp|sftp/i, Color: '#555' }\n];\n\ntype StatusBadgeType = 'Connected' | 'Error' | 'Inactive' | 'Syncing';\ntype WizardStepType = 1 | 2 | 3;\ntype CardMenuAction = 'edit' | 'disable' | 'delete';\n\ninterface WizardStep {\n Number: number;\n Label: string;\n}\n\ninterface CompanyRow {\n ID: string;\n Name: string;\n}\n\nconst WIZARD_STEPS: WizardStep[] = [\n { Number: 1, Label: 'Choose Integration' },\n { Number: 2, Label: 'Configure' },\n { Number: 3, Label: 'Test' }\n];\n\n@RegisterClass(BaseResourceComponent, 'IntegrationConnections')\n@Component({\n standalone: false,\n selector: 'app-integration-connections',\n templateUrl: './connections.component.html',\n styleUrls: ['./connections.component.css']\n})\nexport class ConnectionsComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n\n // --- Main view state ---\n Connections: IntegrationSummary[] = [];\n EntityMapCounts = new Map<string, number>();\n IsLoading = true;\n\n // --- Card test state ---\n TestingCardID: string | null = null;\n TestCardResults = new Map<string, { Success: boolean; Message: string }>();\n\n // --- Wizard state ---\n WizardOpen = false;\n WizardStep: WizardStepType = 1;\n WizardSteps = WIZARD_STEPS;\n AvailableIntegrations: MJIntegrationEntity[] = [];\n SearchQuery = '';\n\n // Step 1\n SelectedIntegration: MJIntegrationEntity | null = null;\n\n // Step 2\n ConnectionName = '';\n SelectedCompanyID: string | null = null;\n ConnectionDescription = '';\n Companies: CompanyRow[] = [];\n SelectedCredentialID: string | null = null;\n ShowCredentialDialog = false;\n PreselectedCredentialTypeId: string | undefined;\n ExistingCredentials: MJCredentialEntity[] = [];\n IsLoadingCredentials = false;\n SelectedCredential: MJCredentialEntity | null = null;\n\n // Step 3\n TestResult: { Success: boolean; Message: string; ServerVersion?: string } | null = null;\n IsTesting = false;\n\n // Save state\n IsSaving = false;\n SavedIntegrationID: string | null = null;\n\n // Card menu\n OpenMenuID: string | null = null;\n\n // Edit panel state\n EditPanelOpen = false;\n EditingSummary: IntegrationSummary | null = null;\n EditEntity: MJCompanyIntegrationEntity | null = null;\n EditName = '';\n EditDescription = '';\n EditCredentialID: string | null = null;\n EditCredential: MJCredentialEntity | null = null;\n EditCredentials: MJCredentialEntity[] = [];\n EditIsActive = false;\n IsEditSaving = false;\n IsEditLoading = false;\n\n // Detail view state (replaces card grid when an integration is selected)\n SelectedSummary: IntegrationSummary | null = null;\n DetailEntityMaps: EntityMapRow[] = [];\n DetailFilteredMaps: EntityMapRow[] = [];\n DetailSearchTerm = '';\n IsDetailLoading = false;\n\n // Schedule state (for the selected integration)\n ScheduledJobID: string | null = null;\n ShowScheduleSlidePanel = false;\n\n // Entity map editor state (field mapping detail view)\n EditorEntityMap: EntityMapRow | null = null;\n\n // Add entity map state\n ShowAddMapPanel = false;\n AvailableSourceObjects: Array<{ Name: string; Label: string }> = [];\n IsLoadingSourceObjects = false;\n AddMapSourceObjectName = '';\n AddMapEntityID = '';\n AddMapDirection: 'Pull' | 'Push' | 'Bidirectional' = 'Pull';\n IsSavingAddMap = false;\n\n // Tree dropdown config for MJ Entity picker (schema → entities)\n @ViewChild('entityTreeDropdown') entityTreeDropdown: TreeDropdownComponent | undefined;\n\n EntityBranchConfig: TreeBranchConfig = {\n EntityName: 'MJ: Schema Info',\n DisplayField: 'SchemaName',\n IDField: 'SchemaName',\n ParentIDField: '', // flat list of schemas, no nesting\n DefaultIcon: 'fa-solid fa-database',\n OrderBy: 'SchemaName ASC'\n };\n\n EntityLeafConfig: TreeLeafConfig = {\n EntityName: 'MJ: Entities',\n DisplayField: 'Name',\n IDField: 'ID',\n ParentField: 'SchemaName',\n DefaultIcon: 'fa-solid fa-table',\n OrderBy: 'Name ASC'\n };\n\n // Create New Entity state\n ShowCreateEntity = false;\n NewEntitySchema = '';\n NewEntityTable = '';\n DDLPreview: string | null = null;\n DDLPreviewWarnings: string[] = [];\n IsGeneratingDDL = false;\n IsCreatingEntity = false;\n\n // Auto-map schema state\n ShowAutoMapPanel = false;\n AutoMapSchemas: string[] = [];\n AutoMapSelectedSchema = '';\n AutoMapDirection: 'Pull' | 'Push' | 'Bidirectional' = 'Pull';\n IsAutoMapping = false;\n AutoMapResult: { EntityMapsCreated: number; FieldMapsCreated: number; Errors: string[] } | null = null;\n\n // Sync state\n SyncingIntegrationID: string | null = null;\n SyncResult: { Success: boolean; Message: string } | null = null;\n\n // Delete confirmation state\n DeleteConfirmID: string | null = null;\n IsDeleting = false;\n\n private dataService = inject(IntegrationDataService);\n private cdr = inject(ChangeDetectorRef);\n private documentClickHandler: ((e: Event) => void) | null = null;\n\n async ngOnInit(): Promise<void> {\n this.documentClickHandler = (e: Event) => this.onDocumentClick(e);\n document.addEventListener('click', this.documentClickHandler);\n await this.LoadData();\n }\n\n ngOnDestroy(): void {\n if (this.documentClickHandler) {\n document.removeEventListener('click', this.documentClickHandler);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Resource overrides\n // ---------------------------------------------------------------------------\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Integrations';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-plug';\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, entityMaps] = await Promise.all([\n this.dataService.LoadIntegrationSummaries(provider),\n this.loadAllEntityMaps()\n ]);\n this.Connections = summaries;\n this.EntityMapCounts = this.countMapsByIntegration(entityMaps);\n } catch (err) {\n console.error('[IntegrationConnections] Failed to load data:', err);\n } finally {\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Card helpers\n // ---------------------------------------------------------------------------\n\n GetStatusBadge(summary: IntegrationSummary): StatusBadgeType {\n if (summary.LatestRun?.Status === 'In Progress') return 'Syncing';\n if (summary.StatusColor === 'green') return 'Connected';\n if (summary.StatusColor === 'red') return 'Error';\n return 'Inactive';\n }\n\n GetStatusBadgeClass(summary: IntegrationSummary): string {\n const badge = this.GetStatusBadge(summary);\n return `status-badge status-badge-${badge.toLowerCase()}`;\n }\n\n GetIntegrationIcon(name: string, icon?: string | null): string {\n return ResolveIntegrationIcon(name, icon);\n }\n\n GetIconBrandColor(name: string): string {\n return this.resolveBrandColor(name);\n }\n\n GetEntityMapCount(integrationID: string): number {\n for (const [key, value] of this.EntityMapCounts) {\n if (UUIDsEqual(key, integrationID)) return value;\n }\n return 0;\n }\n\n GetCredentialHint(summary: IntegrationSummary): string {\n const driverClass = summary.Integration.DriverClassName;\n if (driverClass?.toLowerCase().includes('oauth')) return 'OAuth2 Connected';\n return 'API Key configured';\n }\n\n GetSourceTypeLabel(summary: IntegrationSummary): string {\n return summary.SourceType?.Name ?? 'API';\n }\n\n IsConnectionActive(summary: IntegrationSummary): boolean {\n return summary.Integration.IsActive === true;\n }\n\n // ---------------------------------------------------------------------------\n // Card menu\n // ---------------------------------------------------------------------------\n\n ToggleMenu(integrationID: string, event: Event): void {\n event.stopPropagation();\n this.OpenMenuID = this.OpenMenuID === integrationID ? null : integrationID;\n this.cdr.detectChanges();\n }\n\n IsMenuOpen(integrationID: string): boolean {\n return this.OpenMenuID === integrationID;\n }\n\n OnMenuAction(action: CardMenuAction, summary: IntegrationSummary): void {\n this.OpenMenuID = null;\n switch (action) {\n case 'edit':\n this.OpenEditPanel(summary);\n break;\n case 'disable':\n this.toggleConnectionActive(summary);\n break;\n case 'delete':\n this.ShowDeleteConfirm(summary.Integration.ID);\n break;\n }\n }\n\n GetMenuActionLabel(summary: IntegrationSummary): string {\n return this.IsConnectionActive(summary) ? 'Disable' : 'Enable';\n }\n\n // ---------------------------------------------------------------------------\n // Edit panel\n // ---------------------------------------------------------------------------\n\n async OpenEditPanel(summary: IntegrationSummary): Promise<void> {\n this.EditingSummary = summary;\n this.EditName = summary.Integration.Name;\n this.EditDescription = '';\n this.EditIsActive = summary.Integration.IsActive === true;\n this.EditCredentialID = null;\n this.EditCredential = null;\n this.EditCredentials = [];\n this.EditEntity = null;\n this.EditPanelOpen = true;\n this.IsEditLoading = true;\n this.cdr.detectChanges();\n\n try {\n const md = new Metadata();\n const ci = await md.GetEntityObject<MJCompanyIntegrationEntity>('MJ: Company Integrations');\n await ci.Load(summary.Integration.ID);\n this.EditEntity = ci;\n this.EditName = ci.Name;\n this.EditIsActive = ci.IsActive === true;\n if (ci.CredentialID) {\n this.EditCredentialID = ci.CredentialID;\n }\n await this.loadEditCredentials();\n } catch (err) {\n console.error('[IntegrationConnections] Failed to load connection for editing:', err);\n } finally {\n this.IsEditLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n CloseEditPanel(): void {\n this.EditPanelOpen = false;\n setTimeout(() => {\n if (!this.EditPanelOpen) {\n this.EditingSummary = null;\n this.EditEntity = null;\n this.cdr.detectChanges();\n }\n }, 350);\n this.cdr.detectChanges();\n }\n\n async SaveEditChanges(): Promise<void> {\n if (!this.EditEntity) return;\n this.IsEditSaving = true;\n this.cdr.detectChanges();\n\n try {\n this.EditEntity.Name = this.EditName;\n this.EditEntity.IsActive = this.EditIsActive;\n if (this.EditCredentialID) {\n this.EditEntity.CredentialID = this.EditCredentialID;\n }\n const saved = await this.EditEntity.Save();\n if (saved) {\n this.CloseEditPanel();\n await this.LoadData();\n } else {\n console.error('[IntegrationConnections] Save failed:',\n this.EditEntity.LatestResult?.CompleteMessage ?? this.EditEntity.LatestResult?.Message);\n }\n } catch (err) {\n console.error('[IntegrationConnections] Save error:', err);\n } finally {\n this.IsEditSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n SelectEditCredential(credential: MJCredentialEntity): void {\n this.EditCredential = credential;\n this.EditCredentialID = credential.ID;\n }\n\n ClearEditCredential(): void {\n this.EditCredential = null;\n this.EditCredentialID = null;\n }\n\n OpenEditCredentialDialog(): void {\n this.PreselectedCredentialTypeId = undefined;\n this.ShowCredentialDialog = true;\n this.cdr.detectChanges();\n }\n\n OnEditCredentialDialogClose(result: CredentialDialogResult): void {\n this.ShowCredentialDialog = false;\n if (result.success && result.credential) {\n this.EditCredential = result.credential;\n this.EditCredentialID = result.credential.ID;\n }\n this.cdr.detectChanges();\n }\n\n // ---------------------------------------------------------------------------\n // Delete confirmation\n // ---------------------------------------------------------------------------\n\n ShowDeleteConfirm(integrationID: string): void {\n this.DeleteConfirmID = integrationID;\n this.cdr.detectChanges();\n }\n\n CancelDelete(): void {\n this.DeleteConfirmID = null;\n this.cdr.detectChanges();\n }\n\n async ConfirmDelete(integrationID: string): Promise<void> {\n this.IsDeleting = true;\n this.cdr.detectChanges();\n\n try {\n const md = new Metadata();\n const ci = await md.GetEntityObject<MJCompanyIntegrationEntity>('MJ: Company Integrations');\n await ci.Load(integrationID);\n const deleted = await ci.Delete();\n if (deleted) {\n this.DeleteConfirmID = null;\n await this.LoadData();\n } else {\n console.error('[IntegrationConnections] Delete failed:',\n ci.LatestResult?.CompleteMessage ?? ci.LatestResult?.Message);\n }\n } catch (err) {\n console.error('[IntegrationConnections] Delete error:', err);\n } finally {\n this.IsDeleting = false;\n this.cdr.detectChanges();\n }\n }\n\n IsDeleteConfirming(integrationID: string): boolean {\n return UUIDsEqual(this.DeleteConfirmID, integrationID);\n }\n\n // ---------------------------------------------------------------------------\n // Card test\n // ---------------------------------------------------------------------------\n\n async TestExistingConnection(integrationID: string): Promise<void> {\n if (this.TestingCardID) return;\n this.TestingCardID = integrationID;\n this.TestCardResults.delete(integrationID);\n this.cdr.detectChanges();\n\n try {\n const result = await this.dataService.TestConnection(integrationID);\n this.TestCardResults.set(integrationID, {\n Success: result.Success,\n Message: result.Message\n });\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n this.TestCardResults.set(integrationID, {\n Success: false,\n Message: `Test failed: ${message}`\n });\n } finally {\n this.TestingCardID = null;\n this.cdr.detectChanges();\n }\n }\n\n IsTestingCard(integrationID: string): boolean {\n return UUIDsEqual(this.TestingCardID, integrationID);\n }\n\n GetCardTestResult(integrationID: string): { Success: boolean; Message: string } | null {\n for (const [key, value] of this.TestCardResults) {\n if (UUIDsEqual(key, integrationID)) return value;\n }\n return null;\n }\n\n // ---------------------------------------------------------------------------\n // Sync action\n // ---------------------------------------------------------------------------\n\n IsSyncing(integrationID: string): boolean {\n return UUIDsEqual(this.SyncingIntegrationID, integrationID);\n }\n\n async RunSync(integrationID: string): Promise<void> {\n if (this.SyncingIntegrationID) return;\n this.SyncingIntegrationID = integrationID;\n this.SyncResult = null;\n this.cdr.detectChanges();\n\n try {\n const result = await this.dataService.RunSync(integrationID);\n this.SyncResult = result;\n if (!result.Success) {\n console.error('[IntegrationConnections] Sync failed:', result.Message);\n }\n await this.LoadData();\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n this.SyncResult = { Success: false, Message: `Sync error: ${message}` };\n console.error('[IntegrationConnections] RunSync error:', err);\n } finally {\n this.SyncingIntegrationID = null;\n this.cdr.detectChanges();\n // Auto-clear result after 8 seconds\n setTimeout(() => {\n this.SyncResult = null;\n this.cdr.detectChanges();\n }, 8000);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Detail view (entity maps for a selected integration)\n // ---------------------------------------------------------------------------\n\n async SelectIntegrationCard(summary: IntegrationSummary): Promise<void> {\n this.SelectedSummary = summary;\n this.DetailSearchTerm = '';\n this.ScheduledJobID = null;\n this.IsDetailLoading = true;\n this.cdr.detectChanges();\n\n try {\n const [maps] = await Promise.all([\n this.loadEntityMapsForIntegration(summary.Integration.ID),\n this.loadScheduledJobForIntegration(summary.Integration.ID)\n ]);\n this.DetailEntityMaps = maps;\n this.DetailFilteredMaps = maps;\n } catch (err) {\n console.error('[IntegrationConnections] Failed to load entity maps:', err);\n } finally {\n this.IsDetailLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n CloseDetailView(): void {\n this.SelectedSummary = null;\n this.DetailEntityMaps = [];\n this.DetailFilteredMaps = [];\n this.DetailSearchTerm = '';\n this.ScheduledJobID = null;\n this.ShowScheduleSlidePanel = false;\n this.cdr.detectChanges();\n }\n\n // ---------------------------------------------------------------------------\n // Schedule management\n // ---------------------------------------------------------------------------\n\n OpenSchedulePanel(): void {\n this.ShowScheduleSlidePanel = true;\n this.cdr.detectChanges();\n }\n\n CloseSchedulePanel(): void {\n this.ShowScheduleSlidePanel = false;\n this.cdr.detectChanges();\n }\n\n async OnScheduleSaved(): Promise<void> {\n this.ShowScheduleSlidePanel = false;\n if (this.SelectedSummary) {\n await this.loadScheduledJobForIntegration(this.SelectedSummary.Integration.ID);\n }\n this.cdr.detectChanges();\n }\n\n async OnScheduleDeleted(): Promise<void> {\n this.ShowScheduleSlidePanel = false;\n this.ScheduledJobID = null;\n this.cdr.detectChanges();\n }\n\n get ScheduleDefaultConfiguration(): string {\n if (!this.SelectedSummary) return '{}';\n return JSON.stringify({\n CompanyIntegrationID: this.SelectedSummary.Integration.ID\n }, null, 2);\n }\n\n get IntegrationSyncJobTypeID(): string | null {\n return this.integrationSyncJobTypeID;\n }\n\n private integrationSyncJobTypeID: string | null = null;\n\n private async loadScheduledJobForIntegration(companyIntegrationID: string): Promise<void> {\n try {\n const md = new Metadata();\n const ci = await md.GetEntityObject<MJCompanyIntegrationEntity>('MJ: Company Integrations');\n await ci.Load(companyIntegrationID);\n const scheduledJobID = ci.Get('ScheduledJobID') as string | null;\n this.ScheduledJobID = scheduledJobID ?? null;\n\n // Also look up the Integration Sync job type ID for pre-populating new schedules\n if (!this.integrationSyncJobTypeID) {\n const rv = new RunView();\n const typeResult = await rv.RunView<{ ID: string }>({\n EntityName: 'MJ: Scheduled Job Types',\n ExtraFilter: `Name='Integration Sync'`,\n Fields: ['ID'],\n ResultType: 'simple'\n });\n if (typeResult.Success && typeResult.Results.length > 0) {\n this.integrationSyncJobTypeID = typeResult.Results[0].ID;\n }\n }\n } catch (err) {\n console.warn('[IntegrationConnections] Failed to load schedule info:', err);\n }\n }\n\n OnDetailSearch(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.DetailSearchTerm = input.value;\n this.DetailFilteredMaps = this.applyDetailFilter();\n this.cdr.detectChanges();\n }\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 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 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 async OnToggleMapEnabled(em: EntityMapRow, event: Event): Promise<void> {\n const checkbox = event.target as HTMLInputElement;\n const newValue = checkbox.checked;\n em.SyncEnabled = newValue;\n this.cdr.detectChanges();\n try {\n await this.dataService.ToggleEntityMapEnabled(em.ID, newValue);\n } catch (err) {\n em.SyncEnabled = !newValue;\n checkbox.checked = !newValue;\n console.error('[IntegrationConnections] Failed to toggle SyncEnabled:', err);\n this.cdr.detectChanges();\n }\n }\n\n get DetailActiveMapCount(): number {\n return this.DetailEntityMaps.filter(m => m.SyncEnabled).length;\n }\n\n private applyDetailFilter(): EntityMapRow[] {\n if (!this.DetailSearchTerm.trim()) return this.DetailEntityMaps;\n const term = this.DetailSearchTerm.toLowerCase();\n return this.DetailEntityMaps.filter(m =>\n (m.ExternalObjectLabel ?? m.ExternalObjectName).toLowerCase().includes(term) ||\n m.Entity.toLowerCase().includes(term)\n );\n }\n\n // ---------------------------------------------------------------------------\n // Entity map editor (field mapping detail)\n // ---------------------------------------------------------------------------\n\n OnEntityMapClick(em: EntityMapRow): void {\n this.EditorEntityMap = em;\n this.cdr.detectChanges();\n }\n\n CloseEntityMapEditor(): void {\n this.EditorEntityMap = null;\n this.cdr.detectChanges();\n }\n\n // ---------------------------------------------------------------------------\n // Add entity map\n // ---------------------------------------------------------------------------\n\n async ToggleAddMapPanel(): Promise<void> {\n this.ShowAddMapPanel = !this.ShowAddMapPanel;\n if (this.ShowAddMapPanel) {\n this.resetAddMapState();\n await this.loadAddMapData();\n }\n this.cdr.detectChanges();\n }\n\n CloseAddMapPanel(): void {\n this.ShowAddMapPanel = false;\n this.cdr.detectChanges();\n }\n\n get CanSaveAddMap(): boolean {\n return !!this.AddMapSourceObjectName && !!this.AddMapEntityID;\n }\n\n get AddMapEntityIDAsKey(): CompositeKey | null {\n return this.AddMapEntityID ? CompositeKey.FromID(this.AddMapEntityID) : null;\n }\n\n OnEntityTreeSelection(node: TreeNode | TreeNode[] | null): void {\n if (!node || Array.isArray(node)) return;\n if (node.Type === 'leaf') {\n this.AddMapEntityID = node.ID;\n }\n }\n\n // ---------------------------------------------------------------------------\n // New Entity dialog (generates SQL migration for a new table)\n // ---------------------------------------------------------------------------\n\n OpenNewEntityDialog(): void {\n this.ShowCreateEntity = true;\n this.NewEntitySchema = '';\n this.NewEntityTable = '';\n this.DDLPreview = null;\n this.DDLPreviewWarnings = [];\n this.DDLCopied = false;\n this.cdr.detectChanges();\n }\n\n CloseNewEntityDialog(): void {\n this.ShowCreateEntity = false;\n this.DDLPreview = null;\n this.DDLPreviewWarnings = [];\n this.DDLCopied = false;\n this.cdr.detectChanges();\n }\n\n DDLCopied = false;\n\n async CopyDDLToClipboard(): Promise<void> {\n if (!this.DDLPreview) return;\n try {\n await navigator.clipboard.writeText(this.DDLPreview);\n this.DDLCopied = true;\n this.cdr.detectChanges();\n setTimeout(() => {\n this.DDLCopied = false;\n this.cdr.detectChanges();\n }, 2000);\n } catch {\n // Fallback: select text in the pre block\n console.warn('[IntegrationConnections] Clipboard API not available');\n }\n }\n\n get CanGenerateSQL(): boolean {\n return !!this.NewEntitySchema.trim()\n && !!this.NewEntityTable.trim()\n && !!this.AddMapSourceObjectName;\n }\n\n get NewEntityName(): string {\n if (!this.NewEntityTable.trim()) return '';\n return this.NewEntityTable.trim()\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/_/g, ' ');\n }\n\n async PreviewDDL(): Promise<void> {\n if (!this.CanGenerateSQL || !this.SelectedSummary) return;\n this.IsGeneratingDDL = true;\n this.DDLPreview = null;\n this.DDLPreviewWarnings = [];\n this.cdr.detectChanges();\n\n try {\n const objects: SchemaPreviewObjectInput[] = [{\n SourceObjectName: this.AddMapSourceObjectName,\n SchemaName: this.NewEntitySchema.trim(),\n TableName: this.NewEntityTable.trim(),\n EntityName: this.NewEntityName\n }];\n\n const result: SchemaPreviewResult = await this.dataService.SchemaPreview(\n this.SelectedSummary.Integration.ID,\n objects\n );\n\n if (result.Success) {\n this.DDLPreview = result.Files.map(f => f.Content).join('\\n\\n');\n this.DDLPreviewWarnings = result.Warnings ?? [];\n } else {\n this.DDLPreview = `-- Error: ${result.Message}`;\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n this.DDLPreview = `-- Failed to generate DDL: ${msg}`;\n } finally {\n this.IsGeneratingDDL = false;\n this.cdr.detectChanges();\n }\n }\n\n async SaveAddMap(): Promise<void> {\n if (!this.CanSaveAddMap || !this.SelectedSummary) return;\n this.IsSavingAddMap = true;\n this.cdr.detectChanges();\n\n try {\n const sourceObj = this.AvailableSourceObjects.find(o => o.Name === this.AddMapSourceObjectName);\n const result = await this.dataService.CreateEntityMap({\n CompanyIntegrationID: this.SelectedSummary.Integration.ID,\n ExternalObjectName: this.AddMapSourceObjectName,\n ExternalObjectLabel: sourceObj?.Label !== sourceObj?.Name ? sourceObj?.Label : undefined,\n EntityID: this.AddMapEntityID,\n SyncDirection: this.AddMapDirection\n });\n\n if (result) {\n this.ShowAddMapPanel = false;\n const maps = await this.loadEntityMapsForIntegration(this.SelectedSummary.Integration.ID);\n this.DetailEntityMaps = maps;\n this.DetailFilteredMaps = this.applyDetailFilter();\n // Update entity map count\n this.EntityMapCounts = this.countMapsByIntegration(await this.loadAllEntityMaps());\n }\n } catch (err) {\n console.error('[IntegrationConnections] Failed to create entity map:', err);\n } finally {\n this.IsSavingAddMap = false;\n this.cdr.detectChanges();\n }\n }\n\n private resetAddMapState(): void {\n this.AddMapSourceObjectName = '';\n this.AddMapEntityID = '';\n this.AddMapDirection = 'Pull';\n this.AvailableSourceObjects = [];\n this.ShowCreateEntity = false;\n this.NewEntitySchema = '';\n this.NewEntityTable = '';\n this.DDLPreview = null;\n this.DDLPreviewWarnings = [];\n }\n\n private async loadAddMapData(): Promise<void> {\n if (!this.SelectedSummary) return;\n\n this.IsLoadingSourceObjects = true;\n this.cdr.detectChanges();\n\n try {\n // Load source objects from IntegrationEngineBase metadata\n const engine = IntegrationEngineBase.Instance;\n const integration = engine.GetIntegrationForCompanyIntegration(this.SelectedSummary.Integration.ID);\n if (integration) {\n const objects = engine.GetActiveIntegrationObjects(integration.ID);\n // Filter out objects that already have entity maps\n const existingNames = new Set(this.DetailEntityMaps.map(m => m.ExternalObjectName));\n this.AvailableSourceObjects = objects\n .filter(o => !existingNames.has(o.Name))\n .map(o => ({\n Name: o.Name,\n Label: o.DisplayName || o.Name\n }));\n }\n } catch (err) {\n console.error('[IntegrationConnections] Failed to load source objects:', err);\n } finally {\n this.IsLoadingSourceObjects = false;\n this.cdr.detectChanges();\n }\n }\n\n private async loadEntityMapsForIntegration(companyIntegrationID: string): Promise<EntityMapRow[]> {\n const rv = new RunView(this.RunViewToUse ?? null);\n const result = await rv.RunView<EntityMapRow>({\n EntityName: 'MJ: Company Integration Entity Maps',\n ExtraFilter: `CompanyIntegrationID='${companyIntegrationID}'`,\n OrderBy: '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 // ---------------------------------------------------------------------------\n // Wizard: open/close\n // ---------------------------------------------------------------------------\n\n async OpenWizard(): Promise<void> {\n this.resetWizardState();\n this.WizardOpen = true;\n this.cdr.detectChanges();\n await this.loadWizardData();\n }\n\n CloseWizard(): void {\n this.WizardOpen = false;\n if (this.SavedIntegrationID) {\n this.LoadData();\n }\n this.cdr.detectChanges();\n }\n\n OnKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n this.CloseWizard();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Wizard: navigation\n // ---------------------------------------------------------------------------\n\n NextStep(): void {\n if (this.WizardStep < 3) {\n this.WizardStep = (this.WizardStep + 1) as WizardStepType;\n if (this.WizardStep === 3) {\n this.TestResult = null;\n }\n this.cdr.detectChanges();\n }\n }\n\n PreviousStep(): void {\n if (this.WizardStep > 1) {\n this.WizardStep = (this.WizardStep - 1) as WizardStepType;\n this.cdr.detectChanges();\n }\n }\n\n get IsNextDisabled(): boolean {\n if (this.WizardStep === 1) return !this.SelectedIntegration;\n if (this.WizardStep === 2) return !this.ConnectionName.trim() || !this.SelectedCompanyID;\n if (this.WizardStep === 3) return !this.TestResult?.Success;\n return false;\n }\n\n get NextButtonLabel(): string {\n if (this.WizardStep === 3) return 'Finish';\n return 'Next';\n }\n\n IsStepCompleted(stepNumber: number): boolean {\n return stepNumber < this.WizardStep;\n }\n\n IsStepActive(stepNumber: number): boolean {\n return stepNumber === this.WizardStep;\n }\n\n // ---------------------------------------------------------------------------\n // Wizard Step 1: Choose integration\n // ---------------------------------------------------------------------------\n\n SelectIntegration(def: MJIntegrationEntity): void {\n this.SelectedIntegration = def;\n this.ConnectionName = def.Name;\n }\n\n IsSelectedIntegration(def: MJIntegrationEntity): boolean {\n return UUIDsEqual(this.SelectedIntegration?.ID, def.ID);\n }\n\n get FilteredIntegrations(): MJIntegrationEntity[] {\n if (!this.SearchQuery.trim()) return this.AvailableIntegrations;\n const query = this.SearchQuery.toLowerCase();\n return this.AvailableIntegrations.filter(i =>\n i.Name.toLowerCase().includes(query) ||\n (i.Description?.toLowerCase().includes(query) ?? false)\n );\n }\n\n // ---------------------------------------------------------------------------\n // Wizard Step 2: Configure\n // ---------------------------------------------------------------------------\n\n get NeedsCompanyPicker(): boolean {\n return this.Companies.length > 1;\n }\n\n get IntegrationCredentialTypeID(): string | null {\n return this.SelectedIntegration?.CredentialTypeID ?? null;\n }\n\n async ShowExistingCredentials(): Promise<void> {\n this.IsLoadingCredentials = true;\n this.cdr.detectChanges();\n\n const rv = new RunView();\n const filter = this.IntegrationCredentialTypeID\n ? `CredentialTypeID='${this.IntegrationCredentialTypeID}' AND IsActive=1`\n : 'IsActive=1';\n const result = await rv.RunView<MJCredentialEntity>({\n EntityName: 'MJ: Credentials',\n ExtraFilter: filter,\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n this.ExistingCredentials = result.Results;\n this.IsLoadingCredentials = false;\n this.cdr.detectChanges();\n }\n\n SelectExistingCredential(credential: MJCredentialEntity): void {\n this.SelectedCredential = credential;\n this.SelectedCredentialID = credential.ID;\n }\n\n OpenCredentialDialog(): void {\n this.PreselectedCredentialTypeId = this.IntegrationCredentialTypeID ?? undefined;\n this.ShowCredentialDialog = true;\n this.cdr.detectChanges();\n }\n\n OnCredentialDialogClose(result: CredentialDialogResult): void {\n this.ShowCredentialDialog = false;\n if (result.success && result.credential) {\n this.SelectedCredential = result.credential;\n this.SelectedCredentialID = result.credential.ID;\n }\n this.cdr.detectChanges();\n }\n\n ClearCredential(): void {\n this.SelectedCredential = null;\n this.SelectedCredentialID = null;\n }\n\n // ---------------------------------------------------------------------------\n // Wizard Step 3: Test connection\n // ---------------------------------------------------------------------------\n\n async TestNewConnection(): Promise<void> {\n this.IsTesting = true;\n this.TestResult = null;\n this.cdr.detectChanges();\n\n try {\n const companyIntegrationID = await this.saveCompanyIntegration();\n if (!companyIntegrationID) {\n this.TestResult = {\n Success: false,\n Message: 'Could not save integration to test. Check your configuration.'\n };\n this.IsTesting = false;\n this.cdr.detectChanges();\n return;\n }\n\n const result = await this.dataService.TestConnection(companyIntegrationID);\n this.TestResult = {\n Success: result.Success,\n Message: result.Message,\n ServerVersion: result.ServerVersion ?? undefined\n };\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n this.TestResult = {\n Success: false,\n Message: `Connection test failed: ${message}`\n };\n } finally {\n this.IsTesting = false;\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Wizard: finish\n // ---------------------------------------------------------------------------\n\n async FinishWizard(): Promise<void> {\n if (this.WizardStep < 3) {\n this.NextStep();\n return;\n }\n\n // On step 3 with a successful test — activate the integration and close\n if (!this.SavedIntegrationID) return;\n this.IsSaving = true;\n this.cdr.detectChanges();\n\n try {\n const md = new Metadata();\n const ci = await md.GetEntityObject<MJCompanyIntegrationEntity>('MJ: Company Integrations');\n await ci.Load(this.SavedIntegrationID);\n ci.IsActive = true;\n ci.Name = this.ConnectionName;\n await ci.Save();\n } catch (err) {\n console.error('[IntegrationConnections] Failed to activate integration:', err);\n } finally {\n this.IsSaving = false;\n this.WizardOpen = false;\n await this.LoadData();\n\n // Auto-select the newly created integration to show its detail view\n if (this.SavedIntegrationID) {\n const newSummary = this.Connections.find(c =>\n UUIDsEqual(c.Integration.ID, this.SavedIntegrationID!)\n );\n if (newSummary) {\n await this.SelectIntegrationCard(newSummary);\n }\n }\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Auto-Map Schema\n // ---------------------------------------------------------------------------\n\n ToggleAutoMapPanel(): void {\n this.ShowAutoMapPanel = !this.ShowAutoMapPanel;\n if (this.ShowAutoMapPanel) {\n this.AutoMapSchemas = this.dataService.LoadSchemas();\n this.AutoMapSelectedSchema = '';\n this.AutoMapDirection = 'Pull';\n this.AutoMapResult = null;\n }\n this.cdr.detectChanges();\n }\n\n CloseAutoMapPanel(): void {\n this.ShowAutoMapPanel = false;\n this.AutoMapResult = null;\n this.cdr.detectChanges();\n }\n\n get CanAutoMap(): boolean {\n return !!this.AutoMapSelectedSchema && !this.IsAutoMapping;\n }\n\n async RunAutoMap(): Promise<void> {\n if (!this.CanAutoMap || !this.SelectedSummary) return;\n this.IsAutoMapping = true;\n this.AutoMapResult = null;\n this.cdr.detectChanges();\n\n try {\n this.AutoMapResult = await this.dataService.AutoMapSchema(\n this.SelectedSummary.Integration.ID,\n this.AutoMapSelectedSchema,\n this.AutoMapDirection\n );\n\n // Reload entity maps to reflect new maps\n if (this.AutoMapResult.EntityMapsCreated > 0) {\n const maps = await this.loadEntityMapsForIntegration(this.SelectedSummary.Integration.ID);\n this.DetailEntityMaps = maps;\n this.DetailFilteredMaps = this.applyDetailFilter();\n this.EntityMapCounts = this.countMapsByIntegration(await this.loadAllEntityMaps());\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n this.AutoMapResult = { EntityMapsCreated: 0, FieldMapsCreated: 0, Errors: [message] };\n } finally {\n this.IsAutoMapping = false;\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Private helpers\n // ---------------------------------------------------------------------------\n\n private async loadWizardData(): Promise<void> {\n try {\n const provider = this.RunViewToUse;\n const rv = new RunView(provider ?? null);\n const [integrations, companyResult] = await Promise.all([\n this.dataService.LoadIntegrationDefinitions(provider),\n rv.RunView<CompanyRow>({\n EntityName: 'MJ: Companies',\n Fields: ['ID', 'Name'],\n OrderBy: 'Name',\n ResultType: 'simple'\n })\n ]);\n this.AvailableIntegrations = integrations;\n this.Companies = companyResult.Success ? companyResult.Results : [];\n if (this.Companies.length === 1) {\n this.SelectedCompanyID = this.Companies[0].ID;\n }\n } catch (err) {\n console.error('[IntegrationConnections] Failed to load wizard data:', err);\n }\n this.cdr.detectChanges();\n }\n\n private async saveCompanyIntegration(): Promise<string | null> {\n if (!this.SelectedCompanyID || !this.SelectedIntegration) return null;\n\n const md = new Metadata();\n const ci = await md.GetEntityObject<MJCompanyIntegrationEntity>('MJ: Company Integrations');\n\n if (this.SavedIntegrationID) {\n // Record already exists — reload it so we can update fields that may have changed\n // (e.g. credential selected after initial save)\n const loaded = await ci.Load(this.SavedIntegrationID);\n if (!loaded) return this.SavedIntegrationID; // fallback to existing ID\n }\n else {\n ci.NewRecord();\n ci.CompanyID = this.SelectedCompanyID;\n ci.IntegrationID = this.SelectedIntegration.ID;\n ci.IsActive = false;\n }\n\n ci.Name = this.ConnectionName || this.SelectedIntegration.Name;\n ci.CredentialID = this.SelectedCredential?.ID ?? null;\n\n const saved = await ci.Save();\n if (saved) {\n this.SavedIntegrationID = ci.ID;\n return ci.ID;\n }\n console.error('[IntegrationConnections] Failed to save company integration:',\n ci.LatestResult?.CompleteMessage ?? ci.LatestResult?.Message);\n return null;\n }\n\n private async loadAllEntityMaps(): Promise<EntityMapRow[]> {\n const rv = new RunView(this.RunViewToUse ?? null);\n const result = await rv.RunView<EntityMapRow>({\n EntityName: 'MJ: Company Integration Entity Maps',\n ExtraFilter: '',\n OrderBy: 'CompanyIntegrationID',\n Fields: ['ID', 'CompanyIntegrationID'],\n ResultType: 'simple'\n });\n return result.Results;\n }\n\n private countMapsByIntegration(maps: EntityMapRow[]): Map<string, number> {\n const counts = new Map<string, number>();\n for (const map of maps) {\n const current = counts.get(map.CompanyIntegrationID) ?? 0;\n counts.set(map.CompanyIntegrationID, current + 1);\n }\n return counts;\n }\n\n private resolveBrandColor(name: string): string {\n const match = BRAND_COLOR_MAP.find(m => m.Pattern.test(name));\n return match ? match.Color : '#6366f1';\n }\n\n private async toggleConnectionActive(summary: IntegrationSummary): Promise<void> {\n const md = new Metadata();\n const ci = await md.GetEntityObject<MJCompanyIntegrationEntity>('MJ: Company Integrations');\n await ci.Load(summary.Integration.ID);\n ci.IsActive = !summary.Integration.IsActive;\n const saved = await ci.Save();\n if (saved) {\n await this.LoadData();\n }\n }\n\n private async loadEditCredentials(): Promise<void> {\n const rv = new RunView();\n const result = await rv.RunView<MJCredentialEntity>({\n EntityName: 'MJ: Credentials',\n ExtraFilter: 'IsActive=1',\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n this.EditCredentials = result.Results;\n\n // Pre-select the current credential if one is set\n if (this.EditCredentialID) {\n this.EditCredential = this.EditCredentials.find(c =>\n UUIDsEqual(c.ID, this.EditCredentialID!)\n ) ?? null;\n }\n }\n\n private resetWizardState(): void {\n this.WizardStep = 1;\n this.AvailableIntegrations = [];\n this.SearchQuery = '';\n this.SelectedIntegration = null;\n this.ConnectionName = '';\n this.SelectedCompanyID = null;\n this.ConnectionDescription = '';\n this.SelectedCredentialID = null;\n this.SelectedCredential = null;\n this.ShowCredentialDialog = false;\n this.ExistingCredentials = [];\n this.Companies = [];\n this.TestResult = null;\n this.IsTesting = false;\n this.IsSaving = false;\n this.SavedIntegrationID = null;\n this.OpenMenuID = null;\n }\n\n private onDocumentClick(e: Event): void {\n if (this.OpenMenuID) {\n const target = e.target as HTMLElement;\n if (!target.closest('.card-menu-wrapper')) {\n this.OpenMenuID = null;\n this.cdr.detectChanges();\n }\n }\n }\n}\n\nexport function LoadConnectionsComponent(): void {\n // Tree-shaking prevention: importing this module causes\n // @RegisterClass decorators to fire, registering components.\n}\n","<!-- Main container -->\n<div class=\"connections-container\" [class.detail-active]=\"!!SelectedSummary\"\n [class.editor-active]=\"!!EditorEntityMap\">\n\n <!-- ======================================================================\n CARD GRID VIEW (shown when no wizard and no detail selected)\n ====================================================================== -->\n @if (!WizardOpen && !SelectedSummary) {\n <!-- Header -->\n <div class=\"connections-header\">\n <div class=\"header-left\">\n <h2 class=\"header-title\">Integrations</h2>\n <span class=\"header-count\">{{ Connections.length }} integration{{ Connections.length !== 1 ? 's' : '' }}</span>\n </div>\n <button kendoButton (click)=\"OpenWizard()\" class=\"add-connection-btn\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Integration\n </button>\n </div>\n\n <!-- Loading state -->\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading integrations...\"></mj-loading>\n </div>\n }\n\n <!-- Empty state -->\n @if (!IsLoading && Connections.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-plug empty-icon\"></i>\n <h3>No integrations yet</h3>\n <p>Connect your first external system to start syncing data.</p>\n <button kendoButton (click)=\"OpenWizard()\" themeColor=\"primary\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Your First Integration\n </button>\n </div>\n }\n\n <!-- Card grid -->\n @if (!IsLoading && Connections.length > 0) {\n <div class=\"card-grid\">\n @for (summary of Connections; track summary.Integration.ID) {\n <div class=\"connection-card\">\n <!-- Card header + body: clickable to open detail view -->\n <div class=\"card-clickable\" (click)=\"SelectIntegrationCard(summary)\">\n <div class=\"card-header\">\n <div class=\"icon-circle\" [style.background-color]=\"GetIconBrandColor(summary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(summary.Integration.Integration, summary.Icon)\" class=\"icon-large\"></i>\n </div>\n <span [class]=\"GetStatusBadgeClass(summary)\">{{ GetStatusBadge(summary) }}</span>\n </div>\n\n <!-- Card body -->\n <div class=\"card-body\">\n <div class=\"card-name\">{{ summary.Integration.Name }}</div>\n <div class=\"card-company\">{{ summary.Integration.Company }}</div>\n <div class=\"card-meta\">\n <span class=\"meta-label\">{{ GetSourceTypeLabel(summary) }}</span>\n <span class=\"meta-separator\">&middot;</span>\n <span class=\"meta-value\">{{ GetCredentialHint(summary) }}</span>\n </div>\n <div class=\"card-sync-info\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n Syncing {{ GetEntityMapCount(summary.Integration.ID) }} entities\n </div>\n\n <!-- Inline test result -->\n @if (GetCardTestResult(summary.Integration.ID); as testResult) {\n <div class=\"card-test-result\" [class.test-success]=\"testResult.Success\" [class.test-failure]=\"!testResult.Success\">\n @if (testResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ testResult.Message }}</span>\n </div>\n }\n </div>\n </div><!-- /card-clickable -->\n\n <!-- Delete confirmation overlay -->\n @if (IsDeleteConfirming(summary.Integration.ID)) {\n <div class=\"delete-confirm-overlay\">\n <div class=\"delete-confirm-content\">\n <i class=\"fa-solid fa-triangle-exclamation delete-warn-icon\"></i>\n <span class=\"delete-confirm-text\">Delete this integration and all its entity maps?</span>\n <div class=\"delete-confirm-actions\">\n <button kendoButton\n themeColor=\"error\"\n [disabled]=\"IsDeleting\"\n (click)=\"ConfirmDelete(summary.Integration.ID)\">\n @if (IsDeleting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Deleting...\n } @else {\n Delete\n }\n </button>\n <button kendoButton look=\"outline\" (click)=\"CancelDelete()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Card footer -->\n <div class=\"card-footer\">\n <button kendoButton\n look=\"outline\"\n [disabled]=\"!!TestingCardID\"\n (click)=\"TestExistingConnection(summary.Integration.ID)\">\n @if (IsTestingCard(summary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n Test\n }\n </button>\n <button kendoButton look=\"outline\" (click)=\"OnMenuAction('edit', summary)\">\n Configure\n </button>\n @if (IsConnectionActive(summary)) {\n <button kendoButton themeColor=\"primary\"\n [disabled]=\"!!SyncingIntegrationID\"\n (click)=\"RunSync(summary.Integration.ID)\">\n @if (IsSyncing(summary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Syncing...\n } @else {\n Sync Now\n }\n </button>\n }\n <button class=\"card-delete-btn\" (click)=\"OnMenuAction('delete', summary)\" title=\"Delete integration\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n </div>\n }\n\n <!-- New connection card -->\n <div class=\"connection-card new-connection-card\" (click)=\"OpenWizard()\">\n <div class=\"new-card-content\">\n <div class=\"new-card-icon\">\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n <span class=\"new-card-label\">Add Integration</span>\n </div>\n </div>\n </div>\n }\n }\n\n <!-- ======================================================================\n DETAIL VIEW (entity maps for selected integration)\n ====================================================================== -->\n @if (!WizardOpen && SelectedSummary) {\n <div class=\"detail-view\">\n\n <!-- ================================================================\n ENTITY MAP EDITOR (field mapping detail for a selected map)\n ================================================================ -->\n @if (EditorEntityMap) {\n <app-visual-field-editor\n [EntityMap]=\"EditorEntityMap\"\n [CompanyIntegrationID]=\"SelectedSummary!.Integration.ID\"\n [RunViewProvider]=\"RunViewToUse\"\n (Close)=\"CloseEntityMapEditor()\">\n </app-visual-field-editor>\n\n <!-- ================================================================\n ENTITY MAPS LIST (shown when no editor map is selected)\n ================================================================ -->\n } @else {\n <!-- Detail header -->\n <div class=\"detail-header\">\n <button class=\"detail-back-btn\" (click)=\"CloseDetailView()\" title=\"Back to Integrations\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n <div class=\"detail-header-info\">\n <div class=\"icon-circle\" [style.background-color]=\"GetIconBrandColor(SelectedSummary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(SelectedSummary.Integration.Integration)\" class=\"icon-large\"></i>\n </div>\n <div class=\"detail-header-text\">\n <h2 class=\"detail-title\">{{ SelectedSummary.Integration.Name }}</h2>\n <span class=\"detail-subtitle\">\n {{ SelectedSummary.Integration.Company }}\n <span class=\"meta-separator\">&middot;</span>\n {{ GetSourceTypeLabel(SelectedSummary) }}\n <span class=\"meta-separator\">&middot;</span>\n <span [class]=\"GetStatusBadgeClass(SelectedSummary)\">{{ GetStatusBadge(SelectedSummary) }}</span>\n </span>\n </div>\n </div>\n <div class=\"detail-header-actions\">\n <button class=\"detail-edit-btn\" (click)=\"OpenEditPanel(SelectedSummary)\" title=\"Configure\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n </button>\n @if (IsConnectionActive(SelectedSummary)) {\n <button kendoButton themeColor=\"primary\"\n [disabled]=\"!!SyncingIntegrationID\"\n (click)=\"RunSync(SelectedSummary.Integration.ID)\">\n @if (IsSyncing(SelectedSummary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Syncing...\n } @else {\n <i class=\"fa-solid fa-arrows-rotate\"></i> Sync Now\n }\n </button>\n }\n </div>\n </div>\n\n <!-- Schedule section -->\n <div class=\"schedule-section\">\n <div class=\"schedule-section-header\">\n <div class=\"schedule-section-title\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n <span>Sync Schedule</span>\n </div>\n </div>\n @if (ScheduledJobID) {\n <mj-scheduled-job-summary\n [ScheduledJobID]=\"ScheduledJobID\"\n (EditRequested)=\"OpenSchedulePanel()\">\n </mj-scheduled-job-summary>\n } @else {\n <div class=\"schedule-empty\">\n <span class=\"schedule-empty-text\">No sync schedule configured</span>\n <button class=\"schedule-create-btn\" (click)=\"OpenSchedulePanel()\">\n <i class=\"fa-solid fa-plus\"></i>\n Schedule Sync\n </button>\n </div>\n }\n </div>\n\n <!-- Schedule slide panel -->\n <mj-scheduled-job-slide-panel\n [IsOpen]=\"ShowScheduleSlidePanel\"\n [ScheduledJobID]=\"ScheduledJobID\"\n [JobTypeID]=\"IntegrationSyncJobTypeID\"\n [DefaultConfiguration]=\"ScheduleDefaultConfiguration\"\n [HideJobType]=\"true\"\n (Close)=\"CloseSchedulePanel()\"\n (Saved)=\"OnScheduleSaved()\"\n (Deleted)=\"OnScheduleDeleted()\">\n </mj-scheduled-job-slide-panel>\n\n <!-- Entity maps toolbar -->\n <div class=\"detail-toolbar\">\n <div class=\"detail-toolbar-left\">\n <span class=\"detail-map-count\">\n {{ DetailEntityMaps.length }} entity map{{ DetailEntityMaps.length !== 1 ? 's' : '' }}\n <span class=\"meta-separator\">&middot;</span>\n {{ DetailActiveMapCount }} active\n </span>\n </div>\n <div class=\"detail-toolbar-right\">\n <div class=\"detail-search\">\n <i class=\"fa-solid fa-filter\"></i>\n <input type=\"text\"\n placeholder=\"Filter entity maps...\"\n [value]=\"DetailSearchTerm\"\n (input)=\"OnDetailSearch($event)\" />\n </div>\n <button class=\"add-map-btn\" (click)=\"ToggleAutoMapPanel()\" [class.active]=\"ShowAutoMapPanel\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map Schema\n </button>\n <button class=\"add-map-btn\" (click)=\"ToggleAddMapPanel()\" [class.active]=\"ShowAddMapPanel\">\n <i class=\"fa-solid fa-plus\"></i> Add Map\n </button>\n </div>\n </div>\n\n <!-- Sync result banner -->\n @if (SyncResult) {\n <div class=\"sync-result-banner\" [class.sync-success]=\"SyncResult.Success\" [class.sync-failure]=\"!SyncResult.Success\">\n @if (SyncResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ SyncResult.Message || (SyncResult.Success ? 'Sync completed successfully' : 'Sync failed') }}</span>\n </div>\n }\n\n <!-- Auto-Map Schema panel -->\n @if (ShowAutoMapPanel) {\n <div class=\"add-map-panel\">\n <div class=\"auto-map-header\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n <span>Auto-map all entities in a schema to this integration with 1:1 field mappings</span>\n </div>\n <div class=\"add-map-row\">\n <div class=\"add-map-field\">\n <label class=\"add-map-label\">Target Schema</label>\n <select class=\"add-map-select\" [(ngModel)]=\"AutoMapSelectedSchema\">\n <option [ngValue]=\"''\" disabled>Select schema...</option>\n @for (schema of AutoMapSchemas; track schema) {\n <option [value]=\"schema\">{{ schema }}</option>\n }\n </select>\n </div>\n\n <div class=\"add-map-direction-col\">\n <label class=\"add-map-label\">Direction</label>\n <div class=\"add-map-direction-btns\">\n <button [class.active]=\"AutoMapDirection === 'Pull'\" (click)=\"AutoMapDirection = 'Pull'\" title=\"Pull from source\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n <button [class.active]=\"AutoMapDirection === 'Bidirectional'\" (click)=\"AutoMapDirection = 'Bidirectional'\" title=\"Bidirectional sync\">\n <i class=\"fa-solid fa-right-left\"></i>\n </button>\n <button [class.active]=\"AutoMapDirection === 'Push'\" (click)=\"AutoMapDirection = 'Push'\" title=\"Push to source\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanAutoMap\"\n (click)=\"RunAutoMap()\">\n @if (IsAutoMapping) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Mapping...\n } @else {\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseAutoMapPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n\n @if (AutoMapResult) {\n <div class=\"auto-map-result\" [class.auto-map-success]=\"AutoMapResult.Errors.length === 0\"\n [class.auto-map-partial]=\"AutoMapResult.Errors.length > 0 && AutoMapResult.EntityMapsCreated > 0\"\n [class.auto-map-failure]=\"AutoMapResult.EntityMapsCreated === 0 && AutoMapResult.Errors.length > 0\">\n @if (AutoMapResult.EntityMapsCreated > 0) {\n <div class=\"auto-map-result-summary\">\n <i class=\"fa-solid fa-circle-check\"></i>\n Created {{ AutoMapResult.EntityMapsCreated }} entity map{{ AutoMapResult.EntityMapsCreated !== 1 ? 's' : '' }}\n with {{ AutoMapResult.FieldMapsCreated }} field map{{ AutoMapResult.FieldMapsCreated !== 1 ? 's' : '' }}\n </div>\n } @else if (AutoMapResult.Errors.length === 0) {\n <div class=\"auto-map-result-summary\">\n <i class=\"fa-solid fa-circle-info\"></i>\n All entities in this schema are already mapped.\n </div>\n }\n @if (AutoMapResult.Errors.length > 0) {\n <div class=\"auto-map-errors\">\n @for (err of AutoMapResult.Errors; track err) {\n <div class=\"auto-map-error\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ err }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Add Entity Map inline form -->\n @if (ShowAddMapPanel) {\n <div class=\"add-map-panel\">\n <div class=\"add-map-row\">\n <div class=\"add-map-field\">\n <label class=\"add-map-label\">Source Object</label>\n @if (IsLoadingSourceObjects) {\n <div class=\"add-map-loading\"><i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...</div>\n } @else if (AvailableSourceObjects.length === 0) {\n <div class=\"add-map-hint\">No source objects found in metadata</div>\n } @else {\n <select class=\"add-map-select\" [(ngModel)]=\"AddMapSourceObjectName\">\n <option [ngValue]=\"''\" disabled>Select source object...</option>\n @for (obj of AvailableSourceObjects; track obj.Name) {\n <option [value]=\"obj.Name\">{{ obj.Label || obj.Name }}</option>\n }\n </select>\n }\n </div>\n\n <div class=\"add-map-direction-col\">\n <label class=\"add-map-label\">Direction</label>\n <div class=\"add-map-direction-btns\">\n <button [class.active]=\"AddMapDirection === 'Pull'\" (click)=\"AddMapDirection = 'Pull'\" title=\"Pull from source\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n <button [class.active]=\"AddMapDirection === 'Bidirectional'\" (click)=\"AddMapDirection = 'Bidirectional'\" title=\"Bidirectional sync\">\n <i class=\"fa-solid fa-right-left\"></i>\n </button>\n <button [class.active]=\"AddMapDirection === 'Push'\" (click)=\"AddMapDirection = 'Push'\" title=\"Push to source\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"add-map-field add-map-entity-field\">\n <label class=\"add-map-label\">MJ Entity</label>\n <div class=\"entity-picker-row\">\n <mj-tree-dropdown\n #entityTreeDropdown\n [BranchConfig]=\"EntityBranchConfig\"\n [LeafConfig]=\"EntityLeafConfig\"\n [Value]=\"AddMapEntityIDAsKey\"\n [SelectableTypes]=\"'leaf'\"\n [SelectionMode]=\"'single'\"\n [Placeholder]=\"'Search entities by schema...'\"\n [EnableSearch]=\"true\"\n (SelectionChange)=\"OnEntityTreeSelection($event)\">\n </mj-tree-dropdown>\n <button class=\"new-entity-btn\" (click)=\"OpenNewEntityDialog()\" title=\"Create new entity table\">\n <i class=\"fa-solid fa-plus\"></i> New\n </button>\n </div>\n </div>\n\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanSaveAddMap || IsSavingAddMap\"\n (click)=\"SaveAddMap()\">\n @if (IsSavingAddMap) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-check\"></i> Add\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseAddMapPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Entity maps table -->\n @if (IsDetailLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading entity maps...\"></mj-loading>\n </div>\n } @else if (DetailEntityMaps.length === 0 && !ShowAddMapPanel) {\n <div class=\"detail-empty\">\n <i class=\"fa-solid fa-cube\"></i>\n <h3>No entity maps configured</h3>\n <p>Entity maps define how external objects sync to MJ entities.</p>\n <button class=\"add-map-btn add-map-btn-lg\" (click)=\"ToggleAddMapPanel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Your First Entity Map\n </button>\n </div>\n } @else if (DetailEntityMaps.length > 0) {\n <!-- Table header -->\n <div class=\"detail-table-head\">\n <span class=\"dt-col-toggle\">Sync</span>\n <span class=\"dt-col-source\">External Object</span>\n <span class=\"dt-col-direction\"></span>\n <span class=\"dt-col-dest\">MJ Entity</span>\n <span class=\"dt-col-meta\">Config</span>\n </div>\n\n <!-- Table body -->\n <div class=\"detail-table-body\">\n @for (em of DetailFilteredMaps; track em.ID) {\n <div class=\"detail-map-row\" [class.sync-disabled]=\"!em.SyncEnabled\" (click)=\"OnEntityMapClick(em)\">\n <span class=\"dt-col-toggle\" (click)=\"$event.stopPropagation()\">\n <label class=\"toggle-switch\" [title]=\"em.SyncEnabled ? 'Sync enabled' : 'Sync disabled'\">\n <input type=\"checkbox\"\n [checked]=\"em.SyncEnabled\"\n (change)=\"OnToggleMapEnabled(em, $event)\" />\n <span class=\"toggle-slider\"></span>\n </label>\n </span>\n <span class=\"dt-col-source\" [title]=\"em.ExternalObjectName\">\n {{ em.ExternalObjectLabel ?? em.ExternalObjectName }}\n </span>\n <span class=\"dt-col-direction\">\n <span [class]=\"DirectionBadgeClass(em.SyncDirection)\">\n {{ DirectionText(em.SyncDirection) }}\n </span>\n </span>\n <span class=\"dt-col-dest\" [title]=\"em.Entity\">\n {{ em.Entity }}\n </span>\n <span class=\"dt-col-meta\">\n @if (em.MatchStrategy) {\n <span class=\"detail-config-badge\" title=\"Match strategy configured\">\n <i class=\"fa-solid fa-link\"></i>\n </span>\n }\n <span class=\"detail-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=\"detail-table-empty\">\n No entity maps match your filter.\n </div>\n }\n </div>\n }\n }\n\n </div>\n }\n\n <!-- ======================================================================\n WIZARD (inline, replaces card grid when open)\n ====================================================================== -->\n @if (WizardOpen) {\n <div class=\"wizard-inline\">\n <!-- Wizard header -->\n <div class=\"wizard-header\">\n <button class=\"wizard-back-btn\" (click)=\"CloseWizard()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back to Integrations\n </button>\n <h2 class=\"wizard-title\">New Integration</h2>\n </div>\n\n <!-- Step indicator -->\n <div class=\"step-indicator\">\n @for (step of WizardSteps; track step.Number) {\n <div class=\"step-item\" [class.step-active]=\"IsStepActive(step.Number)\" [class.step-completed]=\"IsStepCompleted(step.Number)\">\n <div class=\"step-circle\">\n @if (IsStepCompleted(step.Number)) {\n <i class=\"fa-solid fa-check\"></i>\n } @else {\n {{ step.Number }}\n }\n </div>\n <span class=\"step-label\">{{ step.Label }}</span>\n </div>\n @if (step.Number < WizardSteps.length) {\n <div class=\"step-line\" [class.step-line-active]=\"IsStepCompleted(step.Number)\"></div>\n }\n }\n </div>\n\n <!-- Step content -->\n <div class=\"wizard-body\">\n\n <!-- Step 1: Choose Integration -->\n @if (WizardStep === 1) {\n <div class=\"step-content\">\n <h3 class=\"step-title\">What system do you want to connect?</h3>\n <div class=\"search-bar\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search integrations...\"\n [(ngModel)]=\"SearchQuery\" />\n </div>\n\n @if (FilteredIntegrations.length === 0 && AvailableIntegrations.length === 0) {\n <div class=\"no-integrations\">\n <i class=\"fa-solid fa-puzzle-piece\"></i>\n <p>No integrations configured</p>\n <span class=\"no-integrations-hint\">Configure integration definitions in the admin area first.</span>\n </div>\n } @else if (FilteredIntegrations.length === 0) {\n <div class=\"no-integrations\">\n <i class=\"fa-solid fa-search\"></i>\n <p>No matching integrations</p>\n </div>\n } @else {\n <div class=\"integration-picker-grid\">\n @for (def of FilteredIntegrations; track def.ID) {\n <div class=\"integration-picker-card\"\n [class.picker-selected]=\"IsSelectedIntegration(def)\"\n (click)=\"SelectIntegration(def)\">\n <div class=\"picker-icon-circle\" [style.background-color]=\"GetIconBrandColor(def.Name)\">\n <i [class]=\"GetIntegrationIcon(def.Name, def.Get('Icon'))\"></i>\n </div>\n <div class=\"picker-name\">{{ def.Name }}</div>\n @if (def.Description) {\n <div class=\"picker-description\">{{ def.Description }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Step 2: Configure Connection -->\n @if (WizardStep === 2) {\n <div class=\"step-content\">\n <h3 class=\"step-title\">Set up your connection</h3>\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"connectionName\">Connection Name</label>\n <input id=\"connectionName\"\n type=\"text\"\n class=\"form-input\"\n placeholder=\"e.g. Production HubSpot\"\n [(ngModel)]=\"ConnectionName\" />\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"companySelect\">Company</label>\n @if (NeedsCompanyPicker) {\n <select id=\"companySelect\" class=\"form-input\" [(ngModel)]=\"SelectedCompanyID\">\n <option [ngValue]=\"null\" disabled>Select a company...</option>\n @for (company of Companies; track company.ID) {\n <option [value]=\"company.ID\">{{ company.Name }}</option>\n }\n </select>\n } @else if (Companies.length === 1) {\n <input type=\"text\" class=\"form-input\" [value]=\"Companies[0].Name\" disabled />\n } @else {\n <div class=\"form-hint\">No companies available. Create one in the admin area.</div>\n }\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"connectionDescription\">Description <span class=\"optional-label\">(optional)</span></label>\n <textarea id=\"connectionDescription\"\n class=\"form-input form-textarea\"\n placeholder=\"Notes about this connection...\"\n [(ngModel)]=\"ConnectionDescription\"\n rows=\"3\"></textarea>\n </div>\n\n <!-- Credential section -->\n <div class=\"form-group\">\n <label class=\"form-label\">Credential</label>\n @if (SelectedCredential) {\n <div class=\"credential-selected\">\n <div class=\"credential-info\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ SelectedCredential.Name }}</span>\n </div>\n <button class=\"credential-clear\" (click)=\"ClearCredential()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n } @else {\n <div class=\"credential-actions\">\n <button kendoButton look=\"outline\" (click)=\"ShowExistingCredentials()\">\n <i class=\"fa-solid fa-key\"></i>\n Choose Existing Credential\n </button>\n <button kendoButton look=\"outline\" (click)=\"OpenCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create New Credential\n </button>\n </div>\n }\n\n @if (IsLoadingCredentials) {\n <div class=\"credential-loading\">\n <mj-loading text=\"Loading credentials...\" size=\"small\"></mj-loading>\n </div>\n }\n\n @if (!IsLoadingCredentials && ExistingCredentials.length > 0 && !SelectedCredential) {\n <div class=\"credential-list\">\n @for (cred of ExistingCredentials; track cred.ID) {\n <div class=\"credential-list-item\" (click)=\"SelectExistingCredential(cred)\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ cred.Name }}</span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Step 3: Test Connection -->\n @if (WizardStep === 3) {\n <div class=\"step-content step-content-centered\">\n <h3 class=\"step-title\">Let's verify everything works</h3>\n\n @if (!TestResult && !IsTesting) {\n <div class=\"test-prompt\">\n <button kendoButton\n themeColor=\"primary\"\n size=\"large\"\n (click)=\"TestNewConnection()\">\n <i class=\"fa-solid fa-vial\"></i>\n Test Connection\n </button>\n <p class=\"test-hint\">We'll verify we can reach your system and authenticate.</p>\n </div>\n }\n\n @if (IsTesting) {\n <div class=\"test-running\">\n <div class=\"test-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-3x\"></i>\n </div>\n <p>Testing connection...</p>\n </div>\n }\n\n @if (TestResult) {\n <div class=\"test-result\" [class.test-result-success]=\"TestResult.Success\" [class.test-result-failure]=\"!TestResult.Success\">\n <div class=\"test-result-icon\">\n @if (TestResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n </div>\n <div class=\"test-result-message\">{{ TestResult.Message }}</div>\n @if (TestResult.Success && TestResult.ServerVersion) {\n <div class=\"test-result-detail\">\n Server version: {{ TestResult.ServerVersion }}\n </div>\n }\n @if (!TestResult.Success) {\n <button kendoButton look=\"outline\" (click)=\"TestNewConnection()\" class=\"test-retry-btn\">\n <i class=\"fa-solid fa-rotate-right\"></i>\n Retry\n </button>\n }\n </div>\n }\n </div>\n }\n\n </div>\n\n <!-- Wizard footer -->\n <div class=\"wizard-footer\">\n <div class=\"footer-left\"></div>\n <div class=\"footer-right\">\n @if (WizardStep > 1) {\n <button kendoButton look=\"outline\" (click)=\"PreviousStep()\">\n Back\n </button>\n }\n <button kendoButton\n themeColor=\"primary\"\n [disabled]=\"IsNextDisabled || IsSaving\"\n (click)=\"FinishWizard()\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n {{ NextButtonLabel }}\n }\n </button>\n </div>\n </div>\n </div>\n }\n\n</div>\n\n<!-- Edit panel (slide-in) -->\n<div class=\"edit-panel-backdrop\"\n [class.open]=\"EditPanelOpen\"\n (click)=\"CloseEditPanel()\"></div>\n<div class=\"edit-panel\" [class.open]=\"EditPanelOpen\">\n @if (EditingSummary) {\n <!-- Header -->\n <div class=\"edit-panel-header\">\n <div class=\"edit-panel-title\">\n <div class=\"edit-icon-circle\"\n [style.background-color]=\"GetIconBrandColor(EditingSummary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(EditingSummary.Integration.Integration, EditingSummary.Icon)\"></i>\n </div>\n <span>Configure Integration</span>\n </div>\n <button class=\"edit-close-btn\" (click)=\"CloseEditPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n @if (IsEditLoading) {\n <div class=\"edit-panel-loading\">\n <mj-loading text=\"Loading...\" size=\"small\"></mj-loading>\n </div>\n } @else {\n <!-- Edit form -->\n <div class=\"edit-panel-body\">\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Connection Name</label>\n <input type=\"text\"\n class=\"edit-form-input\"\n [(ngModel)]=\"EditName\"\n placeholder=\"Connection name...\" />\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Status</label>\n <div class=\"edit-toggle-row\">\n <label class=\"toggle-switch\">\n <input type=\"checkbox\" [(ngModel)]=\"EditIsActive\" />\n <span class=\"toggle-slider\"></span>\n </label>\n <span class=\"edit-toggle-label\" [class.active]=\"EditIsActive\">\n {{ EditIsActive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Credential</label>\n @if (EditCredential) {\n <div class=\"edit-credential-selected\">\n <div class=\"edit-credential-info\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ EditCredential.Name }}</span>\n </div>\n <button class=\"edit-credential-clear\" (click)=\"ClearEditCredential()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n } @else {\n <div class=\"edit-credential-actions\">\n <button kendoButton look=\"outline\" size=\"small\" (click)=\"OpenEditCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i> New Credential\n </button>\n </div>\n @if (EditCredentials.length > 0) {\n <div class=\"edit-credential-list\">\n @for (cred of EditCredentials; track cred.ID) {\n <div class=\"edit-credential-item\" (click)=\"SelectEditCredential(cred)\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ cred.Name }}</span>\n </div>\n }\n </div>\n }\n }\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Integration</label>\n <div class=\"edit-readonly-field\">\n {{ EditingSummary.Integration.Integration }}\n </div>\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Company</label>\n <div class=\"edit-readonly-field\">\n {{ EditingSummary.Integration.Company }}\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"edit-panel-footer\">\n <button kendoButton\n themeColor=\"primary\"\n [disabled]=\"IsEditSaving || !EditName.trim()\"\n (click)=\"SaveEditChanges()\">\n @if (IsEditSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n Save Changes\n }\n </button>\n <button kendoButton look=\"outline\" (click)=\"CloseEditPanel()\">\n Cancel\n </button>\n </div>\n }\n }\n</div>\n\n<!-- Credential dialog (shared between wizard and edit panel) -->\n@if (ShowCredentialDialog) {\n <mj-credential-dialog\n [Visible]=\"true\"\n [PreselectedTypeId]=\"PreselectedCredentialTypeId\"\n (close)=\"EditPanelOpen ? OnEditCredentialDialogClose($event) : OnCredentialDialogClose($event)\">\n </mj-credential-dialog>\n}\n\n<!-- New Entity dialog -->\n@if (ShowCreateEntity) {\n <div class=\"new-entity-backdrop\" (click)=\"CloseNewEntityDialog()\"></div>\n <div class=\"new-entity-dialog\">\n <div class=\"new-entity-dialog-header\">\n <h3>Create New Entity Table</h3>\n <button class=\"new-entity-dialog-close\" (click)=\"CloseNewEntityDialog()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"new-entity-dialog-body\">\n <p class=\"new-entity-dialog-desc\">\n Generate a SQL migration to create a new database table for this integration's data.\n After running the migration and CodeGen, the new entity will appear in the entity picker.\n </p>\n\n <div class=\"new-entity-dialog-form\">\n <div class=\"new-entity-dialog-row\">\n <div class=\"new-entity-dialog-field\">\n <label class=\"new-entity-dialog-label\">Source Object</label>\n <div class=\"new-entity-dialog-value\">\n @if (AddMapSourceObjectName) {\n {{ AddMapSourceObjectName }}\n } @else {\n <span class=\"new-entity-dialog-hint\">Select a source object in the Add Map form first</span>\n }\n </div>\n </div>\n </div>\n <div class=\"new-entity-dialog-row\">\n <div class=\"new-entity-dialog-field\">\n <label class=\"new-entity-dialog-label\">Schema</label>\n <input type=\"text\"\n class=\"new-entity-dialog-input\"\n placeholder=\"e.g. hubspot\"\n [(ngModel)]=\"NewEntitySchema\" />\n </div>\n <span class=\"new-entity-dialog-dot\">.</span>\n <div class=\"new-entity-dialog-field new-entity-dialog-field-wide\">\n <label class=\"new-entity-dialog-label\">Table Name</label>\n <input type=\"text\"\n class=\"new-entity-dialog-input\"\n placeholder=\"e.g. Contact\"\n [(ngModel)]=\"NewEntityTable\" />\n </div>\n </div>\n </div>\n\n @if (DDLPreviewWarnings.length > 0) {\n <div class=\"ddl-warnings\">\n @for (warn of DDLPreviewWarnings; track warn) {\n <div class=\"ddl-warning\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ warn }}</div>\n }\n </div>\n }\n\n @if (DDLPreview) {\n <div class=\"ddl-preview-block\">\n <div class=\"ddl-preview-header\">\n <span>SQL Preview</span>\n <button class=\"ddl-copy-btn\" (click)=\"CopyDDLToClipboard()\" title=\"Copy to clipboard\">\n @if (DDLCopied) {\n <i class=\"fa-solid fa-check\"></i> Copied\n } @else {\n <i class=\"fa-regular fa-copy\"></i> Copy\n }\n </button>\n </div>\n <pre class=\"ddl-preview-code\">{{ DDLPreview }}</pre>\n </div>\n }\n\n @if (DDLPreview) {\n <div class=\"new-entity-next-steps\">\n <h4><i class=\"fa-solid fa-list-check\"></i> Next Steps</h4>\n <ol>\n <li>Copy the SQL above and save it as a migration file</li>\n <li>Run the migration against your database</li>\n <li>Run CodeGen to register the new entity in MemberJunction</li>\n <li>Refresh the page &mdash; the new entity will appear in the entity picker</li>\n </ol>\n </div>\n }\n </div>\n <div class=\"new-entity-dialog-footer\">\n <button class=\"new-entity-preview-btn\"\n [disabled]=\"!CanGenerateSQL || IsGeneratingDDL\"\n (click)=\"PreviewDDL()\">\n @if (IsGeneratingDDL) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Generating...\n } @else {\n <i class=\"fa-solid fa-code\"></i> Generate SQL\n }\n </button>\n <button class=\"new-entity-dialog-done-btn\" (click)=\"CloseNewEntityDialog()\">\n Done\n </button>\n </div>\n </div>\n}\n"]}