@memberjunction/ng-dashboards 5.7.0 → 5.8.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.
- package/dist/Integration/components/connection-studio/connection-studio.component.d.ts +81 -0
- package/dist/Integration/components/connection-studio/connection-studio.component.d.ts.map +1 -0
- package/dist/Integration/components/connection-studio/connection-studio.component.js +960 -0
- package/dist/Integration/components/connection-studio/connection-studio.component.js.map +1 -0
- package/dist/Integration/components/control-tower/control-tower.component.d.ts +43 -0
- package/dist/Integration/components/control-tower/control-tower.component.d.ts.map +1 -0
- package/dist/Integration/components/control-tower/control-tower.component.js +446 -0
- package/dist/Integration/components/control-tower/control-tower.component.js.map +1 -0
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts +43 -0
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -0
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +467 -0
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -0
- package/dist/Integration/components/sync-activity/sync-activity.component.d.ts +65 -0
- package/dist/Integration/components/sync-activity/sync-activity.component.d.ts.map +1 -0
- package/dist/Integration/components/sync-activity/sync-activity.component.js +671 -0
- package/dist/Integration/components/sync-activity/sync-activity.component.js.map +1 -0
- package/dist/Integration/components/widgets/integration-card.component.d.ts +22 -0
- package/dist/Integration/components/widgets/integration-card.component.d.ts.map +1 -0
- package/dist/Integration/components/widgets/integration-card.component.js +262 -0
- package/dist/Integration/components/widgets/integration-card.component.js.map +1 -0
- package/dist/Integration/components/widgets/run-history-panel.component.d.ts +29 -0
- package/dist/Integration/components/widgets/run-history-panel.component.d.ts.map +1 -0
- package/dist/Integration/components/widgets/run-history-panel.component.js +398 -0
- package/dist/Integration/components/widgets/run-history-panel.component.js.map +1 -0
- package/dist/Integration/index.d.ts +9 -0
- package/dist/Integration/index.d.ts.map +1 -0
- package/dist/Integration/index.js +16 -0
- package/dist/Integration/index.js.map +1 -0
- package/dist/Integration/integration.module.d.ts +22 -0
- package/dist/Integration/integration.module.d.ts.map +1 -0
- package/dist/Integration/integration.module.js +88 -0
- package/dist/Integration/integration.module.js.map +1 -0
- package/dist/Integration/services/integration-data.service.d.ts +154 -0
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -0
- package/dist/Integration/services/integration-data.service.js +292 -0
- package/dist/Integration/services/integration-data.service.js.map +1 -0
- package/dist/__tests__/connection-studio.test.d.ts +2 -0
- package/dist/__tests__/connection-studio.test.d.ts.map +1 -0
- package/dist/__tests__/connection-studio.test.js +186 -0
- package/dist/__tests__/connection-studio.test.js.map +1 -0
- package/dist/__tests__/integration-data-service.test.d.ts +2 -0
- package/dist/__tests__/integration-data-service.test.d.ts.map +1 -0
- package/dist/__tests__/integration-data-service.test.js +131 -0
- package/dist/__tests__/integration-data-service.test.js.map +1 -0
- package/dist/module.d.ts +2 -1
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +17 -6
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +2 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -1
- package/dist/public-api.js.map +1 -1
- package/package.json +40 -39
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
import { Component, Input, inject } from '@angular/core';
|
|
2
|
+
import { UUIDsEqual } from '@memberjunction/global';
|
|
3
|
+
import { IntegrationDataService } from '../../services/integration-data.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@memberjunction/ng-shared-generic";
|
|
6
|
+
import * as i2 from "@angular/common";
|
|
7
|
+
const _forTrack0 = ($index, $item) => $item.ID;
|
|
8
|
+
function RunHistoryPanelComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
9
|
+
i0.ɵɵelementStart(0, "div", 0);
|
|
10
|
+
i0.ɵɵelement(1, "mj-loading", 3);
|
|
11
|
+
i0.ɵɵelementEnd();
|
|
12
|
+
} }
|
|
13
|
+
function RunHistoryPanelComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
14
|
+
i0.ɵɵelementStart(0, "div", 1);
|
|
15
|
+
i0.ɵɵelement(1, "i", 4);
|
|
16
|
+
i0.ɵɵelementStart(2, "p");
|
|
17
|
+
i0.ɵɵtext(3, "No runs recorded yet");
|
|
18
|
+
i0.ɵɵelementEnd()();
|
|
19
|
+
} }
|
|
20
|
+
function RunHistoryPanelComponent_Conditional_2_For_17_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
21
|
+
i0.ɵɵelementStart(0, "tr", 10)(1, "td", 11);
|
|
22
|
+
i0.ɵɵelement(2, "mj-loading", 12);
|
|
23
|
+
i0.ɵɵelementEnd()();
|
|
24
|
+
} }
|
|
25
|
+
function RunHistoryPanelComponent_Conditional_2_For_17_Conditional_17_For_20_Template(rf, ctx) { if (rf & 1) {
|
|
26
|
+
i0.ɵɵelementStart(0, "tr")(1, "td");
|
|
27
|
+
i0.ɵɵtext(2);
|
|
28
|
+
i0.ɵɵelementEnd();
|
|
29
|
+
i0.ɵɵelementStart(3, "td");
|
|
30
|
+
i0.ɵɵtext(4);
|
|
31
|
+
i0.ɵɵpipe(5, "number");
|
|
32
|
+
i0.ɵɵelementEnd();
|
|
33
|
+
i0.ɵɵelementStart(6, "td");
|
|
34
|
+
i0.ɵɵtext(7);
|
|
35
|
+
i0.ɵɵpipe(8, "number");
|
|
36
|
+
i0.ɵɵelementEnd();
|
|
37
|
+
i0.ɵɵelementStart(9, "td");
|
|
38
|
+
i0.ɵɵtext(10);
|
|
39
|
+
i0.ɵɵpipe(11, "number");
|
|
40
|
+
i0.ɵɵelementEnd();
|
|
41
|
+
i0.ɵɵelementStart(12, "td");
|
|
42
|
+
i0.ɵɵtext(13);
|
|
43
|
+
i0.ɵɵpipe(14, "number");
|
|
44
|
+
i0.ɵɵelementEnd()();
|
|
45
|
+
} if (rf & 2) {
|
|
46
|
+
const detail_r4 = ctx.$implicit;
|
|
47
|
+
i0.ɵɵadvance(2);
|
|
48
|
+
i0.ɵɵtextInterpolate(detail_r4.Entity);
|
|
49
|
+
i0.ɵɵadvance(2);
|
|
50
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 7, detail_r4.RecordsProcessed));
|
|
51
|
+
i0.ɵɵadvance(3);
|
|
52
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(8, 9, detail_r4.RecordsCreated));
|
|
53
|
+
i0.ɵɵadvance(3);
|
|
54
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(11, 11, detail_r4.RecordsUpdated));
|
|
55
|
+
i0.ɵɵadvance(2);
|
|
56
|
+
i0.ɵɵclassProp("error-count", detail_r4.RecordsErrored > 0);
|
|
57
|
+
i0.ɵɵadvance();
|
|
58
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(14, 13, detail_r4.RecordsErrored), " ");
|
|
59
|
+
} }
|
|
60
|
+
function RunHistoryPanelComponent_Conditional_2_For_17_Conditional_17_Conditional_21_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
61
|
+
i0.ɵɵelementStart(0, "pre", 19);
|
|
62
|
+
i0.ɵɵtext(1);
|
|
63
|
+
i0.ɵɵelementEnd();
|
|
64
|
+
} if (rf & 2) {
|
|
65
|
+
const run_r2 = i0.ɵɵnextContext(3).$implicit;
|
|
66
|
+
i0.ɵɵadvance();
|
|
67
|
+
i0.ɵɵtextInterpolate(run_r2.ErrorLog);
|
|
68
|
+
} }
|
|
69
|
+
function RunHistoryPanelComponent_Conditional_2_For_17_Conditional_17_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
70
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
71
|
+
i0.ɵɵelementStart(0, "div", 15)(1, "button", 16);
|
|
72
|
+
i0.ɵɵlistener("click", function RunHistoryPanelComponent_Conditional_2_For_17_Conditional_17_Conditional_21_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ToggleErrorLog($event)); });
|
|
73
|
+
i0.ɵɵelement(2, "i", 17);
|
|
74
|
+
i0.ɵɵtext(3, " Error Details ");
|
|
75
|
+
i0.ɵɵelement(4, "i", 18);
|
|
76
|
+
i0.ɵɵelementEnd();
|
|
77
|
+
i0.ɵɵconditionalCreate(5, RunHistoryPanelComponent_Conditional_2_For_17_Conditional_17_Conditional_21_Conditional_5_Template, 2, 1, "pre", 19);
|
|
78
|
+
i0.ɵɵelementEnd();
|
|
79
|
+
} if (rf & 2) {
|
|
80
|
+
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
81
|
+
i0.ɵɵadvance(4);
|
|
82
|
+
i0.ɵɵclassProp("rotated", ctx_r2.ShowErrorLog);
|
|
83
|
+
i0.ɵɵadvance();
|
|
84
|
+
i0.ɵɵconditional(ctx_r2.ShowErrorLog ? 5 : -1);
|
|
85
|
+
} }
|
|
86
|
+
function RunHistoryPanelComponent_Conditional_2_For_17_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
87
|
+
i0.ɵɵelementStart(0, "tr", 10)(1, "td", 11)(2, "div", 13)(3, "h4");
|
|
88
|
+
i0.ɵɵtext(4, "Entity Breakdown");
|
|
89
|
+
i0.ɵɵelementEnd();
|
|
90
|
+
i0.ɵɵelementStart(5, "table", 14)(6, "thead")(7, "tr")(8, "th");
|
|
91
|
+
i0.ɵɵtext(9, "Entity");
|
|
92
|
+
i0.ɵɵelementEnd();
|
|
93
|
+
i0.ɵɵelementStart(10, "th");
|
|
94
|
+
i0.ɵɵtext(11, "Processed");
|
|
95
|
+
i0.ɵɵelementEnd();
|
|
96
|
+
i0.ɵɵelementStart(12, "th");
|
|
97
|
+
i0.ɵɵtext(13, "Created");
|
|
98
|
+
i0.ɵɵelementEnd();
|
|
99
|
+
i0.ɵɵelementStart(14, "th");
|
|
100
|
+
i0.ɵɵtext(15, "Updated");
|
|
101
|
+
i0.ɵɵelementEnd();
|
|
102
|
+
i0.ɵɵelementStart(16, "th");
|
|
103
|
+
i0.ɵɵtext(17, "Errors");
|
|
104
|
+
i0.ɵɵelementEnd()()();
|
|
105
|
+
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.ɵɵelementEnd()();
|
|
108
|
+
i0.ɵɵconditionalCreate(21, RunHistoryPanelComponent_Conditional_2_For_17_Conditional_17_Conditional_21_Template, 6, 3, "div", 15);
|
|
109
|
+
i0.ɵɵelementEnd()()();
|
|
110
|
+
} if (rf & 2) {
|
|
111
|
+
const run_r2 = i0.ɵɵnextContext().$implicit;
|
|
112
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
113
|
+
i0.ɵɵadvance(19);
|
|
114
|
+
i0.ɵɵrepeater(ctx_r2.RunDetails);
|
|
115
|
+
i0.ɵɵadvance(2);
|
|
116
|
+
i0.ɵɵconditional(run_r2.ErrorLog ? 21 : -1);
|
|
117
|
+
} }
|
|
118
|
+
function RunHistoryPanelComponent_Conditional_2_For_17_Template(rf, ctx) { if (rf & 1) {
|
|
119
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
120
|
+
i0.ɵɵelementStart(0, "tr", 6);
|
|
121
|
+
i0.ɵɵlistener("click", function RunHistoryPanelComponent_Conditional_2_For_17_Template_tr_click_0_listener() { const run_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnRunClick(run_r2)); });
|
|
122
|
+
i0.ɵɵelementStart(1, "td");
|
|
123
|
+
i0.ɵɵtext(2);
|
|
124
|
+
i0.ɵɵelementEnd();
|
|
125
|
+
i0.ɵɵelementStart(3, "td")(4, "span", 7);
|
|
126
|
+
i0.ɵɵelement(5, "i");
|
|
127
|
+
i0.ɵɵtext(6);
|
|
128
|
+
i0.ɵɵelementEnd()();
|
|
129
|
+
i0.ɵɵelementStart(7, "td", 8);
|
|
130
|
+
i0.ɵɵtext(8);
|
|
131
|
+
i0.ɵɵelementEnd();
|
|
132
|
+
i0.ɵɵelementStart(9, "td");
|
|
133
|
+
i0.ɵɵtext(10);
|
|
134
|
+
i0.ɵɵpipe(11, "number");
|
|
135
|
+
i0.ɵɵelementEnd();
|
|
136
|
+
i0.ɵɵelementStart(12, "td");
|
|
137
|
+
i0.ɵɵtext(13);
|
|
138
|
+
i0.ɵɵelementEnd();
|
|
139
|
+
i0.ɵɵelementStart(14, "td");
|
|
140
|
+
i0.ɵɵelement(15, "i", 9);
|
|
141
|
+
i0.ɵɵelementEnd()();
|
|
142
|
+
i0.ɵɵconditionalCreate(16, RunHistoryPanelComponent_Conditional_2_For_17_Conditional_16_Template, 3, 0, "tr", 10);
|
|
143
|
+
i0.ɵɵconditionalCreate(17, RunHistoryPanelComponent_Conditional_2_For_17_Conditional_17_Template, 22, 1, "tr", 10);
|
|
144
|
+
} if (rf & 2) {
|
|
145
|
+
const run_r2 = ctx.$implicit;
|
|
146
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
147
|
+
i0.ɵɵclassProp("selected", ctx_r2.IsSelectedRun(run_r2.ID));
|
|
148
|
+
i0.ɵɵadvance(2);
|
|
149
|
+
i0.ɵɵtextInterpolate(ctx_r2.FormatDate(run_r2.StartedAt));
|
|
150
|
+
i0.ɵɵadvance(2);
|
|
151
|
+
i0.ɵɵclassMap("chip-" + ctx_r2.StatusColor(run_r2));
|
|
152
|
+
i0.ɵɵadvance();
|
|
153
|
+
i0.ɵɵclassMap(ctx_r2.StatusIcon(run_r2));
|
|
154
|
+
i0.ɵɵadvance();
|
|
155
|
+
i0.ɵɵtextInterpolate1(" ", run_r2.Status, " ");
|
|
156
|
+
i0.ɵɵadvance(2);
|
|
157
|
+
i0.ɵɵtextInterpolate(ctx_r2.FormatDuration(run_r2));
|
|
158
|
+
i0.ɵɵadvance(2);
|
|
159
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(11, 15, run_r2.TotalRecords));
|
|
160
|
+
i0.ɵɵadvance(3);
|
|
161
|
+
i0.ɵɵtextInterpolate(run_r2.RunByUser);
|
|
162
|
+
i0.ɵɵadvance(2);
|
|
163
|
+
i0.ɵɵclassProp("rotated", ctx_r2.IsSelectedRun(run_r2.ID));
|
|
164
|
+
i0.ɵɵadvance();
|
|
165
|
+
i0.ɵɵconditional(ctx_r2.IsSelectedRun(run_r2.ID) && ctx_r2.IsLoadingDetails ? 16 : -1);
|
|
166
|
+
i0.ɵɵadvance();
|
|
167
|
+
i0.ɵɵconditional(ctx_r2.IsSelectedRun(run_r2.ID) && !ctx_r2.IsLoadingDetails && ctx_r2.RunDetails.length > 0 ? 17 : -1);
|
|
168
|
+
} }
|
|
169
|
+
function RunHistoryPanelComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
170
|
+
i0.ɵɵelementStart(0, "div", 2)(1, "table", 5)(2, "thead")(3, "tr")(4, "th");
|
|
171
|
+
i0.ɵɵtext(5, "Started");
|
|
172
|
+
i0.ɵɵelementEnd();
|
|
173
|
+
i0.ɵɵelementStart(6, "th");
|
|
174
|
+
i0.ɵɵtext(7, "Status");
|
|
175
|
+
i0.ɵɵelementEnd();
|
|
176
|
+
i0.ɵɵelementStart(8, "th");
|
|
177
|
+
i0.ɵɵtext(9, "Duration");
|
|
178
|
+
i0.ɵɵelementEnd();
|
|
179
|
+
i0.ɵɵelementStart(10, "th");
|
|
180
|
+
i0.ɵɵtext(11, "Records");
|
|
181
|
+
i0.ɵɵelementEnd();
|
|
182
|
+
i0.ɵɵelementStart(12, "th");
|
|
183
|
+
i0.ɵɵtext(13, "Run By");
|
|
184
|
+
i0.ɵɵelementEnd();
|
|
185
|
+
i0.ɵɵelement(14, "th");
|
|
186
|
+
i0.ɵɵelementEnd()();
|
|
187
|
+
i0.ɵɵelementStart(15, "tbody");
|
|
188
|
+
i0.ɵɵrepeaterCreate(16, RunHistoryPanelComponent_Conditional_2_For_17_Template, 18, 17, null, null, _forTrack0);
|
|
189
|
+
i0.ɵɵelementEnd()()();
|
|
190
|
+
} if (rf & 2) {
|
|
191
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
192
|
+
i0.ɵɵadvance(16);
|
|
193
|
+
i0.ɵɵrepeater(ctx_r2.Runs);
|
|
194
|
+
} }
|
|
195
|
+
export class RunHistoryPanelComponent {
|
|
196
|
+
CompanyIntegrationID = null;
|
|
197
|
+
ViewProvider = null;
|
|
198
|
+
Runs = [];
|
|
199
|
+
RunDetails = [];
|
|
200
|
+
SelectedRunID = null;
|
|
201
|
+
IsLoading = false;
|
|
202
|
+
IsLoadingDetails = false;
|
|
203
|
+
ShowErrorLog = false;
|
|
204
|
+
dataService = inject(IntegrationDataService);
|
|
205
|
+
ngOnChanges(changes) {
|
|
206
|
+
if (changes['CompanyIntegrationID'] && this.CompanyIntegrationID) {
|
|
207
|
+
this.LoadRuns();
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
async LoadRuns() {
|
|
211
|
+
if (!this.CompanyIntegrationID)
|
|
212
|
+
return;
|
|
213
|
+
this.IsLoading = true;
|
|
214
|
+
this.SelectedRunID = null;
|
|
215
|
+
this.RunDetails = [];
|
|
216
|
+
this.ShowErrorLog = false;
|
|
217
|
+
try {
|
|
218
|
+
this.Runs = await this.dataService.LoadRunHistory(this.CompanyIntegrationID, 10, this.ViewProvider);
|
|
219
|
+
}
|
|
220
|
+
finally {
|
|
221
|
+
this.IsLoading = false;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
async OnRunClick(run) {
|
|
225
|
+
if (UUIDsEqual(this.SelectedRunID, run.ID)) {
|
|
226
|
+
this.SelectedRunID = null;
|
|
227
|
+
this.RunDetails = [];
|
|
228
|
+
this.ShowErrorLog = false;
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
this.SelectedRunID = run.ID;
|
|
232
|
+
this.IsLoadingDetails = true;
|
|
233
|
+
this.RunDetails = [];
|
|
234
|
+
this.ShowErrorLog = false;
|
|
235
|
+
try {
|
|
236
|
+
this.RunDetails = await this.dataService.LoadRunDetails(run.ID, this.ViewProvider);
|
|
237
|
+
}
|
|
238
|
+
finally {
|
|
239
|
+
this.IsLoadingDetails = false;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
IsSelectedRun(id) {
|
|
243
|
+
return UUIDsEqual(this.SelectedRunID, id);
|
|
244
|
+
}
|
|
245
|
+
StatusColor(run) {
|
|
246
|
+
if (run.Status === 'Success')
|
|
247
|
+
return 'green';
|
|
248
|
+
if (run.Status === 'Failed')
|
|
249
|
+
return 'red';
|
|
250
|
+
return 'amber';
|
|
251
|
+
}
|
|
252
|
+
StatusIcon(run) {
|
|
253
|
+
if (run.Status === 'Success')
|
|
254
|
+
return 'fa-solid fa-circle-check';
|
|
255
|
+
if (run.Status === 'Failed')
|
|
256
|
+
return 'fa-solid fa-circle-xmark';
|
|
257
|
+
if (run.Status === 'In Progress')
|
|
258
|
+
return 'fa-solid fa-spinner fa-spin';
|
|
259
|
+
return 'fa-solid fa-clock';
|
|
260
|
+
}
|
|
261
|
+
FormatDate(dateStr) {
|
|
262
|
+
if (!dateStr)
|
|
263
|
+
return '--';
|
|
264
|
+
const d = new Date(dateStr);
|
|
265
|
+
return d.toLocaleString(undefined, {
|
|
266
|
+
month: 'short', day: 'numeric',
|
|
267
|
+
hour: '2-digit', minute: '2-digit'
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
FormatDuration(run) {
|
|
271
|
+
if (!run.StartedAt || !run.EndedAt)
|
|
272
|
+
return '--';
|
|
273
|
+
const ms = new Date(run.EndedAt).getTime() - new Date(run.StartedAt).getTime();
|
|
274
|
+
return this.dataService.FormatDuration(ms);
|
|
275
|
+
}
|
|
276
|
+
ToggleErrorLog(event) {
|
|
277
|
+
event.stopPropagation();
|
|
278
|
+
this.ShowErrorLog = !this.ShowErrorLog;
|
|
279
|
+
}
|
|
280
|
+
static ɵfac = function RunHistoryPanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || RunHistoryPanelComponent)(); };
|
|
281
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RunHistoryPanelComponent, selectors: [["app-run-history-panel"]], inputs: { CompanyIntegrationID: "CompanyIntegrationID", ViewProvider: "ViewProvider" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 3, vars: 1, consts: [[1, "history-loading"], [1, "history-empty"], [1, "history-panel"], ["text", "Loading run history...", "size", "small"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "history-table"], [1, "run-row", 3, "click"], [1, "run-status-chip"], [1, "duration-cell"], [1, "fa-solid", "fa-chevron-right", "detail-arrow"], [1, "detail-row"], ["colspan", "6"], ["text", "Loading details...", "size", "small"], [1, "detail-panel"], [1, "detail-table"], [1, "error-details-section"], [1, "error-toggle", 3, "click"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "fa-solid", "fa-chevron-down", "toggle-icon"], [1, "error-log"]], template: function RunHistoryPanelComponent_Template(rf, ctx) { if (rf & 1) {
|
|
282
|
+
i0.ɵɵconditionalCreate(0, RunHistoryPanelComponent_Conditional_0_Template, 2, 0, "div", 0)(1, RunHistoryPanelComponent_Conditional_1_Template, 4, 0, "div", 1)(2, RunHistoryPanelComponent_Conditional_2_Template, 18, 0, "div", 2);
|
|
283
|
+
} if (rf & 2) {
|
|
284
|
+
i0.ɵɵconditional(ctx.IsLoading ? 0 : ctx.Runs.length === 0 ? 1 : 2);
|
|
285
|
+
} }, dependencies: [i1.LoadingComponent, i2.DecimalPipe], styles: [".history-loading[_ngcontent-%COMP%], .history-empty[_ngcontent-%COMP%] {\n padding: 24px; text-align: center; color: #888;\n }\n .history-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 24px; margin-bottom: 8px; display: block; }\n\n .history-panel[_ngcontent-%COMP%] { margin-top: 8px; }\n\n .history-table[_ngcontent-%COMP%] {\n width: 100%; border-collapse: collapse; font-size: 13px;\n }\n .history-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left; padding: 6px 8px;\n border-bottom: 2px solid #eee; color: #666; font-weight: 600;\n }\n .run-row[_ngcontent-%COMP%] { cursor: pointer; }\n .run-row[_ngcontent-%COMP%]:hover { background: #f8f9fa; }\n .run-row.selected[_ngcontent-%COMP%] { background: #f0f4ff; }\n .run-row[_ngcontent-%COMP%] td[_ngcontent-%COMP%] { padding: 6px 8px; border-bottom: 1px solid #f0f0f0; }\n\n \n\n .run-status-chip[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] { background: #e6f9ed; color: #1b7a3d; }\n .chip-amber[_ngcontent-%COMP%] { background: #fff7e0; color: #b5850a; }\n .chip-red[_ngcontent-%COMP%] { background: #fde8e8; color: #c62828; }\n\n .duration-cell[_ngcontent-%COMP%] {\n font-variant-numeric: tabular-nums;\n color: #555;\n }\n\n .detail-arrow[_ngcontent-%COMP%] { transition: transform 0.2s; font-size: 11px; color: #999; }\n .detail-arrow.rotated[_ngcontent-%COMP%] { transform: rotate(90deg); }\n\n .detail-row[_ngcontent-%COMP%] td[_ngcontent-%COMP%] { padding: 0; }\n .detail-panel[_ngcontent-%COMP%] {\n padding: 12px 16px; background: #fafbfc;\n border-left: 3px solid var(--primary-color, #4a6cf7);\n }\n .detail-panel[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] { margin: 0 0 8px 0; font-size: 13px; }\n\n .detail-table[_ngcontent-%COMP%] {\n width: 100%; border-collapse: collapse; font-size: 12px;\n }\n .detail-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left; padding: 4px 6px; color: #888; font-weight: 500;\n }\n .detail-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] { padding: 4px 6px; }\n .error-count[_ngcontent-%COMP%] { color: #c62828; font-weight: 600; }\n\n \n\n .error-details-section[_ngcontent-%COMP%] {\n margin-top: 12px;\n border-top: 1px solid #eee;\n padding-top: 8px;\n }\n .error-toggle[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%]:hover { text-decoration: underline; }\n .toggle-icon[_ngcontent-%COMP%] {\n transition: transform 0.2s; font-size: 10px;\n }\n .toggle-icon.rotated[_ngcontent-%COMP%] { transform: rotate(180deg); }\n .error-log[_ngcontent-%COMP%] {\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 }"] });
|
|
286
|
+
}
|
|
287
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RunHistoryPanelComponent, [{
|
|
288
|
+
type: Component,
|
|
289
|
+
args: [{ standalone: false, selector: 'app-run-history-panel', template: `
|
|
290
|
+
@if (IsLoading) {
|
|
291
|
+
<div class="history-loading">
|
|
292
|
+
<mj-loading text="Loading run history..." size="small"></mj-loading>
|
|
293
|
+
</div>
|
|
294
|
+
} @else if (Runs.length === 0) {
|
|
295
|
+
<div class="history-empty">
|
|
296
|
+
<i class="fa-solid fa-clock-rotate-left"></i>
|
|
297
|
+
<p>No runs recorded yet</p>
|
|
298
|
+
</div>
|
|
299
|
+
} @else {
|
|
300
|
+
<div class="history-panel">
|
|
301
|
+
<table class="history-table">
|
|
302
|
+
<thead>
|
|
303
|
+
<tr>
|
|
304
|
+
<th>Started</th>
|
|
305
|
+
<th>Status</th>
|
|
306
|
+
<th>Duration</th>
|
|
307
|
+
<th>Records</th>
|
|
308
|
+
<th>Run By</th>
|
|
309
|
+
<th></th>
|
|
310
|
+
</tr>
|
|
311
|
+
</thead>
|
|
312
|
+
<tbody>
|
|
313
|
+
@for (run of Runs; track run.ID) {
|
|
314
|
+
<tr class="run-row" [class.selected]="IsSelectedRun(run.ID)"
|
|
315
|
+
(click)="OnRunClick(run)">
|
|
316
|
+
<td>{{ FormatDate(run.StartedAt) }}</td>
|
|
317
|
+
<td>
|
|
318
|
+
<span class="run-status-chip" [class]="'chip-' + StatusColor(run)">
|
|
319
|
+
<i [class]="StatusIcon(run)"></i>
|
|
320
|
+
{{ run.Status }}
|
|
321
|
+
</span>
|
|
322
|
+
</td>
|
|
323
|
+
<td class="duration-cell">{{ FormatDuration(run) }}</td>
|
|
324
|
+
<td>{{ run.TotalRecords | number }}</td>
|
|
325
|
+
<td>{{ run.RunByUser }}</td>
|
|
326
|
+
<td>
|
|
327
|
+
<i class="fa-solid fa-chevron-right detail-arrow"
|
|
328
|
+
[class.rotated]="IsSelectedRun(run.ID)"></i>
|
|
329
|
+
</td>
|
|
330
|
+
</tr>
|
|
331
|
+
@if (IsSelectedRun(run.ID) && IsLoadingDetails) {
|
|
332
|
+
<tr class="detail-row">
|
|
333
|
+
<td colspan="6">
|
|
334
|
+
<mj-loading text="Loading details..." size="small"></mj-loading>
|
|
335
|
+
</td>
|
|
336
|
+
</tr>
|
|
337
|
+
}
|
|
338
|
+
@if (IsSelectedRun(run.ID) && !IsLoadingDetails && RunDetails.length > 0) {
|
|
339
|
+
<tr class="detail-row">
|
|
340
|
+
<td colspan="6">
|
|
341
|
+
<div class="detail-panel">
|
|
342
|
+
<h4>Entity Breakdown</h4>
|
|
343
|
+
<table class="detail-table">
|
|
344
|
+
<thead>
|
|
345
|
+
<tr>
|
|
346
|
+
<th>Entity</th>
|
|
347
|
+
<th>Processed</th>
|
|
348
|
+
<th>Created</th>
|
|
349
|
+
<th>Updated</th>
|
|
350
|
+
<th>Errors</th>
|
|
351
|
+
</tr>
|
|
352
|
+
</thead>
|
|
353
|
+
<tbody>
|
|
354
|
+
@for (detail of RunDetails; track detail.ID) {
|
|
355
|
+
<tr>
|
|
356
|
+
<td>{{ detail.Entity }}</td>
|
|
357
|
+
<td>{{ detail.RecordsProcessed | number }}</td>
|
|
358
|
+
<td>{{ detail.RecordsCreated | number }}</td>
|
|
359
|
+
<td>{{ detail.RecordsUpdated | number }}</td>
|
|
360
|
+
<td [class.error-count]="detail.RecordsErrored > 0">
|
|
361
|
+
{{ detail.RecordsErrored | number }}
|
|
362
|
+
</td>
|
|
363
|
+
</tr>
|
|
364
|
+
}
|
|
365
|
+
</tbody>
|
|
366
|
+
</table>
|
|
367
|
+
|
|
368
|
+
<!-- Error details expandable -->
|
|
369
|
+
@if (run.ErrorLog) {
|
|
370
|
+
<div class="error-details-section">
|
|
371
|
+
<button class="error-toggle" (click)="ToggleErrorLog($event)">
|
|
372
|
+
<i class="fa-solid fa-exclamation-triangle"></i>
|
|
373
|
+
Error Details
|
|
374
|
+
<i class="fa-solid fa-chevron-down toggle-icon"
|
|
375
|
+
[class.rotated]="ShowErrorLog"></i>
|
|
376
|
+
</button>
|
|
377
|
+
@if (ShowErrorLog) {
|
|
378
|
+
<pre class="error-log">{{ run.ErrorLog }}</pre>
|
|
379
|
+
}
|
|
380
|
+
</div>
|
|
381
|
+
}
|
|
382
|
+
</div>
|
|
383
|
+
</td>
|
|
384
|
+
</tr>
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
</tbody>
|
|
388
|
+
</table>
|
|
389
|
+
</div>
|
|
390
|
+
}
|
|
391
|
+
`, 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 "] }]
|
|
392
|
+
}], null, { CompanyIntegrationID: [{
|
|
393
|
+
type: Input
|
|
394
|
+
}], ViewProvider: [{
|
|
395
|
+
type: Input
|
|
396
|
+
}] }); })();
|
|
397
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RunHistoryPanelComponent, { className: "RunHistoryPanelComponent", filePath: "src/Integration/components/widgets/run-history-panel.component.ts", lineNumber: 195 }); })();
|
|
398
|
+
//# sourceMappingURL=run-history-panel.component.js.map
|
|
@@ -0,0 +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"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
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';
|
|
4
|
+
export * from './components/mapping-workspace/mapping-workspace.component';
|
|
5
|
+
export * from './components/sync-activity/sync-activity.component';
|
|
6
|
+
export * from './components/widgets/integration-card.component';
|
|
7
|
+
export * from './components/widgets/run-history-panel.component';
|
|
8
|
+
export * from './integration.module';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Services
|
|
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
|
|
8
|
+
export * from './components/mapping-workspace/mapping-workspace.component';
|
|
9
|
+
// Sync Activity
|
|
10
|
+
export * from './components/sync-activity/sync-activity.component';
|
|
11
|
+
// Widgets
|
|
12
|
+
export * from './components/widgets/integration-card.component';
|
|
13
|
+
export * from './components/widgets/run-history-panel.component';
|
|
14
|
+
// Module
|
|
15
|
+
export * from './integration.module';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
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";
|
|
17
|
+
export declare class IntegrationModule {
|
|
18
|
+
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]>;
|
|
20
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<IntegrationModule>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=integration.module.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { ButtonsModule } from '@progress/kendo-angular-buttons';
|
|
5
|
+
import { DropDownsModule } from '@progress/kendo-angular-dropdowns';
|
|
6
|
+
import { InputsModule } from '@progress/kendo-angular-inputs';
|
|
7
|
+
import { GridModule } from '@progress/kendo-angular-grid';
|
|
8
|
+
import { LayoutModule } from '@progress/kendo-angular-layout';
|
|
9
|
+
import { SharedGenericModule } from '@memberjunction/ng-shared-generic';
|
|
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';
|
|
13
|
+
import { MappingWorkspaceComponent } from './components/mapping-workspace/mapping-workspace.component';
|
|
14
|
+
import { SyncActivityComponent } from './components/sync-activity/sync-activity.component';
|
|
15
|
+
import { IntegrationCardComponent } from './components/widgets/integration-card.component';
|
|
16
|
+
import { RunHistoryPanelComponent } from './components/widgets/run-history-panel.component';
|
|
17
|
+
import { IntegrationDataService } from './services/integration-data.service';
|
|
18
|
+
import * as i0 from "@angular/core";
|
|
19
|
+
export class IntegrationModule {
|
|
20
|
+
static ɵfac = function IntegrationModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || IntegrationModule)(); };
|
|
21
|
+
static ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: IntegrationModule });
|
|
22
|
+
static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ providers: [
|
|
23
|
+
IntegrationDataService
|
|
24
|
+
], imports: [CommonModule,
|
|
25
|
+
FormsModule,
|
|
26
|
+
ButtonsModule,
|
|
27
|
+
DropDownsModule,
|
|
28
|
+
InputsModule,
|
|
29
|
+
GridModule,
|
|
30
|
+
LayoutModule,
|
|
31
|
+
SharedGenericModule,
|
|
32
|
+
CredentialsModule] });
|
|
33
|
+
}
|
|
34
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IntegrationModule, [{
|
|
35
|
+
type: NgModule,
|
|
36
|
+
args: [{
|
|
37
|
+
declarations: [
|
|
38
|
+
ControlTowerComponent,
|
|
39
|
+
ConnectionStudioComponent,
|
|
40
|
+
MappingWorkspaceComponent,
|
|
41
|
+
SyncActivityComponent,
|
|
42
|
+
IntegrationCardComponent,
|
|
43
|
+
RunHistoryPanelComponent
|
|
44
|
+
],
|
|
45
|
+
imports: [
|
|
46
|
+
CommonModule,
|
|
47
|
+
FormsModule,
|
|
48
|
+
ButtonsModule,
|
|
49
|
+
DropDownsModule,
|
|
50
|
+
InputsModule,
|
|
51
|
+
GridModule,
|
|
52
|
+
LayoutModule,
|
|
53
|
+
SharedGenericModule,
|
|
54
|
+
CredentialsModule
|
|
55
|
+
],
|
|
56
|
+
providers: [
|
|
57
|
+
IntegrationDataService
|
|
58
|
+
],
|
|
59
|
+
exports: [
|
|
60
|
+
ControlTowerComponent,
|
|
61
|
+
ConnectionStudioComponent,
|
|
62
|
+
MappingWorkspaceComponent,
|
|
63
|
+
SyncActivityComponent,
|
|
64
|
+
IntegrationCardComponent,
|
|
65
|
+
RunHistoryPanelComponent
|
|
66
|
+
]
|
|
67
|
+
}]
|
|
68
|
+
}], null, null); })();
|
|
69
|
+
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(IntegrationModule, { declarations: [ControlTowerComponent,
|
|
70
|
+
ConnectionStudioComponent,
|
|
71
|
+
MappingWorkspaceComponent,
|
|
72
|
+
SyncActivityComponent,
|
|
73
|
+
IntegrationCardComponent,
|
|
74
|
+
RunHistoryPanelComponent], imports: [CommonModule,
|
|
75
|
+
FormsModule,
|
|
76
|
+
ButtonsModule,
|
|
77
|
+
DropDownsModule,
|
|
78
|
+
InputsModule,
|
|
79
|
+
GridModule,
|
|
80
|
+
LayoutModule,
|
|
81
|
+
SharedGenericModule,
|
|
82
|
+
CredentialsModule], exports: [ControlTowerComponent,
|
|
83
|
+
ConnectionStudioComponent,
|
|
84
|
+
MappingWorkspaceComponent,
|
|
85
|
+
SyncActivityComponent,
|
|
86
|
+
IntegrationCardComponent,
|
|
87
|
+
RunHistoryPanelComponent] }); })();
|
|
88
|
+
//# sourceMappingURL=integration.module.js.map
|
|
@@ -0,0 +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"]}
|