@evolver-fi/evolver-basics-admin-components 0.0.20 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/dist/ArrowBack-Bifnzxvs.js +6430 -0
  2. package/dist/ArrowBack-Bifnzxvs.js.map +1 -0
  3. package/dist/{BreadCrumbs-BzG2oi8Z.js → BreadCrumbs-DMuPCevY.js} +2 -2
  4. package/dist/BreadCrumbs-DMuPCevY.js.map +1 -0
  5. package/dist/EnumSelectFilter-BdGla5Yf.js +36 -0
  6. package/dist/EnumSelectFilter-BdGla5Yf.js.map +1 -0
  7. package/dist/ExpandMore-DUn2zrFA.js +1644 -0
  8. package/dist/ExpandMore-DUn2zrFA.js.map +1 -0
  9. package/dist/FilterLink-DIeFjfZX.js +49 -0
  10. package/dist/FilterLink-DIeFjfZX.js.map +1 -0
  11. package/dist/JwtTokensRoute-C74zNV7A.js +2374 -0
  12. package/dist/JwtTokensRoute-C74zNV7A.js.map +1 -0
  13. package/dist/ScheduledTasksRoute-BAetDHqN.js +611 -0
  14. package/dist/ScheduledTasksRoute-BAetDHqN.js.map +1 -0
  15. package/dist/SingleLogMessageRoute-Dl2NFfqG.js +419 -0
  16. package/dist/SingleLogMessageRoute-Dl2NFfqG.js.map +1 -0
  17. package/dist/SingleMessageRoute-fC94BR1C.js +306 -0
  18. package/dist/SingleMessageRoute-fC94BR1C.js.map +1 -0
  19. package/dist/Table-DWiRP1za.js +120 -0
  20. package/dist/Table-DWiRP1za.js.map +1 -0
  21. package/dist/TextFilter-BHWY2B7i.js +67 -0
  22. package/dist/TextFilter-BHWY2B7i.js.map +1 -0
  23. package/dist/{TriggerablesRoute-opCAjNCv.js → TriggerablesRoute-DiEEX1cR.js} +572 -576
  24. package/dist/TriggerablesRoute-DiEEX1cR.js.map +1 -0
  25. package/dist/api-BD_4zyJw.js +38 -0
  26. package/dist/api-BD_4zyJw.js.map +1 -0
  27. package/dist/breadcrumbs/index.js +1 -1
  28. package/dist/client/index.js +380 -0
  29. package/dist/client/index.js.map +1 -0
  30. package/dist/configuration-values/index.js +13 -0
  31. package/dist/configuration-values/index.js.map +1 -0
  32. package/dist/control-values/index.js +10 -0
  33. package/dist/control-values/index.js.map +1 -0
  34. package/dist/createSvgIcon-dA_Vj2W0.js +3914 -0
  35. package/dist/{createSvgIcon-Cf1cru4R.js.map → createSvgIcon-dA_Vj2W0.js.map} +1 -1
  36. package/dist/exhaustiveValues-Dx50G3yz.js +5 -0
  37. package/dist/exhaustiveValues-Dx50G3yz.js.map +1 -0
  38. package/dist/filter/index.js +5 -6
  39. package/dist/formData-BH8saYep.js +65 -0
  40. package/dist/formData-BH8saYep.js.map +1 -0
  41. package/dist/{jsx-runtime-B6kdoens.js → jsx-runtime-D858t2LC.js} +201 -219
  42. package/dist/{jsx-runtime-B6kdoens.js.map → jsx-runtime-D858t2LC.js.map} +1 -1
  43. package/dist/jwt-tokens/index.js +6 -4
  44. package/dist/loader-CrveWlGb.js +375 -0
  45. package/dist/loader-CrveWlGb.js.map +1 -0
  46. package/dist/loader-D-oC32OJ.js +3612 -0
  47. package/dist/loader-D-oC32OJ.js.map +1 -0
  48. package/dist/loader-rVy8Z9xH.js +130 -0
  49. package/dist/loader-rVy8Z9xH.js.map +1 -0
  50. package/dist/main/index.js +84 -48
  51. package/dist/main/index.js.map +1 -1
  52. package/dist/message-log/index.js +7 -5
  53. package/dist/message-sending/index.js +4 -4
  54. package/dist/message-targets/index.js +15 -0
  55. package/dist/message-targets/index.js.map +1 -0
  56. package/dist/pagination-Dy4ansKN.js +21 -0
  57. package/dist/pagination-Dy4ansKN.js.map +1 -0
  58. package/dist/scheduled-tasks/index.js +11 -9
  59. package/dist/schemas-CBHIJ_eF.js +3059 -0
  60. package/dist/schemas-CBHIJ_eF.js.map +1 -0
  61. package/dist/table/index.js +1 -1
  62. package/dist/triggerables/index.js +5 -3
  63. package/dist/triggerables/index.js.map +1 -1
  64. package/dist/types/breadcrumbs.d.ts +0 -1
  65. package/dist/types/client.d.ts +1 -0
  66. package/dist/types/configuration-values.d.ts +1 -0
  67. package/dist/types/control-values.d.ts +1 -0
  68. package/dist/types/filter.d.ts +0 -1
  69. package/dist/types/jwt-tokens.d.ts +0 -1
  70. package/dist/types/main.d.ts +0 -1
  71. package/dist/types/message-log.d.ts +0 -1
  72. package/dist/types/message-sending.d.ts +0 -1
  73. package/dist/types/message-targets.d.ts +1 -0
  74. package/dist/types/scheduled-tasks.d.ts +0 -1
  75. package/dist/types/table.d.ts +0 -1
  76. package/dist/types/triggerables.d.ts +0 -1
  77. package/package.json +51 -27
  78. package/dist/BreadCrumbs-BzG2oi8Z.js.map +0 -1
  79. package/dist/ConfirmButton-jayUa8_J.js +0 -16
  80. package/dist/ConfirmButton-jayUa8_J.js.map +0 -1
  81. package/dist/EnumSelectFilter-DiJhYa2m.js +0 -40
  82. package/dist/EnumSelectFilter-DiJhYa2m.js.map +0 -1
  83. package/dist/ExpandMore-D6gf2UVG.js +0 -14
  84. package/dist/ExpandMore-D6gf2UVG.js.map +0 -1
  85. package/dist/FilterLink-CHw7-m82.js +0 -43
  86. package/dist/FilterLink-CHw7-m82.js.map +0 -1
  87. package/dist/JwtTokensRoute-B3SgLM0q.js +0 -2335
  88. package/dist/JwtTokensRoute-B3SgLM0q.js.map +0 -1
  89. package/dist/ScheduledTasksRoute-CNhOAAKd.js +0 -1152
  90. package/dist/ScheduledTasksRoute-CNhOAAKd.js.map +0 -1
  91. package/dist/SingleLogMessageRoute-C9CL51r-.js +0 -274
  92. package/dist/SingleLogMessageRoute-C9CL51r-.js.map +0 -1
  93. package/dist/SingleMessageRoute-DaaWvgfS.js +0 -293
  94. package/dist/SingleMessageRoute-DaaWvgfS.js.map +0 -1
  95. package/dist/Table-DgRqEB1x.js +0 -154
  96. package/dist/Table-DgRqEB1x.js.map +0 -1
  97. package/dist/TableMetadataDisplay-C7RP2ZrM.js +0 -122
  98. package/dist/TableMetadataDisplay-C7RP2ZrM.js.map +0 -1
  99. package/dist/TextFilter-BKUfkFQe.js +0 -70
  100. package/dist/TextFilter-BKUfkFQe.js.map +0 -1
  101. package/dist/TriggerablesRoute-opCAjNCv.js.map +0 -1
  102. package/dist/createSvgIcon-Cf1cru4R.js +0 -3945
  103. package/dist/evolverClient-B_TZXnpV.js +0 -1602
  104. package/dist/evolverClient-B_TZXnpV.js.map +0 -1
  105. package/dist/parser-Bj3mcA83.js +0 -6096
  106. package/dist/parser-Bj3mcA83.js.map +0 -1
  107. package/dist/types/admin-components/src/common/format.d.ts +0 -1
  108. package/dist/types/admin-components/src/common/types.d.ts +0 -27
  109. package/dist/types/admin-components/src/common/validation.d.ts +0 -5
  110. package/dist/types/admin-components/src/components/breadcrumbs/BreadCrumbs.d.ts +0 -10
  111. package/dist/types/admin-components/src/components/breadcrumbs/index.d.ts +0 -1
  112. package/dist/types/admin-components/src/components/filter/EnumSelectFilter.d.ts +0 -11
  113. package/dist/types/admin-components/src/components/filter/FilterHelperTexts.d.ts +0 -4
  114. package/dist/types/admin-components/src/components/filter/FilterLink.d.ts +0 -2
  115. package/dist/types/admin-components/src/components/filter/TextFilter.d.ts +0 -2
  116. package/dist/types/admin-components/src/components/filter/index.d.ts +0 -5
  117. package/dist/types/admin-components/src/components/filter/types.d.ts +0 -20
  118. package/dist/types/admin-components/src/components/metadata/TableMetadataDisplay.d.ts +0 -2
  119. package/dist/types/admin-components/src/components/metadata/utils.d.ts +0 -1
  120. package/dist/types/admin-components/src/components/table/Pagination.d.ts +0 -7
  121. package/dist/types/admin-components/src/components/table/Table.d.ts +0 -3
  122. package/dist/types/admin-components/src/components/table/index.d.ts +0 -3
  123. package/dist/types/admin-components/src/components/table/types.d.ts +0 -48
  124. package/dist/types/admin-components/src/index.d.ts +0 -8
  125. package/dist/types/admin-components/src/routes/jwt-tokens/JwtTokensRoute.d.ts +0 -2
  126. package/dist/types/admin-components/src/routes/jwt-tokens/index.d.ts +0 -2
  127. package/dist/types/admin-components/src/routes/jwt-tokens/loader.d.ts +0 -11
  128. package/dist/types/admin-components/src/routes/message-log/MessageLogRoute.d.ts +0 -2
  129. package/dist/types/admin-components/src/routes/message-log/SingleLogMessageRoute.d.ts +0 -2
  130. package/dist/types/admin-components/src/routes/message-log/index.d.ts +0 -3
  131. package/dist/types/admin-components/src/routes/message-log/loader.d.ts +0 -7
  132. package/dist/types/admin-components/src/routes/message-log/messageLogColumns.d.ts +0 -3
  133. package/dist/types/admin-components/src/routes/message-log/types.d.ts +0 -35
  134. package/dist/types/admin-components/src/routes/message-sending/MessageSendingRoute.d.ts +0 -2
  135. package/dist/types/admin-components/src/routes/message-sending/SingleMessageRoute.d.ts +0 -2
  136. package/dist/types/admin-components/src/routes/message-sending/index.d.ts +0 -3
  137. package/dist/types/admin-components/src/routes/message-sending/loader.d.ts +0 -6
  138. package/dist/types/admin-components/src/routes/message-sending/messageSendingColumns.d.ts +0 -3
  139. package/dist/types/admin-components/src/routes/message-sending/types.d.ts +0 -41
  140. package/dist/types/admin-components/src/routes/scheduled-tasks/ScheduledTaskFormRoute.d.ts +0 -2
  141. package/dist/types/admin-components/src/routes/scheduled-tasks/ScheduledTasksRoute.d.ts +0 -2
  142. package/dist/types/admin-components/src/routes/scheduled-tasks/action.d.ts +0 -20
  143. package/dist/types/admin-components/src/routes/scheduled-tasks/index.d.ts +0 -4
  144. package/dist/types/admin-components/src/routes/scheduled-tasks/loader.d.ts +0 -9
  145. package/dist/types/admin-components/src/routes/triggerables/TriggerablesRoute.d.ts +0 -2
  146. package/dist/types/admin-components/src/routes/triggerables/action.d.ts +0 -10
  147. package/dist/types/admin-components/src/routes/triggerables/index.d.ts +0 -3
  148. package/dist/types/admin-components/src/routes/triggerables/loader.d.ts +0 -9
  149. package/dist/types/admin-ui/src/front-page/FrontPage.d.ts +0 -2
  150. package/dist/validation-DStiilqx.js +0 -22
  151. package/dist/validation-DStiilqx.js.map +0 -1
@@ -0,0 +1,375 @@
1
+ import { j as e } from "./jsx-runtime-D858t2LC.js";
2
+ import { useLoaderData as T, useActionData as C, useNavigate as w, useParams as E, useSubmit as I, Form as L, redirect as p } from "react-router";
3
+ import { Box as h, Collapse as V, Alert as P, Paper as $, Typography as b, Stack as x, FormControl as N, InputLabel as k, Select as O, MenuItem as B, TextField as o, Button as d, Table as v, TableHead as S, TableRow as u, TableCell as a, TableBody as M, TableContainer as A } from "@mui/material";
4
+ import { o as y, s as U, a as f, i as q, r as g, e as H, g as W, b as G, c as J, p as z } from "./formData-BH8saYep.js";
5
+ import { o as _, s as j } from "./schemas-CBHIJ_eF.js";
6
+ import { e as Y } from "./exhaustiveValues-Dx50G3yz.js";
7
+ const D = Y()(["ENABLED", "LOG_ONLY", "PAUSED", "DISABLED"]), F = async (s) => {
8
+ const r = await s.GET("/message-target");
9
+ if ("error" in r)
10
+ throw new Error(`Failed to fetch message target configs: ${r.response?.status}`);
11
+ return r.data;
12
+ }, K = async (s, r) => {
13
+ const t = await r.GET("/message-target/{id}", {
14
+ params: {
15
+ path: { id: s }
16
+ }
17
+ });
18
+ if ("error" in t)
19
+ throw new Error(`Failed to fetch message target config: ${t.response.status}`);
20
+ return t.data;
21
+ }, Q = async (s, r) => {
22
+ const t = await r.POST("/message-target", {
23
+ body: s
24
+ });
25
+ if ("error" in t)
26
+ throw new Error(`Failed to create message target config: ${t.response.status}`);
27
+ return t.response.status;
28
+ }, X = async (s, r, t) => {
29
+ const i = await t.POST("/message-target/{id}", {
30
+ params: {
31
+ path: { id: s }
32
+ },
33
+ body: r
34
+ });
35
+ if ("error" in i)
36
+ throw new Error(`Failed to update message target config: ${i.response.status}`);
37
+ return i.response.status;
38
+ }, Z = async (s, r) => {
39
+ const t = await r.POST("/message-target/{id}/remove", {
40
+ params: {
41
+ path: { id: s }
42
+ }
43
+ });
44
+ if ("error" in t)
45
+ throw new Error(`Failed to delete message target config: ${t.response.status}`);
46
+ return t.response.status;
47
+ }, ee = (s) => JSON.stringify(s ?? {}, null, 2), te = ({ history: s }) => s.length ? /* @__PURE__ */ e.jsxs(h, { sx: { mt: 3 }, children: [
48
+ /* @__PURE__ */ e.jsx(b, { variant: "h5", component: "h2", sx: { mb: 1 }, children: "History" }),
49
+ /* @__PURE__ */ e.jsxs(v, { size: "small", children: [
50
+ /* @__PURE__ */ e.jsx(S, { children: /* @__PURE__ */ e.jsxs(u, { children: [
51
+ /* @__PURE__ */ e.jsx(a, { children: "Modified" }),
52
+ /* @__PURE__ */ e.jsx(a, { children: "User" }),
53
+ /* @__PURE__ */ e.jsx(a, { children: "Comment" }),
54
+ /* @__PURE__ */ e.jsx(a, { children: "State" }),
55
+ /* @__PURE__ */ e.jsx(a, { children: "URI" }),
56
+ /* @__PURE__ */ e.jsx(a, { children: "Retry" })
57
+ ] }) }),
58
+ /* @__PURE__ */ e.jsx(M, { children: s.map((r, t) => /* @__PURE__ */ e.jsxs(u, { children: [
59
+ /* @__PURE__ */ e.jsx(a, { children: r.modTimestamp }),
60
+ /* @__PURE__ */ e.jsx(a, { children: r.modUser }),
61
+ /* @__PURE__ */ e.jsx(a, { children: r.modComment }),
62
+ /* @__PURE__ */ e.jsx(a, { children: r.state }),
63
+ /* @__PURE__ */ e.jsx(a, { children: r.uri }),
64
+ /* @__PURE__ */ e.jsxs(a, { children: [
65
+ r.retryLimit ?? "unlimited",
66
+ " / ",
67
+ r.retryDelayMs ?? "",
68
+ " ms"
69
+ ] })
70
+ ] }, `${r.modTimestamp ?? "history"}-${t}`)) })
71
+ ] })
72
+ ] }) : null, ge = () => {
73
+ const { target: s, history: r } = T(), t = C(), i = w(), n = E(), l = I(), c = n.id === "new", R = () => {
74
+ s.id === void 0 || !window.confirm(
75
+ `Delete message target config "${s.messageType ?? s.id} => ${s.targetSystem ?? s.id}"?`
76
+ ) || l(
77
+ { intent: "delete", id: s.id },
78
+ {
79
+ method: "POST"
80
+ }
81
+ );
82
+ };
83
+ return /* @__PURE__ */ e.jsxs(h, { component: "section", sx: { p: 2, maxWidth: 1100 }, children: [
84
+ /* @__PURE__ */ e.jsx(V, { in: t !== void 0, unmountOnExit: !0, children: /* @__PURE__ */ e.jsx(P, { severity: t && t.status < 300 ? "success" : "error", children: t?.message }) }),
85
+ /* @__PURE__ */ e.jsxs($, { sx: { p: 2, mt: 2 }, children: [
86
+ /* @__PURE__ */ e.jsx(b, { variant: "h4", component: "h1", sx: { mb: 2 }, children: c ? "New message target config" : "Edit message target config" }),
87
+ /* @__PURE__ */ e.jsx(L, { method: "post", children: /* @__PURE__ */ e.jsxs(x, { gap: 2, children: [
88
+ !c && /* @__PURE__ */ e.jsx("input", { type: "hidden", name: "id", value: s.id ?? "" }),
89
+ /* @__PURE__ */ e.jsxs(N, { required: !0, children: [
90
+ /* @__PURE__ */ e.jsx(k, { id: "message-target-state-label", children: "State" }),
91
+ /* @__PURE__ */ e.jsx(
92
+ O,
93
+ {
94
+ labelId: "message-target-state-label",
95
+ name: "state",
96
+ label: "State",
97
+ defaultValue: s.state ?? "ENABLED",
98
+ children: D.map((m) => /* @__PURE__ */ e.jsx(B, { value: m, children: m }, m))
99
+ }
100
+ )
101
+ ] }),
102
+ /* @__PURE__ */ e.jsx(
103
+ o,
104
+ {
105
+ name: "messageType",
106
+ label: "Message type",
107
+ required: !0,
108
+ defaultValue: s.messageType ?? ""
109
+ }
110
+ ),
111
+ /* @__PURE__ */ e.jsx(
112
+ o,
113
+ {
114
+ name: "targetSystem",
115
+ label: "Target system",
116
+ required: !0,
117
+ defaultValue: s.targetSystem ?? ""
118
+ }
119
+ ),
120
+ /* @__PURE__ */ e.jsx(o, { name: "uri", label: "URI", required: !0, defaultValue: s.uri ?? "" }),
121
+ /* @__PURE__ */ e.jsx(
122
+ o,
123
+ {
124
+ name: "retryDelayMs",
125
+ label: "Retry delay, ms",
126
+ type: "number",
127
+ required: !0,
128
+ defaultValue: s.retryDelayMs ?? 0,
129
+ inputProps: {
130
+ min: 0,
131
+ step: 1
132
+ }
133
+ }
134
+ ),
135
+ /* @__PURE__ */ e.jsx(
136
+ o,
137
+ {
138
+ name: "retryLimit",
139
+ label: "Retry limit",
140
+ type: "number",
141
+ defaultValue: s.retryLimit ?? "",
142
+ helperText: "Blank means unlimited.",
143
+ inputProps: {
144
+ min: 0,
145
+ step: 1
146
+ }
147
+ }
148
+ ),
149
+ /* @__PURE__ */ e.jsx(
150
+ o,
151
+ {
152
+ name: "maxConcurrency",
153
+ label: "Max concurrency",
154
+ type: "number",
155
+ defaultValue: s.maxConcurrency ?? "",
156
+ helperText: "Blank means unlimited. Values must be at least 1.",
157
+ inputProps: {
158
+ min: 1,
159
+ step: 1
160
+ }
161
+ }
162
+ ),
163
+ /* @__PURE__ */ e.jsx(
164
+ o,
165
+ {
166
+ name: "filters",
167
+ label: "Filters",
168
+ multiline: !0,
169
+ minRows: 2,
170
+ defaultValue: s.filters ?? "",
171
+ helperText: "Comma-separated filters, for example messageType=ORDER_CREATED,targetSystem!=legacy."
172
+ }
173
+ ),
174
+ /* @__PURE__ */ e.jsx(
175
+ o,
176
+ {
177
+ name: "throttling",
178
+ label: "Throttling",
179
+ defaultValue: s.throttling ?? ""
180
+ }
181
+ ),
182
+ /* @__PURE__ */ e.jsx(
183
+ o,
184
+ {
185
+ name: "properties",
186
+ label: "Properties",
187
+ multiline: !0,
188
+ minRows: 6,
189
+ defaultValue: ee(s.properties),
190
+ helperText: "JSON object. Values are saved as strings."
191
+ }
192
+ ),
193
+ /* @__PURE__ */ e.jsx(o, { name: "modUser", label: "Modified by" }),
194
+ /* @__PURE__ */ e.jsx(o, { name: "modComment", label: "Change comment", multiline: !0, minRows: 2 }),
195
+ /* @__PURE__ */ e.jsxs(x, { direction: "row", gap: 1, children: [
196
+ /* @__PURE__ */ e.jsx(d, { type: "submit", name: "intent", value: "save", variant: "contained", children: "Save" }),
197
+ !c && /* @__PURE__ */ e.jsx(d, { type: "button", color: "error", variant: "outlined", onClick: R, children: "Delete" }),
198
+ /* @__PURE__ */ e.jsx(d, { type: "button", variant: "outlined", onClick: () => i("/message-targets"), children: "Cancel" })
199
+ ] })
200
+ ] }) }),
201
+ !c && /* @__PURE__ */ e.jsx(te, { history: r })
202
+ ] })
203
+ ] });
204
+ }, se = (s) => s ? Object.entries(s).map(([r, t]) => `${r}: ${t}`).join(", ") : "", he = () => {
205
+ const s = w(), r = T();
206
+ return /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
207
+ /* @__PURE__ */ e.jsx(h, { sx: { p: 1 }, children: /* @__PURE__ */ e.jsx(d, { variant: "contained", onClick: () => s("./new", { relative: "path" }), children: "New message target config" }) }),
208
+ /* @__PURE__ */ e.jsx(A, { sx: { height: "calc(100vh - 140px)" }, children: /* @__PURE__ */ e.jsxs(v, { size: "small", stickyHeader: !0, children: [
209
+ /* @__PURE__ */ e.jsx(S, { children: /* @__PURE__ */ e.jsxs(u, { children: [
210
+ /* @__PURE__ */ e.jsx(a, { children: "ID" }),
211
+ /* @__PURE__ */ e.jsx(a, { children: "State" }),
212
+ /* @__PURE__ */ e.jsx(a, { children: "Message type" }),
213
+ /* @__PURE__ */ e.jsx(a, { children: "Target system" }),
214
+ /* @__PURE__ */ e.jsx(a, { children: "URI" }),
215
+ /* @__PURE__ */ e.jsx(a, { children: "Retry" }),
216
+ /* @__PURE__ */ e.jsx(a, { children: "Max concurrency" }),
217
+ /* @__PURE__ */ e.jsx(a, { children: "Properties" }),
218
+ /* @__PURE__ */ e.jsx(a, { children: "Last modified" })
219
+ ] }) }),
220
+ /* @__PURE__ */ e.jsx(M, { children: r.map(({ target: t, history: i }) => {
221
+ const n = t?.id;
222
+ return /* @__PURE__ */ e.jsxs(
223
+ u,
224
+ {
225
+ hover: !0,
226
+ sx: { cursor: n !== void 0 ? "pointer" : "default" },
227
+ onClick: () => {
228
+ n !== void 0 && s(`./${n}`, { relative: "path" });
229
+ },
230
+ children: [
231
+ /* @__PURE__ */ e.jsx(a, { children: n }),
232
+ /* @__PURE__ */ e.jsx(a, { children: t?.state }),
233
+ /* @__PURE__ */ e.jsx(a, { children: t?.messageType }),
234
+ /* @__PURE__ */ e.jsx(a, { children: t?.targetSystem }),
235
+ /* @__PURE__ */ e.jsx(a, { children: t?.uri }),
236
+ /* @__PURE__ */ e.jsxs(a, { children: [
237
+ t?.retryLimit ?? "unlimited",
238
+ " / ",
239
+ t?.retryDelayMs ?? "",
240
+ " ms"
241
+ ] }),
242
+ /* @__PURE__ */ e.jsx(a, { children: t?.maxConcurrency ?? "unlimited" }),
243
+ /* @__PURE__ */ e.jsx(a, { children: se(t?.properties) }),
244
+ /* @__PURE__ */ e.jsx(a, { children: i?.[0]?.modTimestamp })
245
+ ]
246
+ },
247
+ n ?? `${t?.messageType}-${t?.targetSystem}`
248
+ );
249
+ }) })
250
+ ] }) })
251
+ ] });
252
+ }, re = _({
253
+ state: H("State", D),
254
+ filters: y,
255
+ messageType: g("Message type"),
256
+ targetSystem: g("Target system"),
257
+ throttling: y,
258
+ uri: g("URI"),
259
+ retryLimit: f("Retry limit"),
260
+ retryDelayMs: q("Retry delay"),
261
+ maxConcurrency: f("Max concurrency"),
262
+ modUser: j().trim().optional().default(""),
263
+ modComment: j().trim().optional().default(""),
264
+ properties: U("Properties")
265
+ }).superRefine((s, r) => {
266
+ s.maxConcurrency !== void 0 && s.maxConcurrency < 1 && r.addIssue({
267
+ code: "custom",
268
+ path: ["maxConcurrency"],
269
+ message: "Max concurrency must be at least 1 or blank"
270
+ });
271
+ }), ae = (s) => z(
272
+ s,
273
+ re,
274
+ "Message target config form is invalid"
275
+ ), pe = (s) => async ({ request: r }) => {
276
+ try {
277
+ const t = await r.formData();
278
+ switch (W(t, "intent")) {
279
+ case "save": {
280
+ const n = J(t, "id", "Message target config ID");
281
+ if (!n.ok)
282
+ return { status: 400, message: "Missing or invalid message target config ID" };
283
+ const l = ae(t);
284
+ if (!l.ok)
285
+ return { status: 400, message: l.message };
286
+ const c = n.value === void 0 ? await Q(l.value, s) : await X(n.value, l.value, s);
287
+ if (c === 201 || c === 204)
288
+ throw p("/message-targets");
289
+ return { status: c, message: "Failed to save message target config" };
290
+ }
291
+ case "delete": {
292
+ const n = G(t, "id", "Message target config ID");
293
+ if (!n.ok)
294
+ return { status: 400, message: n.message };
295
+ const l = await Z(n.value, s);
296
+ if (l === 200 || l === 204)
297
+ throw p("/message-targets");
298
+ return { status: l, message: "Failed to delete message target config" };
299
+ }
300
+ default:
301
+ return { status: 400, message: "Invalid action type" };
302
+ }
303
+ } catch (t) {
304
+ if (t instanceof Response && t.status >= 300 && t.status < 400)
305
+ throw t;
306
+ return console.error(t), {
307
+ status: 500,
308
+ message: t instanceof Error ? t.message : "Failed to process message target request"
309
+ };
310
+ }
311
+ }, ne = () => ({
312
+ state: "ENABLED",
313
+ filters: "",
314
+ messageType: "",
315
+ targetSystem: "",
316
+ throttling: "",
317
+ uri: "",
318
+ retryLimit: void 0,
319
+ retryDelayMs: 0,
320
+ maxConcurrency: void 0,
321
+ properties: {}
322
+ }), xe = (s) => async () => {
323
+ try {
324
+ return await F(s);
325
+ } catch (r) {
326
+ throw console.error(r), new Error("Failed to fetch message target configs");
327
+ }
328
+ }, ie = (s, r) => {
329
+ const t = r.find(({ target: i }) => i?.id === s);
330
+ if (t?.target)
331
+ return {
332
+ target: t.target,
333
+ history: t.history ?? []
334
+ };
335
+ }, ye = (s) => async ({ params: r }) => {
336
+ try {
337
+ if (r.id === "new")
338
+ return {
339
+ target: ne(),
340
+ history: []
341
+ };
342
+ if (!r.id)
343
+ throw new Response("", {
344
+ status: 404,
345
+ statusText: "Not found"
346
+ });
347
+ const t = parseInt(r.id, 10);
348
+ if (isNaN(t))
349
+ throw new Response("", {
350
+ status: 404,
351
+ statusText: "Not found"
352
+ });
353
+ const i = await F(s), n = ie(t, i);
354
+ return n || {
355
+ target: await K(t, s),
356
+ history: []
357
+ };
358
+ } catch (t) {
359
+ throw console.error(t), t;
360
+ }
361
+ };
362
+ export {
363
+ ge as M,
364
+ he as a,
365
+ F as b,
366
+ Q as c,
367
+ Z as d,
368
+ pe as e,
369
+ K as f,
370
+ ne as g,
371
+ ye as h,
372
+ xe as i,
373
+ X as u
374
+ };
375
+ //# sourceMappingURL=loader-CrveWlGb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader-CrveWlGb.js","sources":["../src/routes/message-targets/api.ts","../src/routes/message-targets/MessageTargetFormRoute.tsx","../src/routes/message-targets/MessageTargetsRoute.tsx","../src/routes/message-targets/action.ts","../src/routes/message-targets/loader.ts"],"sourcesContent":["import type { ApiClient } from \"../../client\";\nimport { exhaustiveStringValues } from \"../../common/exhaustiveValues\";\nimport type { components } from \"../../types/openapiTypes\";\n\nexport type MessageTargetConfig = components[\"schemas\"][\"MessageTargetConfig\"];\nexport type MessageTargetConfigRequestModel =\n components[\"schemas\"][\"MessageTargetConfigRequestModel\"];\nexport type MessageTargetConfigHistory = components[\"schemas\"][\"MessageTargetConfigHistory\"];\nexport type MessageTargetWithHistory = components[\"schemas\"][\"TargetWithHistory\"];\n\nexport const messageTargetStates = exhaustiveStringValues<\n MessageTargetConfigRequestModel[\"state\"]\n>()([\"ENABLED\", \"LOG_ONLY\", \"PAUSED\", \"DISABLED\"]);\n\nexport const fetchMessageTargets = async (\n client: ApiClient,\n): Promise<MessageTargetWithHistory[]> => {\n const result = await client.GET(\"/message-target\");\n\n if (\"error\" in result) {\n throw new Error(`Failed to fetch message target configs: ${result.response?.status}`);\n }\n\n return result.data;\n};\n\nexport const fetchMessageTargetById = async (\n id: number,\n client: ApiClient,\n): Promise<MessageTargetConfig> => {\n const result = await client.GET(\"/message-target/{id}\", {\n params: {\n path: { id },\n },\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to fetch message target config: ${result.response.status}`);\n }\n\n return result.data;\n};\n\nexport const createMessageTarget = async (\n messageTarget: MessageTargetConfigRequestModel,\n client: ApiClient,\n) => {\n const result = await client.POST(\"/message-target\", {\n body: messageTarget,\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to create message target config: ${result.response.status}`);\n }\n\n return result.response.status;\n};\n\nexport const updateMessageTarget = async (\n id: number,\n messageTarget: MessageTargetConfigRequestModel,\n client: ApiClient,\n) => {\n const result = await client.POST(\"/message-target/{id}\", {\n params: {\n path: { id },\n },\n body: messageTarget,\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to update message target config: ${result.response.status}`);\n }\n\n return result.response.status;\n};\n\nexport const deleteMessageTarget = async (id: number, client: ApiClient) => {\n const result = await client.POST(\"/message-target/{id}/remove\", {\n params: {\n path: { id },\n },\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to delete message target config: ${result.response.status}`);\n }\n\n return result.response.status;\n};\n","import {\n Form,\n useActionData,\n useLoaderData,\n useNavigate,\n useParams,\n useSubmit,\n} from \"react-router\";\nimport {\n Alert,\n Box,\n Button,\n Collapse,\n FormControl,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Stack,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n TextField,\n Typography,\n} from \"@mui/material\";\nimport type { MessageTargetFormAction } from \"./action\";\nimport type { MessageTargetConfigHistory } from \"./api\";\nimport { messageTargetStates } from \"./api\";\nimport type { MessageTargetFormLoader } from \"./loader\";\n\nconst formatProperties = (properties?: Record<string, string>): string =>\n JSON.stringify(properties ?? {}, null, 2);\n\nconst HistoryTable = ({ history }: { history: MessageTargetConfigHistory[] }) => {\n if (!history.length) {\n return null;\n }\n\n return (\n <Box sx={{ mt: 3 }}>\n <Typography variant=\"h5\" component=\"h2\" sx={{ mb: 1 }}>\n History\n </Typography>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Modified</TableCell>\n <TableCell>User</TableCell>\n <TableCell>Comment</TableCell>\n <TableCell>State</TableCell>\n <TableCell>URI</TableCell>\n <TableCell>Retry</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {history.map((entry, index) => (\n <TableRow key={`${entry.modTimestamp ?? \"history\"}-${index}`}>\n <TableCell>{entry.modTimestamp}</TableCell>\n <TableCell>{entry.modUser}</TableCell>\n <TableCell>{entry.modComment}</TableCell>\n <TableCell>{entry.state}</TableCell>\n <TableCell>{entry.uri}</TableCell>\n <TableCell>\n {entry.retryLimit ?? \"unlimited\"} / {entry.retryDelayMs ?? \"\"} ms\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Box>\n );\n};\n\nconst MessageTargetFormRoute = () => {\n const { target, history } = useLoaderData<MessageTargetFormLoader>();\n const actionData = useActionData<MessageTargetFormAction>();\n const navigate = useNavigate();\n const params = useParams();\n const submit = useSubmit();\n const isNew = params.id === \"new\";\n\n const handleDelete = () => {\n if (target.id === undefined) {\n return;\n }\n\n const confirmed = window.confirm(\n `Delete message target config \"${target.messageType ?? target.id} => ${\n target.targetSystem ?? target.id\n }\"?`,\n );\n\n if (!confirmed) {\n return;\n }\n\n submit(\n { intent: \"delete\", id: target.id },\n {\n method: \"POST\",\n },\n );\n };\n\n return (\n <Box component=\"section\" sx={{ p: 2, maxWidth: 1100 }}>\n <Collapse in={actionData !== undefined} unmountOnExit>\n <Alert severity={actionData && actionData.status < 300 ? \"success\" : \"error\"}>\n {actionData?.message}\n </Alert>\n </Collapse>\n <Paper sx={{ p: 2, mt: 2 }}>\n <Typography variant=\"h4\" component=\"h1\" sx={{ mb: 2 }}>\n {isNew ? \"New message target config\" : \"Edit message target config\"}\n </Typography>\n <Form method=\"post\">\n <Stack gap={2}>\n {!isNew && <input type=\"hidden\" name=\"id\" value={target.id ?? \"\"} />}\n <FormControl required>\n <InputLabel id=\"message-target-state-label\">State</InputLabel>\n <Select\n labelId=\"message-target-state-label\"\n name=\"state\"\n label=\"State\"\n defaultValue={target.state ?? \"ENABLED\"}\n >\n {messageTargetStates.map((state) => (\n <MenuItem key={state} value={state}>\n {state}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <TextField\n name=\"messageType\"\n label=\"Message type\"\n required\n defaultValue={target.messageType ?? \"\"}\n />\n <TextField\n name=\"targetSystem\"\n label=\"Target system\"\n required\n defaultValue={target.targetSystem ?? \"\"}\n />\n <TextField name=\"uri\" label=\"URI\" required defaultValue={target.uri ?? \"\"} />\n <TextField\n name=\"retryDelayMs\"\n label=\"Retry delay, ms\"\n type=\"number\"\n required\n defaultValue={target.retryDelayMs ?? 0}\n inputProps={{\n min: 0,\n step: 1,\n }}\n />\n <TextField\n name=\"retryLimit\"\n label=\"Retry limit\"\n type=\"number\"\n defaultValue={target.retryLimit ?? \"\"}\n helperText=\"Blank means unlimited.\"\n inputProps={{\n min: 0,\n step: 1,\n }}\n />\n <TextField\n name=\"maxConcurrency\"\n label=\"Max concurrency\"\n type=\"number\"\n defaultValue={target.maxConcurrency ?? \"\"}\n helperText=\"Blank means unlimited. Values must be at least 1.\"\n inputProps={{\n min: 1,\n step: 1,\n }}\n />\n <TextField\n name=\"filters\"\n label=\"Filters\"\n multiline\n minRows={2}\n defaultValue={target.filters ?? \"\"}\n helperText=\"Comma-separated filters, for example messageType=ORDER_CREATED,targetSystem!=legacy.\"\n />\n <TextField\n name=\"throttling\"\n label=\"Throttling\"\n defaultValue={target.throttling ?? \"\"}\n />\n <TextField\n name=\"properties\"\n label=\"Properties\"\n multiline\n minRows={6}\n defaultValue={formatProperties(target.properties)}\n helperText=\"JSON object. Values are saved as strings.\"\n />\n <TextField name=\"modUser\" label=\"Modified by\" />\n <TextField name=\"modComment\" label=\"Change comment\" multiline minRows={2} />\n <Stack direction=\"row\" gap={1}>\n <Button type=\"submit\" name=\"intent\" value=\"save\" variant=\"contained\">\n Save\n </Button>\n {!isNew && (\n <Button type=\"button\" color=\"error\" variant=\"outlined\" onClick={handleDelete}>\n Delete\n </Button>\n )}\n <Button type=\"button\" variant=\"outlined\" onClick={() => navigate(\"/message-targets\")}>\n Cancel\n </Button>\n </Stack>\n </Stack>\n </Form>\n {!isNew && <HistoryTable history={history} />}\n </Paper>\n </Box>\n );\n};\n\nexport default MessageTargetFormRoute;\n","import {\n Box,\n Button,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n} from \"@mui/material\";\nimport { useLoaderData, useNavigate } from \"react-router\";\nimport type { MessageTargetsLoader } from \"./loader\";\n\nconst formatProperties = (properties?: Record<string, string>): string => {\n if (!properties) {\n return \"\";\n }\n\n return Object.entries(properties)\n .map(([key, value]) => `${key}: ${value}`)\n .join(\", \");\n};\n\nconst MessageTargetsRoute = () => {\n const navigate = useNavigate();\n const messageTargets = useLoaderData<MessageTargetsLoader>();\n\n return (\n <>\n <Box sx={{ p: 1 }}>\n <Button variant=\"contained\" onClick={() => navigate(\"./new\", { relative: \"path\" })}>\n New message target config\n </Button>\n </Box>\n <TableContainer sx={{ height: \"calc(100vh - 140px)\" }}>\n <Table size=\"small\" stickyHeader>\n <TableHead>\n <TableRow>\n <TableCell>ID</TableCell>\n <TableCell>State</TableCell>\n <TableCell>Message type</TableCell>\n <TableCell>Target system</TableCell>\n <TableCell>URI</TableCell>\n <TableCell>Retry</TableCell>\n <TableCell>Max concurrency</TableCell>\n <TableCell>Properties</TableCell>\n <TableCell>Last modified</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {messageTargets.map(({ target, history }) => {\n const targetId = target?.id;\n\n return (\n <TableRow\n key={targetId ?? `${target?.messageType}-${target?.targetSystem}`}\n hover\n sx={{ cursor: targetId !== undefined ? \"pointer\" : \"default\" }}\n onClick={() => {\n if (targetId !== undefined) {\n navigate(`./${targetId}`, { relative: \"path\" });\n }\n }}\n >\n <TableCell>{targetId}</TableCell>\n <TableCell>{target?.state}</TableCell>\n <TableCell>{target?.messageType}</TableCell>\n <TableCell>{target?.targetSystem}</TableCell>\n <TableCell>{target?.uri}</TableCell>\n <TableCell>\n {target?.retryLimit ?? \"unlimited\"} / {target?.retryDelayMs ?? \"\"} ms\n </TableCell>\n <TableCell>{target?.maxConcurrency ?? \"unlimited\"}</TableCell>\n <TableCell>{formatProperties(target?.properties)}</TableCell>\n <TableCell>{history?.[0]?.modTimestamp}</TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </TableContainer>\n </>\n );\n};\n\nexport default MessageTargetsRoute;\n","import { redirect, type ActionFunctionArgs } from \"react-router\";\nimport { z } from \"zod\";\nimport type { ApiClient } from \"../../client\";\nimport {\n type FormDataParseResult,\n enumFormSchema,\n getOptionalIntFormValue,\n getStringFormValue,\n integerFormSchema,\n optionalIntegerFormSchema,\n optionalStringFormSchema,\n parseFormDataWithSchema,\n requiredStringFormSchema,\n stringRecordJsonFormSchema,\n getRequiredIntFormValue,\n} from \"../../common/formData\";\nimport type { MessageTargetConfigRequestModel } from \"./api\";\nimport {\n createMessageTarget,\n deleteMessageTarget,\n messageTargetStates,\n updateMessageTarget,\n} from \"./api\";\n\nexport type MessageTargetActionResult = {\n status: number;\n message: string;\n};\n\nconst messageTargetFormSchema = z\n .object({\n state: enumFormSchema(\"State\", messageTargetStates),\n filters: optionalStringFormSchema,\n messageType: requiredStringFormSchema(\"Message type\"),\n targetSystem: requiredStringFormSchema(\"Target system\"),\n throttling: optionalStringFormSchema,\n uri: requiredStringFormSchema(\"URI\"),\n retryLimit: optionalIntegerFormSchema(\"Retry limit\"),\n retryDelayMs: integerFormSchema(\"Retry delay\"),\n maxConcurrency: optionalIntegerFormSchema(\"Max concurrency\"),\n modUser: z.string().trim().optional().default(\"\"),\n modComment: z.string().trim().optional().default(\"\"),\n properties: stringRecordJsonFormSchema(\"Properties\"),\n })\n .superRefine((value, context) => {\n if (value.maxConcurrency !== undefined && value.maxConcurrency < 1) {\n context.addIssue({\n code: \"custom\",\n path: [\"maxConcurrency\"],\n message: \"Max concurrency must be at least 1 or blank\",\n });\n }\n });\n\nconst parseMessageTargetFormData = (\n formData: FormData,\n): FormDataParseResult<MessageTargetConfigRequestModel> =>\n parseFormDataWithSchema(\n formData,\n messageTargetFormSchema,\n \"Message target config form is invalid\",\n );\n\nexport const getMessageTargetAction =\n (client: ApiClient) =>\n async ({ request }: ActionFunctionArgs): Promise<MessageTargetActionResult> => {\n try {\n const formData = await request.formData();\n const intent = getStringFormValue(formData, \"intent\");\n\n switch (intent) {\n case \"save\": {\n const id = getOptionalIntFormValue(formData, \"id\", \"Message target config ID\");\n\n if (!id.ok) {\n return { status: 400, message: \"Missing or invalid message target config ID\" };\n }\n\n const messageTargetResult = parseMessageTargetFormData(formData);\n\n if (!messageTargetResult.ok) {\n return { status: 400, message: messageTargetResult.message };\n }\n\n const status =\n id.value === undefined\n ? await createMessageTarget(messageTargetResult.value, client)\n : await updateMessageTarget(id.value, messageTargetResult.value, client);\n\n if (status === 201 || status === 204) {\n throw redirect(\"/message-targets\");\n }\n\n return { status, message: \"Failed to save message target config\" };\n }\n\n case \"delete\": {\n const idResult = getRequiredIntFormValue(formData, \"id\", \"Message target config ID\");\n\n if (!idResult.ok) {\n return { status: 400, message: idResult.message };\n }\n\n const status = await deleteMessageTarget(idResult.value, client);\n\n if (status === 200 || status === 204) {\n throw redirect(\"/message-targets\");\n }\n\n return { status, message: \"Failed to delete message target config\" };\n }\n\n default:\n return { status: 400, message: \"Invalid action type\" };\n }\n } catch (error) {\n if (error instanceof Response && error.status >= 300 && error.status < 400) {\n throw error;\n }\n\n console.error(error);\n return {\n status: 500,\n message:\n error instanceof Error ? error.message : \"Failed to process message target request\",\n };\n }\n };\n\nexport type MessageTargetFormAction = ReturnType<typeof getMessageTargetAction>;\n","import type { LoaderFunctionArgs } from \"react-router\";\nimport type { ApiClient } from \"../../client\";\nimport type {\n MessageTargetConfig,\n MessageTargetConfigHistory,\n MessageTargetWithHistory,\n} from \"./api\";\nimport { fetchMessageTargetById, fetchMessageTargets } from \"./api\";\n\nexport type MessageTargetFormLoaderData = {\n target: MessageTargetConfig;\n history: MessageTargetConfigHistory[];\n};\n\nexport const getInitialMessageTarget = (): MessageTargetConfig => ({\n state: \"ENABLED\",\n filters: \"\",\n messageType: \"\",\n targetSystem: \"\",\n throttling: \"\",\n uri: \"\",\n retryLimit: undefined,\n retryDelayMs: 0,\n maxConcurrency: undefined,\n properties: {},\n});\n\nexport const getMessageTargetsLoader = (client: ApiClient) => async () => {\n try {\n return await fetchMessageTargets(client);\n } catch (error) {\n console.error(error);\n throw new Error(\"Failed to fetch message target configs\");\n }\n};\n\nexport type MessageTargetsLoader = ReturnType<typeof getMessageTargetsLoader>;\n\nconst findMessageTargetWithHistory = (\n id: number,\n targets: MessageTargetWithHistory[],\n): MessageTargetFormLoaderData | undefined => {\n const targetWithHistory = targets.find(({ target }) => target?.id === id);\n\n if (!targetWithHistory?.target) {\n return undefined;\n }\n\n return {\n target: targetWithHistory.target,\n history: targetWithHistory.history ?? [],\n };\n};\n\nexport const getMessageTargetFormLoader =\n (client: ApiClient) =>\n async ({ params }: LoaderFunctionArgs): Promise<MessageTargetFormLoaderData> => {\n try {\n if (params.id === \"new\") {\n return {\n target: getInitialMessageTarget(),\n history: [],\n };\n }\n\n if (!params.id) {\n throw new Response(\"\", {\n status: 404,\n statusText: \"Not found\",\n });\n }\n\n const id = parseInt(params.id, 10);\n\n if (isNaN(id)) {\n throw new Response(\"\", {\n status: 404,\n statusText: \"Not found\",\n });\n }\n\n const targets = await fetchMessageTargets(client);\n const targetWithHistory = findMessageTargetWithHistory(id, targets);\n\n if (targetWithHistory) {\n return targetWithHistory;\n }\n\n return {\n target: await fetchMessageTargetById(id, client),\n history: [],\n };\n } catch (error) {\n console.error(error);\n throw error;\n }\n };\n\nexport type MessageTargetFormLoader = ReturnType<typeof getMessageTargetFormLoader>;\n"],"names":["messageTargetStates","exhaustiveStringValues","fetchMessageTargets","client","result","fetchMessageTargetById","id","createMessageTarget","messageTarget","updateMessageTarget","deleteMessageTarget","formatProperties","properties","HistoryTable","history","Box","jsx","Typography","jsxs","Table","TableHead","TableRow","TableCell","TableBody","entry","index","MessageTargetFormRoute","target","useLoaderData","actionData","useActionData","navigate","useNavigate","params","useParams","submit","useSubmit","isNew","handleDelete","Collapse","Alert","Paper","Form","Stack","FormControl","InputLabel","Select","state","MenuItem","TextField","Button","key","value","MessageTargetsRoute","messageTargets","Fragment","TableContainer","targetId","messageTargetFormSchema","z.object","enumFormSchema","optionalStringFormSchema","requiredStringFormSchema","optionalIntegerFormSchema","integerFormSchema","z.string","stringRecordJsonFormSchema","context","parseMessageTargetFormData","formData","parseFormDataWithSchema","getMessageTargetAction","request","getStringFormValue","getOptionalIntFormValue","messageTargetResult","status","redirect","idResult","getRequiredIntFormValue","error","getInitialMessageTarget","getMessageTargetsLoader","findMessageTargetWithHistory","targets","targetWithHistory","getMessageTargetFormLoader"],"mappings":"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"}