@memberjunction/ng-dashboards 5.8.0 → 5.10.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 (84) hide show
  1. package/dist/AI/components/models/model-management.component.d.ts +2 -0
  2. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  3. package/dist/AI/components/models/model-management.component.js +44 -2
  4. package/dist/AI/components/models/model-management.component.js.map +1 -1
  5. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
  6. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +15 -12
  7. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  8. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
  9. package/dist/DataExplorer/components/view-selector/view-selector.component.js +16 -22
  10. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
  11. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  12. package/dist/DataExplorer/data-explorer-dashboard.component.js +31 -11
  13. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  14. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  15. package/dist/Home/home-dashboard.component.js +10 -7
  16. package/dist/Home/home-dashboard.component.js.map +1 -1
  17. package/dist/Integration/components/activity/activity.component.d.ts +96 -0
  18. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -0
  19. package/dist/Integration/components/activity/activity.component.js +961 -0
  20. package/dist/Integration/components/activity/activity.component.js.map +1 -0
  21. package/dist/Integration/components/connections/connections.component.d.ts +194 -0
  22. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -0
  23. package/dist/Integration/components/connections/connections.component.js +2368 -0
  24. package/dist/Integration/components/connections/connections.component.js.map +1 -0
  25. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts +213 -15
  26. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
  27. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +2093 -187
  28. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  29. package/dist/Integration/components/overview/overview.component.d.ts +60 -0
  30. package/dist/Integration/components/overview/overview.component.d.ts.map +1 -0
  31. package/dist/Integration/components/overview/overview.component.js +628 -0
  32. package/dist/Integration/components/overview/overview.component.js.map +1 -0
  33. package/dist/Integration/components/pipelines/pipelines.component.d.ts +203 -0
  34. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -0
  35. package/dist/Integration/components/pipelines/pipelines.component.js +2057 -0
  36. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -0
  37. package/dist/Integration/components/schedules/schedules.component.d.ts +110 -0
  38. package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -0
  39. package/dist/Integration/components/schedules/schedules.component.js +842 -0
  40. package/dist/Integration/components/schedules/schedules.component.js.map +1 -0
  41. package/dist/Integration/components/visual-editor/visual-editor.component.d.ts +141 -0
  42. package/dist/Integration/components/visual-editor/visual-editor.component.d.ts.map +1 -0
  43. package/dist/Integration/components/visual-editor/visual-editor.component.js +1538 -0
  44. package/dist/Integration/components/visual-editor/visual-editor.component.js.map +1 -0
  45. package/dist/Integration/components/widgets/run-history-panel.component.js +3 -2
  46. package/dist/Integration/components/widgets/run-history-panel.component.js.map +1 -1
  47. package/dist/Integration/index.d.ts +5 -3
  48. package/dist/Integration/index.d.ts.map +1 -1
  49. package/dist/Integration/index.js +11 -7
  50. package/dist/Integration/index.js.map +1 -1
  51. package/dist/Integration/integration.module.d.ts +20 -16
  52. package/dist/Integration/integration.module.d.ts.map +1 -1
  53. package/dist/Integration/integration.module.js +40 -21
  54. package/dist/Integration/integration.module.js.map +1 -1
  55. package/dist/Integration/services/integration-data.service.d.ts +123 -9
  56. package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
  57. package/dist/Integration/services/integration-data.service.js +385 -68
  58. package/dist/Integration/services/integration-data.service.js.map +1 -1
  59. package/dist/QueryBrowser/query-browser-resource.component.d.ts +27 -4
  60. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  61. package/dist/QueryBrowser/query-browser-resource.component.js +338 -144
  62. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  63. package/dist/__tests__/integration-data-service.test.js.map +1 -1
  64. package/dist/__tests__/mapping-validation.test.d.ts +2 -0
  65. package/dist/__tests__/mapping-validation.test.d.ts.map +1 -0
  66. package/dist/__tests__/mapping-validation.test.js +170 -0
  67. package/dist/__tests__/mapping-validation.test.js.map +1 -0
  68. package/package.json +40 -38
  69. package/dist/Integration/components/connection-studio/connection-studio.component.d.ts +0 -81
  70. package/dist/Integration/components/connection-studio/connection-studio.component.d.ts.map +0 -1
  71. package/dist/Integration/components/connection-studio/connection-studio.component.js +0 -960
  72. package/dist/Integration/components/connection-studio/connection-studio.component.js.map +0 -1
  73. package/dist/Integration/components/control-tower/control-tower.component.d.ts +0 -43
  74. package/dist/Integration/components/control-tower/control-tower.component.d.ts.map +0 -1
  75. package/dist/Integration/components/control-tower/control-tower.component.js +0 -446
  76. package/dist/Integration/components/control-tower/control-tower.component.js.map +0 -1
  77. package/dist/Integration/components/sync-activity/sync-activity.component.d.ts +0 -65
  78. package/dist/Integration/components/sync-activity/sync-activity.component.d.ts.map +0 -1
  79. package/dist/Integration/components/sync-activity/sync-activity.component.js +0 -671
  80. package/dist/Integration/components/sync-activity/sync-activity.component.js.map +0 -1
  81. package/dist/__tests__/connection-studio.test.d.ts +0 -2
  82. package/dist/__tests__/connection-studio.test.d.ts.map +0 -1
  83. package/dist/__tests__/connection-studio.test.js +0 -186
  84. package/dist/__tests__/connection-studio.test.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visual-editor.component.js","sourceRoot":"","sources":["../../../../src/Integration/components/visual-editor/visual-editor.component.ts","../../../../src/Integration/components/visual-editor/visual-editor.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, inject } from '@angular/core';\nimport { IntegrationEngineBase } from '@memberjunction/integration-engine-base';\nimport {\n IntegrationDataService,\n EntityMapRow,\n FieldMapRow\n} from '../../services/integration-data.service';\nimport { IRunViewProvider } from '@memberjunction/core';\n\n// ---------------------------------------------------------------------------\n// Visual Editor types (copied from PipelinesComponent)\n// ---------------------------------------------------------------------------\n\ntype TransformType = 'direct' | 'regex' | 'split' | 'combine' | 'lookup' | 'format' | 'coerce' | 'substring' | 'custom';\n\ninterface TransformStepUI {\n Type: TransformType;\n Config: Record<string, unknown>;\n OnError: 'Skip' | 'Null' | 'Fail';\n}\n\ninterface VisualSourceField {\n Name: string;\n Label: string;\n Type: string;\n IsRequired: boolean;\n IsPrimaryKey: boolean;\n}\n\ninterface VisualDestField {\n Name: string;\n Type: string;\n IsRequired: boolean;\n}\n\ninterface VisualConnection {\n ID: string | null;\n SourceFieldName: string;\n DestFieldName: string;\n IsKeyField: boolean;\n IsRequired: boolean;\n Direction: 'SourceToDest' | 'DestToSource' | 'Both';\n TransformSteps: TransformStepUI[];\n IsDirty: boolean;\n IsNew: boolean;\n MarkedForDelete: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'app-visual-field-editor',\n templateUrl: './visual-editor.component.html',\n styleUrls: ['./visual-editor.component.css']\n})\nexport class VisualFieldEditorComponent implements OnChanges {\n\n // ---------------------------------------------------------------------------\n // Inputs / Outputs\n // ---------------------------------------------------------------------------\n\n @Input() EntityMap: EntityMapRow | null = null;\n @Input() CompanyIntegrationID: string | null = null;\n @Input() RunViewProvider: IRunViewProvider | null = null;\n @Output() Close = new EventEmitter<void>();\n\n // ---------------------------------------------------------------------------\n // Visual Editor state (copied from PipelinesComponent)\n // ---------------------------------------------------------------------------\n\n EditorSourceFields: VisualSourceField[] = [];\n EditorDestFields: VisualDestField[] = [];\n EditorConnections: VisualConnection[] = [];\n EditorLoading = false;\n EditorSaving = false;\n EditorSaveSuccess = false;\n\n SelectedConnectionIdx: number | null = null;\n ConnectingFromSource: string | null = null;\n\n EditorSearchSource = '';\n EditorSearchDest = '';\n\n ShowSourcePreview = false;\n ShowDestPreview = false;\n PreviewSourceLoading = false;\n PreviewDestLoading = false;\n PreviewSourceRows: Array<Record<string, string | number | boolean | null>> = [];\n PreviewDestRows: Array<Record<string, string | number | boolean | null>> = [];\n PreviewSourceColumns: string[] = [];\n PreviewDestColumns: string[] = [];\n\n FieldMapsExpanded = true;\n InfoPanelExpanded = false;\n\n InfoPanelLoading = false;\n InfoDestRecordCount: number | null = null;\n InfoLastSync: { StartedAt: string | null; EndedAt: string | null; Status: string; TotalRecords: number } | null = null;\n\n readonly FIELD_HEIGHT = 40;\n readonly SVG_WIDTH = 200;\n\n readonly TRANSFORM_TYPES: Array<{ Value: TransformType; Label: string; Icon: string }> = [\n { Value: 'direct', Label: 'Direct', Icon: 'fa-solid fa-arrow-right' },\n { Value: 'regex', Label: 'Regex', Icon: 'fa-solid fa-code' },\n { Value: 'split', Label: 'Split', Icon: 'fa-solid fa-scissors' },\n { Value: 'combine', Label: 'Combine', Icon: 'fa-solid fa-object-group' },\n { Value: 'lookup', Label: 'Lookup', Icon: 'fa-solid fa-book' },\n { Value: 'format', Label: 'Format', Icon: 'fa-solid fa-font' },\n { Value: 'coerce', Label: 'Coerce', Icon: 'fa-solid fa-exchange-alt' },\n { Value: 'substring', Label: 'Substring', Icon: 'fa-solid fa-text-width' },\n { Value: 'custom', Label: 'Custom', Icon: 'fa-solid fa-wand-magic-sparkles' }\n ];\n\n private dataService = inject(IntegrationDataService);\n private cdr = inject(ChangeDetectorRef);\n\n // ---------------------------------------------------------------------------\n // Lifecycle\n // ---------------------------------------------------------------------------\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['EntityMap'] && this.EntityMap && this.CompanyIntegrationID) {\n this.openEditor();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Open / Close\n // ---------------------------------------------------------------------------\n\n private openEditor(): void {\n this.SelectedConnectionIdx = null;\n this.ConnectingFromSource = null;\n this.EditorSearchSource = '';\n this.EditorSearchDest = '';\n this.EditorSaveSuccess = false;\n this.ShowSourcePreview = false;\n this.ShowDestPreview = false;\n this.PreviewSourceRows = [];\n this.PreviewDestRows = [];\n this.PreviewSourceColumns = [];\n this.PreviewDestColumns = [];\n this.FieldMapsExpanded = true;\n this.InfoPanelExpanded = false;\n this.InfoDestRecordCount = null;\n this.InfoLastSync = null;\n this.cdr.detectChanges();\n this.LoadVisualEditorData();\n }\n\n OnClose(): void {\n this.Close.emit();\n }\n\n // ---------------------------------------------------------------------------\n // SyncEnabled toggle\n // ---------------------------------------------------------------------------\n\n async OnToggleEditorSyncEnabled(event: Event): Promise<void> {\n if (!this.EntityMap) return;\n const checkbox = event.target as HTMLInputElement;\n const newValue = checkbox.checked;\n this.EntityMap.SyncEnabled = newValue;\n this.cdr.detectChanges();\n try {\n await this.dataService.ToggleEntityMapEnabled(this.EntityMap.ID, newValue);\n } catch (err) {\n this.EntityMap.SyncEnabled = !newValue;\n checkbox.checked = !newValue;\n console.error('[VisualFieldEditor] Failed to toggle SyncEnabled:', err);\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Data loading\n // ---------------------------------------------------------------------------\n\n async LoadVisualEditorData(): Promise<void> {\n if (!this.EntityMap || !this.CompanyIntegrationID) return;\n this.EditorLoading = true;\n this.cdr.detectChanges();\n\n const entityMap = this.EntityMap;\n\n try {\n const [fieldMaps, destFields] = await Promise.all([\n this.dataService.LoadFieldMaps(entityMap.ID, this.RunViewProvider),\n this.dataService.LoadEntityFields(entityMap.EntityID, this.RunViewProvider)\n ]);\n\n const sourceFields = this.resolveSourceFieldsFromMetadata(\n this.CompanyIntegrationID,\n entityMap.ExternalObjectName\n );\n\n if (sourceFields.length > 0) {\n this.EditorSourceFields = sourceFields;\n } else {\n this.EditorSourceFields = fieldMaps.map(fm => ({\n Name: fm.SourceFieldName,\n Label: fm.SourceFieldLabel ?? fm.SourceFieldName,\n Type: '',\n IsRequired: fm.IsRequired,\n IsPrimaryKey: fm.IsKeyField\n }));\n }\n\n this.EditorDestFields = destFields\n .filter(f => !f.Name.startsWith('__mj'))\n .map(f => ({\n Name: f.Name,\n Type: f.Type,\n IsRequired: f.IsRequired\n }));\n\n this.EditorConnections = fieldMaps\n .filter(fm => fm.Status === 'Active')\n .map(fm => ({\n ID: fm.ID,\n SourceFieldName: fm.SourceFieldName,\n DestFieldName: fm.DestinationFieldName,\n IsKeyField: fm.IsKeyField,\n IsRequired: fm.IsRequired,\n Direction: fm.Direction,\n TransformSteps: this.parseTransformPipeline(fm.TransformPipeline),\n IsDirty: false,\n IsNew: false,\n MarkedForDelete: false\n }));\n } catch (err) {\n console.error('[VisualFieldEditor] Failed to load editor data:', err);\n } finally {\n this.EditorLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Filtered field lists\n // ---------------------------------------------------------------------------\n\n get FilteredEditorSourceFields(): VisualSourceField[] {\n if (!this.EditorSearchSource.trim()) return this.EditorSourceFields;\n const term = this.EditorSearchSource.toLowerCase();\n return this.EditorSourceFields.filter(f =>\n f.Name.toLowerCase().includes(term) || f.Label.toLowerCase().includes(term)\n );\n }\n\n get FilteredEditorDestFields(): VisualDestField[] {\n if (!this.EditorSearchDest.trim()) return this.EditorDestFields;\n const term = this.EditorSearchDest.toLowerCase();\n return this.EditorDestFields.filter(f => f.Name.toLowerCase().includes(term));\n }\n\n get VisibleConnections(): VisualConnection[] {\n return this.EditorConnections.filter(c =>\n !c.MarkedForDelete &&\n this.getSourceFieldIndex(c.SourceFieldName) >= 0 &&\n this.getDestFieldIndex(c.DestFieldName) >= 0\n );\n }\n\n // ---------------------------------------------------------------------------\n // SVG Calculations\n // ---------------------------------------------------------------------------\n\n get EditorCanvasHeight(): number {\n const sourceHeight = this.FilteredEditorSourceFields.length * this.FIELD_HEIGHT;\n const destHeight = this.FilteredEditorDestFields.length * this.FIELD_HEIGHT;\n return Math.max(sourceHeight, destHeight, 200);\n }\n\n GetConnectionPath(conn: VisualConnection): string {\n const sourceY = this.getSourceFieldY(conn.SourceFieldName);\n const destY = this.getDestFieldY(conn.DestFieldName);\n if (sourceY < 0 || destY < 0) return '';\n const cp1x = this.SVG_WIDTH * 0.35;\n const cp2x = this.SVG_WIDTH * 0.65;\n return `M 0 ${sourceY} C ${cp1x} ${sourceY}, ${cp2x} ${destY}, ${this.SVG_WIDTH} ${destY}`;\n }\n\n GetConnectionMidY(conn: VisualConnection): number {\n const sourceY = this.getSourceFieldY(conn.SourceFieldName);\n const destY = this.getDestFieldY(conn.DestFieldName);\n return (sourceY + destY) / 2;\n }\n\n GetConnectionLineClass(conn: VisualConnection): string {\n return `conn-${this.getPrimaryTransformType(conn)}`;\n }\n\n GetConnectionBadgeClass(conn: VisualConnection): string {\n return `badge-${this.getPrimaryTransformType(conn)}`;\n }\n\n GetConnectionTransformIcon(conn: VisualConnection): string {\n const type = this.getPrimaryTransformType(conn);\n return this.TRANSFORM_TYPES.find(t => t.Value === type)?.Icon ?? 'fa-solid fa-arrow-right';\n }\n\n GetConnectionDirectionIcon(conn: VisualConnection): string {\n switch (conn.Direction) {\n case 'DestToSource': return 'fa-solid fa-arrow-left';\n case 'Both': return 'fa-solid fa-right-left';\n default: return 'fa-solid fa-arrow-right';\n }\n }\n\n GetTransformTypeLabel(type: TransformType): string {\n return this.TRANSFORM_TYPES.find(t => t.Value === type)?.Label ?? type;\n }\n\n // ---------------------------------------------------------------------------\n // Field mapped state\n // ---------------------------------------------------------------------------\n\n IsSourceFieldMapped(fieldName: string): boolean {\n return this.EditorConnections.some(c => !c.MarkedForDelete && c.SourceFieldName === fieldName);\n }\n\n IsDestFieldMapped(fieldName: string): boolean {\n return this.EditorConnections.some(c => !c.MarkedForDelete && c.DestFieldName === fieldName);\n }\n\n // ---------------------------------------------------------------------------\n // Creating connections\n // ---------------------------------------------------------------------------\n\n OnEditorSourceClick(fieldName: string): void {\n if (this.IsSourceFieldMapped(fieldName)) return;\n if (this.ConnectingFromSource === fieldName) {\n this.ConnectingFromSource = null;\n } else {\n this.ConnectingFromSource = fieldName;\n this.SelectedConnectionIdx = null;\n }\n this.cdr.detectChanges();\n }\n\n OnEditorDestClick(fieldName: string): void {\n if (!this.ConnectingFromSource) return;\n if (this.IsDestFieldMapped(fieldName)) return;\n\n const existing = this.EditorConnections.find(\n c => !c.MarkedForDelete && c.SourceFieldName === this.ConnectingFromSource && c.DestFieldName === fieldName\n );\n if (existing) {\n this.ConnectingFromSource = null;\n return;\n }\n\n this.EditorConnections.push({\n ID: null,\n SourceFieldName: this.ConnectingFromSource,\n DestFieldName: fieldName,\n IsKeyField: false,\n IsRequired: false,\n Direction: 'SourceToDest',\n TransformSteps: [{ Type: 'direct', Config: {}, OnError: 'Fail' }],\n IsDirty: true,\n IsNew: true,\n MarkedForDelete: false\n });\n\n this.ConnectingFromSource = null;\n this.SelectedConnectionIdx = this.EditorConnections.length - 1;\n this.cdr.detectChanges();\n }\n\n CancelConnect(): void {\n this.ConnectingFromSource = null;\n this.cdr.detectChanges();\n }\n\n // ---------------------------------------------------------------------------\n // Connection selection / editing\n // ---------------------------------------------------------------------------\n\n SelectConnection(index: number, event: Event): void {\n event.stopPropagation();\n this.SelectedConnectionIdx = this.SelectedConnectionIdx === index ? null : index;\n this.ConnectingFromSource = null;\n this.cdr.detectChanges();\n }\n\n DeselectConnection(): void {\n this.SelectedConnectionIdx = null;\n this.cdr.detectChanges();\n }\n\n get SelectedConnection(): VisualConnection | null {\n if (this.SelectedConnectionIdx == null) return null;\n return this.EditorConnections[this.SelectedConnectionIdx] ?? null;\n }\n\n RemoveSelectedConnection(): void {\n if (this.SelectedConnectionIdx == null) return;\n const conn = this.EditorConnections[this.SelectedConnectionIdx];\n if (conn.IsNew) {\n this.EditorConnections.splice(this.SelectedConnectionIdx, 1);\n } else {\n conn.MarkedForDelete = true;\n conn.IsDirty = true;\n }\n this.SelectedConnectionIdx = null;\n this.cdr.detectChanges();\n }\n\n ToggleConnectionKey(): void {\n const conn = this.SelectedConnection;\n if (!conn) return;\n conn.IsKeyField = !conn.IsKeyField;\n conn.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n ToggleConnectionRequired(): void {\n const conn = this.SelectedConnection;\n if (!conn) return;\n conn.IsRequired = !conn.IsRequired;\n conn.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n GetDirectionArrowClass(direction: string): string {\n switch (direction) {\n case 'DestToSource': return 'fa-arrow-left';\n case 'Both': return 'fa-right-left';\n default: return 'fa-arrow-right';\n }\n }\n\n OnConnectionDirectionChange(direction: 'SourceToDest' | 'DestToSource' | 'Both'): void {\n const conn = this.SelectedConnection;\n if (!conn) return;\n conn.Direction = direction;\n conn.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n OnConnectionTransformChange(stepIndex: number, type: TransformType): void {\n const conn = this.SelectedConnection;\n if (!conn || !conn.TransformSteps[stepIndex]) return;\n conn.TransformSteps[stepIndex].Type = type;\n conn.TransformSteps[stepIndex].Config = this.getDefaultConfigForType(type);\n conn.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n OnTransformConfigChange(conn: VisualConnection, stepIndex: number, key: string, value: string): void {\n if (!conn.TransformSteps[stepIndex]) return;\n conn.TransformSteps[stepIndex].Config[key] = value;\n conn.IsDirty = true;\n }\n\n AddTransformStep(): void {\n const conn = this.SelectedConnection;\n if (!conn) return;\n conn.TransformSteps.push({ Type: 'direct', Config: {}, OnError: 'Fail' });\n conn.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n RemoveTransformStep(stepIndex: number): void {\n const conn = this.SelectedConnection;\n if (!conn) return;\n conn.TransformSteps.splice(stepIndex, 1);\n conn.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n // ---------------------------------------------------------------------------\n // Data preview\n // ---------------------------------------------------------------------------\n\n async ToggleSourcePreview(): Promise<void> {\n this.ShowSourcePreview = !this.ShowSourcePreview;\n if (this.ShowSourcePreview && this.PreviewSourceRows.length === 0) {\n await this.loadSourcePreview();\n }\n this.cdr.detectChanges();\n }\n\n async ToggleDestPreview(): Promise<void> {\n this.ShowDestPreview = !this.ShowDestPreview;\n if (this.ShowDestPreview && this.PreviewDestRows.length === 0) {\n await this.loadDestPreview();\n }\n this.cdr.detectChanges();\n }\n\n private async loadSourcePreview(): Promise<void> {\n if (!this.EntityMap || !this.CompanyIntegrationID) return;\n this.PreviewSourceLoading = true;\n this.cdr.detectChanges();\n try {\n const rows = await this.dataService.PreviewSourceData(\n this.CompanyIntegrationID,\n this.EntityMap.ExternalObjectName,\n 5\n );\n this.PreviewSourceRows = rows;\n this.PreviewSourceColumns = rows.length > 0 ? Object.keys(rows[0]) : [];\n } catch (err) {\n console.error('[VisualFieldEditor] Failed to load source preview:', err);\n this.PreviewSourceRows = [];\n this.PreviewSourceColumns = [];\n } finally {\n this.PreviewSourceLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n private async loadDestPreview(): Promise<void> {\n if (!this.EntityMap) return;\n this.PreviewDestLoading = true;\n this.cdr.detectChanges();\n try {\n const rows = await this.dataService.PreviewDestinationData(\n this.EntityMap.EntityID,\n 5,\n this.RunViewProvider\n );\n this.PreviewDestRows = rows;\n this.PreviewDestColumns = rows.length > 0 ? Object.keys(rows[0]) : [];\n } catch (err) {\n console.error('[VisualFieldEditor] Failed to load dest preview:', err);\n this.PreviewDestRows = [];\n this.PreviewDestColumns = [];\n } finally {\n this.PreviewDestLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Collapsible sections\n // ---------------------------------------------------------------------------\n\n ToggleFieldMaps(): void {\n this.FieldMapsExpanded = !this.FieldMapsExpanded;\n this.cdr.detectChanges();\n }\n\n ToggleInfoPanel(): void {\n this.InfoPanelExpanded = !this.InfoPanelExpanded;\n if (this.InfoPanelExpanded && this.InfoDestRecordCount === null) {\n this.loadInfoPanelData();\n }\n this.cdr.detectChanges();\n }\n\n private async loadInfoPanelData(): Promise<void> {\n if (!this.EntityMap || !this.CompanyIntegrationID) return;\n this.InfoPanelLoading = true;\n this.cdr.detectChanges();\n try {\n const [destCount, lastSync] = await Promise.all([\n this.dataService.GetDestinationRecordCount(this.EntityMap.EntityID, this.RunViewProvider),\n this.dataService.GetLastSyncForEntity(\n this.CompanyIntegrationID,\n this.EntityMap.EntityID,\n this.RunViewProvider\n )\n ]);\n this.InfoDestRecordCount = destCount;\n this.InfoLastSync = lastSync;\n } catch (err) {\n console.error('[VisualFieldEditor] Failed to load info panel data:', err);\n } finally {\n this.InfoPanelLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n FormatSyncDate(dateStr: string | null): string {\n if (!dateStr) return 'Never';\n const d = new Date(dateStr);\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n const diffHours = Math.floor(diffMins / 60);\n if (diffHours < 24) return `${diffHours}h ago`;\n const diffDays = Math.floor(diffHours / 24);\n if (diffDays < 7) return `${diffDays}d ago`;\n return d.toLocaleDateString();\n }\n\n SyncStatusClass(status: string): string {\n switch (status) {\n case 'Success': return 'info-status-success';\n case 'Failed': return 'info-status-error';\n case 'In Progress': return 'info-status-running';\n default: return 'info-status-pending';\n }\n }\n\n // ---------------------------------------------------------------------------\n // Save / Auto-map\n // ---------------------------------------------------------------------------\n\n get HasEditorChanges(): boolean {\n return this.EditorConnections.some(c => c.IsDirty);\n }\n\n async SaveVisualEditor(): Promise<void> {\n if (!this.EntityMap) return;\n this.EditorSaving = true;\n this.EditorSaveSuccess = false;\n this.cdr.detectChanges();\n\n try {\n for (const conn of this.EditorConnections) {\n if (!conn.IsDirty) continue;\n if (conn.MarkedForDelete && conn.ID) {\n await this.dataService.DeleteFieldMap(conn.ID);\n } else if (conn.IsNew && !conn.MarkedForDelete) {\n await this.dataService.CreateFieldMap({\n EntityMapID: this.EntityMap.ID,\n SourceFieldName: conn.SourceFieldName,\n DestinationFieldName: conn.DestFieldName,\n IsKeyField: conn.IsKeyField,\n IsRequired: conn.IsRequired,\n Direction: conn.Direction,\n TransformPipeline: this.serializeTransformPipeline(conn.TransformSteps)\n });\n } else if (conn.ID && !conn.MarkedForDelete) {\n await this.dataService.UpdateFieldMap(conn.ID, {\n SourceFieldName: conn.SourceFieldName,\n DestinationFieldName: conn.DestFieldName,\n IsKeyField: conn.IsKeyField,\n IsRequired: conn.IsRequired,\n Direction: conn.Direction,\n TransformPipeline: this.serializeTransformPipeline(conn.TransformSteps)\n });\n }\n }\n await this.LoadVisualEditorData();\n this.EditorSaveSuccess = true;\n this.SelectedConnectionIdx = null;\n } catch (err) {\n console.error('[VisualFieldEditor] Failed to save field mappings:', err);\n } finally {\n this.EditorSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n async AutoMapEditorFields(): Promise<void> {\n if (!this.EntityMap || !this.CompanyIntegrationID) return;\n const destMap = new Map<string, VisualDestField>();\n for (const df of this.EditorDestFields) {\n destMap.set(df.Name.toLowerCase(), df);\n }\n let addedCount = 0;\n for (const sf of this.EditorSourceFields) {\n if (this.IsSourceFieldMapped(sf.Name)) continue;\n const destMatch = destMap.get(sf.Name.toLowerCase());\n if (!destMatch) continue;\n if (this.IsDestFieldMapped(destMatch.Name)) continue;\n this.EditorConnections.push({\n ID: null,\n SourceFieldName: sf.Name,\n DestFieldName: destMatch.Name,\n IsKeyField: sf.IsPrimaryKey,\n IsRequired: sf.IsRequired || destMatch.IsRequired,\n Direction: 'SourceToDest',\n TransformSteps: [{ Type: 'direct', Config: {}, OnError: 'Fail' }],\n IsDirty: true,\n IsNew: true,\n MarkedForDelete: false\n });\n addedCount++;\n }\n if (addedCount > 0) {\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Computed props\n // ---------------------------------------------------------------------------\n\n get EditorMappedCount(): number {\n return this.EditorConnections.filter(c => !c.MarkedForDelete).length;\n }\n\n get EditorKeyFieldCount(): number {\n return this.EditorConnections.filter(c => !c.MarkedForDelete && c.IsKeyField).length;\n }\n\n get EditorRequiredCount(): number {\n return this.EditorConnections.filter(c => !c.MarkedForDelete && c.IsRequired).length;\n }\n\n GetConfigKeys(step: TransformStepUI): string[] {\n return Object.keys(step.Config);\n }\n\n GetConfigValue(step: TransformStepUI, key: string): string {\n const val = step.Config[key];\n if (val == null) return '';\n if (typeof val === 'object') return JSON.stringify(val);\n return String(val);\n }\n\n // ---------------------------------------------------------------------------\n // Private helpers\n // ---------------------------------------------------------------------------\n\n private getSourceFieldIndex(fieldName: string): number {\n return this.FilteredEditorSourceFields.findIndex(f => f.Name === fieldName);\n }\n\n private getDestFieldIndex(fieldName: string): number {\n return this.FilteredEditorDestFields.findIndex(f => f.Name === fieldName);\n }\n\n private getSourceFieldY(fieldName: string): number {\n const idx = this.getSourceFieldIndex(fieldName);\n if (idx < 0) return -1;\n return idx * this.FIELD_HEIGHT + this.FIELD_HEIGHT / 2;\n }\n\n private getDestFieldY(fieldName: string): number {\n const idx = this.getDestFieldIndex(fieldName);\n if (idx < 0) return -1;\n return idx * this.FIELD_HEIGHT + this.FIELD_HEIGHT / 2;\n }\n\n private getPrimaryTransformType(conn: VisualConnection): TransformType {\n if (conn.TransformSteps.length === 0) return 'direct';\n return conn.TransformSteps[0].Type;\n }\n\n private parseTransformPipeline(json: string | null): TransformStepUI[] {\n if (!json || json.trim() === '') return [];\n try {\n const parsed: unknown = JSON.parse(json);\n if (!Array.isArray(parsed)) return [];\n return (parsed as TransformStepUI[]).map(step => ({\n Type: step.Type ?? 'direct',\n Config: (step.Config as Record<string, unknown>) ?? {},\n OnError: step.OnError ?? 'Fail'\n }));\n } catch {\n return [];\n }\n }\n\n private serializeTransformPipeline(steps: TransformStepUI[]): string | null {\n if (steps.length === 0) return null;\n return JSON.stringify(steps.map(s => ({ Type: s.Type, Config: s.Config, OnError: s.OnError })));\n }\n\n private getDefaultConfigForType(type: TransformType): Record<string, unknown> {\n switch (type) {\n case 'direct': return {};\n case 'regex': return { Pattern: '', Replacement: '', Flags: 'g' };\n case 'split': return { Delimiter: ',', Index: 0 };\n case 'combine': return { SourceFields: [], Separator: ' ' };\n case 'lookup': return { Map: {}, Default: '' };\n case 'format': return { FormatString: '', FormatType: 'date' };\n case 'coerce': return { TargetType: 'string' };\n case 'substring': return { Start: 0, Length: 10 };\n case 'custom': return { Expression: 'value' };\n }\n }\n\n private resolveSourceFieldsFromMetadata(\n companyIntegrationID: string,\n externalObjectName: string\n ): VisualSourceField[] {\n const engine = IntegrationEngineBase.Instance;\n const integration = engine.GetIntegrationForCompanyIntegration(companyIntegrationID);\n if (!integration) return [];\n const obj = engine.GetIntegrationObject(integration.ID, externalObjectName);\n if (!obj) return [];\n const fields = engine.GetIntegrationObjectFields(obj.ID);\n return fields\n .filter(f => f.Status === 'Active')\n .sort((a, b) => a.Sequence - b.Sequence)\n .map(f => ({\n Name: f.Name,\n Label: f.DisplayName || f.Name,\n Type: f.Type,\n IsRequired: f.IsRequired,\n IsPrimaryKey: f.IsPrimaryKey\n }));\n }\n}\n\nexport function LoadVisualFieldEditorComponent(): void {\n // Tree-shaking prevention\n}\n","<div class=\"ve-container\">\n\n <!-- Header -->\n <div class=\"ve-header\">\n <div class=\"ve-header-left\">\n <button class=\"ve-back-btn\" (click)=\"OnClose()\" title=\"Back to entity maps\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n <div class=\"ve-header-title\">\n <span class=\"ve-source-label\">{{ EntityMap?.ExternalObjectLabel ?? EntityMap?.ExternalObjectName }}</span>\n <span class=\"ve-direction-arrow\">\n <i class=\"fa-solid fa-arrow-right-arrow-left\"></i>\n </span>\n <span class=\"ve-dest-label\">{{ EntityMap?.Entity }}</span>\n </div>\n <!-- SyncEnabled toggle in editor header -->\n @if (EntityMap) {\n <label class=\"sync-toggle ve-sync-toggle\"\n [title]=\"EntityMap.SyncEnabled ? 'Sync enabled' : 'Sync disabled'\">\n <input type=\"checkbox\"\n [checked]=\"EntityMap.SyncEnabled\"\n (change)=\"OnToggleEditorSyncEnabled($event)\" />\n <span class=\"sync-toggle-track\"></span>\n </label>\n <span class=\"ve-sync-label\">{{ EntityMap.SyncEnabled ? 'Sync On' : 'Sync Off' }}</span>\n }\n </div>\n <div class=\"ve-header-stats\">\n <span class=\"ve-stat\">\n <strong>{{ EditorMappedCount }}</strong> mapped\n </span>\n <span class=\"ve-stat-sep\"></span>\n <span class=\"ve-stat\">\n <strong>{{ EditorKeyFieldCount }}</strong> key\n </span>\n <span class=\"ve-stat-sep\"></span>\n <span class=\"ve-stat\">\n <strong>{{ EditorRequiredCount }}</strong> required\n </span>\n </div>\n <div class=\"ve-header-actions\">\n <!-- Data preview buttons -->\n <button class=\"ve-btn ve-btn-ghost\"\n (click)=\"ToggleSourcePreview()\"\n [class.active]=\"ShowSourcePreview\"\n title=\"Preview source data\">\n <i class=\"fa-solid fa-cloud\"></i> Source Data\n </button>\n <button class=\"ve-btn ve-btn-ghost\"\n (click)=\"ToggleDestPreview()\"\n [class.active]=\"ShowDestPreview\"\n title=\"Preview MJ data\">\n <i class=\"fa-solid fa-database\"></i> MJ Data\n </button>\n <div class=\"ve-action-sep\"></div>\n <button class=\"ve-btn ve-btn-ghost\" (click)=\"AutoMapEditorFields()\" title=\"Auto-map fields by name\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map\n </button>\n <button class=\"ve-btn ve-btn-primary\"\n [disabled]=\"!HasEditorChanges || EditorSaving\"\n (click)=\"SaveVisualEditor()\">\n @if (EditorSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n <i class=\"fa-solid fa-check\"></i> Save\n }\n </button>\n @if (EditorSaveSuccess && !HasEditorChanges) {\n <span class=\"ve-save-success\">\n <i class=\"fa-solid fa-circle-check\"></i> Saved\n </span>\n }\n </div>\n </div>\n\n <!-- Data preview panels (collapsible) -->\n @if (ShowSourcePreview || ShowDestPreview) {\n <div class=\"ve-preview-strip\">\n @if (ShowSourcePreview) {\n <div class=\"ve-preview-panel\">\n <div class=\"ve-preview-header\">\n <i class=\"fa-solid fa-cloud\"></i>\n <span>Source Preview: {{ EntityMap?.ExternalObjectLabel ?? EntityMap?.ExternalObjectName }}</span>\n <button class=\"ve-preview-close\" (click)=\"ShowSourcePreview = false\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n @if (PreviewSourceLoading) {\n <div class=\"ve-preview-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else if (PreviewSourceRows.length === 0) {\n <div class=\"ve-preview-empty\">No source data available</div>\n } @else {\n <div class=\"ve-preview-table-wrap\">\n <table class=\"ve-preview-table\">\n <thead>\n <tr>\n @for (col of PreviewSourceColumns; track col) {\n <th>{{ col }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of PreviewSourceRows; track $index) {\n <tr>\n @for (col of PreviewSourceColumns; track col) {\n <td [title]=\"row[col]?.toString() ?? ''\">{{ row[col] ?? '' }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n @if (ShowDestPreview) {\n <div class=\"ve-preview-panel\">\n <div class=\"ve-preview-header\">\n <i class=\"fa-solid fa-database\"></i>\n <span>Dest Preview: {{ EntityMap?.Entity }}</span>\n <button class=\"ve-preview-close\" (click)=\"ShowDestPreview = false\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n @if (PreviewDestLoading) {\n <div class=\"ve-preview-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else if (PreviewDestRows.length === 0) {\n <div class=\"ve-preview-empty\">No destination data available</div>\n } @else {\n <div class=\"ve-preview-table-wrap\">\n <table class=\"ve-preview-table\">\n <thead>\n <tr>\n @for (col of PreviewDestColumns; track col) {\n <th>{{ col }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of PreviewDestRows; track $index) {\n <tr>\n @for (col of PreviewDestColumns; track col) {\n <td [title]=\"row[col]?.toString() ?? ''\">{{ row[col] ?? '' }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Connect mode banner -->\n @if (ConnectingFromSource) {\n <div class=\"ve-connect-banner\">\n <i class=\"fa-solid fa-link\"></i>\n Click a destination field to map from\n <strong>{{ ConnectingFromSource }}</strong>\n <button class=\"ve-connect-cancel\" (click)=\"CancelConnect()\">Cancel</button>\n </div>\n }\n\n <!-- Main content: sections + transform panel -->\n <div class=\"ve-body\" [class.has-transform-panel]=\"SelectedConnectionIdx !== null\">\n\n <!-- Loading state -->\n @if (EditorLoading) {\n <div class=\"ve-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading field mappings...</span>\n </div>\n } @else {\n\n <!-- Left content area (sections stacked vertically) -->\n <div class=\"ve-sections-wrapper\">\n\n <!-- ============================================================= -->\n <!-- FIELD MAPPINGS SECTION (collapsible) -->\n <!-- ============================================================= -->\n <div class=\"ve-section\" [class.collapsed]=\"!FieldMapsExpanded\">\n <div class=\"ve-section-header\" (click)=\"ToggleFieldMaps()\">\n <i class=\"fa-solid\"\n [class.fa-chevron-down]=\"FieldMapsExpanded\"\n [class.fa-chevron-right]=\"!FieldMapsExpanded\"></i>\n <span class=\"ve-section-title\">Field Mappings</span>\n <span class=\"ve-section-badge\">{{ EditorMappedCount }} mapped</span>\n </div>\n\n @if (FieldMapsExpanded) {\n <div class=\"ve-section-body\">\n <!-- Canvas area (scrollable) -->\n <div class=\"ve-canvas-wrapper\">\n\n <!-- Column headers -->\n <div class=\"ve-col-headers\">\n <div class=\"ve-col-header source\">\n <i class=\"fa-solid fa-cloud\"></i>\n Source Fields\n <span class=\"ve-col-count\">{{ EditorSourceFields.length }}</span>\n </div>\n <div class=\"ve-col-header-spacer\"></div>\n <div class=\"ve-col-header dest\">\n <i class=\"fa-solid fa-database\"></i>\n MJ Entity Fields\n <span class=\"ve-col-count\">{{ EditorDestFields.length }}</span>\n </div>\n </div>\n\n <!-- Search bars -->\n <div class=\"ve-col-searches\">\n <div class=\"ve-col-search\">\n <i class=\"fa-solid fa-search\"></i>\n <input type=\"text\"\n placeholder=\"Filter source fields...\"\n [value]=\"EditorSearchSource\"\n (input)=\"EditorSearchSource = $any($event.target).value\" />\n </div>\n <div class=\"ve-col-search-spacer\"></div>\n <div class=\"ve-col-search\">\n <i class=\"fa-solid fa-search\"></i>\n <input type=\"text\"\n placeholder=\"Filter destination fields...\"\n [value]=\"EditorSearchDest\"\n (input)=\"EditorSearchDest = $any($event.target).value\" />\n </div>\n </div>\n\n <!-- Canvas grid (source + SVG + dest) -->\n <div class=\"ve-canvas-scroll\" (click)=\"DeselectConnection()\">\n <div class=\"ve-canvas-grid\" [style.min-height.px]=\"EditorCanvasHeight\">\n\n <!-- Source column -->\n <div class=\"ve-field-col source\">\n @for (sf of FilteredEditorSourceFields; track sf.Name) {\n <div class=\"ve-field-item\"\n [class.mapped]=\"IsSourceFieldMapped(sf.Name)\"\n [class.unmapped]=\"!IsSourceFieldMapped(sf.Name)\"\n [class.connecting]=\"ConnectingFromSource === sf.Name\"\n [style.height.px]=\"FIELD_HEIGHT\"\n (click)=\"OnEditorSourceClick(sf.Name); $event.stopPropagation()\">\n <span class=\"ve-field-name\" [title]=\"sf.Name\">{{ sf.Label || sf.Name }}</span>\n <span class=\"ve-field-type\">{{ sf.Type }}</span>\n <span class=\"ve-field-badges\">\n @if (sf.IsPrimaryKey) {\n <span class=\"ve-fbadge pk\" title=\"Primary Key\">PK</span>\n }\n @if (sf.IsRequired) {\n <span class=\"ve-fbadge req\" title=\"Required\">*</span>\n }\n </span>\n </div>\n }\n @if (FilteredEditorSourceFields.length === 0) {\n <div class=\"ve-field-empty\">No source fields found</div>\n }\n </div>\n\n <!-- SVG connection lines -->\n <svg class=\"ve-svg\"\n [attr.width]=\"SVG_WIDTH\"\n [attr.height]=\"EditorCanvasHeight\"\n [attr.viewBox]=\"'0 0 ' + SVG_WIDTH + ' ' + EditorCanvasHeight\"\n (click)=\"$event.stopPropagation()\">\n @for (conn of VisibleConnections; track conn.SourceFieldName + '-' + conn.DestFieldName; let i = $index) {\n <!-- Connection line -->\n <path [attr.d]=\"GetConnectionPath(conn)\"\n class=\"ve-conn-line\"\n [class]=\"'ve-conn-line ' + GetConnectionLineClass(conn)\"\n [class.selected]=\"SelectedConnectionIdx === i\"\n (click)=\"SelectConnection(i, $event)\" />\n <!-- Transform badge at midpoint -->\n <foreignObject\n [attr.x]=\"SVG_WIDTH / 2 - 14\"\n [attr.y]=\"GetConnectionMidY(conn) - 14\"\n width=\"28\" height=\"28\"\n class=\"ve-badge-fo\">\n <div xmlns=\"http://www.w3.org/1999/xhtml\"\n class=\"ve-conn-badge\"\n [class]=\"'ve-conn-badge ' + GetConnectionBadgeClass(conn)\"\n [class.selected]=\"SelectedConnectionIdx === i\"\n (click)=\"SelectConnection(i, $event)\">\n <i [class]=\"GetConnectionDirectionIcon(conn)\"></i>\n </div>\n </foreignObject>\n }\n </svg>\n\n <!-- Dest column -->\n <div class=\"ve-field-col dest\">\n @for (df of FilteredEditorDestFields; track df.Name) {\n <div class=\"ve-field-item\"\n [class.mapped]=\"IsDestFieldMapped(df.Name)\"\n [class.unmapped]=\"!IsDestFieldMapped(df.Name)\"\n [class.connect-target]=\"ConnectingFromSource !== null\"\n [style.height.px]=\"FIELD_HEIGHT\"\n (click)=\"OnEditorDestClick(df.Name); $event.stopPropagation()\">\n <span class=\"ve-field-name\" [title]=\"df.Name\">{{ df.Name }}</span>\n <span class=\"ve-field-type\">{{ df.Type }}</span>\n <span class=\"ve-field-badges\">\n @if (df.IsRequired) {\n <span class=\"ve-fbadge req\" title=\"Required\">*</span>\n }\n </span>\n </div>\n }\n @if (FilteredEditorDestFields.length === 0) {\n <div class=\"ve-field-empty\">No destination fields found</div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- ============================================================= -->\n <!-- INFO PANEL SECTION (collapsible) -->\n <!-- ============================================================= -->\n <div class=\"ve-section\" [class.collapsed]=\"!InfoPanelExpanded\">\n <div class=\"ve-section-header\" (click)=\"ToggleInfoPanel()\">\n <i class=\"fa-solid\"\n [class.fa-chevron-down]=\"InfoPanelExpanded\"\n [class.fa-chevron-right]=\"!InfoPanelExpanded\"></i>\n <span class=\"ve-section-title\">Sync Info</span>\n </div>\n\n @if (InfoPanelExpanded) {\n <div class=\"ve-section-body ve-info-body\">\n @if (InfoPanelLoading) {\n <div class=\"ve-info-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading stats...\n </div>\n } @else {\n <div class=\"ve-info-grid\">\n <!-- Destination record count -->\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon\">\n <i class=\"fa-solid fa-database\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ InfoDestRecordCount ?? '-' }}</span>\n <span class=\"ve-info-card-label\">MJ Records</span>\n </div>\n </div>\n <!-- Source fields count -->\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon source\">\n <i class=\"fa-solid fa-cloud\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ EditorSourceFields.length }}</span>\n <span class=\"ve-info-card-label\">Source Fields</span>\n </div>\n </div>\n <!-- Last sync -->\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon sync\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ FormatSyncDate(InfoLastSync?.StartedAt ?? null) }}</span>\n <span class=\"ve-info-card-label\">Last Sync</span>\n </div>\n </div>\n <!-- Sync status -->\n @if (InfoLastSync) {\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon\" [ngClass]=\"SyncStatusClass(InfoLastSync.Status)\">\n <i class=\"fa-solid\"\n [class.fa-circle-check]=\"InfoLastSync.Status === 'Success'\"\n [class.fa-circle-xmark]=\"InfoLastSync.Status === 'Failed'\"\n [class.fa-spinner]=\"InfoLastSync.Status === 'In Progress'\"\n [class.fa-clock]=\"InfoLastSync.Status === 'Pending'\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ InfoLastSync.Status }}</span>\n <span class=\"ve-info-card-label\">{{ InfoLastSync.TotalRecords }} records processed</span>\n </div>\n </div>\n }\n </div>\n\n <!-- Configuration details -->\n <div class=\"ve-info-details\">\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Sync Direction</span>\n <span class=\"ve-info-detail-value\">{{ EntityMap?.SyncDirection }}</span>\n </div>\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Conflict Resolution</span>\n <span class=\"ve-info-detail-value\">{{ EntityMap?.ConflictResolution }}</span>\n </div>\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Delete Behavior</span>\n <span class=\"ve-info-detail-value\">{{ EntityMap?.DeleteBehavior }}</span>\n </div>\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Priority</span>\n <span class=\"ve-info-detail-value\">{{ EntityMap?.Priority }}</span>\n </div>\n @if (EntityMap?.MatchStrategy) {\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Match Strategy</span>\n <span class=\"ve-info-detail-value\">Configured</span>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Transform editor panel (right side, appears when connection selected) -->\n @if (SelectedConnection; as conn) {\n <div class=\"ve-transform-panel\" (click)=\"$event.stopPropagation()\">\n <div class=\"ve-tp-header\">\n <span class=\"ve-tp-title\">Mapping Details</span>\n <button class=\"ve-tp-close\" (click)=\"DeselectConnection()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <!-- Source -> Dest -->\n <div class=\"ve-tp-mapping-info\">\n <div class=\"ve-tp-field-pair\">\n <span class=\"ve-tp-field source\">{{ conn.SourceFieldName }}</span>\n <i class=\"fa-solid ve-tp-arrow\"\n [class.fa-arrow-right]=\"conn.Direction === 'SourceToDest'\"\n [class.fa-arrow-left]=\"conn.Direction === 'DestToSource'\"\n [class.fa-right-left]=\"conn.Direction === 'Both'\"></i>\n <span class=\"ve-tp-field dest\">{{ conn.DestFieldName }}</span>\n </div>\n </div>\n\n <!-- Toggles -->\n <div class=\"ve-tp-toggles\">\n <label class=\"ve-tp-toggle\" (click)=\"ToggleConnectionKey()\">\n <span class=\"ve-tp-toggle-box\" [class.active]=\"conn.IsKeyField\">\n @if (conn.IsKeyField) { <i class=\"fa-solid fa-check\"></i> }\n </span>\n <span>Key Field</span>\n </label>\n <label class=\"ve-tp-toggle\" (click)=\"ToggleConnectionRequired()\">\n <span class=\"ve-tp-toggle-box\" [class.active]=\"conn.IsRequired\">\n @if (conn.IsRequired) { <i class=\"fa-solid fa-check\"></i> }\n </span>\n <span>Required</span>\n </label>\n </div>\n\n <!-- Direction -->\n <div class=\"ve-tp-section\">\n <label class=\"ve-tp-section-label\">Direction</label>\n <div class=\"ve-tp-direction-btns\">\n <button [class.active]=\"conn.Direction === 'SourceToDest'\"\n (click)=\"OnConnectionDirectionChange('SourceToDest')\">\n Source &rarr; Dest\n </button>\n <button [class.active]=\"conn.Direction === 'DestToSource'\"\n (click)=\"OnConnectionDirectionChange('DestToSource')\">\n Dest &rarr; Source\n </button>\n <button [class.active]=\"conn.Direction === 'Both'\"\n (click)=\"OnConnectionDirectionChange('Both')\">\n Both\n </button>\n </div>\n </div>\n\n <!-- Transform pipeline -->\n <div class=\"ve-tp-section\">\n <div class=\"ve-tp-section-header\">\n <label class=\"ve-tp-section-label\">Transform Pipeline</label>\n <button class=\"ve-tp-add-step\" (click)=\"AddTransformStep()\">\n <i class=\"fa-solid fa-plus\"></i> Add Step\n </button>\n </div>\n\n @for (step of conn.TransformSteps; track $index; let si = $index) {\n <div class=\"ve-tp-step\">\n <div class=\"ve-tp-step-header\">\n <span class=\"ve-tp-step-num\">{{ si + 1 }}</span>\n <select class=\"ve-tp-type-select\"\n [value]=\"step.Type\"\n (change)=\"OnConnectionTransformChange(si, $any($event.target).value)\">\n @for (tt of TRANSFORM_TYPES; track tt.Value) {\n <option [value]=\"tt.Value\" [selected]=\"tt.Value === step.Type\">{{ tt.Label }}</option>\n }\n </select>\n <button class=\"ve-tp-remove-step\" (click)=\"RemoveTransformStep(si)\" title=\"Remove step\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n\n <!-- Config fields based on transform type -->\n @if (step.Type !== 'direct') {\n <div class=\"ve-tp-step-config\">\n @for (key of GetConfigKeys(step); track key) {\n <div class=\"ve-tp-config-row\">\n <label>{{ key }}</label>\n <input type=\"text\"\n [value]=\"GetConfigValue(step, key)\"\n (input)=\"OnTransformConfigChange(conn, si, key, $any($event.target).value)\"\n placeholder=\"{{ key }}\" />\n </div>\n }\n </div>\n }\n\n <!-- On error -->\n <div class=\"ve-tp-step-onerror\">\n <label>On Error:</label>\n <select [value]=\"step.OnError\"\n (change)=\"step.OnError = $any($event.target).value; conn.IsDirty = true\">\n <option value=\"Fail\">Fail</option>\n <option value=\"Skip\">Skip</option>\n <option value=\"Null\">Null</option>\n </select>\n </div>\n </div>\n }\n\n @if (conn.TransformSteps.length === 0) {\n <div class=\"ve-tp-no-steps\">\n No transform steps. Data passes through as-is.\n </div>\n }\n </div>\n\n <!-- Delete mapping button -->\n <div class=\"ve-tp-footer\">\n <button class=\"ve-btn ve-btn-danger\" (click)=\"RemoveSelectedConnection()\">\n <i class=\"fa-solid fa-trash-can\"></i> Remove Mapping\n </button>\n </div>\n </div>\n }\n }\n </div>\n</div>\n"]}
@@ -5,6 +5,7 @@ import * as i0 from "@angular/core";
5
5
  import * as i1 from "@memberjunction/ng-shared-generic";
6
6
  import * as i2 from "@angular/common";
7
7
  const _forTrack0 = ($index, $item) => $item.ID;
8
+ const _forTrack1 = ($index, $item) => $item.EntityID;
8
9
  function RunHistoryPanelComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
9
10
  i0.ɵɵelementStart(0, "div", 0);
10
11
  i0.ɵɵelement(1, "mj-loading", 3);
@@ -103,7 +104,7 @@ function RunHistoryPanelComponent_Conditional_2_For_17_Conditional_17_Template(r
103
104
  i0.ɵɵtext(17, "Errors");
104
105
  i0.ɵɵelementEnd()()();
105
106
  i0.ɵɵelementStart(18, "tbody");
106
- i0.ɵɵrepeaterCreate(19, RunHistoryPanelComponent_Conditional_2_For_17_Conditional_17_For_20_Template, 15, 15, "tr", null, _forTrack0);
107
+ i0.ɵɵrepeaterCreate(19, RunHistoryPanelComponent_Conditional_2_For_17_Conditional_17_For_20_Template, 15, 15, "tr", null, _forTrack1);
107
108
  i0.ɵɵelementEnd()();
108
109
  i0.ɵɵconditionalCreate(21, RunHistoryPanelComponent_Conditional_2_For_17_Conditional_17_Conditional_21_Template, 6, 3, "div", 15);
109
110
  i0.ɵɵelementEnd()()();
@@ -351,7 +352,7 @@ export class RunHistoryPanelComponent {
351
352
  </tr>
352
353
  </thead>
353
354
  <tbody>
354
- @for (detail of RunDetails; track detail.ID) {
355
+ @for (detail of RunDetails; track detail.EntityID) {
355
356
  <tr>
356
357
  <td>{{ detail.Entity }}</td>
357
358
  <td>{{ detail.RecordsProcessed | number }}</td>
@@ -1 +1 @@
1
- {"version":3,"file":"run-history-panel.component.js","sourceRoot":"","sources":["../../../../src/Integration/components/widgets/run-history-panel.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, OnChanges, SimpleChanges, inject } from '@angular/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { IRunViewProvider } from '@memberjunction/core';\nimport { IntegrationDataService, IntegrationRunRow, RunDetailRow } from '../../services/integration-data.service';\n\ntype RunStatusColorType = 'amber' | 'green' | 'red';\n\n@Component({\n standalone: false,\n selector: 'app-run-history-panel',\n template: `\n @if (IsLoading) {\n <div class=\"history-loading\">\n <mj-loading text=\"Loading run history...\" size=\"small\"></mj-loading>\n </div>\n } @else if (Runs.length === 0) {\n <div class=\"history-empty\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <p>No runs recorded yet</p>\n </div>\n } @else {\n <div class=\"history-panel\">\n <table class=\"history-table\">\n <thead>\n <tr>\n <th>Started</th>\n <th>Status</th>\n <th>Duration</th>\n <th>Records</th>\n <th>Run By</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (run of Runs; track run.ID) {\n <tr class=\"run-row\" [class.selected]=\"IsSelectedRun(run.ID)\"\n (click)=\"OnRunClick(run)\">\n <td>{{ FormatDate(run.StartedAt) }}</td>\n <td>\n <span class=\"run-status-chip\" [class]=\"'chip-' + StatusColor(run)\">\n <i [class]=\"StatusIcon(run)\"></i>\n {{ run.Status }}\n </span>\n </td>\n <td class=\"duration-cell\">{{ FormatDuration(run) }}</td>\n <td>{{ run.TotalRecords | number }}</td>\n <td>{{ run.RunByUser }}</td>\n <td>\n <i class=\"fa-solid fa-chevron-right detail-arrow\"\n [class.rotated]=\"IsSelectedRun(run.ID)\"></i>\n </td>\n </tr>\n @if (IsSelectedRun(run.ID) && IsLoadingDetails) {\n <tr class=\"detail-row\">\n <td colspan=\"6\">\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n </td>\n </tr>\n }\n @if (IsSelectedRun(run.ID) && !IsLoadingDetails && RunDetails.length > 0) {\n <tr class=\"detail-row\">\n <td colspan=\"6\">\n <div class=\"detail-panel\">\n <h4>Entity Breakdown</h4>\n <table class=\"detail-table\">\n <thead>\n <tr>\n <th>Entity</th>\n <th>Processed</th>\n <th>Created</th>\n <th>Updated</th>\n <th>Errors</th>\n </tr>\n </thead>\n <tbody>\n @for (detail of RunDetails; track detail.ID) {\n <tr>\n <td>{{ detail.Entity }}</td>\n <td>{{ detail.RecordsProcessed | number }}</td>\n <td>{{ detail.RecordsCreated | number }}</td>\n <td>{{ detail.RecordsUpdated | number }}</td>\n <td [class.error-count]=\"detail.RecordsErrored > 0\">\n {{ detail.RecordsErrored | number }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <!-- Error details expandable -->\n @if (run.ErrorLog) {\n <div class=\"error-details-section\">\n <button class=\"error-toggle\" (click)=\"ToggleErrorLog($event)\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n Error Details\n <i class=\"fa-solid fa-chevron-down toggle-icon\"\n [class.rotated]=\"ShowErrorLog\"></i>\n </button>\n @if (ShowErrorLog) {\n <pre class=\"error-log\">{{ run.ErrorLog }}</pre>\n }\n </div>\n }\n </div>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n }\n `,\n styles: [`\n .history-loading, .history-empty {\n padding: 24px; text-align: center; color: #888;\n }\n .history-empty i { font-size: 24px; margin-bottom: 8px; display: block; }\n\n .history-panel { margin-top: 8px; }\n\n .history-table {\n width: 100%; border-collapse: collapse; font-size: 13px;\n }\n .history-table th {\n text-align: left; padding: 6px 8px;\n border-bottom: 2px solid #eee; color: #666; font-weight: 600;\n }\n .run-row { cursor: pointer; }\n .run-row:hover { background: #f8f9fa; }\n .run-row.selected { background: #f0f4ff; }\n .run-row td { padding: 6px 8px; border-bottom: 1px solid #f0f0f0; }\n\n /* Status Chips with icon */\n .run-status-chip {\n font-size: 11px; font-weight: 600; padding: 3px 8px;\n border-radius: 10px; display: inline-flex; align-items: center; gap: 4px;\n white-space: nowrap;\n }\n .chip-green { background: #e6f9ed; color: #1b7a3d; }\n .chip-amber { background: #fff7e0; color: #b5850a; }\n .chip-red { background: #fde8e8; color: #c62828; }\n\n .duration-cell {\n font-variant-numeric: tabular-nums;\n color: #555;\n }\n\n .detail-arrow { transition: transform 0.2s; font-size: 11px; color: #999; }\n .detail-arrow.rotated { transform: rotate(90deg); }\n\n .detail-row td { padding: 0; }\n .detail-panel {\n padding: 12px 16px; background: #fafbfc;\n border-left: 3px solid var(--primary-color, #4a6cf7);\n }\n .detail-panel h4 { margin: 0 0 8px 0; font-size: 13px; }\n\n .detail-table {\n width: 100%; border-collapse: collapse; font-size: 12px;\n }\n .detail-table th {\n text-align: left; padding: 4px 6px; color: #888; font-weight: 500;\n }\n .detail-table td { padding: 4px 6px; }\n .error-count { color: #c62828; font-weight: 600; }\n\n /* Error Details */\n .error-details-section {\n margin-top: 12px;\n border-top: 1px solid #eee;\n padding-top: 8px;\n }\n .error-toggle {\n background: none; border: none; cursor: pointer;\n font-size: 12px; font-weight: 600; color: #c62828;\n display: flex; align-items: center; gap: 6px;\n padding: 4px 0;\n }\n .error-toggle:hover { text-decoration: underline; }\n .toggle-icon {\n transition: transform 0.2s; font-size: 10px;\n }\n .toggle-icon.rotated { transform: rotate(180deg); }\n .error-log {\n margin: 8px 0 0 0; padding: 10px;\n background: #fff0f0; border: 1px solid #fdd;\n border-radius: 4px; font-size: 11px;\n white-space: pre-wrap; word-break: break-word;\n max-height: 200px; overflow-y: auto;\n color: #7a1111;\n }\n `]\n})\nexport class RunHistoryPanelComponent implements OnChanges {\n @Input() CompanyIntegrationID: string | null = null;\n @Input() ViewProvider: IRunViewProvider | null = null;\n\n Runs: IntegrationRunRow[] = [];\n RunDetails: RunDetailRow[] = [];\n SelectedRunID: string | null = null;\n IsLoading = false;\n IsLoadingDetails = false;\n ShowErrorLog = false;\n\n private dataService = inject(IntegrationDataService);\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['CompanyIntegrationID'] && this.CompanyIntegrationID) {\n this.LoadRuns();\n }\n }\n\n async LoadRuns(): Promise<void> {\n if (!this.CompanyIntegrationID) return;\n this.IsLoading = true;\n this.SelectedRunID = null;\n this.RunDetails = [];\n this.ShowErrorLog = false;\n try {\n this.Runs = await this.dataService.LoadRunHistory(\n this.CompanyIntegrationID, 10, this.ViewProvider\n );\n } finally {\n this.IsLoading = false;\n }\n }\n\n async OnRunClick(run: IntegrationRunRow): Promise<void> {\n if (UUIDsEqual(this.SelectedRunID, run.ID)) {\n this.SelectedRunID = null;\n this.RunDetails = [];\n this.ShowErrorLog = false;\n return;\n }\n this.SelectedRunID = run.ID;\n this.IsLoadingDetails = true;\n this.RunDetails = [];\n this.ShowErrorLog = false;\n try {\n this.RunDetails = await this.dataService.LoadRunDetails(run.ID, this.ViewProvider);\n } finally {\n this.IsLoadingDetails = false;\n }\n }\n\n IsSelectedRun(id: string): boolean {\n return UUIDsEqual(this.SelectedRunID, id);\n }\n\n StatusColor(run: IntegrationRunRow): RunStatusColorType {\n if (run.Status === 'Success') return 'green';\n if (run.Status === 'Failed') return 'red';\n return 'amber';\n }\n\n StatusIcon(run: IntegrationRunRow): string {\n if (run.Status === 'Success') return 'fa-solid fa-circle-check';\n if (run.Status === 'Failed') return 'fa-solid fa-circle-xmark';\n if (run.Status === 'In Progress') return 'fa-solid fa-spinner fa-spin';\n return 'fa-solid fa-clock';\n }\n\n FormatDate(dateStr: string | null): string {\n if (!dateStr) return '--';\n const d = new Date(dateStr);\n return d.toLocaleString(undefined, {\n month: 'short', day: 'numeric',\n hour: '2-digit', minute: '2-digit'\n });\n }\n\n FormatDuration(run: IntegrationRunRow): string {\n if (!run.StartedAt || !run.EndedAt) return '--';\n const ms = new Date(run.EndedAt).getTime() - new Date(run.StartedAt).getTime();\n return this.dataService.FormatDuration(ms);\n }\n\n ToggleErrorLog(event: Event): void {\n event.stopPropagation();\n this.ShowErrorLog = !this.ShowErrorLog;\n }\n}\n"]}
1
+ {"version":3,"file":"run-history-panel.component.js","sourceRoot":"","sources":["../../../../src/Integration/components/widgets/run-history-panel.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, OnChanges, SimpleChanges, inject } from '@angular/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { IRunViewProvider } from '@memberjunction/core';\nimport { IntegrationDataService, IntegrationRunRow, RunDetailRow } from '../../services/integration-data.service';\n\ntype RunStatusColorType = 'amber' | 'green' | 'red';\n\n@Component({\n standalone: false,\n selector: 'app-run-history-panel',\n template: `\n @if (IsLoading) {\n <div class=\"history-loading\">\n <mj-loading text=\"Loading run history...\" size=\"small\"></mj-loading>\n </div>\n } @else if (Runs.length === 0) {\n <div class=\"history-empty\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <p>No runs recorded yet</p>\n </div>\n } @else {\n <div class=\"history-panel\">\n <table class=\"history-table\">\n <thead>\n <tr>\n <th>Started</th>\n <th>Status</th>\n <th>Duration</th>\n <th>Records</th>\n <th>Run By</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (run of Runs; track run.ID) {\n <tr class=\"run-row\" [class.selected]=\"IsSelectedRun(run.ID)\"\n (click)=\"OnRunClick(run)\">\n <td>{{ FormatDate(run.StartedAt) }}</td>\n <td>\n <span class=\"run-status-chip\" [class]=\"'chip-' + StatusColor(run)\">\n <i [class]=\"StatusIcon(run)\"></i>\n {{ run.Status }}\n </span>\n </td>\n <td class=\"duration-cell\">{{ FormatDuration(run) }}</td>\n <td>{{ run.TotalRecords | number }}</td>\n <td>{{ run.RunByUser }}</td>\n <td>\n <i class=\"fa-solid fa-chevron-right detail-arrow\"\n [class.rotated]=\"IsSelectedRun(run.ID)\"></i>\n </td>\n </tr>\n @if (IsSelectedRun(run.ID) && IsLoadingDetails) {\n <tr class=\"detail-row\">\n <td colspan=\"6\">\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n </td>\n </tr>\n }\n @if (IsSelectedRun(run.ID) && !IsLoadingDetails && RunDetails.length > 0) {\n <tr class=\"detail-row\">\n <td colspan=\"6\">\n <div class=\"detail-panel\">\n <h4>Entity Breakdown</h4>\n <table class=\"detail-table\">\n <thead>\n <tr>\n <th>Entity</th>\n <th>Processed</th>\n <th>Created</th>\n <th>Updated</th>\n <th>Errors</th>\n </tr>\n </thead>\n <tbody>\n @for (detail of RunDetails; track detail.EntityID) {\n <tr>\n <td>{{ detail.Entity }}</td>\n <td>{{ detail.RecordsProcessed | number }}</td>\n <td>{{ detail.RecordsCreated | number }}</td>\n <td>{{ detail.RecordsUpdated | number }}</td>\n <td [class.error-count]=\"detail.RecordsErrored > 0\">\n {{ detail.RecordsErrored | number }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <!-- Error details expandable -->\n @if (run.ErrorLog) {\n <div class=\"error-details-section\">\n <button class=\"error-toggle\" (click)=\"ToggleErrorLog($event)\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n Error Details\n <i class=\"fa-solid fa-chevron-down toggle-icon\"\n [class.rotated]=\"ShowErrorLog\"></i>\n </button>\n @if (ShowErrorLog) {\n <pre class=\"error-log\">{{ run.ErrorLog }}</pre>\n }\n </div>\n }\n </div>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n }\n `,\n styles: [`\n .history-loading, .history-empty {\n padding: 24px; text-align: center; color: #888;\n }\n .history-empty i { font-size: 24px; margin-bottom: 8px; display: block; }\n\n .history-panel { margin-top: 8px; }\n\n .history-table {\n width: 100%; border-collapse: collapse; font-size: 13px;\n }\n .history-table th {\n text-align: left; padding: 6px 8px;\n border-bottom: 2px solid #eee; color: #666; font-weight: 600;\n }\n .run-row { cursor: pointer; }\n .run-row:hover { background: #f8f9fa; }\n .run-row.selected { background: #f0f4ff; }\n .run-row td { padding: 6px 8px; border-bottom: 1px solid #f0f0f0; }\n\n /* Status Chips with icon */\n .run-status-chip {\n font-size: 11px; font-weight: 600; padding: 3px 8px;\n border-radius: 10px; display: inline-flex; align-items: center; gap: 4px;\n white-space: nowrap;\n }\n .chip-green { background: #e6f9ed; color: #1b7a3d; }\n .chip-amber { background: #fff7e0; color: #b5850a; }\n .chip-red { background: #fde8e8; color: #c62828; }\n\n .duration-cell {\n font-variant-numeric: tabular-nums;\n color: #555;\n }\n\n .detail-arrow { transition: transform 0.2s; font-size: 11px; color: #999; }\n .detail-arrow.rotated { transform: rotate(90deg); }\n\n .detail-row td { padding: 0; }\n .detail-panel {\n padding: 12px 16px; background: #fafbfc;\n border-left: 3px solid var(--primary-color, #4a6cf7);\n }\n .detail-panel h4 { margin: 0 0 8px 0; font-size: 13px; }\n\n .detail-table {\n width: 100%; border-collapse: collapse; font-size: 12px;\n }\n .detail-table th {\n text-align: left; padding: 4px 6px; color: #888; font-weight: 500;\n }\n .detail-table td { padding: 4px 6px; }\n .error-count { color: #c62828; font-weight: 600; }\n\n /* Error Details */\n .error-details-section {\n margin-top: 12px;\n border-top: 1px solid #eee;\n padding-top: 8px;\n }\n .error-toggle {\n background: none; border: none; cursor: pointer;\n font-size: 12px; font-weight: 600; color: #c62828;\n display: flex; align-items: center; gap: 6px;\n padding: 4px 0;\n }\n .error-toggle:hover { text-decoration: underline; }\n .toggle-icon {\n transition: transform 0.2s; font-size: 10px;\n }\n .toggle-icon.rotated { transform: rotate(180deg); }\n .error-log {\n margin: 8px 0 0 0; padding: 10px;\n background: #fff0f0; border: 1px solid #fdd;\n border-radius: 4px; font-size: 11px;\n white-space: pre-wrap; word-break: break-word;\n max-height: 200px; overflow-y: auto;\n color: #7a1111;\n }\n `]\n})\nexport class RunHistoryPanelComponent implements OnChanges {\n @Input() CompanyIntegrationID: string | null = null;\n @Input() ViewProvider: IRunViewProvider | null = null;\n\n Runs: IntegrationRunRow[] = [];\n RunDetails: RunDetailRow[] = [];\n SelectedRunID: string | null = null;\n IsLoading = false;\n IsLoadingDetails = false;\n ShowErrorLog = false;\n\n private dataService = inject(IntegrationDataService);\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['CompanyIntegrationID'] && this.CompanyIntegrationID) {\n this.LoadRuns();\n }\n }\n\n async LoadRuns(): Promise<void> {\n if (!this.CompanyIntegrationID) return;\n this.IsLoading = true;\n this.SelectedRunID = null;\n this.RunDetails = [];\n this.ShowErrorLog = false;\n try {\n this.Runs = await this.dataService.LoadRunHistory(\n this.CompanyIntegrationID, 10, this.ViewProvider\n );\n } finally {\n this.IsLoading = false;\n }\n }\n\n async OnRunClick(run: IntegrationRunRow): Promise<void> {\n if (UUIDsEqual(this.SelectedRunID, run.ID)) {\n this.SelectedRunID = null;\n this.RunDetails = [];\n this.ShowErrorLog = false;\n return;\n }\n this.SelectedRunID = run.ID;\n this.IsLoadingDetails = true;\n this.RunDetails = [];\n this.ShowErrorLog = false;\n try {\n this.RunDetails = await this.dataService.LoadRunDetails(run.ID, this.ViewProvider);\n } finally {\n this.IsLoadingDetails = false;\n }\n }\n\n IsSelectedRun(id: string): boolean {\n return UUIDsEqual(this.SelectedRunID, id);\n }\n\n StatusColor(run: IntegrationRunRow): RunStatusColorType {\n if (run.Status === 'Success') return 'green';\n if (run.Status === 'Failed') return 'red';\n return 'amber';\n }\n\n StatusIcon(run: IntegrationRunRow): string {\n if (run.Status === 'Success') return 'fa-solid fa-circle-check';\n if (run.Status === 'Failed') return 'fa-solid fa-circle-xmark';\n if (run.Status === 'In Progress') return 'fa-solid fa-spinner fa-spin';\n return 'fa-solid fa-clock';\n }\n\n FormatDate(dateStr: string | null): string {\n if (!dateStr) return '--';\n const d = new Date(dateStr);\n return d.toLocaleString(undefined, {\n month: 'short', day: 'numeric',\n hour: '2-digit', minute: '2-digit'\n });\n }\n\n FormatDuration(run: IntegrationRunRow): string {\n if (!run.StartedAt || !run.EndedAt) return '--';\n const ms = new Date(run.EndedAt).getTime() - new Date(run.StartedAt).getTime();\n return this.dataService.FormatDuration(ms);\n }\n\n ToggleErrorLog(event: Event): void {\n event.stopPropagation();\n this.ShowErrorLog = !this.ShowErrorLog;\n }\n}\n"]}
@@ -1,8 +1,10 @@
1
1
  export * from './services/integration-data.service';
2
- export * from './components/control-tower/control-tower.component';
3
- export * from './components/connection-studio/connection-studio.component';
2
+ export * from './components/overview/overview.component';
3
+ export * from './components/pipelines/pipelines.component';
4
+ export * from './components/connections/connections.component';
4
5
  export * from './components/mapping-workspace/mapping-workspace.component';
5
- export * from './components/sync-activity/sync-activity.component';
6
+ export * from './components/activity/activity.component';
7
+ export * from './components/schedules/schedules.component';
6
8
  export * from './components/widgets/integration-card.component';
7
9
  export * from './components/widgets/run-history-panel.component';
8
10
  export * from './integration.module';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Integration/index.ts"],"names":[],"mappings":"AACA,cAAc,qCAAqC,CAAC;AAGpD,cAAc,oDAAoD,CAAC;AAGnE,cAAc,4DAA4D,CAAC;AAG3E,cAAc,4DAA4D,CAAC;AAG3E,cAAc,oDAAoD,CAAC;AAGnE,cAAc,iDAAiD,CAAC;AAChE,cAAc,kDAAkD,CAAC;AAGjE,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Integration/index.ts"],"names":[],"mappings":"AACA,cAAc,qCAAqC,CAAC;AAGpD,cAAc,0CAA0C,CAAC;AAGzD,cAAc,4CAA4C,CAAC;AAG3D,cAAc,gDAAgD,CAAC;AAG/D,cAAc,4DAA4D,CAAC;AAG3E,cAAc,0CAA0C,CAAC;AAGzD,cAAc,4CAA4C,CAAC;AAG3D,cAAc,iDAAiD,CAAC;AAChE,cAAc,kDAAkD,CAAC;AAGjE,cAAc,sBAAsB,CAAC"}
@@ -1,13 +1,17 @@
1
1
  // Services
2
2
  export * from './services/integration-data.service';
3
- // Control Tower
4
- export * from './components/control-tower/control-tower.component';
5
- // Connection Studio
6
- export * from './components/connection-studio/connection-studio.component';
7
- // Mapping Workspace
3
+ // Overview (default landing page)
4
+ export * from './components/overview/overview.component';
5
+ // Pipelines (visual SVG canvas)
6
+ export * from './components/pipelines/pipelines.component';
7
+ // Connections (connection management + wizard)
8
+ export * from './components/connections/connections.component';
9
+ // Mapping Workspace (field mapping editor)
8
10
  export * from './components/mapping-workspace/mapping-workspace.component';
9
- // Sync Activity
10
- export * from './components/sync-activity/sync-activity.component';
11
+ // Activity (sync history + monitoring)
12
+ export * from './components/activity/activity.component';
13
+ // Schedules (sync schedule management)
14
+ export * from './components/schedules/schedules.component';
11
15
  // Widgets
12
16
  export * from './components/widgets/integration-card.component';
13
17
  export * from './components/widgets/run-history-panel.component';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Integration/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,cAAc,qCAAqC,CAAC;AAEpD,gBAAgB;AAChB,cAAc,oDAAoD,CAAC;AAEnE,oBAAoB;AACpB,cAAc,4DAA4D,CAAC;AAE3E,oBAAoB;AACpB,cAAc,4DAA4D,CAAC;AAE3E,gBAAgB;AAChB,cAAc,oDAAoD,CAAC;AAEnE,UAAU;AACV,cAAc,iDAAiD,CAAC;AAChE,cAAc,kDAAkD,CAAC;AAEjE,SAAS;AACT,cAAc,sBAAsB,CAAC","sourcesContent":["// Services\nexport * from './services/integration-data.service';\n\n// Control Tower\nexport * from './components/control-tower/control-tower.component';\n\n// Connection Studio\nexport * from './components/connection-studio/connection-studio.component';\n\n// Mapping Workspace\nexport * from './components/mapping-workspace/mapping-workspace.component';\n\n// Sync Activity\nexport * from './components/sync-activity/sync-activity.component';\n\n// Widgets\nexport * from './components/widgets/integration-card.component';\nexport * from './components/widgets/run-history-panel.component';\n\n// Module\nexport * from './integration.module';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Integration/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,cAAc,qCAAqC,CAAC;AAEpD,kCAAkC;AAClC,cAAc,0CAA0C,CAAC;AAEzD,gCAAgC;AAChC,cAAc,4CAA4C,CAAC;AAE3D,+CAA+C;AAC/C,cAAc,gDAAgD,CAAC;AAE/D,2CAA2C;AAC3C,cAAc,4DAA4D,CAAC;AAE3E,uCAAuC;AACvC,cAAc,0CAA0C,CAAC;AAEzD,uCAAuC;AACvC,cAAc,4CAA4C,CAAC;AAE3D,UAAU;AACV,cAAc,iDAAiD,CAAC;AAChE,cAAc,kDAAkD,CAAC;AAEjE,SAAS;AACT,cAAc,sBAAsB,CAAC","sourcesContent":["// Services\nexport * from './services/integration-data.service';\n\n// Overview (default landing page)\nexport * from './components/overview/overview.component';\n\n// Pipelines (visual SVG canvas)\nexport * from './components/pipelines/pipelines.component';\n\n// Connections (connection management + wizard)\nexport * from './components/connections/connections.component';\n\n// Mapping Workspace (field mapping editor)\nexport * from './components/mapping-workspace/mapping-workspace.component';\n\n// Activity (sync history + monitoring)\nexport * from './components/activity/activity.component';\n\n// Schedules (sync schedule management)\nexport * from './components/schedules/schedules.component';\n\n// Widgets\nexport * from './components/widgets/integration-card.component';\nexport * from './components/widgets/run-history-panel.component';\n\n// Module\nexport * from './integration.module';\n"]}
@@ -1,22 +1,26 @@
1
1
  import * as i0 from "@angular/core";
2
- import * as i1 from "./components/control-tower/control-tower.component";
3
- import * as i2 from "./components/connection-studio/connection-studio.component";
4
- import * as i3 from "./components/mapping-workspace/mapping-workspace.component";
5
- import * as i4 from "./components/sync-activity/sync-activity.component";
6
- import * as i5 from "./components/widgets/integration-card.component";
7
- import * as i6 from "./components/widgets/run-history-panel.component";
8
- import * as i7 from "@angular/common";
9
- import * as i8 from "@angular/forms";
10
- import * as i9 from "@progress/kendo-angular-buttons";
11
- import * as i10 from "@progress/kendo-angular-dropdowns";
12
- import * as i11 from "@progress/kendo-angular-inputs";
13
- import * as i12 from "@progress/kendo-angular-grid";
14
- import * as i13 from "@progress/kendo-angular-layout";
15
- import * as i14 from "@memberjunction/ng-shared-generic";
16
- import * as i15 from "@memberjunction/ng-credentials";
2
+ import * as i1 from "./components/overview/overview.component";
3
+ import * as i2 from "./components/pipelines/pipelines.component";
4
+ import * as i3 from "./components/connections/connections.component";
5
+ import * as i4 from "./components/mapping-workspace/mapping-workspace.component";
6
+ import * as i5 from "./components/activity/activity.component";
7
+ import * as i6 from "./components/schedules/schedules.component";
8
+ import * as i7 from "./components/widgets/integration-card.component";
9
+ import * as i8 from "./components/widgets/run-history-panel.component";
10
+ import * as i9 from "./components/visual-editor/visual-editor.component";
11
+ import * as i10 from "@angular/common";
12
+ import * as i11 from "@angular/forms";
13
+ import * as i12 from "@progress/kendo-angular-buttons";
14
+ import * as i13 from "@progress/kendo-angular-dropdowns";
15
+ import * as i14 from "@progress/kendo-angular-inputs";
16
+ import * as i15 from "@progress/kendo-angular-grid";
17
+ import * as i16 from "@progress/kendo-angular-layout";
18
+ import * as i17 from "@memberjunction/ng-shared-generic";
19
+ import * as i18 from "@memberjunction/ng-credentials";
20
+ import * as i19 from "@memberjunction/ng-trees";
17
21
  export declare class IntegrationModule {
18
22
  static ɵfac: i0.ɵɵFactoryDeclaration<IntegrationModule, never>;
19
- static ɵmod: i0.ɵɵNgModuleDeclaration<IntegrationModule, [typeof i1.ControlTowerComponent, typeof i2.ConnectionStudioComponent, typeof i3.MappingWorkspaceComponent, typeof i4.SyncActivityComponent, typeof i5.IntegrationCardComponent, typeof i6.RunHistoryPanelComponent], [typeof i7.CommonModule, typeof i8.FormsModule, typeof i9.ButtonsModule, typeof i10.DropDownsModule, typeof i11.InputsModule, typeof i12.GridModule, typeof i13.LayoutModule, typeof i14.SharedGenericModule, typeof i15.CredentialsModule], [typeof i1.ControlTowerComponent, typeof i2.ConnectionStudioComponent, typeof i3.MappingWorkspaceComponent, typeof i4.SyncActivityComponent, typeof i5.IntegrationCardComponent, typeof i6.RunHistoryPanelComponent]>;
23
+ static ɵmod: i0.ɵɵNgModuleDeclaration<IntegrationModule, [typeof i1.OverviewComponent, typeof i2.PipelinesComponent, typeof i3.ConnectionsComponent, typeof i4.MappingWorkspaceComponent, typeof i5.ActivityComponent, typeof i6.SchedulesComponent, typeof i7.IntegrationCardComponent, typeof i8.RunHistoryPanelComponent, typeof i9.VisualFieldEditorComponent], [typeof i10.CommonModule, typeof i11.FormsModule, typeof i12.ButtonsModule, typeof i13.DropDownsModule, typeof i14.InputsModule, typeof i15.GridModule, typeof i16.LayoutModule, typeof i17.SharedGenericModule, typeof i18.CredentialsModule, typeof i19.NgTreesModule], [typeof i1.OverviewComponent, typeof i2.PipelinesComponent, typeof i3.ConnectionsComponent, typeof i4.MappingWorkspaceComponent, typeof i5.ActivityComponent, typeof i6.SchedulesComponent, typeof i7.IntegrationCardComponent, typeof i8.RunHistoryPanelComponent, typeof i9.VisualFieldEditorComponent]>;
20
24
  static ɵinj: i0.ɵɵInjectorDeclaration<IntegrationModule>;
21
25
  }
22
26
  //# sourceMappingURL=integration.module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"integration.module.d.ts","sourceRoot":"","sources":["../../src/Integration/integration.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAmBA,qBAgCa,iBAAiB;yCAAjB,iBAAiB;0CAAjB,iBAAiB;0CAAjB,iBAAiB;CAAI"}
1
+ {"version":3,"file":"integration.module.d.ts","sourceRoot":"","sources":["../../src/Integration/integration.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAuBA,qBAuCa,iBAAiB;yCAAjB,iBAAiB;0CAAjB,iBAAiB;0CAAjB,iBAAiB;CAAI"}
@@ -8,12 +8,16 @@ import { GridModule } from '@progress/kendo-angular-grid';
8
8
  import { LayoutModule } from '@progress/kendo-angular-layout';
9
9
  import { SharedGenericModule } from '@memberjunction/ng-shared-generic';
10
10
  import { CredentialsModule } from '@memberjunction/ng-credentials';
11
- import { ControlTowerComponent } from './components/control-tower/control-tower.component';
12
- import { ConnectionStudioComponent } from './components/connection-studio/connection-studio.component';
11
+ import { NgTreesModule } from '@memberjunction/ng-trees';
12
+ import { OverviewComponent } from './components/overview/overview.component';
13
+ import { PipelinesComponent } from './components/pipelines/pipelines.component';
14
+ import { ConnectionsComponent } from './components/connections/connections.component';
13
15
  import { MappingWorkspaceComponent } from './components/mapping-workspace/mapping-workspace.component';
14
- import { SyncActivityComponent } from './components/sync-activity/sync-activity.component';
16
+ import { ActivityComponent } from './components/activity/activity.component';
17
+ import { SchedulesComponent } from './components/schedules/schedules.component';
15
18
  import { IntegrationCardComponent } from './components/widgets/integration-card.component';
16
19
  import { RunHistoryPanelComponent } from './components/widgets/run-history-panel.component';
20
+ import { VisualFieldEditorComponent } from './components/visual-editor/visual-editor.component';
17
21
  import { IntegrationDataService } from './services/integration-data.service';
18
22
  import * as i0 from "@angular/core";
19
23
  export class IntegrationModule {
@@ -29,18 +33,22 @@ export class IntegrationModule {
29
33
  GridModule,
30
34
  LayoutModule,
31
35
  SharedGenericModule,
32
- CredentialsModule] });
36
+ CredentialsModule,
37
+ NgTreesModule] });
33
38
  }
34
39
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IntegrationModule, [{
35
40
  type: NgModule,
36
41
  args: [{
37
42
  declarations: [
38
- ControlTowerComponent,
39
- ConnectionStudioComponent,
43
+ OverviewComponent,
44
+ PipelinesComponent,
45
+ ConnectionsComponent,
40
46
  MappingWorkspaceComponent,
41
- SyncActivityComponent,
47
+ ActivityComponent,
48
+ SchedulesComponent,
42
49
  IntegrationCardComponent,
43
- RunHistoryPanelComponent
50
+ RunHistoryPanelComponent,
51
+ VisualFieldEditorComponent
44
52
  ],
45
53
  imports: [
46
54
  CommonModule,
@@ -51,27 +59,34 @@ export class IntegrationModule {
51
59
  GridModule,
52
60
  LayoutModule,
53
61
  SharedGenericModule,
54
- CredentialsModule
62
+ CredentialsModule,
63
+ NgTreesModule
55
64
  ],
56
65
  providers: [
57
66
  IntegrationDataService
58
67
  ],
59
68
  exports: [
60
- ControlTowerComponent,
61
- ConnectionStudioComponent,
69
+ OverviewComponent,
70
+ PipelinesComponent,
71
+ ConnectionsComponent,
62
72
  MappingWorkspaceComponent,
63
- SyncActivityComponent,
73
+ ActivityComponent,
74
+ SchedulesComponent,
64
75
  IntegrationCardComponent,
65
- RunHistoryPanelComponent
76
+ RunHistoryPanelComponent,
77
+ VisualFieldEditorComponent
66
78
  ]
67
79
  }]
68
80
  }], null, null); })();
69
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(IntegrationModule, { declarations: [ControlTowerComponent,
70
- ConnectionStudioComponent,
81
+ (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(IntegrationModule, { declarations: [OverviewComponent,
82
+ PipelinesComponent,
83
+ ConnectionsComponent,
71
84
  MappingWorkspaceComponent,
72
- SyncActivityComponent,
85
+ ActivityComponent,
86
+ SchedulesComponent,
73
87
  IntegrationCardComponent,
74
- RunHistoryPanelComponent], imports: [CommonModule,
88
+ RunHistoryPanelComponent,
89
+ VisualFieldEditorComponent], imports: [CommonModule,
75
90
  FormsModule,
76
91
  ButtonsModule,
77
92
  DropDownsModule,
@@ -79,10 +94,14 @@ export class IntegrationModule {
79
94
  GridModule,
80
95
  LayoutModule,
81
96
  SharedGenericModule,
82
- CredentialsModule], exports: [ControlTowerComponent,
83
- ConnectionStudioComponent,
97
+ CredentialsModule,
98
+ NgTreesModule], exports: [OverviewComponent,
99
+ PipelinesComponent,
100
+ ConnectionsComponent,
84
101
  MappingWorkspaceComponent,
85
- SyncActivityComponent,
102
+ ActivityComponent,
103
+ SchedulesComponent,
86
104
  IntegrationCardComponent,
87
- RunHistoryPanelComponent] }); })();
105
+ RunHistoryPanelComponent,
106
+ VisualFieldEditorComponent] }); })();
88
107
  //# sourceMappingURL=integration.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"integration.module.js","sourceRoot":"","sources":["../../src/Integration/integration.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAC3F,OAAO,EAAE,yBAAyB,EAAE,MAAM,4DAA4D,CAAC;AACvG,OAAO,EAAE,yBAAyB,EAAE,MAAM,4DAA4D,CAAC;AACvG,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAC3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,kDAAkD,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;;AAkC7E,MAAM,OAAO,iBAAiB;2GAAjB,iBAAiB;4DAAjB,iBAAiB;iEAZjB;YACT,sBAAsB;SACvB,YAZC,YAAY;YACZ,WAAW;YACX,aAAa;YACb,eAAe;YACf,YAAY;YACZ,UAAU;YACV,YAAY;YACZ,mBAAmB;YACnB,iBAAiB;;iFAcR,iBAAiB;cAhC7B,QAAQ;eAAC;gBACR,YAAY,EAAE;oBACZ,qBAAqB;oBACrB,yBAAyB;oBACzB,yBAAyB;oBACzB,qBAAqB;oBACrB,wBAAwB;oBACxB,wBAAwB;iBACzB;gBACD,OAAO,EAAE;oBACP,YAAY;oBACZ,WAAW;oBACX,aAAa;oBACb,eAAe;oBACf,YAAY;oBACZ,UAAU;oBACV,YAAY;oBACZ,mBAAmB;oBACnB,iBAAiB;iBAClB;gBACD,SAAS,EAAE;oBACT,sBAAsB;iBACvB;gBACD,OAAO,EAAE;oBACP,qBAAqB;oBACrB,yBAAyB;oBACzB,yBAAyB;oBACzB,qBAAqB;oBACrB,wBAAwB;oBACxB,wBAAwB;iBACzB;aACF;;wFACY,iBAAiB,mBA9B1B,qBAAqB;QACrB,yBAAyB;QACzB,yBAAyB;QACzB,qBAAqB;QACrB,wBAAwB;QACxB,wBAAwB,aAGxB,YAAY;QACZ,WAAW;QACX,aAAa;QACb,eAAe;QACf,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,mBAAmB;QACnB,iBAAiB,aAMjB,qBAAqB;QACrB,yBAAyB;QACzB,yBAAyB;QACzB,qBAAqB;QACrB,wBAAwB;QACxB,wBAAwB","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport { GridModule } from '@progress/kendo-angular-grid';\nimport { LayoutModule } from '@progress/kendo-angular-layout';\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\nimport { CredentialsModule } from '@memberjunction/ng-credentials';\n\nimport { ControlTowerComponent } from './components/control-tower/control-tower.component';\nimport { ConnectionStudioComponent } from './components/connection-studio/connection-studio.component';\nimport { MappingWorkspaceComponent } from './components/mapping-workspace/mapping-workspace.component';\nimport { SyncActivityComponent } from './components/sync-activity/sync-activity.component';\nimport { IntegrationCardComponent } from './components/widgets/integration-card.component';\nimport { RunHistoryPanelComponent } from './components/widgets/run-history-panel.component';\nimport { IntegrationDataService } from './services/integration-data.service';\n\n@NgModule({\n declarations: [\n ControlTowerComponent,\n ConnectionStudioComponent,\n MappingWorkspaceComponent,\n SyncActivityComponent,\n IntegrationCardComponent,\n RunHistoryPanelComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ButtonsModule,\n DropDownsModule,\n InputsModule,\n GridModule,\n LayoutModule,\n SharedGenericModule,\n CredentialsModule\n ],\n providers: [\n IntegrationDataService\n ],\n exports: [\n ControlTowerComponent,\n ConnectionStudioComponent,\n MappingWorkspaceComponent,\n SyncActivityComponent,\n IntegrationCardComponent,\n RunHistoryPanelComponent\n ]\n})\nexport class IntegrationModule { }\n"]}
1
+ {"version":3,"file":"integration.module.js","sourceRoot":"","sources":["../../src/Integration/integration.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4DAA4D,CAAC;AACvG,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,kDAAkD,CAAC;AAC5F,OAAO,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAC;AAChG,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;;AAyC7E,MAAM,OAAO,iBAAiB;2GAAjB,iBAAiB;4DAAjB,iBAAiB;iEAfjB;YACT,sBAAsB;SACvB,YAbC,YAAY;YACZ,WAAW;YACX,aAAa;YACb,eAAe;YACf,YAAY;YACZ,UAAU;YACV,YAAY;YACZ,mBAAmB;YACnB,iBAAiB;YACjB,aAAa;;iFAiBJ,iBAAiB;cAvC7B,QAAQ;eAAC;gBACR,YAAY,EAAE;oBACZ,iBAAiB;oBACjB,kBAAkB;oBAClB,oBAAoB;oBACpB,yBAAyB;oBACzB,iBAAiB;oBACjB,kBAAkB;oBAClB,wBAAwB;oBACxB,wBAAwB;oBACxB,0BAA0B;iBAC3B;gBACD,OAAO,EAAE;oBACP,YAAY;oBACZ,WAAW;oBACX,aAAa;oBACb,eAAe;oBACf,YAAY;oBACZ,UAAU;oBACV,YAAY;oBACZ,mBAAmB;oBACnB,iBAAiB;oBACjB,aAAa;iBACd;gBACD,SAAS,EAAE;oBACT,sBAAsB;iBACvB;gBACD,OAAO,EAAE;oBACP,iBAAiB;oBACjB,kBAAkB;oBAClB,oBAAoB;oBACpB,yBAAyB;oBACzB,iBAAiB;oBACjB,kBAAkB;oBAClB,wBAAwB;oBACxB,wBAAwB;oBACxB,0BAA0B;iBAC3B;aACF;;wFACY,iBAAiB,mBArC1B,iBAAiB;QACjB,kBAAkB;QAClB,oBAAoB;QACpB,yBAAyB;QACzB,iBAAiB;QACjB,kBAAkB;QAClB,wBAAwB;QACxB,wBAAwB;QACxB,0BAA0B,aAG1B,YAAY;QACZ,WAAW;QACX,aAAa;QACb,eAAe;QACf,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,mBAAmB;QACnB,iBAAiB;QACjB,aAAa,aAMb,iBAAiB;QACjB,kBAAkB;QAClB,oBAAoB;QACpB,yBAAyB;QACzB,iBAAiB;QACjB,kBAAkB;QAClB,wBAAwB;QACxB,wBAAwB;QACxB,0BAA0B","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport { GridModule } from '@progress/kendo-angular-grid';\nimport { LayoutModule } from '@progress/kendo-angular-layout';\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\nimport { CredentialsModule } from '@memberjunction/ng-credentials';\nimport { NgTreesModule } from '@memberjunction/ng-trees';\n\nimport { OverviewComponent } from './components/overview/overview.component';\nimport { PipelinesComponent } from './components/pipelines/pipelines.component';\nimport { ConnectionsComponent } from './components/connections/connections.component';\nimport { MappingWorkspaceComponent } from './components/mapping-workspace/mapping-workspace.component';\nimport { ActivityComponent } from './components/activity/activity.component';\nimport { SchedulesComponent } from './components/schedules/schedules.component';\nimport { IntegrationCardComponent } from './components/widgets/integration-card.component';\nimport { RunHistoryPanelComponent } from './components/widgets/run-history-panel.component';\nimport { VisualFieldEditorComponent } from './components/visual-editor/visual-editor.component';\nimport { IntegrationDataService } from './services/integration-data.service';\n\n@NgModule({\n declarations: [\n OverviewComponent,\n PipelinesComponent,\n ConnectionsComponent,\n MappingWorkspaceComponent,\n ActivityComponent,\n SchedulesComponent,\n IntegrationCardComponent,\n RunHistoryPanelComponent,\n VisualFieldEditorComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ButtonsModule,\n DropDownsModule,\n InputsModule,\n GridModule,\n LayoutModule,\n SharedGenericModule,\n CredentialsModule,\n NgTreesModule\n ],\n providers: [\n IntegrationDataService\n ],\n exports: [\n OverviewComponent,\n PipelinesComponent,\n ConnectionsComponent,\n MappingWorkspaceComponent,\n ActivityComponent,\n SchedulesComponent,\n IntegrationCardComponent,\n RunHistoryPanelComponent,\n VisualFieldEditorComponent\n ]\n})\nexport class IntegrationModule { }\n"]}