@burdenoff/microfe-bigconsole 2026.805.2 → 2026.805.3
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/bigconsole/components/builder/inspector/DataBindingSection.js +109 -113
- package/dist/bigconsole/components/builder/inspector/DataBindingSection.js.map +1 -1
- package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +115 -113
- package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardCanvas.js +71 -62
- package/dist/bigconsole/components/dashboard/DashboardCanvas.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardToolbar.js +90 -89
- package/dist/bigconsole/components/dashboard/DashboardToolbar.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +56 -54
- package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js +126 -125
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +151 -150
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +77 -76
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +97 -96
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +172 -191
- package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/PublishToStoreDialog.js +75 -83
- package/dist/bigconsole/components/dashboard/PublishToStoreDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +151 -154
- package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js +181 -190
- package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js.map +1 -1
- package/dist/bigconsole/components/dashboard/TemplatePicker/TemplatePicker.js +1 -0
- package/dist/bigconsole/components/dashboard/WidgetPalette.js +110 -108
- package/dist/bigconsole/components/dashboard/WidgetPalette.js.map +1 -1
- package/dist/bigconsole/components/datasink/CacheTTLSelector.js +102 -103
- package/dist/bigconsole/components/datasink/CacheTTLSelector.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +36 -41
- package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +38 -37
- package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js +113 -117
- package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +182 -197
- package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +166 -168
- package/dist/bigconsole/components/datasink/RefreshTypeSelector.js.map +1 -1
- package/dist/bigconsole/components/parser/DataSinkSelector.js +87 -86
- package/dist/bigconsole/components/parser/DataSinkSelector.js.map +1 -1
- package/dist/bigconsole/components/parser/ImportParserDialog.js +196 -211
- package/dist/bigconsole/components/parser/ImportParserDialog.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserSelector.js +130 -128
- package/dist/bigconsole/components/parser/ParserSelector.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +66 -63
- package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewPanel.js +95 -91
- package/dist/bigconsole/components/preview/AiPreviewPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/ActionConfigDialog.js +222 -215
- package/dist/bigconsole/components/widgets/ActionConfigDialog.js.map +1 -1
- package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +149 -145
- package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/PropertiesPanel.js +504 -470
- package/dist/bigconsole/components/widgets/PropertiesPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +44 -47
- package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/chart/ChartConfig.js +143 -142
- package/dist/bigconsole/components/widgets/chart/ChartConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/comments/WidgetComments.js +101 -88
- package/dist/bigconsole/components/widgets/comments/WidgetComments.js.map +1 -1
- package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +135 -134
- package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js.map +1 -1
- package/dist/bigconsole/components/widgets/form/FormWidget.js +167 -159
- package/dist/bigconsole/components/widgets/form/FormWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +69 -68
- package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +64 -72
- package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +60 -59
- package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/list/ListConfig.js +57 -56
- package/dist/bigconsole/components/widgets/list/ListConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +70 -69
- package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +35 -34
- package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js +20 -19
- package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js.map +1 -1
- package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +178 -177
- package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +76 -75
- package/dist/bigconsole/components/widgets/progress/ProgressConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/table/TableConfig.js +183 -168
- package/dist/bigconsole/components/widgets/table/TableConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +187 -180
- package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js.map +1 -1
- package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +40 -38
- package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js.map +1 -1
- package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +150 -148
- package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js.map +1 -1
- package/dist/bigconsole/pages/DashboardBuilderPage.js +181 -176
- package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/DashboardViewPage.js +196 -192
- package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
- package/dist/bigconsole/pages/DashboardsPage.js +223 -219
- package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
- package/dist/bigconsole/pages/DataParsersPage.js +167 -170
- package/dist/bigconsole/pages/DataParsersPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinkBuilderPage.js +204 -189
- package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinkViewPage.js +175 -169
- package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSourcesPage.js +8 -7
- package/dist/bigconsole/pages/DataSourcesPage.js.map +1 -1
- package/dist/bigconsole/pages/InsightsPage.js +238 -208
- package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
- package/dist/bigconsole/pages/ParserBuilderPage.js +464 -412
- package/dist/bigconsole/pages/ParserBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/ParserViewPage.js +92 -90
- package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelineBuilderPage.js +221 -194
- package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelineViewPage.js +181 -184
- package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelinesPage.js +128 -127
- package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
- package/dist/bigconsole/pages/SettingsPage.js +177 -172
- package/dist/bigconsole/pages/SettingsPage.js.map +1 -1
- package/dist/bigconsole/pages/WidgetDemoPage.js +121 -83
- package/dist/bigconsole/pages/WidgetDemoPage.js.map +1 -1
- package/dist/bigconsole/pages/WorkflowViewPage.js +199 -193
- package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
- package/dist/bigconsole/pages/WorkflowsPage.js +129 -128
- package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
- package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js +111 -109
- package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js.map +1 -1
- package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js +127 -126
- package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js.map +1 -1
- package/dist/bigconsole/renderers/adapters/CustomRenderer.js +103 -103
- package/dist/bigconsole/renderers/adapters/CustomRenderer.js.map +1 -1
- package/package.json +2 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import e, { getEventStatusColor as t, getEventStatusIcon as n, getEventStatusLabel as r } from "../../../hooks/useEventLogs.js";
|
|
2
2
|
import { memo as i, useCallback as a, useState as o } from "react";
|
|
3
|
-
import {
|
|
3
|
+
import { useI18n as s } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
4
|
+
import { Fragment as c, jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
4
5
|
//#region src/bigconsole/components/widgets/event-logs/EventLogViewer.tsx
|
|
5
|
-
var
|
|
6
|
+
var d = {
|
|
6
7
|
container: {
|
|
7
8
|
padding: "16px",
|
|
8
9
|
backgroundColor: "var(--color-bg-surface)",
|
|
@@ -130,28 +131,28 @@ var u = {
|
|
|
130
131
|
fontSize: "14px"
|
|
131
132
|
}
|
|
132
133
|
};
|
|
133
|
-
function
|
|
134
|
-
let
|
|
135
|
-
return
|
|
134
|
+
function f(e, t) {
|
|
135
|
+
let n = new Date(e), r = (/* @__PURE__ */ new Date()).getTime() - n.getTime(), i = Math.floor(r / 6e4), a = Math.floor(i / 60), o = Math.floor(a / 24);
|
|
136
|
+
return i < 1 ? t("bigconsole.widget.eventLog.time.justNow", "Just now") : i < 60 ? t("bigconsole.widget.eventLog.time.minutesAgo", "{{count}}m ago", { count: i }) : a < 24 ? t("bigconsole.widget.eventLog.time.hoursAgo", "{{count}}h ago", { count: a }) : o < 7 ? t("bigconsole.widget.eventLog.time.daysAgo", "{{count}}d ago", { count: o }) : n.toLocaleDateString();
|
|
136
137
|
}
|
|
137
|
-
var
|
|
138
|
-
let
|
|
139
|
-
return /* @__PURE__ */
|
|
140
|
-
/* @__PURE__ */
|
|
141
|
-
style:
|
|
142
|
-
children: /* @__PURE__ */
|
|
143
|
-
onClick:
|
|
144
|
-
style:
|
|
138
|
+
var p = i(function({ log: e, onRetry: i, retrying: a, expanded: o, onToggleExpand: p }) {
|
|
139
|
+
let { t: m } = s(), h = e.status === "FAILED";
|
|
140
|
+
return /* @__PURE__ */ u(c, { children: [/* @__PURE__ */ u("tr", { children: [
|
|
141
|
+
/* @__PURE__ */ l("td", {
|
|
142
|
+
style: d.td,
|
|
143
|
+
children: /* @__PURE__ */ l("button", {
|
|
144
|
+
onClick: p,
|
|
145
|
+
style: d.expandButton,
|
|
145
146
|
children: o ? "▼" : "▶"
|
|
146
147
|
})
|
|
147
148
|
}),
|
|
148
|
-
/* @__PURE__ */
|
|
149
|
-
style:
|
|
150
|
-
children: /* @__PURE__ */
|
|
151
|
-
style:
|
|
152
|
-
children: [/* @__PURE__ */
|
|
149
|
+
/* @__PURE__ */ l("td", {
|
|
150
|
+
style: d.td,
|
|
151
|
+
children: /* @__PURE__ */ u("div", {
|
|
152
|
+
style: d.statusCell,
|
|
153
|
+
children: [/* @__PURE__ */ l("span", { children: n(e.status) }), /* @__PURE__ */ l("span", {
|
|
153
154
|
style: {
|
|
154
|
-
...
|
|
155
|
+
...d.statusBadge,
|
|
155
156
|
backgroundColor: `${t(e.status)}20`,
|
|
156
157
|
color: t(e.status)
|
|
157
158
|
},
|
|
@@ -159,35 +160,35 @@ var f = i(function({ log: e, onRetry: i, retrying: a, expanded: o, onToggleExpan
|
|
|
159
160
|
})]
|
|
160
161
|
})
|
|
161
162
|
}),
|
|
162
|
-
/* @__PURE__ */
|
|
163
|
-
style:
|
|
164
|
-
children: [/* @__PURE__ */
|
|
165
|
-
style:
|
|
163
|
+
/* @__PURE__ */ u("td", {
|
|
164
|
+
style: d.td,
|
|
165
|
+
children: [/* @__PURE__ */ l("div", {
|
|
166
|
+
style: d.eventName,
|
|
166
167
|
children: e.eventName
|
|
167
168
|
}), e.actionName && /* @__PURE__ */ l("div", {
|
|
168
169
|
style: {
|
|
169
170
|
fontSize: "11px",
|
|
170
171
|
color: "var(--color-text-placeholder)"
|
|
171
172
|
},
|
|
172
|
-
children:
|
|
173
|
+
children: m("bigconsole.widget.eventLog.actionLabel", "Action: {{action}}", { action: e.actionName ?? "" })
|
|
173
174
|
})]
|
|
174
175
|
}),
|
|
175
|
-
/* @__PURE__ */
|
|
176
|
-
style:
|
|
177
|
-
children: /* @__PURE__ */
|
|
178
|
-
style:
|
|
179
|
-
children:
|
|
176
|
+
/* @__PURE__ */ l("td", {
|
|
177
|
+
style: d.td,
|
|
178
|
+
children: /* @__PURE__ */ l("div", {
|
|
179
|
+
style: d.timeAgo,
|
|
180
|
+
children: f(e.createdAt, m)
|
|
180
181
|
})
|
|
181
182
|
}),
|
|
182
|
-
/* @__PURE__ */
|
|
183
|
-
style:
|
|
184
|
-
children: e.webhookUrl ? /* @__PURE__ */
|
|
183
|
+
/* @__PURE__ */ l("td", {
|
|
184
|
+
style: d.td,
|
|
185
|
+
children: e.webhookUrl ? /* @__PURE__ */ l("span", {
|
|
185
186
|
style: {
|
|
186
187
|
fontSize: "12px",
|
|
187
188
|
color: "var(--color-text-muted)"
|
|
188
189
|
},
|
|
189
190
|
children: new URL(e.webhookUrl).hostname
|
|
190
|
-
}) : /* @__PURE__ */
|
|
191
|
+
}) : /* @__PURE__ */ l("span", {
|
|
191
192
|
style: {
|
|
192
193
|
fontSize: "12px",
|
|
193
194
|
color: "var(--color-text-placeholder)"
|
|
@@ -195,183 +196,183 @@ var f = i(function({ log: e, onRetry: i, retrying: a, expanded: o, onToggleExpan
|
|
|
195
196
|
children: "—"
|
|
196
197
|
})
|
|
197
198
|
}),
|
|
198
|
-
/* @__PURE__ */
|
|
199
|
-
style:
|
|
200
|
-
children:
|
|
199
|
+
/* @__PURE__ */ l("td", {
|
|
200
|
+
style: d.td,
|
|
201
|
+
children: h && /* @__PURE__ */ l("button", {
|
|
201
202
|
onClick: i,
|
|
202
203
|
disabled: a,
|
|
203
|
-
style:
|
|
204
|
-
children: a ? "..." : "
|
|
204
|
+
style: d.retryButton,
|
|
205
|
+
children: a ? "..." : `🔄 ${m("bigconsole.widget.eventLog.retry", "Retry")}`
|
|
205
206
|
})
|
|
206
207
|
})
|
|
207
|
-
] }), o && /* @__PURE__ */
|
|
208
|
-
style:
|
|
209
|
-
children: /* @__PURE__ */
|
|
208
|
+
] }), o && /* @__PURE__ */ l("tr", {
|
|
209
|
+
style: d.detailRow,
|
|
210
|
+
children: /* @__PURE__ */ l("td", {
|
|
210
211
|
colSpan: 6,
|
|
211
|
-
style:
|
|
212
|
-
children: /* @__PURE__ */
|
|
213
|
-
style:
|
|
212
|
+
style: d.td,
|
|
213
|
+
children: /* @__PURE__ */ u("div", {
|
|
214
|
+
style: d.detailContent,
|
|
214
215
|
children: [
|
|
215
|
-
/* @__PURE__ */
|
|
216
|
+
/* @__PURE__ */ l("strong", { children: m("bigconsole.widget.eventLog.payload", "Payload:") }),
|
|
216
217
|
"\n",
|
|
217
218
|
JSON.stringify(e.payload, null, 2),
|
|
218
|
-
e.errorMessage && /* @__PURE__ */
|
|
219
|
+
e.errorMessage && /* @__PURE__ */ u(c, { children: [
|
|
219
220
|
"\n\n",
|
|
220
|
-
/* @__PURE__ */
|
|
221
|
+
/* @__PURE__ */ l("strong", {
|
|
221
222
|
style: { color: "var(--color-status-error-text)" },
|
|
222
|
-
children: "Error:"
|
|
223
|
+
children: m("bigconsole.widget.eventLog.error", "Error:")
|
|
223
224
|
}),
|
|
224
225
|
"\n",
|
|
225
226
|
e.errorMessage
|
|
226
227
|
] }),
|
|
227
|
-
e.responseCode && /* @__PURE__ */
|
|
228
|
+
e.responseCode && /* @__PURE__ */ u(c, { children: [
|
|
228
229
|
"\n\n",
|
|
229
|
-
/* @__PURE__ */
|
|
230
|
+
/* @__PURE__ */ l("strong", { children: m("bigconsole.widget.eventLog.responseCode", "Response Code:") }),
|
|
230
231
|
" ",
|
|
231
232
|
e.responseCode
|
|
232
233
|
] }),
|
|
233
234
|
"\n\n",
|
|
234
|
-
/* @__PURE__ */
|
|
235
|
+
/* @__PURE__ */ l("strong", { children: m("bigconsole.widget.eventLog.attempts", "Attempts:") }),
|
|
235
236
|
" ",
|
|
236
237
|
e.attempts
|
|
237
238
|
]
|
|
238
239
|
})
|
|
239
240
|
})
|
|
240
241
|
})] });
|
|
241
|
-
}),
|
|
242
|
-
let [
|
|
242
|
+
}), m = i(function({ dashboardId: t, widgetId: n, maxHeight: r = "400px", onRetrySuccess: i }) {
|
|
243
|
+
let { t: f } = s(), [m, h] = o(""), [g, _] = o(/* @__PURE__ */ new Set()), [v, y] = o(null), { logs: b, loading: x, totalCount: S, hasMore: C, loadMore: w, retryDelivery: T, refetch: E } = e({
|
|
243
244
|
dashboardId: t,
|
|
244
245
|
widgetId: n,
|
|
245
|
-
status:
|
|
246
|
-
}),
|
|
247
|
-
|
|
248
|
-
let t = await
|
|
249
|
-
|
|
250
|
-
}, [
|
|
251
|
-
|
|
246
|
+
status: m || void 0
|
|
247
|
+
}), D = a(async (e) => {
|
|
248
|
+
y(e.id);
|
|
249
|
+
let t = await T(e.id);
|
|
250
|
+
y(null), t && i?.(t);
|
|
251
|
+
}, [T, i]), O = a((e) => {
|
|
252
|
+
_((t) => {
|
|
252
253
|
let n = new Set(t);
|
|
253
254
|
return n.has(e) ? n.delete(e) : n.add(e), n;
|
|
254
255
|
});
|
|
255
256
|
}, []);
|
|
256
|
-
return /* @__PURE__ */
|
|
257
|
-
style:
|
|
258
|
-
children: [/* @__PURE__ */
|
|
259
|
-
style:
|
|
260
|
-
children: [/* @__PURE__ */
|
|
261
|
-
style:
|
|
262
|
-
children: "Event History"
|
|
257
|
+
return /* @__PURE__ */ u("div", {
|
|
258
|
+
style: d.container,
|
|
259
|
+
children: [/* @__PURE__ */ u("div", {
|
|
260
|
+
style: d.header,
|
|
261
|
+
children: [/* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("h3", {
|
|
262
|
+
style: d.title,
|
|
263
|
+
children: f("bigconsole.widget.eventLog.title", "Event History")
|
|
263
264
|
}), /* @__PURE__ */ l("span", {
|
|
264
|
-
style:
|
|
265
|
-
children:
|
|
266
|
-
})] }), /* @__PURE__ */
|
|
267
|
-
style:
|
|
268
|
-
children: [/* @__PURE__ */
|
|
269
|
-
value:
|
|
270
|
-
onChange: (e) =>
|
|
271
|
-
style:
|
|
265
|
+
style: d.totalCount,
|
|
266
|
+
children: f("bigconsole.widget.eventLog.eventCount", "{{count}} events", { count: S })
|
|
267
|
+
})] }), /* @__PURE__ */ u("div", {
|
|
268
|
+
style: d.headerActions,
|
|
269
|
+
children: [/* @__PURE__ */ u("select", {
|
|
270
|
+
value: m,
|
|
271
|
+
onChange: (e) => h(e.target.value),
|
|
272
|
+
style: d.filterSelect,
|
|
272
273
|
children: [
|
|
273
|
-
/* @__PURE__ */
|
|
274
|
+
/* @__PURE__ */ l("option", {
|
|
274
275
|
value: "",
|
|
275
|
-
children: "All Status"
|
|
276
|
+
children: f("bigconsole.widget.eventLog.filter.all", "All Status")
|
|
276
277
|
}),
|
|
277
|
-
/* @__PURE__ */
|
|
278
|
+
/* @__PURE__ */ l("option", {
|
|
278
279
|
value: "DELIVERED",
|
|
279
|
-
children: "Delivered"
|
|
280
|
+
children: f("bigconsole.widget.eventLog.filter.delivered", "Delivered")
|
|
280
281
|
}),
|
|
281
|
-
/* @__PURE__ */
|
|
282
|
+
/* @__PURE__ */ l("option", {
|
|
282
283
|
value: "FAILED",
|
|
283
|
-
children: "Failed"
|
|
284
|
+
children: f("bigconsole.widget.eventLog.filter.failed", "Failed")
|
|
284
285
|
}),
|
|
285
|
-
/* @__PURE__ */
|
|
286
|
+
/* @__PURE__ */ l("option", {
|
|
286
287
|
value: "PENDING",
|
|
287
|
-
children: "Pending"
|
|
288
|
+
children: f("bigconsole.widget.eventLog.filter.pending", "Pending")
|
|
288
289
|
}),
|
|
289
|
-
/* @__PURE__ */
|
|
290
|
+
/* @__PURE__ */ l("option", {
|
|
290
291
|
value: "PROCESSING",
|
|
291
|
-
children: "Processing"
|
|
292
|
+
children: f("bigconsole.widget.eventLog.filter.processing", "Processing")
|
|
292
293
|
}),
|
|
293
|
-
/* @__PURE__ */
|
|
294
|
+
/* @__PURE__ */ l("option", {
|
|
294
295
|
value: "RETRYING",
|
|
295
|
-
children: "Retrying"
|
|
296
|
+
children: f("bigconsole.widget.eventLog.filter.retrying", "Retrying")
|
|
296
297
|
}),
|
|
297
|
-
/* @__PURE__ */
|
|
298
|
+
/* @__PURE__ */ l("option", {
|
|
298
299
|
value: "IGNORED",
|
|
299
|
-
children: "Ignored"
|
|
300
|
+
children: f("bigconsole.widget.eventLog.filter.ignored", "Ignored")
|
|
300
301
|
})
|
|
301
302
|
]
|
|
302
|
-
}), /* @__PURE__ */
|
|
303
|
-
onClick: () =>
|
|
304
|
-
style:
|
|
305
|
-
children: "🔄 Refresh"
|
|
303
|
+
}), /* @__PURE__ */ u("button", {
|
|
304
|
+
onClick: () => E(),
|
|
305
|
+
style: d.refreshButton,
|
|
306
|
+
children: ["🔄 ", f("bigconsole.widget.eventLog.refresh", "Refresh")]
|
|
306
307
|
})]
|
|
307
308
|
})]
|
|
308
|
-
}),
|
|
309
|
-
style:
|
|
310
|
-
children: "Loading..."
|
|
311
|
-
}) :
|
|
312
|
-
style:
|
|
313
|
-
children: [/* @__PURE__ */
|
|
309
|
+
}), x && b.length === 0 ? /* @__PURE__ */ l("div", {
|
|
310
|
+
style: d.emptyState,
|
|
311
|
+
children: f("bigconsole.widget.eventLog.loading", "Loading...")
|
|
312
|
+
}) : b.length === 0 ? /* @__PURE__ */ u("div", {
|
|
313
|
+
style: d.emptyState,
|
|
314
|
+
children: [/* @__PURE__ */ l("p", { children: f("bigconsole.widget.eventLog.emptyTitle", "No events found") }), /* @__PURE__ */ l("p", {
|
|
314
315
|
style: {
|
|
315
316
|
fontSize: "13px",
|
|
316
317
|
marginTop: "8px"
|
|
317
318
|
},
|
|
318
|
-
children: "Events will appear here when actions are triggered."
|
|
319
|
+
children: f("bigconsole.widget.eventLog.emptyHint", "Events will appear here when actions are triggered.")
|
|
319
320
|
})]
|
|
320
|
-
}) : /* @__PURE__ */
|
|
321
|
+
}) : /* @__PURE__ */ u(c, { children: [/* @__PURE__ */ l("div", {
|
|
321
322
|
style: {
|
|
322
|
-
...
|
|
323
|
+
...d.tableContainer,
|
|
323
324
|
maxHeight: r,
|
|
324
325
|
overflowY: "auto"
|
|
325
326
|
},
|
|
326
|
-
children: /* @__PURE__ */
|
|
327
|
-
style:
|
|
328
|
-
children: [/* @__PURE__ */
|
|
329
|
-
style:
|
|
330
|
-
children: /* @__PURE__ */
|
|
331
|
-
/* @__PURE__ */
|
|
332
|
-
...
|
|
327
|
+
children: /* @__PURE__ */ u("table", {
|
|
328
|
+
style: d.table,
|
|
329
|
+
children: [/* @__PURE__ */ l("thead", {
|
|
330
|
+
style: d.tableHeader,
|
|
331
|
+
children: /* @__PURE__ */ u("tr", { children: [
|
|
332
|
+
/* @__PURE__ */ l("th", { style: {
|
|
333
|
+
...d.th,
|
|
333
334
|
width: "40px"
|
|
334
335
|
} }),
|
|
335
|
-
/* @__PURE__ */
|
|
336
|
-
style:
|
|
337
|
-
children: "Status"
|
|
336
|
+
/* @__PURE__ */ l("th", {
|
|
337
|
+
style: d.th,
|
|
338
|
+
children: f("bigconsole.widget.eventLog.column.status", "Status")
|
|
338
339
|
}),
|
|
339
|
-
/* @__PURE__ */
|
|
340
|
-
style:
|
|
341
|
-
children: "Event"
|
|
340
|
+
/* @__PURE__ */ l("th", {
|
|
341
|
+
style: d.th,
|
|
342
|
+
children: f("bigconsole.widget.eventLog.column.event", "Event")
|
|
342
343
|
}),
|
|
343
|
-
/* @__PURE__ */
|
|
344
|
-
style:
|
|
345
|
-
children: "Time"
|
|
344
|
+
/* @__PURE__ */ l("th", {
|
|
345
|
+
style: d.th,
|
|
346
|
+
children: f("bigconsole.widget.eventLog.column.time", "Time")
|
|
346
347
|
}),
|
|
347
|
-
/* @__PURE__ */
|
|
348
|
-
style:
|
|
349
|
-
children: "Webhook"
|
|
348
|
+
/* @__PURE__ */ l("th", {
|
|
349
|
+
style: d.th,
|
|
350
|
+
children: f("bigconsole.widget.eventLog.column.webhook", "Webhook")
|
|
350
351
|
}),
|
|
351
|
-
/* @__PURE__ */
|
|
352
|
+
/* @__PURE__ */ l("th", {
|
|
352
353
|
style: {
|
|
353
|
-
...
|
|
354
|
+
...d.th,
|
|
354
355
|
width: "80px"
|
|
355
356
|
},
|
|
356
|
-
children: "Action"
|
|
357
|
+
children: f("bigconsole.widget.eventLog.column.action", "Action")
|
|
357
358
|
})
|
|
358
359
|
] })
|
|
359
|
-
}), /* @__PURE__ */
|
|
360
|
+
}), /* @__PURE__ */ l("tbody", { children: b.map((e) => /* @__PURE__ */ l(p, {
|
|
360
361
|
log: e,
|
|
361
|
-
onRetry: () =>
|
|
362
|
-
retrying:
|
|
363
|
-
expanded:
|
|
364
|
-
onToggleExpand: () =>
|
|
362
|
+
onRetry: () => D(e),
|
|
363
|
+
retrying: v === e.id,
|
|
364
|
+
expanded: g.has(e.id),
|
|
365
|
+
onToggleExpand: () => O(e.id)
|
|
365
366
|
}, e.id)) })]
|
|
366
367
|
})
|
|
367
|
-
}),
|
|
368
|
-
onClick:
|
|
369
|
-
style:
|
|
370
|
-
children: "Load More"
|
|
368
|
+
}), C && /* @__PURE__ */ l("button", {
|
|
369
|
+
onClick: w,
|
|
370
|
+
style: d.loadMoreButton,
|
|
371
|
+
children: f("bigconsole.widget.eventLog.loadMore", "Load More")
|
|
371
372
|
})] })]
|
|
372
373
|
});
|
|
373
374
|
});
|
|
374
375
|
//#endregion
|
|
375
|
-
export {
|
|
376
|
+
export { m as default };
|
|
376
377
|
|
|
377
378
|
//# sourceMappingURL=EventLogViewer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventLogViewer.js","names":[],"sources":["../../../../../src/bigconsole/components/widgets/event-logs/EventLogViewer.tsx"],"sourcesContent":["/**\n * EventLogViewer Component (v2.0)\n *\n * Component for viewing event history and managing failed deliveries.\n * Shows event status, allows filtering, and supports retry functionality.\n */\n\nimport React, { memo, useState, useCallback } from 'react';\nimport {\n useEventLogs,\n getEventStatusColor,\n getEventStatusLabel,\n getEventStatusIcon,\n type EventStatus,\n type EventLog,\n} from '../../../hooks/useEventLogs';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface EventLogViewerProps {\n /** Dashboard ID to filter logs */\n dashboardId?: string;\n /** Widget ID to filter logs */\n widgetId?: string;\n /** Maximum height of the viewer */\n maxHeight?: string;\n /** Callback when retry is successful */\n onRetrySuccess?: (eventLog: EventLog) => void;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n container: {\n padding: '16px',\n backgroundColor: 'var(--color-bg-surface)',\n borderRadius: '8px',\n } as React.CSSProperties,\n header: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '16px',\n } as React.CSSProperties,\n title: {\n fontSize: '16px',\n fontWeight: 600,\n color: 'var(--color-text-primary)',\n margin: 0,\n } as React.CSSProperties,\n headerActions: {\n display: 'flex',\n gap: '8px',\n alignItems: 'center',\n } as React.CSSProperties,\n filterSelect: {\n padding: '6px 12px',\n fontSize: '13px',\n border: '1px solid var(--color-border)',\n borderRadius: '6px',\n backgroundColor: 'var(--color-bg-surface)',\n } as React.CSSProperties,\n refreshButton: {\n padding: '6px 12px',\n fontSize: '13px',\n backgroundColor: 'var(--color-bg-muted)',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n transition: 'background-color 0.15s ease',\n } as React.CSSProperties,\n table: {\n width: '100%',\n borderCollapse: 'collapse',\n fontSize: '13px',\n } as React.CSSProperties,\n tableHeader: {\n backgroundColor: 'var(--color-bg-sunken)',\n borderBottom: '1px solid var(--color-border)',\n } as React.CSSProperties,\n th: {\n padding: '10px 12px',\n textAlign: 'left',\n fontWeight: 600,\n color: 'var(--color-text-secondary)',\n } as React.CSSProperties,\n td: {\n padding: '10px 12px',\n borderBottom: '1px solid var(--color-border)',\n color: 'var(--color-text-secondary)',\n } as React.CSSProperties,\n statusCell: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n } as React.CSSProperties,\n statusBadge: {\n padding: '2px 8px',\n borderRadius: '12px',\n fontSize: '11px',\n fontWeight: 500,\n } as React.CSSProperties,\n eventName: {\n fontFamily: 'monospace',\n fontSize: '12px',\n color: 'var(--color-text-secondary)',\n } as React.CSSProperties,\n timeAgo: {\n fontSize: '12px',\n color: 'var(--color-text-muted)',\n } as React.CSSProperties,\n retryButton: {\n padding: '4px 8px',\n fontSize: '11px',\n backgroundColor: 'var(--color-action-primary-bg)',\n color: 'var(--color-action-primary-text)',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n transition: 'opacity 0.15s ease',\n } as React.CSSProperties,\n emptyState: {\n textAlign: 'center',\n padding: '32px',\n color: 'var(--color-text-muted)',\n } as React.CSSProperties,\n loadMoreButton: {\n width: '100%',\n padding: '10px',\n marginTop: '12px',\n backgroundColor: 'var(--color-bg-muted)',\n border: 'none',\n borderRadius: '6px',\n fontSize: '13px',\n color: 'var(--color-text-secondary)',\n cursor: 'pointer',\n transition: 'background-color 0.15s ease',\n } as React.CSSProperties,\n totalCount: {\n fontSize: '12px',\n color: 'var(--color-text-muted)',\n } as React.CSSProperties,\n tableContainer: {\n overflowX: 'auto',\n } as React.CSSProperties,\n detailRow: {\n backgroundColor: 'var(--color-bg-sunken)',\n } as React.CSSProperties,\n detailContent: {\n padding: '12px',\n fontSize: '12px',\n fontFamily: 'monospace',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-all',\n color: 'var(--color-text-secondary)',\n } as React.CSSProperties,\n expandButton: {\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: '4px',\n fontSize: '14px',\n } as React.CSSProperties,\n};\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nfunction formatTimeAgo(dateString: string): string {\n const date = new Date(dateString);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMins / 60);\n const diffDays = Math.floor(diffHours / 24);\n\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 7) return `${diffDays}d ago`;\n return date.toLocaleDateString();\n}\n\n// ============================================================================\n// Event Log Row Component\n// ============================================================================\n\ninterface EventLogRowProps {\n log: EventLog;\n onRetry: () => void;\n retrying?: boolean;\n expanded?: boolean;\n onToggleExpand: () => void;\n}\n\nconst EventLogRow: React.FC<EventLogRowProps> = memo(function EventLogRow({\n log,\n onRetry,\n retrying,\n expanded,\n onToggleExpand,\n}) {\n const canRetry = log.status === 'FAILED';\n\n return (\n <>\n <tr>\n <td style={styles.td}>\n <button onClick={onToggleExpand} style={styles.expandButton}>\n {expanded ? '▼' : '▶'}\n </button>\n </td>\n <td style={styles.td}>\n <div style={styles.statusCell}>\n <span>{getEventStatusIcon(log.status)}</span>\n <span\n style={{\n ...styles.statusBadge,\n backgroundColor: `${getEventStatusColor(log.status)}20`,\n color: getEventStatusColor(log.status),\n }}\n >\n {getEventStatusLabel(log.status)}\n </span>\n </div>\n </td>\n <td style={styles.td}>\n <div style={styles.eventName}>{log.eventName}</div>\n {log.actionName && (\n <div style={{ fontSize: '11px', color: 'var(--color-text-placeholder)' }}>Action: {log.actionName}</div>\n )}\n </td>\n <td style={styles.td}>\n <div style={styles.timeAgo}>{formatTimeAgo(log.createdAt)}</div>\n </td>\n <td style={styles.td}>\n {log.webhookUrl ? (\n <span style={{ fontSize: '12px', color: 'var(--color-text-muted)' }}>\n {new URL(log.webhookUrl).hostname}\n </span>\n ) : (\n <span style={{ fontSize: '12px', color: 'var(--color-text-placeholder)' }}>—</span>\n )}\n </td>\n <td style={styles.td}>\n {canRetry && (\n <button onClick={onRetry} disabled={retrying} style={styles.retryButton}>\n {retrying ? '...' : '🔄 Retry'}\n </button>\n )}\n </td>\n </tr>\n {expanded && (\n <tr style={styles.detailRow}>\n <td colSpan={6} style={styles.td}>\n <div style={styles.detailContent as React.CSSProperties}>\n <strong>Payload:</strong>\n {'\\n'}\n {JSON.stringify(log.payload, null, 2)}\n {log.errorMessage && (\n <>\n {'\\n\\n'}\n <strong style={{ color: 'var(--color-status-error-text)' }}>Error:</strong>\n {'\\n'}\n {log.errorMessage}\n </>\n )}\n {log.responseCode && (\n <>\n {'\\n\\n'}\n <strong>Response Code:</strong> {log.responseCode}\n </>\n )}\n {'\\n\\n'}\n <strong>Attempts:</strong> {log.attempts}\n </div>\n </td>\n </tr>\n )}\n </>\n );\n});\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport const EventLogViewer: React.FC<EventLogViewerProps> = memo(function EventLogViewer({\n dashboardId,\n widgetId,\n maxHeight = '400px',\n onRetrySuccess,\n}) {\n const [statusFilter, setStatusFilter] = useState<EventStatus | ''>('');\n const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set());\n const [retryingId, setRetryingId] = useState<string | null>(null);\n\n const { logs, loading, totalCount, hasMore, loadMore, retryDelivery, refetch } = useEventLogs({\n dashboardId,\n widgetId,\n status: statusFilter || undefined,\n });\n\n const handleRetry = useCallback(\n async (log: EventLog) => {\n setRetryingId(log.id);\n const result = await retryDelivery(log.id);\n setRetryingId(null);\n if (result) {\n onRetrySuccess?.(result);\n }\n },\n [retryDelivery, onRetrySuccess]\n );\n\n const handleToggleExpand = useCallback((id: string) => {\n setExpandedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n }, []);\n\n return (\n <div style={styles.container}>\n <div style={styles.header}>\n <div>\n <h3 style={styles.title}>Event History</h3>\n <span style={styles.totalCount}>{totalCount} events</span>\n </div>\n <div style={styles.headerActions}>\n <select\n value={statusFilter}\n onChange={(e) => setStatusFilter(e.target.value as EventStatus | '')}\n style={styles.filterSelect}\n >\n <option value=\"\">All Status</option>\n <option value=\"DELIVERED\">Delivered</option>\n <option value=\"FAILED\">Failed</option>\n <option value=\"PENDING\">Pending</option>\n <option value=\"PROCESSING\">Processing</option>\n <option value=\"RETRYING\">Retrying</option>\n <option value=\"IGNORED\">Ignored</option>\n </select>\n <button onClick={() => refetch()} style={styles.refreshButton}>\n 🔄 Refresh\n </button>\n </div>\n </div>\n\n {loading && logs.length === 0 ? (\n <div style={styles.emptyState}>Loading...</div>\n ) : logs.length === 0 ? (\n <div style={styles.emptyState}>\n <p>No events found</p>\n <p style={{ fontSize: '13px', marginTop: '8px' }}>Events will appear here when actions are triggered.</p>\n </div>\n ) : (\n <>\n <div style={{ ...styles.tableContainer, maxHeight, overflowY: 'auto' }}>\n <table style={styles.table}>\n <thead style={styles.tableHeader}>\n <tr>\n <th style={{ ...styles.th, width: '40px' }}></th>\n <th style={styles.th}>Status</th>\n <th style={styles.th}>Event</th>\n <th style={styles.th}>Time</th>\n <th style={styles.th}>Webhook</th>\n <th style={{ ...styles.th, width: '80px' }}>Action</th>\n </tr>\n </thead>\n <tbody>\n {logs.map((log) => (\n <EventLogRow\n key={log.id}\n log={log}\n onRetry={() => handleRetry(log)}\n retrying={retryingId === log.id}\n expanded={expandedIds.has(log.id)}\n onToggleExpand={() => handleToggleExpand(log.id)}\n />\n ))}\n </tbody>\n </table>\n </div>\n\n {hasMore && (\n <button onClick={loadMore} style={styles.loadMoreButton}>\n Load More\n </button>\n )}\n </>\n )}\n </div>\n );\n});\n\nexport default EventLogViewer;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EventLogViewer.js","names":[],"sources":["../../../../../src/bigconsole/components/widgets/event-logs/EventLogViewer.tsx"],"sourcesContent":["/**\n * EventLogViewer Component (v2.0)\n *\n * Component for viewing event history and managing failed deliveries.\n * Shows event status, allows filtering, and supports retry functionality.\n */\n\nimport React, { memo, useState, useCallback } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n useEventLogs,\n getEventStatusColor,\n getEventStatusLabel,\n getEventStatusIcon,\n type EventStatus,\n type EventLog,\n} from '../../../hooks/useEventLogs';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface EventLogViewerProps {\n /** Dashboard ID to filter logs */\n dashboardId?: string;\n /** Widget ID to filter logs */\n widgetId?: string;\n /** Maximum height of the viewer */\n maxHeight?: string;\n /** Callback when retry is successful */\n onRetrySuccess?: (eventLog: EventLog) => void;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n container: {\n padding: '16px',\n backgroundColor: 'var(--color-bg-surface)',\n borderRadius: '8px',\n } as React.CSSProperties,\n header: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '16px',\n } as React.CSSProperties,\n title: {\n fontSize: '16px',\n fontWeight: 600,\n color: 'var(--color-text-primary)',\n margin: 0,\n } as React.CSSProperties,\n headerActions: {\n display: 'flex',\n gap: '8px',\n alignItems: 'center',\n } as React.CSSProperties,\n filterSelect: {\n padding: '6px 12px',\n fontSize: '13px',\n border: '1px solid var(--color-border)',\n borderRadius: '6px',\n backgroundColor: 'var(--color-bg-surface)',\n } as React.CSSProperties,\n refreshButton: {\n padding: '6px 12px',\n fontSize: '13px',\n backgroundColor: 'var(--color-bg-muted)',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n transition: 'background-color 0.15s ease',\n } as React.CSSProperties,\n table: {\n width: '100%',\n borderCollapse: 'collapse',\n fontSize: '13px',\n } as React.CSSProperties,\n tableHeader: {\n backgroundColor: 'var(--color-bg-sunken)',\n borderBottom: '1px solid var(--color-border)',\n } as React.CSSProperties,\n th: {\n padding: '10px 12px',\n textAlign: 'left',\n fontWeight: 600,\n color: 'var(--color-text-secondary)',\n } as React.CSSProperties,\n td: {\n padding: '10px 12px',\n borderBottom: '1px solid var(--color-border)',\n color: 'var(--color-text-secondary)',\n } as React.CSSProperties,\n statusCell: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n } as React.CSSProperties,\n statusBadge: {\n padding: '2px 8px',\n borderRadius: '12px',\n fontSize: '11px',\n fontWeight: 500,\n } as React.CSSProperties,\n eventName: {\n fontFamily: 'monospace',\n fontSize: '12px',\n color: 'var(--color-text-secondary)',\n } as React.CSSProperties,\n timeAgo: {\n fontSize: '12px',\n color: 'var(--color-text-muted)',\n } as React.CSSProperties,\n retryButton: {\n padding: '4px 8px',\n fontSize: '11px',\n backgroundColor: 'var(--color-action-primary-bg)',\n color: 'var(--color-action-primary-text)',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n transition: 'opacity 0.15s ease',\n } as React.CSSProperties,\n emptyState: {\n textAlign: 'center',\n padding: '32px',\n color: 'var(--color-text-muted)',\n } as React.CSSProperties,\n loadMoreButton: {\n width: '100%',\n padding: '10px',\n marginTop: '12px',\n backgroundColor: 'var(--color-bg-muted)',\n border: 'none',\n borderRadius: '6px',\n fontSize: '13px',\n color: 'var(--color-text-secondary)',\n cursor: 'pointer',\n transition: 'background-color 0.15s ease',\n } as React.CSSProperties,\n totalCount: {\n fontSize: '12px',\n color: 'var(--color-text-muted)',\n } as React.CSSProperties,\n tableContainer: {\n overflowX: 'auto',\n } as React.CSSProperties,\n detailRow: {\n backgroundColor: 'var(--color-bg-sunken)',\n } as React.CSSProperties,\n detailContent: {\n padding: '12px',\n fontSize: '12px',\n fontFamily: 'monospace',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-all',\n color: 'var(--color-text-secondary)',\n } as React.CSSProperties,\n expandButton: {\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: '4px',\n fontSize: '14px',\n } as React.CSSProperties,\n};\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/** Translator function shape from useI18n().t. */\ntype EventLogTFunc = (\n key: string,\n fallbackOrParams?: string | Record<string, string | number>,\n params?: Record<string, string | number>\n) => string;\n\nfunction formatTimeAgo(dateString: string, t: EventLogTFunc): string {\n const date = new Date(dateString);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMins / 60);\n const diffDays = Math.floor(diffHours / 24);\n\n if (diffMins < 1) return t('bigconsole.widget.eventLog.time.justNow', 'Just now');\n if (diffMins < 60) return t('bigconsole.widget.eventLog.time.minutesAgo', '{{count}}m ago', { count: diffMins });\n if (diffHours < 24) return t('bigconsole.widget.eventLog.time.hoursAgo', '{{count}}h ago', { count: diffHours });\n if (diffDays < 7) return t('bigconsole.widget.eventLog.time.daysAgo', '{{count}}d ago', { count: diffDays });\n return date.toLocaleDateString();\n}\n\n// ============================================================================\n// Event Log Row Component\n// ============================================================================\n\ninterface EventLogRowProps {\n log: EventLog;\n onRetry: () => void;\n retrying?: boolean;\n expanded?: boolean;\n onToggleExpand: () => void;\n}\n\nconst EventLogRow: React.FC<EventLogRowProps> = memo(function EventLogRow({\n log,\n onRetry,\n retrying,\n expanded,\n onToggleExpand,\n}) {\n const { t } = useI18n();\n const canRetry = log.status === 'FAILED';\n\n return (\n <>\n <tr>\n <td style={styles.td}>\n <button onClick={onToggleExpand} style={styles.expandButton}>\n {expanded ? '▼' : '▶'}\n </button>\n </td>\n <td style={styles.td}>\n <div style={styles.statusCell}>\n <span>{getEventStatusIcon(log.status)}</span>\n <span\n style={{\n ...styles.statusBadge,\n backgroundColor: `${getEventStatusColor(log.status)}20`,\n color: getEventStatusColor(log.status),\n }}\n >\n {getEventStatusLabel(log.status)}\n </span>\n </div>\n </td>\n <td style={styles.td}>\n <div style={styles.eventName}>{log.eventName}</div>\n {log.actionName && (\n <div style={{ fontSize: '11px', color: 'var(--color-text-placeholder)' }}>\n {t('bigconsole.widget.eventLog.actionLabel', 'Action: {{action}}', { action: log.actionName ?? '' })}\n </div>\n )}\n </td>\n <td style={styles.td}>\n <div style={styles.timeAgo}>{formatTimeAgo(log.createdAt, t)}</div>\n </td>\n <td style={styles.td}>\n {log.webhookUrl ? (\n <span style={{ fontSize: '12px', color: 'var(--color-text-muted)' }}>\n {new URL(log.webhookUrl).hostname}\n </span>\n ) : (\n <span style={{ fontSize: '12px', color: 'var(--color-text-placeholder)' }}>—</span>\n )}\n </td>\n <td style={styles.td}>\n {canRetry && (\n <button onClick={onRetry} disabled={retrying} style={styles.retryButton}>\n {retrying ? '...' : `🔄 ${t('bigconsole.widget.eventLog.retry', 'Retry')}`}\n </button>\n )}\n </td>\n </tr>\n {expanded && (\n <tr style={styles.detailRow}>\n <td colSpan={6} style={styles.td}>\n <div style={styles.detailContent as React.CSSProperties}>\n <strong>{t('bigconsole.widget.eventLog.payload', 'Payload:')}</strong>\n {'\\n'}\n {JSON.stringify(log.payload, null, 2)}\n {log.errorMessage && (\n <>\n {'\\n\\n'}\n <strong style={{ color: 'var(--color-status-error-text)' }}>\n {t('bigconsole.widget.eventLog.error', 'Error:')}\n </strong>\n {'\\n'}\n {log.errorMessage}\n </>\n )}\n {log.responseCode && (\n <>\n {'\\n\\n'}\n <strong>{t('bigconsole.widget.eventLog.responseCode', 'Response Code:')}</strong> {log.responseCode}\n </>\n )}\n {'\\n\\n'}\n <strong>{t('bigconsole.widget.eventLog.attempts', 'Attempts:')}</strong> {log.attempts}\n </div>\n </td>\n </tr>\n )}\n </>\n );\n});\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport const EventLogViewer: React.FC<EventLogViewerProps> = memo(function EventLogViewer({\n dashboardId,\n widgetId,\n maxHeight = '400px',\n onRetrySuccess,\n}) {\n const { t } = useI18n();\n const [statusFilter, setStatusFilter] = useState<EventStatus | ''>('');\n const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set());\n const [retryingId, setRetryingId] = useState<string | null>(null);\n\n const { logs, loading, totalCount, hasMore, loadMore, retryDelivery, refetch } = useEventLogs({\n dashboardId,\n widgetId,\n status: statusFilter || undefined,\n });\n\n const handleRetry = useCallback(\n async (log: EventLog) => {\n setRetryingId(log.id);\n const result = await retryDelivery(log.id);\n setRetryingId(null);\n if (result) {\n onRetrySuccess?.(result);\n }\n },\n [retryDelivery, onRetrySuccess]\n );\n\n const handleToggleExpand = useCallback((id: string) => {\n setExpandedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n }, []);\n\n return (\n <div style={styles.container}>\n <div style={styles.header}>\n <div>\n <h3 style={styles.title}>{t('bigconsole.widget.eventLog.title', 'Event History')}</h3>\n <span style={styles.totalCount}>\n {t('bigconsole.widget.eventLog.eventCount', '{{count}} events', { count: totalCount })}\n </span>\n </div>\n <div style={styles.headerActions}>\n <select\n value={statusFilter}\n onChange={(e) => setStatusFilter(e.target.value as EventStatus | '')}\n style={styles.filterSelect}\n >\n <option value=\"\">{t('bigconsole.widget.eventLog.filter.all', 'All Status')}</option>\n <option value=\"DELIVERED\">{t('bigconsole.widget.eventLog.filter.delivered', 'Delivered')}</option>\n <option value=\"FAILED\">{t('bigconsole.widget.eventLog.filter.failed', 'Failed')}</option>\n <option value=\"PENDING\">{t('bigconsole.widget.eventLog.filter.pending', 'Pending')}</option>\n <option value=\"PROCESSING\">{t('bigconsole.widget.eventLog.filter.processing', 'Processing')}</option>\n <option value=\"RETRYING\">{t('bigconsole.widget.eventLog.filter.retrying', 'Retrying')}</option>\n <option value=\"IGNORED\">{t('bigconsole.widget.eventLog.filter.ignored', 'Ignored')}</option>\n </select>\n <button onClick={() => refetch()} style={styles.refreshButton}>\n 🔄 {t('bigconsole.widget.eventLog.refresh', 'Refresh')}\n </button>\n </div>\n </div>\n\n {loading && logs.length === 0 ? (\n <div style={styles.emptyState}>{t('bigconsole.widget.eventLog.loading', 'Loading...')}</div>\n ) : logs.length === 0 ? (\n <div style={styles.emptyState}>\n <p>{t('bigconsole.widget.eventLog.emptyTitle', 'No events found')}</p>\n <p style={{ fontSize: '13px', marginTop: '8px' }}>\n {t('bigconsole.widget.eventLog.emptyHint', 'Events will appear here when actions are triggered.')}\n </p>\n </div>\n ) : (\n <>\n <div style={{ ...styles.tableContainer, maxHeight, overflowY: 'auto' }}>\n <table style={styles.table}>\n <thead style={styles.tableHeader}>\n <tr>\n <th style={{ ...styles.th, width: '40px' }}></th>\n <th style={styles.th}>{t('bigconsole.widget.eventLog.column.status', 'Status')}</th>\n <th style={styles.th}>{t('bigconsole.widget.eventLog.column.event', 'Event')}</th>\n <th style={styles.th}>{t('bigconsole.widget.eventLog.column.time', 'Time')}</th>\n <th style={styles.th}>{t('bigconsole.widget.eventLog.column.webhook', 'Webhook')}</th>\n <th style={{ ...styles.th, width: '80px' }}>\n {t('bigconsole.widget.eventLog.column.action', 'Action')}\n </th>\n </tr>\n </thead>\n <tbody>\n {logs.map((log) => (\n <EventLogRow\n key={log.id}\n log={log}\n onRetry={() => handleRetry(log)}\n retrying={retryingId === log.id}\n expanded={expandedIds.has(log.id)}\n onToggleExpand={() => handleToggleExpand(log.id)}\n />\n ))}\n </tbody>\n </table>\n </div>\n\n {hasMore && (\n <button onClick={loadMore} style={styles.loadMoreButton}>\n {t('bigconsole.widget.eventLog.loadMore', 'Load More')}\n </button>\n )}\n </>\n )}\n </div>\n );\n});\n\nexport default EventLogViewer;\n"],"mappings":"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"}
|