@evolver-fi/evolver-basics-admin-components 0.0.10 → 0.0.19-beta.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 (57) hide show
  1. package/dist/ConfirmButton-jayUa8_J.js.map +1 -1
  2. package/dist/{ExpandMore-CCOUGfS4.js → ExpandMore-CFLBmfHS.js} +2 -2
  3. package/dist/{ExpandMore-CCOUGfS4.js.map → ExpandMore-CFLBmfHS.js.map} +1 -1
  4. package/dist/{JwtTokensRoute-DKaxXWe8.js → JwtTokensRoute-CavNQu9F.js} +3 -3
  5. package/dist/JwtTokensRoute-CavNQu9F.js.map +1 -0
  6. package/dist/{ScheduledTaskFormRoute-BpHIsRQr.js → ScheduledTaskFormRoute-CnVsqh-c.js} +11 -10
  7. package/dist/ScheduledTaskFormRoute-CnVsqh-c.js.map +1 -0
  8. package/dist/SingleLogMessageRoute-B6hkr7rG.js +305 -0
  9. package/dist/SingleLogMessageRoute-B6hkr7rG.js.map +1 -0
  10. package/dist/SingleMessageRoute-Bxix2rv7.js +320 -0
  11. package/dist/SingleMessageRoute-Bxix2rv7.js.map +1 -0
  12. package/dist/TableMetadataDisplay-DTDUH1KY.js +330 -0
  13. package/dist/TableMetadataDisplay-DTDUH1KY.js.map +1 -0
  14. package/dist/{TriggerablesRoute-CHtOEVBR.js → TriggerablesRoute-BY72XS5U.js} +3 -3
  15. package/dist/TriggerablesRoute-BY72XS5U.js.map +1 -0
  16. package/dist/{createSvgIcon-DHqCx8A0.js → createSvgIcon-DCKQGUI3.js} +963 -953
  17. package/dist/createSvgIcon-DCKQGUI3.js.map +1 -0
  18. package/dist/jwt-tokens/index.js +1 -1
  19. package/dist/main/index.js +5 -5
  20. package/dist/message-log/index.js +1 -1
  21. package/dist/message-sending/index.js +1 -1
  22. package/dist/{validation-C1lKYJJR.js → parser-CI353PAC.js} +470 -486
  23. package/dist/parser-CI353PAC.js.map +1 -0
  24. package/dist/scheduled-tasks/index.js +1 -1
  25. package/dist/triggerables/index.js +1 -1
  26. package/dist/types/admin-components/src/common/format.d.ts +1 -0
  27. package/dist/types/admin-components/src/common/types.d.ts +27 -0
  28. package/dist/types/admin-components/src/common/validation.d.ts +5 -0
  29. package/dist/types/admin-components/src/components/filter/EnumSelectFilter.d.ts +11 -0
  30. package/dist/types/admin-components/src/components/filter/FilterHelperTexts.d.ts +4 -0
  31. package/dist/types/admin-components/src/components/filter/FilterLink.d.ts +2 -0
  32. package/dist/types/admin-components/src/components/filter/TextFilter.d.ts +2 -0
  33. package/dist/types/admin-components/src/components/filter/types.d.ts +20 -0
  34. package/dist/types/admin-components/src/components/metadata/TableMetadataDisplay.d.ts +2 -0
  35. package/dist/types/admin-components/src/components/metadata/utils.d.ts +1 -0
  36. package/dist/types/admin-components/src/components/table/Pagination.d.ts +7 -0
  37. package/dist/types/admin-components/src/components/table/Table.d.ts +3 -0
  38. package/dist/types/admin-components/src/components/table/types.d.ts +48 -0
  39. package/dist/types/admin-components/src/routes/message-log/messageLogColumns.d.ts +3 -0
  40. package/dist/types/admin-components/src/routes/message-log/types.d.ts +35 -0
  41. package/dist/types/admin-components/src/routes/message-sending/loader.d.ts +1 -1
  42. package/dist/types/admin-components/src/routes/message-sending/messageSendingColumns.d.ts +3 -0
  43. package/dist/types/admin-components/src/routes/message-sending/types.d.ts +41 -0
  44. package/dist/validation-BRENvwZ0.js +22 -0
  45. package/dist/validation-BRENvwZ0.js.map +1 -0
  46. package/package.json +6 -3
  47. package/dist/ArrowBack-C8PcQDeL.js +0 -161
  48. package/dist/ArrowBack-C8PcQDeL.js.map +0 -1
  49. package/dist/JwtTokensRoute-DKaxXWe8.js.map +0 -1
  50. package/dist/ScheduledTaskFormRoute-BpHIsRQr.js.map +0 -1
  51. package/dist/SingleLogMessageRoute-i_AbkS5G.js +0 -245
  52. package/dist/SingleLogMessageRoute-i_AbkS5G.js.map +0 -1
  53. package/dist/SingleMessageRoute-Dh7BWlPt.js +0 -254
  54. package/dist/SingleMessageRoute-Dh7BWlPt.js.map +0 -1
  55. package/dist/TriggerablesRoute-CHtOEVBR.js.map +0 -1
  56. package/dist/createSvgIcon-DHqCx8A0.js.map +0 -1
  57. package/dist/validation-C1lKYJJR.js.map +0 -1
@@ -0,0 +1,320 @@
1
+ import { filterFromUrlSearchParams as G } from "@evolver-fi/evolver-basics";
2
+ import { j as t } from "./jsx-runtime-B6kdoens.js";
3
+ import T, { useEffect as V, useMemo as R, useState as $ } from "react";
4
+ import { g as H, c as K, a as U } from "./createSvgIcon-DCKQGUI3.js";
5
+ import { Grid as x, TextField as E, InputAdornment as S, IconButton as F, Button as _, FormControl as v, Select as P, MenuItem as k, Checkbox as z, FormHelperText as O, TableContainer as Y } from "@mui/material";
6
+ import { k as I, c as q, f as C, a as Q, d as J, b as y, l as X, m as Z, F as ee, e as L, g as M, T as p, h as b, n as te, i as ae, j as re, P as se } from "./TableMetadataDisplay-DTDUH1KY.js";
7
+ import { useNavigate as w, useSearchParams as le, useLoaderData as B, Form as ie } from "react-router";
8
+ import { d as N, n as D, a as ne } from "./validation-BRENvwZ0.js";
9
+ import "axios";
10
+ const oe = ({ filterValue: e, validationError: a, setFilterValue: r }) => {
11
+ const [s, o] = (e == null ? void 0 : e.split("-")) || "", [l, u] = T.useState(s), [m, g] = T.useState(o);
12
+ return V(() => {
13
+ const d = `${l || ""}${m || l ? "-" : ""}${m || ""}`;
14
+ r(d);
15
+ }, [l, m]), t.jsxs(x, { container: !0, direction: "row", spacing: 1, children: [t.jsx(x, { item: !0, xs: 12, xl: 6, children: t.jsx(E, { size: "small", error: !!a, helperText: a || "Start", value: l || "", onChange: (d) => {
16
+ u(`${d.target.value}:00`);
17
+ }, fullWidth: !0, InputProps: {
18
+ endAdornment: l && l.length > 0 ? t.jsx(S, { position: "end", children: t.jsx(F, { onClick: (d) => {
19
+ d.preventDefault(), d.stopPropagation(), u(void 0);
20
+ }, size: "small", children: t.jsx(I, {}) }) }) : void 0
21
+ } }) }), t.jsx(x, { item: !0, xs: 12, xl: 6, children: t.jsx(E, { size: "small", value: m || "", helperText: "End", onChange: (d) => {
22
+ g(`${d.target.value}:00`);
23
+ }, fullWidth: !0, InputProps: {
24
+ endAdornment: m && m.length > 0 ? t.jsx(S, { position: "end", children: t.jsx(F, { onClick: (d) => {
25
+ d.preventDefault(), d.stopPropagation(), g(void 0);
26
+ }, size: "small", children: t.jsx(I, {}) }) }) : void 0
27
+ } }) })] });
28
+ }, de = {
29
+ ct: C,
30
+ lut: C,
31
+ fc: Q
32
+ }, W = (e, a) => {
33
+ const r = a || H(), s = new URLSearchParams();
34
+ q(e, de).forEach((l, u) => s.append(u, l));
35
+ const o = s.toString() ? `?${s.toString()}` : "";
36
+ return r.get(`message${o}`);
37
+ }, ce = (e, a) => (a || H()).get(`message/${e}`), j = K("messages/fetchMessages", async (e, a) => {
38
+ const r = await W(e);
39
+ return r.status !== 200 ? a.rejectWithValue({
40
+ message: "Failed to fetch messages."
41
+ }) : r.data;
42
+ }), me = {
43
+ messages: [],
44
+ messageTotalCount: 0,
45
+ status: "loading",
46
+ filters: {
47
+ page: "0",
48
+ size: "100"
49
+ }
50
+ };
51
+ U({
52
+ name: "message",
53
+ initialState: me,
54
+ reducers: {
55
+ updateMessages(e, { payload: a }) {
56
+ e.messages = a;
57
+ },
58
+ updateFilters(e, { payload: a }) {
59
+ e.filters = { ...e.filters, ...a };
60
+ }
61
+ },
62
+ extraReducers: (e) => {
63
+ e.addCase(j.pending, (a) => {
64
+ a.status = "loading", a.error = "undefined";
65
+ }), e.addCase(j.fulfilled, (a, { payload: r }) => {
66
+ a.messages = r.content, a.messageTotalCount = r.totalElements, a.status = "succeeded";
67
+ }), e.addCase(j.rejected, (a, { payload: r }) => {
68
+ r && (a.error = r.message), a.status = "failed";
69
+ });
70
+ }
71
+ });
72
+ const c = ({ label: e, value: a, isFull: r }) => t.jsx(x, { item: !0, xs: 12, sm: r ? 12 : 6, md: r ? 12 : 3, children: t.jsx(E, { label: e, value: a, InputProps: {
73
+ readOnly: !0
74
+ }, InputLabelProps: {
75
+ style: { fontSize: 20 }
76
+ }, multiline: !0, fullWidth: !0 }) }), ue = ({ message: e, backAction: a }) => t.jsxs(t.Fragment, { children: [t.jsx(_, { variant: "contained", startIcon: t.jsx(J, {}), onClick: () => a(), sx: {
77
+ backgroundColor: "secondary.main",
78
+ marginBottom: 0.5,
79
+ width: 200
80
+ }, children: "Back" }), e ? t.jsxs(x, { container: !0, direction: "row", justifyContent: "center", spacing: 2, children: [t.jsx(x, { item: !0, xs: 12, children: t.jsx("h1", { children: "Message Details" }) }), t.jsx(c, { label: "State", value: e.state }), t.jsx(c, { label: "MessageChain ID", value: e.messageChainId }), t.jsx(c, { label: "Creation time", value: y(e.creationTime) }), t.jsx(c, { label: "Last updated time", value: y(e.lastUpdatedTime) }), t.jsx(c, { label: "Fail count", value: e.failCount }), t.jsx(c, { label: "MessageGroup Id", value: e.messageGroupId }), t.jsx(c, { label: "Priority", value: e.priority }), t.jsx(c, { label: "Message target config", value: e.messageTargetConfig.messageType }), t.jsx(c, { label: "Target system", value: e.targetSystem }), t.jsx(c, { label: "Message type", value: e.messageType }), t.jsx(c, { label: "Target Uri", value: e.targetUri, isFull: !0 }), t.jsx(c, { label: "Metadata", value: Object.entries(e.metadata).map(([r, s]) => `${r} = ${s}`).join(`
81
+ `), isFull: !0 })] }) : t.jsx("p", { children: "No message data found" })] });
82
+ var h;
83
+ (function(e) {
84
+ e.DELAYED = "DELAYED", e.PENDING = "PENDING", e.SENDING = "SENDING", e.SENT = "SENT", e.FAILED = "FAILED", e.DISABLED = "DISABLED";
85
+ })(h || (h = {}));
86
+ var A;
87
+ (function(e) {
88
+ e.ENABLED = "ENABLED", e.LOG_ONLY = "LOG_ONLY", e.PAUSED = "PAUSED", e.DISABLED = "DISABLED";
89
+ })(A || (A = {}));
90
+ const ge = "null", he = "!null";
91
+ function pe(e) {
92
+ return typeof e == "string";
93
+ }
94
+ const fe = ({ filterValue: e, validationError: a, setFilterValue: r, enumValues: s }) => {
95
+ var d;
96
+ const o = [
97
+ { label: "None", value: ge },
98
+ { label: "Any", value: he },
99
+ ...s
100
+ ], l = (i) => {
101
+ const n = o.find((f) => f.value === i || f.label === i);
102
+ return n == null ? void 0 : n.label;
103
+ }, u = (i) => {
104
+ const n = o.find((f) => f.label === i);
105
+ return (n == null ? void 0 : n.value) ?? (n == null ? void 0 : n.label);
106
+ }, m = (i) => {
107
+ const { target: { value: n } } = i;
108
+ if (pe(n)) {
109
+ r(n);
110
+ return;
111
+ }
112
+ const f = n.map(u).filter(Boolean);
113
+ r(f.join(",") || "");
114
+ }, g = ((d = e == null ? void 0 : e.split(",")) == null ? void 0 : d.map((i) => l(i) ?? "")) ?? [];
115
+ return t.jsx(t.Fragment, { children: t.jsxs(v, { sx: { width: 300 }, children: [t.jsx(P, { size: "small", labelId: "demo-multiple-checkbox-label", id: "demo-multiple-checkbox", multiple: !0, value: g, onChange: m, renderValue: (i) => i.join(", "), error: !!a, children: o.map((i) => t.jsxs(k, { value: i.label, children: [t.jsx(z, { checked: g.find((n) => n === i.label) !== void 0 }), i.label] }, i.label)) }), a && t.jsx(O, { children: a })] }) });
116
+ }, xe = (e) => (a) => t.jsx(fe, { enumValues: e, ...a });
117
+ N, N, xe([
118
+ { label: h.DELAYED },
119
+ { label: h.PENDING },
120
+ { label: h.SENDING },
121
+ { label: h.SENT },
122
+ { label: h.FAILED },
123
+ { label: h.DISABLED }
124
+ ]), D, D, ne, D;
125
+ const ye = (e) => async ({ params: a }) => {
126
+ try {
127
+ if (!a.id)
128
+ throw new Error("No message id provided");
129
+ const r = await ce(a.id, e);
130
+ if (r.status !== 200)
131
+ throw new Error(`Failed to fetch message: ${r.data}`);
132
+ return r.data;
133
+ } catch (r) {
134
+ throw console.error(r), r;
135
+ }
136
+ }, Pe = ye(), be = (e) => async ({ request: a }) => {
137
+ try {
138
+ const r = new URL(a.url), s = G(
139
+ r.searchParams,
140
+ ["s", "mci", "ct", "lut", "fc", "mgi", "p", "md", "page", "size"]
141
+ // TODO: should sort be included?
142
+ ), o = await W(s, e);
143
+ if (o.status !== 200)
144
+ throw new Error(`Failed to fetch messages: ${o.data}`);
145
+ return Z(o.data);
146
+ } catch (r) {
147
+ throw console.error(r), r;
148
+ }
149
+ }, ke = be(), De = ({
150
+ name: e,
151
+ value: a,
152
+ defaultValue: r,
153
+ onChange: s,
154
+ helperText: o,
155
+ validator: l,
156
+ enumValues: u
157
+ }) => {
158
+ const m = R(
159
+ () => [{ label: "Any", value: "" }, ...u],
160
+ [u]
161
+ ), [g, d] = $(l == null ? void 0 : l(a ?? r ?? ""));
162
+ return /* @__PURE__ */ t.jsxs(v, { fullWidth: !0, error: !!g, children: [
163
+ /* @__PURE__ */ t.jsx(
164
+ P,
165
+ {
166
+ size: "small",
167
+ name: e,
168
+ defaultValue: r,
169
+ value: a,
170
+ onChange: (i) => {
171
+ d(l == null ? void 0 : l(i.target.value)), s == null || s(i.target.value);
172
+ },
173
+ children: m.map(({ value: i, label: n }) => /* @__PURE__ */ t.jsx(k, { value: i, children: n }, n))
174
+ },
175
+ r
176
+ ),
177
+ /* @__PURE__ */ t.jsx(ee, { helperText: o, error: g })
178
+ ] });
179
+ }, je = (e) => (a) => /* @__PURE__ */ t.jsx(De, { ...a, enumValues: e }), Ee = [
180
+ {
181
+ key: "creationTime",
182
+ title: "Creation time",
183
+ CellComponent: ({ value: e }) => L(e),
184
+ minWidth: 250,
185
+ searchKey: "ct",
186
+ filterHelperText: "yyyy-MM-dd HH:mm:ss - ?yyyy-MM-dd HH:mm:ss",
187
+ filterValidator: M,
188
+ FilterComponent: p
189
+ },
190
+ {
191
+ key: "lastUpdatedTime",
192
+ title: "Last updated time",
193
+ CellComponent: ({ value: e }) => L(e),
194
+ minWidth: 250,
195
+ searchKey: "lut",
196
+ filterHelperText: "yyyy-MM-dd HH:mm:ss - ?yyyy-MM-dd HH:mm:ss",
197
+ filterValidator: M,
198
+ FilterComponent: p
199
+ },
200
+ {
201
+ key: "state",
202
+ title: "State",
203
+ minWidth: 130,
204
+ searchKey: "s",
205
+ filterHelperText: "e.g. SENT",
206
+ FilterComponent: je([
207
+ { label: "DELAYED", value: "DELAYED" },
208
+ { label: "PENDING", value: "PENDING" },
209
+ { label: "SENDING", value: "SENDING" },
210
+ { label: "SENT", value: "SENT" },
211
+ { label: "FAILED", value: "FAILED" },
212
+ { label: "DISABLED", value: "DISABLED" }
213
+ ])
214
+ },
215
+ {
216
+ key: "messageChainId",
217
+ title: "Message Chain ID",
218
+ minWidth: 150,
219
+ searchKey: "mci",
220
+ filterHelperText: "e.g. 123",
221
+ filterValidator: b,
222
+ FilterComponent: p
223
+ },
224
+ {
225
+ key: "messageGroupId",
226
+ title: "Message Group ID",
227
+ minWidth: 150,
228
+ searchKey: "mgi",
229
+ filterHelperText: "e.g. 123",
230
+ filterValidator: b,
231
+ FilterComponent: p
232
+ },
233
+ {
234
+ key: "failCount",
235
+ title: "Fail count",
236
+ minWidth: 150,
237
+ searchKey: "fc",
238
+ filterHelperText: "number - ?number",
239
+ filterValidator: te,
240
+ FilterComponent: p
241
+ },
242
+ {
243
+ key: "priority",
244
+ title: "Priority",
245
+ minWidth: 150,
246
+ searchKey: "p",
247
+ filterHelperText: "e.g. 123",
248
+ filterValidator: b,
249
+ FilterComponent: p
250
+ },
251
+ {
252
+ key: "metadata",
253
+ title: "Metadata",
254
+ CellComponent: ae,
255
+ minWidth: 150,
256
+ searchKey: "md",
257
+ filterHelperText: "A=a, B=b",
258
+ FilterComponent: p
259
+ }
260
+ ], Te = ({ id: e }) => e, Se = (e) => ({
261
+ state: e.get("s") ?? "",
262
+ messageChainId: e.get("mci") ?? "",
263
+ creationTime: e.get("ct") ?? "",
264
+ lastUpdatedTime: e.get("lut") ?? "",
265
+ failCount: e.get("fc") ?? "",
266
+ messageGroupId: e.get("mgi") ?? "",
267
+ priority: e.get("p") ?? "",
268
+ metadata: e.get("md") ?? ""
269
+ }), we = () => {
270
+ const e = w(), [a, r] = le(), s = B();
271
+ return /* @__PURE__ */ t.jsxs(t.Fragment, { children: [
272
+ /* @__PURE__ */ t.jsxs(ie, { method: "get", children: [
273
+ /* @__PURE__ */ t.jsx(Y, { sx: { height: "calc(100vh - 130px)" }, children: /* @__PURE__ */ t.jsx(
274
+ re,
275
+ {
276
+ columns: Ee,
277
+ rows: s.content,
278
+ getRowId: Te,
279
+ onRowClick: (o) => e(`./${o.id}`, { relative: "path" }),
280
+ defaultFilter: Se(a)
281
+ }
282
+ ) }),
283
+ /* @__PURE__ */ t.jsx("input", { type: "submit", hidden: !0 })
284
+ ] }),
285
+ /* @__PURE__ */ t.jsx(
286
+ se,
287
+ {
288
+ page: s.number,
289
+ rowsPerPage: s.size,
290
+ total: s.totalElements,
291
+ onPageChange: (o) => {
292
+ const l = new URLSearchParams(a);
293
+ l.set("page", String(o)), r(l);
294
+ }
295
+ }
296
+ )
297
+ ] });
298
+ }, Be = () => {
299
+ const e = B(), a = w(), r = () => {
300
+ a(-1);
301
+ }, s = (o, l) => {
302
+ };
303
+ return e ? /* @__PURE__ */ t.jsx(
304
+ ue,
305
+ {
306
+ message: e,
307
+ backAction: r,
308
+ downloadDataAction: s
309
+ }
310
+ ) : /* @__PURE__ */ t.jsx("div", { children: "Loading..." });
311
+ };
312
+ export {
313
+ we as M,
314
+ Be as S,
315
+ ye as a,
316
+ be as g,
317
+ ke as m,
318
+ Pe as s
319
+ };
320
+ //# sourceMappingURL=SingleMessageRoute-Bxix2rv7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SingleMessageRoute-Bxix2rv7.js","sources":["../../node_modules/@evolver-fi/evolver-basics/dist/esm/common/components/DateTimeRangeFilterField.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/messages/utils/index.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/messages/actions/index.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/messages/slices/messageSlice.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/messages/components/MessageComponent.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/messages/types/index.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/common/types/index.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/common/components/EnumSelectFilterField.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/crud/filterUtils.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/messages/components/messageListColumnDefinitions.js","../src/routes/message-sending/loader.ts","../src/components/filter/EnumSelectFilter.tsx","../src/routes/message-sending/messageSendingColumns.tsx","../src/routes/message-sending/MessageSendingRoute.tsx","../src/routes/message-sending/SingleMessageRoute.tsx"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React, { useEffect } from 'react';\nimport { Grid, IconButton, InputAdornment, TextField } from '@mui/material';\nimport Backspace from '@mui/icons-material/Backspace';\nconst DateTimeRangeFilterField = ({ filterValue, validationError, setFilterValue, }) => {\n const [initialStartDateTime, initialEndDateTime] = filterValue?.split('-') || '';\n const [startDateTime, setStartDateTime] = React.useState(initialStartDateTime);\n const [endDateTime, setEndDateTime] = React.useState(initialEndDateTime);\n useEffect(() => {\n const value = `${startDateTime || ''}${endDateTime || startDateTime ? '-' : ''}${endDateTime || ''}`;\n setFilterValue(value);\n }, [startDateTime, endDateTime]);\n return (_jsxs(Grid, { container: true, direction: \"row\", spacing: 1, children: [_jsx(Grid, { item: true, xs: 12, xl: 6, children: _jsx(TextField, { size: \"small\", error: !!validationError, helperText: validationError || 'Start', value: startDateTime || '', onChange: (event) => {\n setStartDateTime(`${event.target.value}:00`);\n }, fullWidth: true, InputProps: {\n endAdornment: startDateTime && startDateTime.length > 0 ? (_jsx(InputAdornment, { position: \"end\", children: _jsx(IconButton, { onClick: (e) => {\n e.preventDefault();\n e.stopPropagation();\n setStartDateTime(undefined);\n }, size: \"small\", children: _jsx(Backspace, {}) }) })) : undefined,\n } }) }), _jsx(Grid, { item: true, xs: 12, xl: 6, children: _jsx(TextField, { size: \"small\", value: endDateTime || '', helperText: \"End\", onChange: (event) => {\n setEndDateTime(`${event.target.value}:00`);\n }, fullWidth: true, InputProps: {\n endAdornment: endDateTime && endDateTime.length > 0 ? (_jsx(InputAdornment, { position: \"end\", children: _jsx(IconButton, { onClick: (e) => {\n e.preventDefault();\n e.stopPropagation();\n setEndDateTime(undefined);\n }, size: \"small\", children: _jsx(Backspace, {}) }) })) : undefined,\n } }) })] }));\n};\nexport default DateTimeRangeFilterField;\n","import { formatDatetimeRangeFilter, formatNumberRangeFilter, } from '../../common/components/listUtils';\nimport { getBackendClient } from '../../common/evolverClient';\nimport { createFilterQuery } from '../../common/utils/filterUtils';\nexport const formatterByKey = {\n ct: formatDatetimeRangeFilter,\n lut: formatDatetimeRangeFilter,\n fc: formatNumberRangeFilter,\n};\nexport const fetchMessages = (filters, backendClient) => {\n const client = backendClient || getBackendClient();\n const searchParams = new URLSearchParams();\n createFilterQuery(filters, formatterByKey).forEach((value, key) => searchParams.append(key, value));\n const searchParamsString = searchParams.toString() ? `?${searchParams.toString()}` : '';\n return client.get(`message${searchParamsString}`);\n};\nexport const fetchMessageById = (id, backendClient) => {\n const client = backendClient || getBackendClient();\n return client.get(`message/${id}`);\n};\n","import { createAsyncThunk } from '@reduxjs/toolkit';\nimport { fetchMessages } from '../utils';\nexport const fetchMessagesAction = createAsyncThunk('messages/fetchMessages', async (filters, thunkApi) => {\n const response = await fetchMessages(filters);\n if (response.status !== 200) {\n return thunkApi.rejectWithValue({\n message: 'Failed to fetch messages.',\n });\n }\n return response.data;\n});\n","import { createSlice } from '@reduxjs/toolkit';\nimport { fetchMessagesAction } from '../actions';\nconst initialState = {\n messages: [],\n messageTotalCount: 0,\n status: 'loading',\n filters: {\n page: '0',\n size: '100',\n },\n};\nexport const messageSlice = createSlice({\n name: 'message',\n initialState,\n reducers: {\n updateMessages(state, { payload }) {\n state.messages = payload;\n },\n updateFilters(state, { payload }) {\n state.filters = { ...state.filters, ...payload };\n },\n },\n extraReducers: (builder) => {\n builder.addCase(fetchMessagesAction.pending, (state) => {\n state.status = 'loading';\n state.error = 'undefined';\n });\n builder.addCase(fetchMessagesAction.fulfilled, (state, { payload }) => {\n state.messages = payload.content;\n state.messageTotalCount = payload.totalElements;\n state.status = 'succeeded';\n });\n builder.addCase(fetchMessagesAction.rejected, (state, { payload }) => {\n if (payload) {\n state.error = payload.message;\n }\n state.status = 'failed';\n });\n },\n});\nexport const { updateMessages, updateFilters } = messageSlice.actions;\nexport const selectMessages = (state) => state.messages.messages;\nexport const selectMessageTotalCount = (state) => state.messages.messageTotalCount;\nexport const selectFilters = (state) => state.messages.filters;\nexport const selectStatus = (state) => state.messages.status;\nexport default messageSlice.reducer;\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport { Button, Grid, TextField } from '@mui/material';\nimport { formatDateTime } from '../../common/components/listUtils';\nconst MessageField = ({ label, value, isFull }) => (_jsx(Grid, { item: true, xs: 12, sm: isFull ? 12 : 6, md: isFull ? 12 : 3, children: _jsx(TextField, { label: label, value: value, InputProps: {\n readOnly: true,\n }, InputLabelProps: {\n style: { fontSize: 20 },\n }, multiline: true, fullWidth: true }) }));\nconst MessageComponent = ({ message, backAction, }) => {\n return (_jsxs(_Fragment, { children: [_jsx(Button, { variant: \"contained\", startIcon: _jsx(ArrowBackIcon, {}), onClick: () => backAction(), sx: {\n backgroundColor: 'secondary.main',\n marginBottom: 0.5,\n width: 200,\n }, children: \"Back\" }), message ? (_jsxs(Grid, { container: true, direction: \"row\", justifyContent: \"center\", spacing: 2, children: [_jsx(Grid, { item: true, xs: 12, children: _jsx(\"h1\", { children: \"Message Details\" }) }), _jsx(MessageField, { label: \"State\", value: message.state }), _jsx(MessageField, { label: \"MessageChain ID\", value: message.messageChainId }), _jsx(MessageField, { label: \"Creation time\", value: formatDateTime(message.creationTime) }), _jsx(MessageField, { label: \"Last updated time\", value: formatDateTime(message.lastUpdatedTime) }), _jsx(MessageField, { label: \"Fail count\", value: message.failCount }), _jsx(MessageField, { label: \"MessageGroup Id\", value: message.messageGroupId }), _jsx(MessageField, { label: \"Priority\", value: message.priority }), _jsx(MessageField, { label: \"Message target config\", value: message.messageTargetConfig.messageType }), _jsx(MessageField, { label: \"Target system\", value: message.targetSystem }), _jsx(MessageField, { label: \"Message type\", value: message.messageType }), _jsx(MessageField, { label: \"Target Uri\", value: message.targetUri, isFull: true }), _jsx(MessageField, { label: \"Metadata\", value: Object.entries(message.metadata)\n .map(([key, value]) => `${key} = ${value}`)\n .join('\\n'), isFull: true })] })) : (_jsx(\"p\", { children: \"No message data found\" }))] }));\n};\nexport default MessageComponent;\n","export var MessageStatus;\n(function (MessageStatus) {\n MessageStatus[\"DELAYED\"] = \"DELAYED\";\n MessageStatus[\"PENDING\"] = \"PENDING\";\n MessageStatus[\"SENDING\"] = \"SENDING\";\n MessageStatus[\"SENT\"] = \"SENT\";\n MessageStatus[\"FAILED\"] = \"FAILED\";\n MessageStatus[\"DISABLED\"] = \"DISABLED\";\n})(MessageStatus || (MessageStatus = {}));\nexport var MessageTargetConfigStatus;\n(function (MessageTargetConfigStatus) {\n MessageTargetConfigStatus[\"ENABLED\"] = \"ENABLED\";\n MessageTargetConfigStatus[\"LOG_ONLY\"] = \"LOG_ONLY\";\n MessageTargetConfigStatus[\"PAUSED\"] = \"PAUSED\";\n MessageTargetConfigStatus[\"DISABLED\"] = \"DISABLED\";\n})(MessageTargetConfigStatus || (MessageTargetConfigStatus = {}));\n","export const NULL_VALUE = 'null';\nexport const NOT_NULL_VALUE = '!null';\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Checkbox, FormControl, FormHelperText, MenuItem, Select, } from '@mui/material';\nimport { NOT_NULL_VALUE, NULL_VALUE } from '../types';\nfunction isString(data) {\n return typeof data === 'string';\n}\nconst EnumSelectFilterField = ({ filterValue, validationError, setFilterValue, enumValues, }) => {\n const selectValues = [\n { label: 'None', value: NULL_VALUE },\n { label: 'Any', value: NOT_NULL_VALUE },\n ...enumValues,\n ];\n const findLabelByValue = (value) => {\n const entry = selectValues.find((sv) => sv.value === value || sv.label === value);\n return entry?.label;\n };\n const findValueByLabel = (label) => {\n const entry = selectValues.find((sv) => sv.label === label);\n return entry?.value ?? entry?.label;\n };\n const handleChange = (event) => {\n const { target: { value }, } = event;\n if (isString(value)) {\n setFilterValue(value);\n return;\n }\n const newValue = value.map(findValueByLabel).filter(Boolean);\n setFilterValue(newValue.join(',') || '');\n };\n const formattedFilterValue = filterValue?.split(',')?.map((v) => findLabelByValue(v) ?? '') ?? [];\n return (_jsx(_Fragment, { children: _jsxs(FormControl, { sx: { width: 300 }, children: [_jsx(Select, { size: \"small\", labelId: \"demo-multiple-checkbox-label\", id: \"demo-multiple-checkbox\", multiple: true, value: formattedFilterValue, onChange: handleChange, renderValue: (selected) => selected.join(', '), error: !!validationError, children: selectValues.map((flow) => (_jsxs(MenuItem, { value: flow.label, children: [_jsx(Checkbox, { checked: formattedFilterValue.find((sv) => sv === flow.label) !== undefined }), flow.label] }, flow.label))) }), validationError && _jsx(FormHelperText, { children: validationError })] }) }));\n};\nexport default EnumSelectFilterField;\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport EnumSelectFilterField from '../common/components/EnumSelectFilterField';\nexport const createEnumSelectFilter = (field) => {\n if (field.type === 'enum') {\n const selectValues = field.enumValues.map((v) => ({\n label: v,\n }));\n return createSelectFilterRenderer(selectValues);\n }\n return undefined;\n};\nexport const createSelectFilterRenderer = (enumValues) => {\n // eslint-disable-next-line react/display-name\n return (props) => (_jsx(EnumSelectFilterField, { enumValues: enumValues, ...props }));\n};\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { MessageStatus } from '../types';\nimport { formatDateTime, formatMetadata } from '../../common/components/listUtils';\nimport { datetimeRangeValidator, numberRangeValidator, numberValidator, } from '../../common/utils/validation';\nimport DateTimeRangeFilterField from '../../common/components/DateTimeRangeFilterField';\nimport { createSelectFilterRenderer } from '../../crud/filterUtils';\nconst definition = [\n {\n id: 'creationTime',\n label: 'Creation time',\n renderValue: (value) => formatDateTime(value),\n minWidth: 250,\n filterKey: 'ct',\n filterHelper: 'yyyy-MM-dd HH:mm:ss - ?yyyy-MM-dd HH:mm:ss',\n filterValidator: datetimeRangeValidator,\n renderFilter: (props) => _jsx(DateTimeRangeFilterField, { ...props }),\n },\n {\n id: 'lastUpdatedTime',\n label: 'Last updated time',\n renderValue: (value) => formatDateTime(value),\n minWidth: 250,\n filterKey: 'lut',\n filterHelper: 'yyyy-MM-dd HH:mm:ss - ?yyyy-MM-dd HH:mm:ss',\n filterValidator: datetimeRangeValidator,\n },\n {\n id: 'state',\n label: 'State',\n minWidth: 100,\n filterKey: 's',\n filterHelper: 'e.g. SENT',\n renderFilter: createSelectFilterRenderer([\n { label: MessageStatus.DELAYED },\n { label: MessageStatus.PENDING },\n { label: MessageStatus.SENDING },\n { label: MessageStatus.SENT },\n { label: MessageStatus.FAILED },\n { label: MessageStatus.DISABLED },\n ]),\n },\n {\n id: 'messageChainId',\n label: 'Message Chain ID',\n minWidth: 150,\n filterKey: 'mci',\n filterHelper: 'e.g. 123',\n filterValidator: numberValidator,\n },\n {\n id: 'messageGroupId',\n label: 'Message Group ID',\n minWidth: 150,\n filterKey: 'mgi',\n filterHelper: 'e.g. 123',\n filterValidator: numberValidator,\n },\n {\n id: 'failCount',\n label: 'Fail count',\n minWidth: 150,\n filterKey: 'fc',\n filterHelper: 'number - ?number',\n filterValidator: numberRangeValidator,\n },\n {\n id: 'priority',\n label: 'Priority',\n minWidth: 150,\n filterKey: 'p',\n filterHelper: 'eg. 123',\n filterValidator: numberValidator,\n },\n {\n id: 'metadata',\n label: 'Metadata',\n renderValue: (value) => formatMetadata(value),\n minWidth: 150,\n filterKey: 'md',\n filterHelper: 'A=a, B=b',\n },\n];\nexport default definition;\n","import { filterFromUrlSearchParams } from \"@evolver-fi/evolver-basics\";\nimport {\n fetchMessageById,\n fetchMessages,\n MessageFilter,\n} from \"@evolver-fi/evolver-basics/messages\";\nimport { AxiosInstance } from \"axios\";\nimport { LoaderFunction, LoaderFunctionArgs } from \"react-router\";\nimport { mapMetadata } from \"../../components/metadata/utils\";\n\nexport const getSingleMessageLoader =\n (backendClient?: AxiosInstance) =>\n async ({ params }: LoaderFunctionArgs) => {\n try {\n if (!params.id) {\n throw new Error(\"No message id provided\"); // shouldn't route here without an id\n }\n const response = await fetchMessageById(params.id, backendClient);\n\n if (response.status !== 200) {\n throw new Error(`Failed to fetch message: ${response.data}`);\n }\n\n return response.data;\n } catch (error) {\n console.error(error);\n throw error;\n }\n };\n\nexport const singleMessageLoader: LoaderFunction = getSingleMessageLoader();\n\nexport const getMessageListLoader =\n (backendClient?: AxiosInstance) =>\n async ({ request }: LoaderFunctionArgs) => {\n try {\n const requestUrl = new URL(request.url);\n const filter = filterFromUrlSearchParams<MessageFilter>(\n requestUrl.searchParams,\n [\"s\", \"mci\", \"ct\", \"lut\", \"fc\", \"mgi\", \"p\", \"md\", \"page\", \"size\"] // TODO: should sort be included?\n );\n\n const response = await fetchMessages(filter, backendClient);\n if (response.status !== 200) {\n throw new Error(`Failed to fetch messages: ${response.data}`);\n }\n\n return mapMetadata(response.data);\n } catch (error) {\n console.error(error);\n throw error;\n }\n };\n\nexport const messageListLoader: LoaderFunction = getMessageListLoader();\n","import { FormControl, MenuItem, Select } from \"@mui/material\";\nimport { useMemo, useState } from \"react\";\nimport { FilterHelperTexts } from \"./FilterHelperTexts\";\nimport { GenericFilterProps } from \"./types\";\n\nexport const EnumSelectFilter = ({\n name,\n value,\n defaultValue,\n onChange,\n helperText,\n validator,\n enumValues,\n}: GenericFilterProps<string> & {\n enumValues: { label: string; value: string }[];\n}): JSX.Element => {\n const selectValues = useMemo(\n () => [{ label: \"Any\", value: \"\" }, ...enumValues],\n [enumValues]\n );\n\n const [error, setError] = useState(validator?.(value ?? defaultValue ?? \"\"));\n\n return (\n <FormControl fullWidth error={!!error}>\n <Select\n size=\"small\"\n name={name}\n key={defaultValue}\n defaultValue={defaultValue}\n value={value}\n onChange={(ev) => {\n setError(validator?.(ev.target.value));\n onChange?.(ev.target.value);\n }}\n >\n {selectValues.map(({ value, label }) => (\n <MenuItem key={label} value={value}>\n {label}\n </MenuItem>\n ))}\n </Select>\n <FilterHelperTexts helperText={helperText} error={error} />\n </FormControl>\n );\n};\n\nexport const createEnumSelectFilter = (\n enumValues: { label: string; value: string }[]\n) => {\n return (props: GenericFilterProps<string>) => (\n <EnumSelectFilter {...props} enumValues={enumValues} />\n );\n};\n","import { formatDateTime } from \"../../common/format\";\nimport {\n datetimeRangeValidator,\n numberRangeValidator,\n numberValidator,\n} from \"../../common/validation\";\nimport { createEnumSelectFilter } from \"../../components/filter/EnumSelectFilter\";\nimport { TextFilter } from \"../../components/filter/TextFilter\";\nimport { TableMetadataDisplay } from \"../../components/metadata/TableMetadataDisplay\";\nimport { ColumnDefinitions } from \"../../components/table/types\";\nimport { MessageData, MessageFilter } from \"./types\";\n\nexport const messageSendingColumns: ColumnDefinitions<\n MessageData,\n MessageFilter\n> = [\n {\n key: \"creationTime\",\n title: \"Creation time\",\n CellComponent: ({ value }) => formatDateTime(value),\n minWidth: 250,\n searchKey: \"ct\",\n filterHelperText: \"yyyy-MM-dd HH:mm:ss - ?yyyy-MM-dd HH:mm:ss\",\n filterValidator: datetimeRangeValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"lastUpdatedTime\",\n title: \"Last updated time\",\n CellComponent: ({ value }) => formatDateTime(value),\n minWidth: 250,\n searchKey: \"lut\",\n filterHelperText: \"yyyy-MM-dd HH:mm:ss - ?yyyy-MM-dd HH:mm:ss\",\n filterValidator: datetimeRangeValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"state\",\n title: \"State\",\n minWidth: 130,\n searchKey: \"s\",\n filterHelperText: \"e.g. SENT\",\n FilterComponent: createEnumSelectFilter([\n { label: \"DELAYED\", value: \"DELAYED\" },\n { label: \"PENDING\", value: \"PENDING\" },\n { label: \"SENDING\", value: \"SENDING\" },\n { label: \"SENT\", value: \"SENT\" },\n { label: \"FAILED\", value: \"FAILED\" },\n { label: \"DISABLED\", value: \"DISABLED\" },\n ]),\n },\n {\n key: \"messageChainId\",\n title: \"Message Chain ID\",\n minWidth: 150,\n searchKey: \"mci\",\n filterHelperText: \"e.g. 123\",\n filterValidator: numberValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"messageGroupId\",\n title: \"Message Group ID\",\n minWidth: 150,\n searchKey: \"mgi\",\n filterHelperText: \"e.g. 123\",\n filterValidator: numberValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"failCount\",\n title: \"Fail count\",\n minWidth: 150,\n searchKey: \"fc\",\n filterHelperText: \"number - ?number\",\n filterValidator: numberRangeValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"priority\",\n title: \"Priority\",\n minWidth: 150,\n searchKey: \"p\",\n filterHelperText: \"e.g. 123\",\n filterValidator: numberValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"metadata\",\n title: \"Metadata\",\n CellComponent: TableMetadataDisplay,\n minWidth: 150,\n searchKey: \"md\",\n filterHelperText: \"A=a, B=b\",\n FilterComponent: TextFilter,\n },\n];\n","import { TableContainer } from \"@mui/material\";\nimport {\n Form,\n useLoaderData,\n useNavigate,\n useSearchParams,\n} from \"react-router\";\nimport { Pagination } from \"../../components/table/Pagination\";\nimport { Table } from \"../../components/table/Table\";\nimport { messageSendingColumns } from \"./messageSendingColumns\";\nimport { MessageFilter, MessageResponse } from \"./types\";\n\nconst getRowId = ({ id }: { id: number }) => id;\n\nconst searchParamsToFilter = (params: URLSearchParams): MessageFilter => ({\n state: params.get(\"s\") ?? \"\",\n messageChainId: params.get(\"mci\") ?? \"\",\n creationTime: params.get(\"ct\") ?? \"\",\n lastUpdatedTime: params.get(\"lut\") ?? \"\",\n failCount: params.get(\"fc\") ?? \"\",\n messageGroupId: params.get(\"mgi\") ?? \"\",\n priority: params.get(\"p\") ?? \"\",\n metadata: params.get(\"md\") ?? \"\",\n});\n\nconst MessageSendingRoute = () => {\n const navigate = useNavigate();\n const [searchParams, setSearchParams] = useSearchParams();\n const messageResponse = useLoaderData() as MessageResponse;\n\n return (\n <>\n <Form method=\"get\">\n <TableContainer sx={{ height: \"calc(100vh - 130px)\" }}>\n <Table\n columns={messageSendingColumns}\n rows={messageResponse.content}\n getRowId={getRowId}\n onRowClick={(row) => navigate(`./${row.id}`, { relative: \"path\" })}\n defaultFilter={searchParamsToFilter(searchParams)}\n />\n </TableContainer>\n <input type=\"submit\" hidden />\n </Form>\n <Pagination\n page={messageResponse.number}\n rowsPerPage={messageResponse.size}\n total={messageResponse.totalElements}\n onPageChange={(page) => {\n const newParams = new URLSearchParams(searchParams);\n newParams.set(\"page\", String(page));\n setSearchParams(newParams);\n }}\n />\n </>\n );\n};\n\nexport default MessageSendingRoute;\n","import { Message, MessageComponent } from \"@evolver-fi/evolver-basics/messages\";\nimport { useLoaderData, useNavigate } from \"react-router\";\n\nconst SingleMessageRoute = () => {\n const message = useLoaderData() as Message;\n\n const navigate = useNavigate();\n\n const handleBackAction = () => {\n navigate(-1);\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const handleDownloadDataAction = (_id: number, _type: string) => {\n // download data from /messages/:id/download\n // TODO: download not implemented in the component library\n };\n\n if (!message) {\n return <div>Loading...</div>; // TODO: handle 404, maybe in the loader?\n }\n\n // TODO: insert some messages into the backend and actually test this\n return (\n <MessageComponent\n message={message}\n backAction={handleBackAction}\n downloadDataAction={handleDownloadDataAction}\n />\n );\n};\n\nexport default SingleMessageRoute;\n"],"names":["DateTimeRangeFilterField","filterValue","validationError","setFilterValue","initialStartDateTime","initialEndDateTime","startDateTime","setStartDateTime","React","endDateTime","setEndDateTime","useEffect","value","_jsxs","Grid","_jsx","TextField","event","InputAdornment","IconButton","e","Backspace","formatterByKey","formatDatetimeRangeFilter","formatNumberRangeFilter","fetchMessages","filters","backendClient","client","getBackendClient","searchParams","createFilterQuery","key","searchParamsString","fetchMessageById","id","fetchMessagesAction","createAsyncThunk","thunkApi","response","initialState","createSlice","state","payload","builder","MessageField","label","isFull","MessageComponent","message","backAction","_Fragment","Button","ArrowBackIcon","formatDateTime","MessageStatus","MessageTargetConfigStatus","NULL_VALUE","NOT_NULL_VALUE","isString","data","EnumSelectFilterField","enumValues","selectValues","findLabelByValue","entry","sv","findValueByLabel","handleChange","newValue","formattedFilterValue","_a","v","FormControl","Select","selected","flow","MenuItem","Checkbox","FormHelperText","createSelectFilterRenderer","props","datetimeRangeValidator","numberValidator","numberRangeValidator","getSingleMessageLoader","params","error","singleMessageLoader","getMessageListLoader","request","requestUrl","filter","filterFromUrlSearchParams","mapMetadata","messageListLoader","EnumSelectFilter","name","defaultValue","onChange","helperText","validator","useMemo","setError","useState","jsx","ev","FilterHelperTexts","createEnumSelectFilter","messageSendingColumns","TextFilter","TableMetadataDisplay","getRowId","searchParamsToFilter","MessageSendingRoute","navigate","useNavigate","setSearchParams","useSearchParams","messageResponse","useLoaderData","jsxs","Fragment","Form","TableContainer","Table","row","Pagination","page","newParams","SingleMessageRoute","handleBackAction","handleDownloadDataAction","_id","_type"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]}