@burdenoff/microfe-bigconsole 2026.1004.7 → 2026.1005.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/bigconsole/BigConsoleRoutes.d.ts +7 -1
  2. package/dist/bigconsole/BigConsoleRoutes.d.ts.map +1 -1
  3. package/dist/bigconsole/BigConsoleRoutes.js +154 -144
  4. package/dist/bigconsole/BigConsoleRoutes.js.map +1 -1
  5. package/dist/bigconsole/components/datasink/AlertExecutionHistory.d.ts +11 -0
  6. package/dist/bigconsole/components/datasink/AlertExecutionHistory.d.ts.map +1 -0
  7. package/dist/bigconsole/components/datasink/AlertExecutionHistory.js +248 -0
  8. package/dist/bigconsole/components/datasink/AlertExecutionHistory.js.map +1 -0
  9. package/dist/bigconsole/components/datasink/AlertRuleEditor.d.ts +23 -0
  10. package/dist/bigconsole/components/datasink/AlertRuleEditor.d.ts.map +1 -0
  11. package/dist/bigconsole/components/datasink/AlertRuleEditor.js +357 -0
  12. package/dist/bigconsole/components/datasink/AlertRuleEditor.js.map +1 -0
  13. package/dist/bigconsole/components/workflow/WorkflowOpenGuard.d.ts +25 -0
  14. package/dist/bigconsole/components/workflow/WorkflowOpenGuard.d.ts.map +1 -0
  15. package/dist/bigconsole/components/workflow/WorkflowOpenGuard.js +89 -0
  16. package/dist/bigconsole/components/workflow/WorkflowOpenGuard.js.map +1 -0
  17. package/dist/bigconsole/hooks/useDataSinkAlerts.d.ts +146 -0
  18. package/dist/bigconsole/hooks/useDataSinkAlerts.d.ts.map +1 -0
  19. package/dist/bigconsole/hooks/useDataSinkAlerts.js +221 -0
  20. package/dist/bigconsole/hooks/useDataSinkAlerts.js.map +1 -0
  21. package/dist/bigconsole/pages/DataSinkAlertsPage.d.ts +2 -0
  22. package/dist/bigconsole/pages/DataSinkAlertsPage.d.ts.map +1 -0
  23. package/dist/bigconsole/pages/DataSinkAlertsPage.js +422 -0
  24. package/dist/bigconsole/pages/DataSinkAlertsPage.js.map +1 -0
  25. package/dist/bigconsole/pages/DataSinkViewPage.d.ts.map +1 -1
  26. package/dist/bigconsole/pages/DataSinkViewPage.js +151 -144
  27. package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
  28. package/dist/bigconsole/pages/WorkflowViewPage.js +4 -4
  29. package/dist/bigconsole/pages/WorkflowsPage.d.ts.map +1 -1
  30. package/dist/bigconsole/pages/WorkflowsPage.js +61 -60
  31. package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
  32. package/dist/bigconsole/utils/alertRules.d.ts +40 -0
  33. package/dist/bigconsole/utils/alertRules.d.ts.map +1 -0
  34. package/dist/bigconsole/utils/alertRules.js +83 -0
  35. package/dist/bigconsole/utils/alertRules.js.map +1 -0
  36. package/dist/bigconsole/workflowOpen.d.ts +78 -0
  37. package/dist/bigconsole/workflowOpen.d.ts.map +1 -0
  38. package/dist/bigconsole/workflowOpen.js +33 -0
  39. package/dist/bigconsole/workflowOpen.js.map +1 -0
  40. package/dist/generated/wspace-operations.d.ts +418 -0
  41. package/dist/generated/wspace-operations.d.ts.map +1 -1
  42. package/dist/generated/wspace-operations.js +329 -200
  43. package/dist/generated/wspace-operations.js.map +1 -1
  44. package/dist/generated/wspace-types.d.ts +122 -0
  45. package/dist/generated/wspace-types.d.ts.map +1 -1
  46. package/dist/generated/wspace-types.js +7 -1
  47. package/dist/generated/wspace-types.js.map +1 -1
  48. package/dist/translations/en.d.ts.map +1 -1
  49. package/package.json +1 -1
@@ -0,0 +1,422 @@
1
+ import { useAppNavigate as e } from "../contexts/NavigationContext.js";
2
+ import "../contexts/index.js";
3
+ import { useBigConsole as t } from "../context/BigConsoleContext.js";
4
+ import "../context/index.js";
5
+ import { SECTION_FOCUS_RING as n } from "../components/common/sectionStyles.js";
6
+ import { Section as r } from "../components/common/Section.js";
7
+ import "../components/common/index.js";
8
+ import { BIGCONSOLE_PERMISSIONS as i } from "../../constants/permissions.js";
9
+ import { nativeConfirm as ee } from "../../utils/nativeBridge.js";
10
+ import { AlertRuleEditor as te } from "../components/datasink/AlertRuleEditor.js";
11
+ import { alertErrorMessage as a, useDataSinkAlerts as ne } from "../hooks/useDataSinkAlerts.js";
12
+ import { AlertExecutionHistory as re } from "../components/datasink/AlertExecutionHistory.js";
13
+ import { ALERT_VALIDATION_MESSAGES as o, alertDraft as s, alertDraftInput as c, validateAlertDraft as l } from "../utils/alertRules.js";
14
+ import { useEffect as u, useRef as d, useState as f } from "react";
15
+ import { useParams as p } from "react-router";
16
+ import { AccessDenied as ie } from "@burdenoff/fe-libs/shared/components";
17
+ import { usePermissions as ae } from "@burdenoff/fe-libs/shared/providers/shell";
18
+ import { ArrowLeft as oe, Bell as se, Loader2 as ce, Plus as le, RefreshCw as ue, Trash2 as m } from "lucide-react";
19
+ import { Button as h, Switch as de } from "@burdenoff/fe-libs/ui";
20
+ import { Fragment as fe, jsx as g, jsxs as _ } from "react/jsx-runtime";
21
+ import { useI18n as pe } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
22
+ //#region src/bigconsole/pages/DataSinkAlertsPage.tsx
23
+ function v() {
24
+ let { dataSinkId: e = "" } = p(), { currentUser: n, workspaceId: r } = t();
25
+ return /* @__PURE__ */ g(y, { dataSinkId: e }, `${n?.id ?? ""}|${r ?? ""}|${e}`);
26
+ }
27
+ function y({ dataSinkId: p }) {
28
+ let { t: v } = pe(), y = e(), { currentUser: b, workspaceId: x } = t(), { hasPermission: S, isLoading: C } = ae(), w = S(i.DATASINK_READ), T = !C && S(i.DATASINK_UPDATE), E = ne(p, !C && w && !!x && !!b?.id), D = E.sink, O = D?.alerts ?? [], [k, me] = f(""), [A, j] = f(null), [M, N] = f(!1), P = d(!1), F = d(null), [I, L] = f(null), [R, z] = f(null), [B, V] = f(!1), [he, H] = f(null), [U, W] = f(null), [ge, G] = f(0), K = d(0), q = d(0), J = A?.selection;
29
+ u(() => {
30
+ J !== void 0 && document.getElementById("alert-name")?.focus();
31
+ }, [J]);
32
+ let _e = !!A && JSON.stringify(A.draft) !== A.original, Y = async (e) => await ee({
33
+ title: v("bigconsole.alerts.confirm.title", "Confirm alert change"),
34
+ message: e,
35
+ okButtonTitle: v("bigconsole.alerts.confirm.continue", "Continue"),
36
+ cancelButtonTitle: v("bigconsole.alerts.rule.cancel", "Cancel")
37
+ }) ?? window.confirm(e), X = () => !_e || Y(v("bigconsole.alerts.confirm.discard", "Discard your unsaved rule changes?")), Z = async (e) => {
38
+ if (M || !D || !await X()) return;
39
+ document.activeElement instanceof HTMLElement && (F.current = document.activeElement);
40
+ let t = s(e);
41
+ j({
42
+ draft: t,
43
+ original: JSON.stringify(t),
44
+ version: D.version,
45
+ selection: ++q.current
46
+ }), K.current++, W(null), H(null), V(!1), L(null), z(null);
47
+ }, ve = async () => {
48
+ M || !await X() || (j(null), W(null), H(null), K.current++, V(!1), L(null), F.current?.isConnected && F.current.focus());
49
+ }, Q = async () => {
50
+ if (!A || !D || !T || P.current) return;
51
+ let e = l(A.draft, E.channels);
52
+ if (e) {
53
+ L(v(`bigconsole.alerts.validation.${e}`, o[e]));
54
+ return;
55
+ }
56
+ P.current = !0, N(!0), L(null), z(null);
57
+ let t = new Set(O.map((e) => e.id));
58
+ try {
59
+ let e = await E.save(c(A.draft), A.version);
60
+ if (!e) return;
61
+ let n = e.alerts?.find((e) => A.draft.id ? e.id === A.draft.id : !t.has(e.id));
62
+ if (n) {
63
+ let t = s(n);
64
+ j({
65
+ draft: t,
66
+ original: JSON.stringify(t),
67
+ version: e.version,
68
+ selection: A.selection
69
+ });
70
+ } else j(null);
71
+ z(v("bigconsole.alerts.feedback.saved", "Alert rule saved.")), G((e) => e + 1);
72
+ } catch (e) {
73
+ L(a(e));
74
+ } finally {
75
+ P.current = !1, N(!1);
76
+ }
77
+ }, ye = async (e) => {
78
+ if (!D || !T || P.current) return;
79
+ let t = {
80
+ ...s(e),
81
+ enabled: !e.enabled
82
+ }, n = l(t, E.channels);
83
+ if (n) {
84
+ L(v(`bigconsole.alerts.validation.${n}`, o[n]));
85
+ return;
86
+ }
87
+ P.current = !0, N(!0), L(null), z(null);
88
+ try {
89
+ await E.save(c(t), D.version) && (z(t.enabled ? v("bigconsole.alerts.feedback.enabled", "Alert rule enabled.") : v("bigconsole.alerts.feedback.disabled", "Alert rule disabled.")), G((e) => e + 1));
90
+ } catch (e) {
91
+ L(a(e));
92
+ } finally {
93
+ P.current = !1, N(!1);
94
+ }
95
+ }, be = async (e) => {
96
+ if (!(!D || !T || P.current) && !(!await Y(`${v("bigconsole.alerts.confirm.delete", "Delete alert rule")} “${e.name}”?`) || P.current)) {
97
+ P.current = !0, N(!0), L(null), z(null);
98
+ try {
99
+ await E.remove(e.id, D.version) && (A?.draft.id === e.id && j(null), z(v("bigconsole.alerts.feedback.deleted", "Alert rule deleted.")), G((e) => e + 1));
100
+ } catch (e) {
101
+ L(a(e));
102
+ } finally {
103
+ P.current = !1, N(!1);
104
+ }
105
+ }
106
+ }, xe = async () => {
107
+ if (!A || B || M) return;
108
+ let e = ++K.current, { condition: t, conditionType: n } = A.draft;
109
+ V(!0), H(null), W(null);
110
+ try {
111
+ let r = await E.preview(t, n);
112
+ r && K.current === e && W({
113
+ condition: t,
114
+ conditionType: n,
115
+ result: r
116
+ });
117
+ } catch (t) {
118
+ K.current === e && H(a(t));
119
+ } finally {
120
+ K.current === e && V(!1);
121
+ }
122
+ }, Se = async () => {
123
+ if (!A?.draft.id || M || !await X()) return;
124
+ let e = await E.reload(), t = e?.alerts?.find((e) => e.id === A.draft.id);
125
+ if (!e) return;
126
+ if (!t) {
127
+ j(null), z(v("bigconsole.alerts.feedback.removedElsewhere", "This rule no longer exists."));
128
+ return;
129
+ }
130
+ let n = s(t);
131
+ j({
132
+ draft: n,
133
+ original: JSON.stringify(n),
134
+ version: e.version,
135
+ selection: ++q.current
136
+ }), L(null), W(null);
137
+ };
138
+ if (C || E.loading) return /* @__PURE__ */ _("div", {
139
+ role: "status",
140
+ className: "flex min-h-60 items-center justify-center p-card-padding",
141
+ children: [/* @__PURE__ */ g(ce, { className: "mr-2 h-5 w-5 animate-spin text-text-secondary" }), v("bigconsole.alerts.loading", "Loading alerts…")]
142
+ });
143
+ if (!w) return /* @__PURE__ */ g(ie, {
144
+ title: v("bigconsole.alerts.denied", "Access denied"),
145
+ description: v("bigconsole.alerts.deniedDescription", "You do not have permission to read this data sink.")
146
+ });
147
+ if (!x || !b?.id) return /* @__PURE__ */ g("p", {
148
+ className: "p-card-padding text-text-secondary",
149
+ children: v("bigconsole.alerts.selectWorkspace", "Select a workspace to view its alerts.")
150
+ });
151
+ if (!D) return /* @__PURE__ */ g("div", {
152
+ className: "p-card-padding",
153
+ children: /* @__PURE__ */ g(r, {
154
+ title: v("bigconsole.alerts.unavailable", "Alerts could not be loaded"),
155
+ headingLevel: 2,
156
+ tone: "danger",
157
+ description: E.error ?? v("bigconsole.alerts.notFound", "Data sink not found."),
158
+ actions: /* @__PURE__ */ g(h, {
159
+ onClick: () => void E.reload(),
160
+ variant: "secondary",
161
+ children: v("bigconsole.alerts.retry", "Retry")
162
+ })
163
+ })
164
+ });
165
+ let $ = O.filter((e) => `${e.name} ${e.condition}`.toLowerCase().includes(k.trim().toLowerCase()));
166
+ return /* @__PURE__ */ _("div", {
167
+ className: "min-w-0 p-card-padding",
168
+ children: [
169
+ /* @__PURE__ */ _("header", {
170
+ className: "mb-section-gap flex flex-col gap-form-gap sm:flex-row sm:items-start sm:justify-between",
171
+ children: [/* @__PURE__ */ _("div", {
172
+ className: "min-w-0",
173
+ children: [
174
+ /* @__PURE__ */ _(h, {
175
+ variant: "ghost",
176
+ size: "sm",
177
+ onClick: () => y(`/datasinks/${p}`),
178
+ className: "mb-3",
179
+ children: [/* @__PURE__ */ g(oe, { className: "mr-2 h-4 w-4" }), v("bigconsole.alerts.back", "Back to data sink")]
180
+ }),
181
+ /* @__PURE__ */ _("h1", {
182
+ className: "break-words text-2xl font-bold text-text-primary",
183
+ children: [
184
+ v("bigconsole.alerts.title", "Alerts"),
185
+ " · ",
186
+ D.name || D.key
187
+ ]
188
+ }),
189
+ /* @__PURE__ */ g("p", {
190
+ className: "mt-2 text-sm text-text-secondary",
191
+ children: v("bigconsole.alerts.purpose", "Create and manage alert rules for this data sink.")
192
+ })
193
+ ]
194
+ }), /* @__PURE__ */ _(h, {
195
+ variant: "secondary",
196
+ size: "sm",
197
+ onClick: () => {
198
+ E.reload(), E.reloadChannels(), G((e) => e + 1);
199
+ },
200
+ disabled: E.refreshing || M,
201
+ children: [/* @__PURE__ */ g(ue, { className: `mr-2 h-4 w-4 ${E.refreshing ? "animate-spin" : ""}` }), v("bigconsole.alerts.refresh", "Refresh alerts")]
202
+ })]
203
+ }),
204
+ R && /* @__PURE__ */ g("p", {
205
+ role: "status",
206
+ className: "mb-4 rounded-control bg-[var(--color-status-success-bgSubtle)] p-3 text-sm text-status-success-text",
207
+ children: R
208
+ }),
209
+ I && !A && /* @__PURE__ */ g("p", {
210
+ role: "alert",
211
+ className: "mb-4 break-words text-sm text-status-error-text",
212
+ children: I
213
+ }),
214
+ E.error && /* @__PURE__ */ g("p", {
215
+ role: "alert",
216
+ className: "mb-4 break-words text-sm text-status-error-text",
217
+ children: E.error
218
+ }),
219
+ /* @__PURE__ */ _("div", {
220
+ className: "grid min-w-0 items-start gap-section-gap xl:grid-cols-[minmax(0,1.2fr)_minmax(0,1fr)]",
221
+ children: [/* @__PURE__ */ _("div", {
222
+ className: "min-w-0 space-y-section-gap",
223
+ children: [/* @__PURE__ */ _(r, {
224
+ title: v("bigconsole.alerts.list.title", "Alert rules"),
225
+ headingLevel: 2,
226
+ icon: /* @__PURE__ */ g(se, { className: "h-4 w-4" }),
227
+ actions: /* @__PURE__ */ _(h, {
228
+ size: "sm",
229
+ onClick: () => void Z(),
230
+ disabled: !T || M,
231
+ children: [/* @__PURE__ */ g(le, { className: "mr-2 h-4 w-4" }), v("bigconsole.alerts.list.new", "New alert rule")]
232
+ }),
233
+ children: [
234
+ /* @__PURE__ */ g("label", {
235
+ htmlFor: "alert-search",
236
+ className: "sr-only",
237
+ children: v("bigconsole.alerts.list.search", "Search alerts")
238
+ }),
239
+ /* @__PURE__ */ g("input", {
240
+ id: "alert-search",
241
+ type: "search",
242
+ value: k,
243
+ onChange: (e) => me(e.target.value),
244
+ placeholder: v("bigconsole.alerts.list.searchPlaceholder", "Search alerts…"),
245
+ className: `mb-4 w-full min-w-0 rounded-control border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary ${n}`
246
+ }),
247
+ /* @__PURE__ */ g("div", {
248
+ className: "max-w-full overflow-x-auto",
249
+ children: /* @__PURE__ */ _("table", {
250
+ className: "w-full text-sm",
251
+ children: [
252
+ /* @__PURE__ */ g("caption", {
253
+ className: "sr-only",
254
+ children: v("bigconsole.alerts.list.caption", "Rules for this data sink")
255
+ }),
256
+ /* @__PURE__ */ g("thead", { children: /* @__PURE__ */ _("tr", {
257
+ className: "border-b border-border-subtle text-left text-xs text-text-secondary",
258
+ children: [
259
+ /* @__PURE__ */ g("th", {
260
+ scope: "col",
261
+ className: "pb-3 pr-2",
262
+ children: v("bigconsole.alerts.rule.name", "Name")
263
+ }),
264
+ /* @__PURE__ */ g("th", {
265
+ scope: "col",
266
+ className: "hidden pb-3 pr-2 sm:table-cell",
267
+ children: v("bigconsole.alerts.rule.severity", "Severity")
268
+ }),
269
+ /* @__PURE__ */ g("th", {
270
+ scope: "col",
271
+ className: "hidden pb-3 pr-2 lg:table-cell",
272
+ children: v("bigconsole.alerts.rule.destinations", "Delivery destinations")
273
+ }),
274
+ /* @__PURE__ */ g("th", {
275
+ scope: "col",
276
+ className: "hidden pb-3 pr-2 md:table-cell",
277
+ children: v("bigconsole.alerts.rule.throttle", "Throttle")
278
+ }),
279
+ /* @__PURE__ */ g("th", {
280
+ scope: "col",
281
+ className: "pb-3 pr-2",
282
+ children: v("bigconsole.alerts.list.enabled", "Enabled")
283
+ }),
284
+ /* @__PURE__ */ g("th", {
285
+ scope: "col",
286
+ className: "pb-3",
287
+ children: /* @__PURE__ */ g("span", {
288
+ className: "sr-only",
289
+ children: v("bigconsole.alerts.list.actions", "Actions")
290
+ })
291
+ })
292
+ ]
293
+ }) }),
294
+ /* @__PURE__ */ g("tbody", { children: $.map((e) => /* @__PURE__ */ _("tr", {
295
+ className: "border-b border-border-subtle last:border-0",
296
+ children: [
297
+ /* @__PURE__ */ _("th", {
298
+ scope: "row",
299
+ className: "max-w-64 py-4 pr-2 text-left font-normal",
300
+ children: [
301
+ /* @__PURE__ */ g("button", {
302
+ type: "button",
303
+ onClick: () => void Z(e),
304
+ disabled: M,
305
+ className: `break-words text-left font-medium text-text-primary underline-offset-4 hover:underline ${n}`,
306
+ children: e.name
307
+ }),
308
+ /* @__PURE__ */ g("p", {
309
+ className: "mt-1 text-xs text-text-secondary sm:hidden",
310
+ children: v(`bigconsole.alerts.severity.${e.severity}`, e.severity.toUpperCase())
311
+ }),
312
+ /* @__PURE__ */ g("p", {
313
+ className: "mt-1 text-xs text-text-muted md:hidden",
314
+ children: e.throttle?.enabled ? `${e.throttle.maxAlertsPerWindow} / ${e.throttle.windowMinutes} min` : v("bigconsole.alerts.list.noThrottle", "No throttle")
315
+ })
316
+ ]
317
+ }),
318
+ /* @__PURE__ */ g("td", {
319
+ className: "hidden py-4 pr-2 sm:table-cell",
320
+ children: /* @__PURE__ */ g("span", {
321
+ className: "rounded-pill border border-border-subtle bg-bg-sunken px-2 py-1 text-xs text-text-primary",
322
+ children: v(`bigconsole.alerts.severity.${e.severity}`, e.severity.toUpperCase())
323
+ })
324
+ }),
325
+ /* @__PURE__ */ g("td", {
326
+ className: "hidden py-4 pr-2 text-xs text-text-secondary lg:table-cell",
327
+ children: e.deliveries.length ? [...new Set(e.deliveries.map((e) => e.channel))].join(", ") : v("bigconsole.alerts.list.unconfigured", "Not configured")
328
+ }),
329
+ /* @__PURE__ */ g("td", {
330
+ className: "hidden py-4 pr-2 text-xs text-text-secondary md:table-cell",
331
+ children: e.throttle?.enabled ? `${e.throttle.maxAlertsPerWindow} / ${e.throttle.windowMinutes} min` : v("bigconsole.alerts.list.noThrottle", "No throttle")
332
+ }),
333
+ /* @__PURE__ */ g("td", {
334
+ className: "py-4 pr-2",
335
+ children: /* @__PURE__ */ g(de, {
336
+ checked: e.enabled,
337
+ onCheckedChange: () => void ye(e),
338
+ disabled: !T || M,
339
+ "aria-label": `${v("bigconsole.alerts.list.enabled", "Enabled")} · ${e.name}`
340
+ })
341
+ }),
342
+ /* @__PURE__ */ g("td", {
343
+ className: "py-4",
344
+ children: /* @__PURE__ */ g(h, {
345
+ type: "button",
346
+ variant: "ghost",
347
+ size: "sm",
348
+ onClick: () => void be(e),
349
+ disabled: !T || M,
350
+ "aria-label": `${v("bigconsole.alerts.confirm.delete", "Delete alert rule")} · ${e.name}`,
351
+ children: /* @__PURE__ */ g(m, { className: "h-4 w-4" })
352
+ })
353
+ })
354
+ ]
355
+ }, e.id)) })
356
+ ]
357
+ })
358
+ }),
359
+ !$.length && /* @__PURE__ */ g("p", {
360
+ className: "py-4 text-sm text-text-secondary",
361
+ children: O.length ? v("bigconsole.alerts.list.noMatches", "No alerts match your search.") : v("bigconsole.alerts.list.empty", "No alert rules yet. Create a disabled rule and preview its condition before enabling it.")
362
+ }),
363
+ /* @__PURE__ */ _("p", {
364
+ className: "mt-3 text-xs text-text-muted",
365
+ children: [
366
+ $.length,
367
+ " ",
368
+ v("bigconsole.alerts.list.count", "rules shown")
369
+ ]
370
+ })
371
+ ]
372
+ }), /* @__PURE__ */ g(re, {
373
+ owner: E.owner,
374
+ rules: O,
375
+ load: E.history,
376
+ refreshVersion: ge
377
+ })]
378
+ }), /* @__PURE__ */ g("div", {
379
+ className: "min-w-0",
380
+ children: A ? /* @__PURE__ */ _(fe, { children: [/* @__PURE__ */ g(te, {
381
+ draft: A.draft,
382
+ channels: E.channels,
383
+ channelError: E.channelError,
384
+ canUpdate: T,
385
+ pending: M,
386
+ previewing: B,
387
+ preview: U?.result ?? null,
388
+ previewError: he,
389
+ previewStale: !!U && (U.condition !== A.draft.condition || U.conditionType !== A.draft.conditionType || D.version > U.result.version),
390
+ error: I,
391
+ onChange: (e) => {
392
+ (e.condition !== A.draft.condition || e.conditionType !== A.draft.conditionType) && (K.current++, H(null), V(!1)), j({
393
+ ...A,
394
+ draft: e
395
+ });
396
+ },
397
+ onSave: () => void Q(),
398
+ onCancel: () => void ve(),
399
+ onPreview: () => void xe(),
400
+ onReloadChannels: () => void E.reloadChannels()
401
+ }), A.draft.id && /* @__PURE__ */ g(h, {
402
+ type: "button",
403
+ variant: "ghost",
404
+ size: "sm",
405
+ onClick: () => void Se(),
406
+ disabled: M || E.refreshing,
407
+ className: "mt-3",
408
+ children: v("bigconsole.alerts.rule.reloadSaved", "Reload saved rule")
409
+ })] }) : /* @__PURE__ */ g(r, {
410
+ title: v("bigconsole.alerts.rule.title", "Alert rule"),
411
+ headingLevel: 2,
412
+ description: v("bigconsole.alerts.rule.select", "Select a rule to inspect it, or create a new alert rule.")
413
+ })
414
+ })]
415
+ })
416
+ ]
417
+ });
418
+ }
419
+ //#endregion
420
+ export { v as default };
421
+
422
+ //# sourceMappingURL=DataSinkAlertsPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataSinkAlertsPage.js","names":[],"sources":["../../../src/bigconsole/pages/DataSinkAlertsPage.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { useParams } from 'react-router';\nimport { Button, Switch } from '@burdenoff/fe-libs/ui';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { AccessDenied } from '@burdenoff/fe-libs/shared/components';\nimport { ArrowLeft, Bell, Loader2, Plus, RefreshCw, Trash2 } from 'lucide-react';\nimport { BIGCONSOLE_PERMISSIONS } from '../../constants/permissions';\nimport { useBigConsole } from '../context';\nimport { useAppNavigate } from '../contexts';\nimport { Section, SECTION_FOCUS_RING } from '../components/common';\nimport { AlertRuleEditor } from '../components/datasink/AlertRuleEditor';\nimport { AlertExecutionHistory } from '../components/datasink/AlertExecutionHistory';\nimport { useDataSinkAlerts, alertErrorMessage, type AlertRule, type AlertPreview } from '../hooks/useDataSinkAlerts';\nimport {\n alertDraft,\n alertDraftInput,\n validateAlertDraft,\n ALERT_VALIDATION_MESSAGES,\n type AlertDraft,\n} from '../utils/alertRules';\nimport { nativeConfirm } from '../../utils/nativeBridge';\n\ninterface EditingRule {\n draft: AlertDraft;\n original: string;\n version: number;\n selection: number;\n}\ninterface PreviewResult {\n condition: string;\n conditionType: string;\n result: AlertPreview;\n}\n\nexport default function DataSinkAlertsPage() {\n const { dataSinkId = '' } = useParams<{ dataSinkId: string }>();\n const { currentUser, workspaceId } = useBigConsole();\n return (\n <DataSinkAlertsContent\n key={`${currentUser?.id ?? ''}|${workspaceId ?? ''}|${dataSinkId}`}\n dataSinkId={dataSinkId}\n />\n );\n}\n\nfunction DataSinkAlertsContent({ dataSinkId }: { dataSinkId: string }) {\n const { t } = useI18n();\n const navigate = useAppNavigate();\n const { currentUser, workspaceId } = useBigConsole();\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n const canRead = hasPermission(BIGCONSOLE_PERMISSIONS.DATASINK_READ);\n const canUpdate = !permissionsLoading && hasPermission(BIGCONSOLE_PERMISSIONS.DATASINK_UPDATE);\n const operations = useDataSinkAlerts(\n dataSinkId,\n !permissionsLoading && canRead && !!workspaceId && !!currentUser?.id\n );\n const sink = operations.sink;\n const rules = sink?.alerts ?? [];\n const [search, setSearch] = useState('');\n const [editing, setEditing] = useState<EditingRule | null>(null);\n const [pending, setPending] = useState(false);\n const mutationActive = useRef(false);\n const opener = useRef<HTMLElement | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [status, setStatus] = useState<string | null>(null);\n const [previewing, setPreviewing] = useState(false);\n const [previewError, setPreviewError] = useState<string | null>(null);\n const [preview, setPreview] = useState<PreviewResult | null>(null);\n const [historyVersion, setHistoryVersion] = useState(0);\n const previewRequest = useRef(0);\n const selectionCounter = useRef(0);\n const editingSelection = editing?.selection;\n useEffect(() => {\n if (editingSelection !== undefined) document.getElementById('alert-name')?.focus();\n }, [editingSelection]);\n const dirty = !!editing && JSON.stringify(editing.draft) !== editing.original;\n const confirm = async (message: string) => {\n const native = await nativeConfirm({\n title: t('bigconsole.alerts.confirm.title', 'Confirm alert change'),\n message,\n okButtonTitle: t('bigconsole.alerts.confirm.continue', 'Continue'),\n cancelButtonTitle: t('bigconsole.alerts.rule.cancel', 'Cancel'),\n });\n return native ?? window.confirm(message);\n };\n const discard = () => !dirty || confirm(t('bigconsole.alerts.confirm.discard', 'Discard your unsaved rule changes?'));\n const selectRule = async (rule?: AlertRule) => {\n if (pending || !sink || !(await discard())) return;\n if (document.activeElement instanceof HTMLElement) opener.current = document.activeElement;\n const draft = alertDraft(rule);\n setEditing({\n draft,\n original: JSON.stringify(draft),\n version: sink.version,\n selection: ++selectionCounter.current,\n });\n previewRequest.current++;\n setPreview(null);\n setPreviewError(null);\n setPreviewing(false);\n setError(null);\n setStatus(null);\n };\n const cancel = async () => {\n if (pending || !(await discard())) return;\n setEditing(null);\n setPreview(null);\n setPreviewError(null);\n previewRequest.current++;\n setPreviewing(false);\n setError(null);\n if (opener.current?.isConnected) opener.current.focus();\n };\n const save = async () => {\n if (!editing || !sink || !canUpdate || mutationActive.current) return;\n const invalid = validateAlertDraft(editing.draft, operations.channels);\n if (invalid) {\n setError(t(`bigconsole.alerts.validation.${invalid}`, ALERT_VALIDATION_MESSAGES[invalid]));\n return;\n }\n mutationActive.current = true;\n setPending(true);\n setError(null);\n setStatus(null);\n const knownIds = new Set(rules.map((rule) => rule.id));\n try {\n const saved = await operations.save(alertDraftInput(editing.draft), editing.version);\n if (!saved) return;\n const rule = saved.alerts?.find((item) =>\n editing.draft.id ? item.id === editing.draft.id : !knownIds.has(item.id)\n );\n if (rule) {\n const draft = alertDraft(rule);\n setEditing({ draft, original: JSON.stringify(draft), version: saved.version, selection: editing.selection });\n } else setEditing(null);\n setStatus(t('bigconsole.alerts.feedback.saved', 'Alert rule saved.'));\n setHistoryVersion((previous) => previous + 1);\n } catch (caught) {\n setError(alertErrorMessage(caught));\n } finally {\n mutationActive.current = false;\n setPending(false);\n }\n };\n const toggle = async (rule: AlertRule) => {\n if (!sink || !canUpdate || mutationActive.current) return;\n const draft = { ...alertDraft(rule), enabled: !rule.enabled };\n const invalid = validateAlertDraft(draft, operations.channels);\n if (invalid) {\n setError(t(`bigconsole.alerts.validation.${invalid}`, ALERT_VALIDATION_MESSAGES[invalid]));\n return;\n }\n mutationActive.current = true;\n setPending(true);\n setError(null);\n setStatus(null);\n try {\n const saved = await operations.save(alertDraftInput(draft), sink.version);\n if (saved) {\n setStatus(\n draft.enabled\n ? t('bigconsole.alerts.feedback.enabled', 'Alert rule enabled.')\n : t('bigconsole.alerts.feedback.disabled', 'Alert rule disabled.')\n );\n setHistoryVersion((previous) => previous + 1);\n }\n } catch (caught) {\n setError(alertErrorMessage(caught));\n } finally {\n mutationActive.current = false;\n setPending(false);\n }\n };\n const remove = async (rule: AlertRule) => {\n if (!sink || !canUpdate || mutationActive.current) return;\n const ok = await confirm(`${t('bigconsole.alerts.confirm.delete', 'Delete alert rule')} “${rule.name}”?`);\n if (!ok || mutationActive.current) return;\n mutationActive.current = true;\n setPending(true);\n setError(null);\n setStatus(null);\n try {\n const saved = await operations.remove(rule.id, sink.version);\n if (saved) {\n if (editing?.draft.id === rule.id) setEditing(null);\n setStatus(t('bigconsole.alerts.feedback.deleted', 'Alert rule deleted.'));\n setHistoryVersion((previous) => previous + 1);\n }\n } catch (caught) {\n setError(alertErrorMessage(caught));\n } finally {\n mutationActive.current = false;\n setPending(false);\n }\n };\n const runPreview = async () => {\n if (!editing || previewing || pending) return;\n const request = ++previewRequest.current;\n const { condition, conditionType } = editing.draft;\n setPreviewing(true);\n setPreviewError(null);\n setPreview(null);\n try {\n const result = await operations.preview(condition, conditionType);\n if (result && previewRequest.current === request) setPreview({ condition, conditionType, result });\n } catch (caught) {\n if (previewRequest.current === request) setPreviewError(alertErrorMessage(caught));\n } finally {\n if (previewRequest.current === request) setPreviewing(false);\n }\n };\n const reloadRule = async () => {\n if (!editing?.draft.id || pending || !(await discard())) return;\n const latest = await operations.reload();\n const rule = latest?.alerts?.find((item) => item.id === editing.draft.id);\n if (!latest) return;\n if (!rule) {\n setEditing(null);\n setStatus(t('bigconsole.alerts.feedback.removedElsewhere', 'This rule no longer exists.'));\n return;\n }\n const draft = alertDraft(rule);\n setEditing({\n draft,\n original: JSON.stringify(draft),\n version: latest.version,\n selection: ++selectionCounter.current,\n });\n setError(null);\n setPreview(null);\n };\n if (permissionsLoading || operations.loading)\n return (\n <div role=\"status\" className=\"flex min-h-60 items-center justify-center p-card-padding\">\n <Loader2 className=\"mr-2 h-5 w-5 animate-spin text-text-secondary\" />\n {t('bigconsole.alerts.loading', 'Loading alerts…')}\n </div>\n );\n if (!canRead)\n return (\n <AccessDenied\n title={t('bigconsole.alerts.denied', 'Access denied')}\n description={t('bigconsole.alerts.deniedDescription', 'You do not have permission to read this data sink.')}\n />\n );\n if (!workspaceId || !currentUser?.id)\n return (\n <p className=\"p-card-padding text-text-secondary\">\n {t('bigconsole.alerts.selectWorkspace', 'Select a workspace to view its alerts.')}\n </p>\n );\n if (!sink)\n return (\n <div className=\"p-card-padding\">\n <Section\n title={t('bigconsole.alerts.unavailable', 'Alerts could not be loaded')}\n headingLevel={2}\n tone=\"danger\"\n description={operations.error ?? t('bigconsole.alerts.notFound', 'Data sink not found.')}\n actions={\n <Button onClick={() => void operations.reload()} variant=\"secondary\">\n {t('bigconsole.alerts.retry', 'Retry')}\n </Button>\n }\n />\n </div>\n );\n const filtered = rules.filter((rule) =>\n `${rule.name} ${rule.condition}`.toLowerCase().includes(search.trim().toLowerCase())\n );\n return (\n <div className=\"min-w-0 p-card-padding\">\n <header className=\"mb-section-gap flex flex-col gap-form-gap sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"min-w-0\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => navigate(`/datasinks/${dataSinkId}`)} className=\"mb-3\">\n <ArrowLeft className=\"mr-2 h-4 w-4\" />\n {t('bigconsole.alerts.back', 'Back to data sink')}\n </Button>\n <h1 className=\"break-words text-2xl font-bold text-text-primary\">\n {t('bigconsole.alerts.title', 'Alerts')} · {sink.name || sink.key}\n </h1>\n <p className=\"mt-2 text-sm text-text-secondary\">\n {t('bigconsole.alerts.purpose', 'Create and manage alert rules for this data sink.')}\n </p>\n </div>\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => {\n void operations.reload();\n void operations.reloadChannels();\n setHistoryVersion((previous) => previous + 1);\n }}\n disabled={operations.refreshing || pending}\n >\n <RefreshCw className={`mr-2 h-4 w-4 ${operations.refreshing ? 'animate-spin' : ''}`} />\n {t('bigconsole.alerts.refresh', 'Refresh alerts')}\n </Button>\n </header>\n {status && (\n <p\n role=\"status\"\n className=\"mb-4 rounded-control bg-[var(--color-status-success-bgSubtle)] p-3 text-sm text-status-success-text\"\n >\n {status}\n </p>\n )}\n {error && !editing && (\n <p role=\"alert\" className=\"mb-4 break-words text-sm text-status-error-text\">\n {error}\n </p>\n )}\n {operations.error && (\n <p role=\"alert\" className=\"mb-4 break-words text-sm text-status-error-text\">\n {operations.error}\n </p>\n )}\n <div className=\"grid min-w-0 items-start gap-section-gap xl:grid-cols-[minmax(0,1.2fr)_minmax(0,1fr)]\">\n <div className=\"min-w-0 space-y-section-gap\">\n <Section\n title={t('bigconsole.alerts.list.title', 'Alert rules')}\n headingLevel={2}\n icon={<Bell className=\"h-4 w-4\" />}\n actions={\n <Button size=\"sm\" onClick={() => void selectRule()} disabled={!canUpdate || pending}>\n <Plus className=\"mr-2 h-4 w-4\" />\n {t('bigconsole.alerts.list.new', 'New alert rule')}\n </Button>\n }\n >\n <label htmlFor=\"alert-search\" className=\"sr-only\">\n {t('bigconsole.alerts.list.search', 'Search alerts')}\n </label>\n <input\n id=\"alert-search\"\n type=\"search\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n placeholder={t('bigconsole.alerts.list.searchPlaceholder', 'Search alerts…')}\n className={`mb-4 w-full min-w-0 rounded-control border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary ${SECTION_FOCUS_RING}`}\n />\n <div className=\"max-w-full overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <caption className=\"sr-only\">{t('bigconsole.alerts.list.caption', 'Rules for this data sink')}</caption>\n <thead>\n <tr className=\"border-b border-border-subtle text-left text-xs text-text-secondary\">\n <th scope=\"col\" className=\"pb-3 pr-2\">\n {t('bigconsole.alerts.rule.name', 'Name')}\n </th>\n <th scope=\"col\" className=\"hidden pb-3 pr-2 sm:table-cell\">\n {t('bigconsole.alerts.rule.severity', 'Severity')}\n </th>\n <th scope=\"col\" className=\"hidden pb-3 pr-2 lg:table-cell\">\n {t('bigconsole.alerts.rule.destinations', 'Delivery destinations')}\n </th>\n <th scope=\"col\" className=\"hidden pb-3 pr-2 md:table-cell\">\n {t('bigconsole.alerts.rule.throttle', 'Throttle')}\n </th>\n <th scope=\"col\" className=\"pb-3 pr-2\">\n {t('bigconsole.alerts.list.enabled', 'Enabled')}\n </th>\n <th scope=\"col\" className=\"pb-3\">\n <span className=\"sr-only\">{t('bigconsole.alerts.list.actions', 'Actions')}</span>\n </th>\n </tr>\n </thead>\n <tbody>\n {filtered.map((rule) => (\n <tr key={rule.id} className=\"border-b border-border-subtle last:border-0\">\n <th scope=\"row\" className=\"max-w-64 py-4 pr-2 text-left font-normal\">\n <button\n type=\"button\"\n onClick={() => void selectRule(rule)}\n disabled={pending}\n className={`break-words text-left font-medium text-text-primary underline-offset-4 hover:underline ${SECTION_FOCUS_RING}`}\n >\n {rule.name}\n </button>\n <p className=\"mt-1 text-xs text-text-secondary sm:hidden\">\n {t(`bigconsole.alerts.severity.${rule.severity}`, rule.severity.toUpperCase())}\n </p>\n <p className=\"mt-1 text-xs text-text-muted md:hidden\">\n {rule.throttle?.enabled\n ? `${rule.throttle.maxAlertsPerWindow} / ${rule.throttle.windowMinutes} min`\n : t('bigconsole.alerts.list.noThrottle', 'No throttle')}\n </p>\n </th>\n <td className=\"hidden py-4 pr-2 sm:table-cell\">\n <span className=\"rounded-pill border border-border-subtle bg-bg-sunken px-2 py-1 text-xs text-text-primary\">\n {t(`bigconsole.alerts.severity.${rule.severity}`, rule.severity.toUpperCase())}\n </span>\n </td>\n <td className=\"hidden py-4 pr-2 text-xs text-text-secondary lg:table-cell\">\n {rule.deliveries.length\n ? [...new Set(rule.deliveries.map((item) => item.channel))].join(', ')\n : t('bigconsole.alerts.list.unconfigured', 'Not configured')}\n </td>\n <td className=\"hidden py-4 pr-2 text-xs text-text-secondary md:table-cell\">\n {rule.throttle?.enabled\n ? `${rule.throttle.maxAlertsPerWindow} / ${rule.throttle.windowMinutes} min`\n : t('bigconsole.alerts.list.noThrottle', 'No throttle')}\n </td>\n <td className=\"py-4 pr-2\">\n <Switch\n checked={rule.enabled}\n onCheckedChange={() => void toggle(rule)}\n disabled={!canUpdate || pending}\n aria-label={`${t('bigconsole.alerts.list.enabled', 'Enabled')} · ${rule.name}`}\n />\n </td>\n <td className=\"py-4\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => void remove(rule)}\n disabled={!canUpdate || pending}\n aria-label={`${t('bigconsole.alerts.confirm.delete', 'Delete alert rule')} · ${rule.name}`}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n {!filtered.length && (\n <p className=\"py-4 text-sm text-text-secondary\">\n {rules.length\n ? t('bigconsole.alerts.list.noMatches', 'No alerts match your search.')\n : t(\n 'bigconsole.alerts.list.empty',\n 'No alert rules yet. Create a disabled rule and preview its condition before enabling it.'\n )}\n </p>\n )}\n <p className=\"mt-3 text-xs text-text-muted\">\n {filtered.length} {t('bigconsole.alerts.list.count', 'rules shown')}\n </p>\n </Section>\n <AlertExecutionHistory\n owner={operations.owner}\n rules={rules}\n load={operations.history}\n refreshVersion={historyVersion}\n />\n </div>\n <div className=\"min-w-0\">\n {editing ? (\n <>\n <AlertRuleEditor\n draft={editing.draft}\n channels={operations.channels}\n channelError={operations.channelError}\n canUpdate={canUpdate}\n pending={pending}\n previewing={previewing}\n preview={preview?.result ?? null}\n previewError={previewError}\n previewStale={\n !!preview &&\n (preview.condition !== editing.draft.condition ||\n preview.conditionType !== editing.draft.conditionType ||\n sink.version > preview.result.version)\n }\n error={error}\n onChange={(draft) => {\n if (\n draft.condition !== editing.draft.condition ||\n draft.conditionType !== editing.draft.conditionType\n ) {\n previewRequest.current++;\n setPreviewError(null);\n setPreviewing(false);\n }\n setEditing({ ...editing, draft });\n }}\n onSave={() => void save()}\n onCancel={() => void cancel()}\n onPreview={() => void runPreview()}\n onReloadChannels={() => void operations.reloadChannels()}\n />\n {editing.draft.id && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => void reloadRule()}\n disabled={pending || operations.refreshing}\n className=\"mt-3\"\n >\n {t('bigconsole.alerts.rule.reloadSaved', 'Reload saved rule')}\n </Button>\n )}\n </>\n ) : (\n <Section\n title={t('bigconsole.alerts.rule.title', 'Alert rule')}\n headingLevel={2}\n description={t(\n 'bigconsole.alerts.rule.select',\n 'Select a rule to inspect it, or create a new alert rule.'\n )}\n />\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DataSinkViewPage.d.ts","sourceRoot":"","sources":["../../../src/bigconsole/pages/DataSinkViewPage.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAgEH,eAAO,MAAM,gBAAgB,8CA4mB3B,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"DataSinkViewPage.d.ts","sourceRoot":"","sources":["../../../src/bigconsole/pages/DataSinkViewPage.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAkEH,eAAO,MAAM,gBAAgB,8CAgnB3B,CAAC;AAEH,eAAe,gBAAgB,CAAC"}