@plumile/backoffice-react 0.1.60 → 0.1.62

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 (105) hide show
  1. package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js +67 -68
  2. package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js.map +1 -1
  3. package/lib/esm/components/backoffice/columns/buildDataTableColumns.js +1 -1
  4. package/lib/esm/components/backoffice/columns/buildDataTableColumns.js.map +1 -1
  5. package/lib/esm/components/backoffice/detail/BackofficeDetailBadgeRow.js +1 -1
  6. package/lib/esm/components/backoffice/detail/BackofficeDetailBadgeRow.js.map +1 -1
  7. package/lib/esm/components/backoffice/detail/BackofficeDetailField.js +1 -1
  8. package/lib/esm/components/backoffice/detail/BackofficeDetailField.js.map +1 -1
  9. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.js +1 -1
  10. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.js.map +1 -1
  11. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js +21 -21
  12. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js.map +1 -1
  13. package/lib/esm/components/backoffice/detail/BackofficeDetailTaggedValue.js +1 -1
  14. package/lib/esm/components/backoffice/detail/BackofficeDetailTaggedValue.js.map +1 -1
  15. package/lib/esm/components/backoffice/filters/EntityFilterValue.js +12 -12
  16. package/lib/esm/components/backoffice/filters/EntityFilterValue.js.map +1 -1
  17. package/lib/esm/components/backoffice/layout/buildSidebarSections.js.map +1 -1
  18. package/lib/esm/components/backoffice/layout/mapViewerToSidebarProfileView.js.map +1 -1
  19. package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js +19 -19
  20. package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js.map +1 -1
  21. package/lib/esm/components/backoffice/pickers/shared/EntityPickerList.js +1 -1
  22. package/lib/esm/components/backoffice/pickers/shared/EntityPickerList.js.map +1 -1
  23. package/lib/esm/components/backoffice/routing/BackofficeContentError.js +1 -1
  24. package/lib/esm/components/backoffice/routing/BackofficeContentError.js.map +1 -1
  25. package/lib/esm/components/backoffice/routing/BackofficeContentFallback.js +1 -1
  26. package/lib/esm/components/backoffice/routing/BackofficeContentFallback.js.map +1 -1
  27. package/lib/esm/components/backoffice/routing/BackofficeRouteFallback.js +1 -1
  28. package/lib/esm/components/backoffice/routing/BackofficeRouteFallback.js.map +1 -1
  29. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js +30 -31
  30. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js.map +1 -1
  31. package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js +2 -2
  32. package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js.map +1 -1
  33. package/lib/esm/components/backoffice/tools/BackofficeToolsQueryBoundary.js +1 -1
  34. package/lib/esm/components/backoffice/tools/BackofficeToolsQueryBoundary.js.map +1 -1
  35. package/lib/esm/hooks/useBackofficeAuth.js +13 -13
  36. package/lib/esm/hooks/useBackofficeAuth.js.map +1 -1
  37. package/lib/esm/hooks/useBackofficeSessionAuth.js +8 -8
  38. package/lib/esm/hooks/useBackofficeSessionAuth.js.map +1 -1
  39. package/lib/esm/index.js +18 -2
  40. package/lib/esm/pages/BackofficeDashboardPage.js +24 -24
  41. package/lib/esm/pages/BackofficeDashboardPage.js.map +1 -1
  42. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js +8 -8
  43. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js.map +1 -1
  44. package/lib/esm/pages/BackofficeEntityDetailPage.js +86 -87
  45. package/lib/esm/pages/BackofficeEntityDetailPage.js.map +1 -1
  46. package/lib/esm/pages/BackofficeEntityDetailUnknownPageRedirect.js +3 -3
  47. package/lib/esm/pages/BackofficeLayoutPage.js +4 -4
  48. package/lib/esm/pages/BackofficeLayoutPage.js.map +1 -1
  49. package/lib/esm/pages/BackofficeLoginPage.js +4 -4
  50. package/lib/esm/pages/BackofficeLoginPage.js.map +1 -1
  51. package/lib/esm/pages/BackofficePasswordResetCompletePage.js +6 -6
  52. package/lib/esm/pages/BackofficePasswordResetCompletePage.js.map +1 -1
  53. package/lib/esm/pages/BackofficePasswordResetRequestPage.js +4 -4
  54. package/lib/esm/pages/BackofficePasswordResetRequestPage.js.map +1 -1
  55. package/lib/esm/pages/BackofficeToolsOperationPage.js +53 -53
  56. package/lib/esm/pages/BackofficeToolsOperationPage.js.map +1 -1
  57. package/lib/esm/pages/BackofficeVerifyEmailPage.js +6 -6
  58. package/lib/esm/pages/BackofficeVerifyEmailPage.js.map +1 -1
  59. package/lib/esm/pages/detail/buildTabsItems.js.map +1 -1
  60. package/lib/esm/provider/BackofficeProvider.js +0 -2
  61. package/lib/esm/provider/BackofficeProvider.js.map +1 -1
  62. package/lib/esm/relay/RelayProvider.js +4 -4
  63. package/lib/esm/relay/RelayProvider.js.map +1 -1
  64. package/lib/esm/relay/createInlineReader.js +3 -3
  65. package/lib/esm/relay/createInlineReader.js.map +1 -1
  66. package/lib/esm/relay/useRelayEnvironment.js +7 -2
  67. package/lib/esm/relay/useRelayEnvironment.js.map +1 -0
  68. package/lib/esm/router/createBackofficeRoutes.js +81 -81
  69. package/lib/esm/router/createBackofficeRoutes.js.map +1 -1
  70. package/lib/types/components/backoffice/actions/BackofficeEntityActionFormDialog.d.ts.map +1 -1
  71. package/lib/types/components/backoffice/detail/BackofficeDetailFlagTag.d.ts +1 -1
  72. package/lib/types/components/backoffice/detail/BackofficeDetailFlagTag.d.ts.map +1 -1
  73. package/lib/types/components/backoffice/detail/BackofficeDetailRelationListBlock.d.ts.map +1 -1
  74. package/lib/types/components/backoffice/filters/EntityFilterValue.d.ts.map +1 -1
  75. package/lib/types/components/backoffice/layout/buildSidebarSections.d.ts +1 -1
  76. package/lib/types/components/backoffice/layout/buildSidebarSections.d.ts.map +1 -1
  77. package/lib/types/components/backoffice/layout/mapViewerToSidebarProfileView.d.ts +1 -1
  78. package/lib/types/components/backoffice/layout/mapViewerToSidebarProfileView.d.ts.map +1 -1
  79. package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.d.ts.map +1 -1
  80. package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts.map +1 -1
  81. package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.d.ts +1 -1
  82. package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.d.ts.map +1 -1
  83. package/lib/types/hooks/useBackofficeAuth.d.ts.map +1 -1
  84. package/lib/types/hooks/useBackofficeSessionAuth.d.ts.map +1 -1
  85. package/lib/types/index.d.ts +18 -0
  86. package/lib/types/index.d.ts.map +1 -1
  87. package/lib/types/pages/BackofficeDashboardPage.d.ts.map +1 -1
  88. package/lib/types/pages/BackofficeEntityDetailLayoutPage.d.ts.map +1 -1
  89. package/lib/types/pages/BackofficeEntityDetailPage.d.ts.map +1 -1
  90. package/lib/types/pages/BackofficeLoginPage.d.ts +1 -1
  91. package/lib/types/pages/BackofficeLoginPage.d.ts.map +1 -1
  92. package/lib/types/pages/BackofficePasswordResetCompletePage.d.ts.map +1 -1
  93. package/lib/types/pages/BackofficePasswordResetRequestPage.d.ts.map +1 -1
  94. package/lib/types/pages/BackofficeToolsOperationPage.d.ts.map +1 -1
  95. package/lib/types/pages/BackofficeVerifyEmailPage.d.ts.map +1 -1
  96. package/lib/types/pages/detail/buildTabsItems.d.ts +1 -1
  97. package/lib/types/pages/detail/buildTabsItems.d.ts.map +1 -1
  98. package/lib/types/provider/BackofficeProvider.d.ts +0 -2
  99. package/lib/types/provider/BackofficeProvider.d.ts.map +1 -1
  100. package/lib/types/relay/RelayProvider.d.ts.map +1 -1
  101. package/lib/types/relay/createInlineReader.d.ts.map +1 -1
  102. package/lib/types/relay/useRelayEnvironment.d.ts +2 -1
  103. package/lib/types/relay/useRelayEnvironment.d.ts.map +1 -1
  104. package/lib/types/router/createBackofficeRoutes.d.ts.map +1 -1
  105. package/package.json +6 -6
@@ -7,26 +7,25 @@ import { resolveToastSpec as a, resolveToastViewActions as o } from "./toastView
7
7
  import { actions as ee, checkboxGroup as te, form as ne } from "./backofficeEntityActionFormDialog.css.js";
8
8
  import { Fragment as re, jsx as s, jsxs as c } from "react/jsx-runtime";
9
9
  import { useTranslation as ie } from "react-i18next";
10
- import { Button as l, SimpleSelect as ae, useToast as oe } from "@plumile/ui";
11
- import { useCallback as u, useContext as se, useEffect as ce, useMemo as d, useState as f } from "react";
12
- import { commitMutation as le, useRelayEnvironment as ue } from "react-relay";
13
- import { Input as p } from "@plumile/ui/atomic/atoms/input/Input.js";
14
- import { Label as m } from "@plumile/ui/atomic/atoms/label/Label.js";
15
- import { Modal as de } from "@plumile/ui/atomic/atoms/modal/Modal.js";
16
- import { Textarea as fe } from "@plumile/ui/atomic/atoms/textarea/Textarea.js";
17
- import { CheckboxField as h } from "@plumile/ui/atomic/molecules/checkbox_field/CheckboxField.js";
18
- import { Form as pe } from "@plumile/ui/atomic/molecules/form/Form.js";
19
- import { FormErrorBanner as me } from "@plumile/ui/atomic/molecules/form/FormErrorBanner.js";
20
- import { FormGroup as g } from "@plumile/ui/atomic/molecules/form/FormGroup.js";
21
- import { HighlightCode as he } from "@plumile/ui/atomic/molecules/highlight/HighlightCode.js";
22
- import { BackofficeFormSection as ge } from "@plumile/ui-backoffice";
23
- import { RoutingContext as _e } from "@plumile/router";
10
+ import { BackofficeFormSection as ae, Button as l, SimpleSelect as oe, useToast as se } from "@plumile/ui";
11
+ import { useCallback as u, useContext as ce, useEffect as le, useMemo as d, useState as f } from "react";
12
+ import * as p from "react-relay";
13
+ import { Input as m } from "@plumile/ui/atomic/atoms/input/Input.js";
14
+ import { Label as h } from "@plumile/ui/atomic/atoms/label/Label.js";
15
+ import { Modal as ue } from "@plumile/ui/atomic/atoms/modal/Modal.js";
16
+ import { Textarea as de } from "@plumile/ui/atomic/atoms/textarea/Textarea.js";
17
+ import { CheckboxField as g } from "@plumile/ui/atomic/molecules/checkbox_field/CheckboxField.js";
18
+ import { Form as fe } from "@plumile/ui/atomic/molecules/form/Form.js";
19
+ import { FormErrorBanner as pe } from "@plumile/ui/atomic/molecules/form/FormErrorBanner.js";
20
+ import { FormGroup as _ } from "@plumile/ui/atomic/molecules/form/FormGroup.js";
21
+ import { HighlightCode as me } from "@plumile/ui/atomic/molecules/highlight/HighlightCode.js";
22
+ import { RoutingContext as he } from "@plumile/router";
24
23
  //#region src/components/backoffice/actions/BackofficeEntityActionFormDialog.tsx
25
- var _ = (e, t) => e(t), v = (e) => typeof e == "object" && !!e && !Array.isArray(e), ve = (e) => {
26
- if (!v(e)) return null;
27
- for (let t of Object.values(e)) if (v(t) && ("status" in t || "result" in t)) return t;
24
+ var { commitMutation: ge, useRelayEnvironment: _e } = p, v = (e, t) => e(t), y = (e) => typeof e == "object" && !!e && !Array.isArray(e), ve = (e) => {
25
+ if (!y(e)) return null;
26
+ for (let t of Object.values(e)) if (y(t) && ("status" in t || "result" in t)) return t;
28
27
  return null;
29
- }, y = (e) => {
28
+ }, b = (e) => {
30
29
  let t = {};
31
30
  return e.forEach((e) => {
32
31
  if (e.kind === "boolean") {
@@ -43,20 +42,20 @@ var _ = (e, t) => e(t), v = (e) => typeof e == "object" && !!e && !Array.isArray
43
42
  }
44
43
  t[e.id] = "";
45
44
  }), t;
46
- }, b = (e, t) => e.kind === "number" ? typeof t == "number" ? String(t) : typeof t == "string" ? t : "" : e.kind === "multiEnum" ? Array.isArray(t) ? t.filter((e) => typeof e == "string" && e.trim() !== "") : [] : e.kind === "boolean" ? t === !0 : typeof t == "string" ? t : t ?? "", ye = (e, t) => {
47
- let n = y(e.fields);
45
+ }, x = (e, t) => e.kind === "number" ? typeof t == "number" ? String(t) : typeof t == "string" ? t : "" : e.kind === "multiEnum" ? Array.isArray(t) ? t.filter((e) => typeof e == "string" && e.trim() !== "") : [] : e.kind === "boolean" ? t === !0 : typeof t == "string" ? t : t ?? "", ye = (e, t) => {
46
+ let n = b(e.fields);
48
47
  if (e.getInitialValues == null) return n;
49
48
  let r = e.getInitialValues(t), i = { ...n };
50
49
  return e.fields.forEach((e) => {
51
- e.id in r && (i[e.id] = b(e, r[e.id]));
50
+ e.id in r && (i[e.id] = x(e, r[e.id]));
52
51
  }), i;
53
- }, x = ({ isOpen: y, action: b, node: x, onClose: S, onSuccess: C }) => {
54
- let { t: w } = ie(), { t: T } = t(), { entities: E } = n(), D = se(_e), O = ue(), k = oe(), [A, j] = f({}), [be, M] = f(null), [N, P] = f({}), [F, I] = f(!1), [L, R] = f(null), [z, B] = f(null), [V, H] = f(null);
55
- ce(() => {
56
- y && (j(ye(b, x)), M(null), P({}), R(null), B(null));
52
+ }, S = ({ isOpen: p, action: b, node: x, onClose: S, onSuccess: C }) => {
53
+ let { t: w } = ie(), { t: T } = t(), { entities: E } = n(), D = ce(he), O = _e(), k = se(), [A, j] = f({}), [be, M] = f(null), [N, P] = f({}), [F, I] = f(!1), [L, R] = f(null), [z, B] = f(null), [V, H] = f(null);
54
+ le(() => {
55
+ p && (j(ye(b, x)), M(null), P({}), R(null), B(null));
57
56
  }, [
58
57
  b,
59
- y,
58
+ p,
60
59
  x
61
60
  ]);
62
61
  let U = u((e, t) => {
@@ -68,10 +67,10 @@ var _ = (e, t) => e(t), v = (e) => typeof e == "object" && !!e && !Array.isArray
68
67
  let { [e]: n, ...r } = t;
69
68
  return r;
70
69
  });
71
- }, []), xe = _(b.label, w), W = u((e) => T("actions.form.errors.required", { label: e }), [T]), G = u((e) => T("actions.form.errors.invalidNumber", { label: e }), [T]), K = u((e) => T("actions.form.errors.invalidJson", { label: e }), [T]), q = u((e) => T("actions.form.errors.invalidJsonObject", { label: e }), [T]), J = u((e) => T("actions.form.errors.invalidJsonArray", { label: e }), [T]), Y = u(() => {
70
+ }, []), xe = v(b.label, w), W = u((e) => T("actions.form.errors.required", { label: e }), [T]), G = u((e) => T("actions.form.errors.invalidNumber", { label: e }), [T]), K = u((e) => T("actions.form.errors.invalidJson", { label: e }), [T]), q = u((e) => T("actions.form.errors.invalidJsonObject", { label: e }), [T]), J = u((e) => T("actions.form.errors.invalidJsonArray", { label: e }), [T]), Y = u(() => {
72
71
  let e = {};
73
72
  for (let t of b.fields) {
74
- let n = _(t.label, w), r = A[t.id];
73
+ let n = v(t.label, w), r = A[t.id];
75
74
  switch (t.kind) {
76
75
  case "text": {
77
76
  let i = "";
@@ -121,7 +120,7 @@ var _ = (e, t) => e(t), v = (e) => typeof e == "object" && !!e && !Array.isArray
121
120
  };
122
121
  }
123
122
  let o = t.jsonType ?? "object";
124
- if (o === "object" && !v(a)) return {
123
+ if (o === "object" && !y(a)) return {
125
124
  error: q(n),
126
125
  fieldId: t.id
127
126
  };
@@ -200,7 +199,7 @@ var _ = (e, t) => e(t), v = (e) => typeof e == "object" && !!e && !Array.isArray
200
199
  e instanceof Error && (t = e.message), M(t);
201
200
  return;
202
201
  }
203
- I(!0), le(O, {
202
+ I(!0), ge(O, {
204
203
  mutation: b.mutation,
205
204
  variables: n,
206
205
  updater: (e) => {
@@ -211,19 +210,19 @@ var _ = (e, t) => e(t), v = (e) => typeof e == "object" && !!e && !Array.isArray
211
210
  let n = ve(t);
212
211
  if (n != null) {
213
212
  let t = T("actions.form.errors.invalidPayload");
214
- b.toasts?.error?.message == null ? b.toasts?.error?.title != null && (t = _(b.toasts.error.title, w)) : t = _(b.toasts.error.message, w);
213
+ b.toasts?.error?.message == null ? b.toasts?.error?.title != null && (t = v(b.toasts.error.title, w)) : t = v(b.toasts.error.message, w);
215
214
  let r = e(n, {
216
215
  defaultErrorMessage: t,
217
216
  mapReason: (e) => {
218
217
  let t = b.mapErrorReason?.(e, x);
219
- return t == null ? null : typeof t == "function" ? _(t, w) : String(t);
218
+ return t == null ? null : typeof t == "function" ? v(t, w) : String(t);
220
219
  }
221
220
  });
222
221
  if (!r.ok) {
223
222
  let e = Error(r.message);
224
223
  if (M(r.message), b.onError?.(e, x), b.toasts?.error != null) {
225
- let e = _(b.toasts.error.title, w), t;
226
- b.toasts.error.message != null && (t = _(b.toasts.error.message, w)), k.error(e, t);
224
+ let e = v(b.toasts.error.title, w), t;
225
+ b.toasts.error.message != null && (t = v(b.toasts.error.message, w)), k.error(e, t);
227
226
  }
228
227
  return;
229
228
  }
@@ -264,8 +263,8 @@ var _ = (e, t) => e(t), v = (e) => typeof e == "object" && !!e && !Array.isArray
264
263
  },
265
264
  onError: (e) => {
266
265
  if (I(!1), b.onError?.(e, x), b.toasts?.error != null) {
267
- let e = _(b.toasts.error.title, w), t;
268
- b.toasts.error.message != null && (t = _(b.toasts.error.message, w)), k.error(e, t);
266
+ let e = v(b.toasts.error.title, w), t;
267
+ b.toasts.error.message != null && (t = v(b.toasts.error.message, w)), k.error(e, t);
269
268
  }
270
269
  }
271
270
  });
@@ -284,13 +283,13 @@ var _ = (e, t) => e(t), v = (e) => typeof e == "object" && !!e && !Array.isArray
284
283
  k
285
284
  ]), Se = u((e) => {
286
285
  e.preventDefault(), X();
287
- }, [X]), Z = d(() => b.result == null ? null : _(b.result.label, w), [b.result, w]), Q = d(() => b.result?.render == null || z == null ? null : b.result.render(z, x), [
286
+ }, [X]), Z = d(() => b.result == null ? null : v(b.result.label, w), [b.result, w]), Q = d(() => b.result?.render == null || z == null ? null : b.result.render(z, x), [
288
287
  b.result,
289
288
  x,
290
289
  z
291
- ]), $ = L != null && Z != null || Q != null, Ce = _(b.label, w);
292
- return y ? /* @__PURE__ */ c(re, { children: [/* @__PURE__ */ s(de, {
293
- isOpen: y,
290
+ ]), $ = L != null && Z != null || Q != null, Ce = v(b.label, w);
291
+ return p ? /* @__PURE__ */ c(re, { children: [/* @__PURE__ */ s(ue, {
292
+ isOpen: p,
294
293
  onClose: S,
295
294
  title: xe,
296
295
  footer: /* @__PURE__ */ c("div", {
@@ -310,25 +309,25 @@ var _ = (e, t) => e(t), v = (e) => typeof e == "object" && !!e && !Array.isArray
310
309
  children: Ce
311
310
  })]
312
311
  }),
313
- children: /* @__PURE__ */ c(pe, {
312
+ children: /* @__PURE__ */ c(fe, {
314
313
  onSubmit: Se,
315
314
  className: ne,
316
315
  children: [
317
- /* @__PURE__ */ s(me, { message: be }),
318
- /* @__PURE__ */ s(ge, { children: b.fields.map((e) => {
319
- let t = _(e.label, w), n = null;
320
- switch (e.description != null && (n = _(e.description, w)), e.kind) {
316
+ /* @__PURE__ */ s(pe, { message: be }),
317
+ /* @__PURE__ */ s(ae, { children: b.fields.map((e) => {
318
+ let t = v(e.label, w), n = null;
319
+ switch (e.description != null && (n = v(e.description, w)), e.kind) {
321
320
  case "text": {
322
321
  let r = A[e.id], i = "";
323
322
  typeof r == "string" && (i = r);
324
323
  let a;
325
- return e.placeholder != null && (a = _(e.placeholder, w)), /* @__PURE__ */ c(g, { children: [
326
- /* @__PURE__ */ s(m, { children: t }),
324
+ return e.placeholder != null && (a = v(e.placeholder, w)), /* @__PURE__ */ c(_, { children: [
325
+ /* @__PURE__ */ s(h, { children: t }),
327
326
  n != null && /* @__PURE__ */ s("span", {
328
327
  className: "_15f5d9v5 vncd898o vncd89v83",
329
328
  children: n
330
329
  }),
331
- /* @__PURE__ */ s(p, {
330
+ /* @__PURE__ */ s(m, {
332
331
  type: "text",
333
332
  value: i,
334
333
  placeholder: a,
@@ -347,13 +346,13 @@ var _ = (e, t) => e(t), v = (e) => typeof e == "object" && !!e && !Array.isArray
347
346
  let r = A[e.id], i = "";
348
347
  typeof r == "string" && (i = r);
349
348
  let a;
350
- return e.placeholder != null && (a = _(e.placeholder, w)), /* @__PURE__ */ c(g, { children: [
351
- /* @__PURE__ */ s(m, { children: t }),
349
+ return e.placeholder != null && (a = v(e.placeholder, w)), /* @__PURE__ */ c(_, { children: [
350
+ /* @__PURE__ */ s(h, { children: t }),
352
351
  n != null && /* @__PURE__ */ s("span", {
353
352
  className: "_15f5d9v5 vncd898o vncd89v83",
354
353
  children: n
355
354
  }),
356
- /* @__PURE__ */ s(p, {
355
+ /* @__PURE__ */ s(m, {
357
356
  type: "number",
358
357
  value: i,
359
358
  placeholder: a,
@@ -372,13 +371,13 @@ var _ = (e, t) => e(t), v = (e) => typeof e == "object" && !!e && !Array.isArray
372
371
  let r = A[e.id], i = "";
373
372
  typeof r == "string" && (i = r);
374
373
  let a;
375
- return e.placeholder != null && (a = _(e.placeholder, w)), /* @__PURE__ */ c(g, { children: [
376
- /* @__PURE__ */ s(m, { children: t }),
374
+ return e.placeholder != null && (a = v(e.placeholder, w)), /* @__PURE__ */ c(_, { children: [
375
+ /* @__PURE__ */ s(h, { children: t }),
377
376
  n != null && /* @__PURE__ */ s("span", {
378
377
  className: "_15f5d9v5 vncd898o vncd89v83",
379
378
  children: n
380
379
  }),
381
- /* @__PURE__ */ s(fe, {
380
+ /* @__PURE__ */ s(de, {
382
381
  value: i,
383
382
  placeholder: a,
384
383
  rows: 8,
@@ -399,15 +398,15 @@ var _ = (e, t) => e(t), v = (e) => typeof e == "object" && !!e && !Array.isArray
399
398
  let a = e.options.map((e) => ({
400
399
  id: e.value,
401
400
  value: e.value,
402
- label: _(e.label, w)
401
+ label: v(e.label, w)
403
402
  }));
404
- return /* @__PURE__ */ c(g, { children: [
405
- /* @__PURE__ */ s(m, { children: t }),
403
+ return /* @__PURE__ */ c(_, { children: [
404
+ /* @__PURE__ */ s(h, { children: t }),
406
405
  n != null && /* @__PURE__ */ s("span", {
407
406
  className: "_15f5d9v5 vncd898o vncd89v83",
408
407
  children: n
409
408
  }),
410
- /* @__PURE__ */ s(ae, {
409
+ /* @__PURE__ */ s(oe, {
411
410
  options: a,
412
411
  value: i,
413
412
  placeholder: t,
@@ -423,12 +422,12 @@ var _ = (e, t) => e(t), v = (e) => typeof e == "object" && !!e && !Array.isArray
423
422
  }
424
423
  case "boolean": {
425
424
  let r = A[e.id] === !0;
426
- return /* @__PURE__ */ c(g, { children: [
425
+ return /* @__PURE__ */ c(_, { children: [
427
426
  n != null && /* @__PURE__ */ s("span", {
428
427
  className: "_15f5d9v5 vncd898o vncd89v83",
429
428
  children: n
430
429
  }),
431
- /* @__PURE__ */ s(h, {
430
+ /* @__PURE__ */ s(g, {
432
431
  label: t,
433
432
  checked: r,
434
433
  onChange: (t) => {
@@ -443,8 +442,8 @@ var _ = (e, t) => e(t), v = (e) => typeof e == "object" && !!e && !Array.isArray
443
442
  }
444
443
  case "entityId": {
445
444
  let i = A[e.id], a = "";
446
- return typeof i == "string" && (a = i), /* @__PURE__ */ c(g, { children: [
447
- /* @__PURE__ */ s(m, { children: t }),
445
+ return typeof i == "string" && (a = i), /* @__PURE__ */ c(_, { children: [
446
+ /* @__PURE__ */ s(h, { children: t }),
448
447
  n != null && /* @__PURE__ */ s("span", {
449
448
  className: "_15f5d9v5 vncd898o vncd89v83",
450
449
  children: n
@@ -471,16 +470,16 @@ var _ = (e, t) => e(t), v = (e) => typeof e == "object" && !!e && !Array.isArray
471
470
  }
472
471
  case "multiEnum": {
473
472
  let r = A[e.id], i = [];
474
- return Array.isArray(r) && (i = r.filter((e) => typeof e == "string")), /* @__PURE__ */ c(g, { children: [
475
- /* @__PURE__ */ s(m, { children: t }),
473
+ return Array.isArray(r) && (i = r.filter((e) => typeof e == "string")), /* @__PURE__ */ c(_, { children: [
474
+ /* @__PURE__ */ s(h, { children: t }),
476
475
  n != null && /* @__PURE__ */ s("span", {
477
476
  className: "_15f5d9v5 vncd898o vncd89v83",
478
477
  children: n
479
478
  }),
480
479
  /* @__PURE__ */ s("div", {
481
480
  className: te,
482
- children: e.options.map((t) => /* @__PURE__ */ s(h, {
483
- label: _(t.label, w),
481
+ children: e.options.map((t) => /* @__PURE__ */ s(g, {
482
+ label: v(t.label, w),
484
483
  checked: i.includes(t.value),
485
484
  onChange: (n) => {
486
485
  let r = i;
@@ -499,7 +498,7 @@ var _ = (e, t) => e(t), v = (e) => typeof e == "object" && !!e && !Array.isArray
499
498
  }) }),
500
499
  $ && /* @__PURE__ */ c("div", {
501
500
  className: "_15f5d9v3 vncd899io vncd89ai6 vncd89ao6",
502
- children: [L != null && Z != null && /* @__PURE__ */ s(he, {
501
+ children: [L != null && Z != null && /* @__PURE__ */ s(me, {
503
502
  badgeLabel: Z,
504
503
  copyCode: L,
505
504
  fallbackCodeText: L
@@ -520,6 +519,6 @@ var _ = (e, t) => e(t), v = (e) => typeof e == "object" && !!e && !Array.isArray
520
519
  })] }) : null;
521
520
  };
522
521
  //#endregion
523
- export { x as BackofficeEntityActionFormDialog, x as default };
522
+ export { S as BackofficeEntityActionFormDialog, S as default };
524
523
 
525
524
  //# sourceMappingURL=BackofficeEntityActionFormDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeEntityActionFormDialog.js","names":[],"sources":["../../../../../src/components/backoffice/actions/BackofficeEntityActionFormDialog.tsx"],"sourcesContent":["import {\n type FormEvent,\n type JSX,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport type { TFunction } from 'i18next';\nimport { useTranslation } from 'react-i18next';\nimport { commitMutation, useRelayEnvironment } from 'react-relay';\nimport {\n type MutationPayloadBase,\n resolveMutationOutcome,\n} from '../../../relay/mutationResult.js';\nimport { Input } from '@plumile/ui/atomic/atoms/input/Input.js';\nimport { Label } from '@plumile/ui/atomic/atoms/label/Label.js';\nimport { Modal } from '@plumile/ui/atomic/atoms/modal/Modal.js';\nimport { Textarea } from '@plumile/ui/atomic/atoms/textarea/Textarea.js';\nimport { CheckboxField } from '@plumile/ui/atomic/molecules/checkbox_field/CheckboxField.js';\nimport { Form } from '@plumile/ui/atomic/molecules/form/Form.js';\nimport { FormErrorBanner } from '@plumile/ui/atomic/molecules/form/FormErrorBanner.js';\nimport { FormGroup } from '@plumile/ui/atomic/molecules/form/FormGroup.js';\nimport { HighlightCode } from '@plumile/ui/atomic/molecules/highlight/HighlightCode.js';\nimport { Button, SimpleSelect, useToast } from '@plumile/ui';\nimport type {\n BackofficeEntityActionFormFieldSpec,\n BackofficeEntityFormMutationActionSpec,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\nimport { BackofficeFormSection } from '@plumile/ui-backoffice';\n\nimport { useBackofficeReactTranslation } from '../../../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeConfig } from '../../../provider/BackofficeConfigContext.js';\nimport { EntityIdFilterField } from '../filters/EntityIdFilterField.js';\nimport { EntityIdPickerDialog } from '../pickers/EntityIdPickerDialog.js';\nimport {\n resolveToastSpec,\n resolveToastViewActions,\n} from './toastViewAction.js';\nimport { RoutingContext } from '@plumile/router';\n\nimport * as styles from './backofficeEntityActionFormDialog.css.js';\n\nexport type BackofficeEntityActionFormDialogProps<Node> = {\n isOpen: boolean;\n action: BackofficeEntityFormMutationActionSpec<Node>;\n node: Node;\n onClose: () => void;\n onSuccess?: () => void;\n};\n\nconst resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value != null && !Array.isArray(value);\n};\n\nconst extractMutationPayload = (\n response: unknown,\n): MutationPayloadBase | null => {\n if (!isPlainObject(response)) {\n return null;\n }\n\n for (const value of Object.values(response)) {\n if (isPlainObject(value) && ('status' in value || 'result' in value)) {\n return value as MutationPayloadBase;\n }\n }\n\n return null;\n};\n\nconst buildDefaultValues = (\n fields: readonly BackofficeEntityActionFormFieldSpec[],\n): Record<string, unknown> => {\n const output: Record<string, unknown> = {};\n fields.forEach((field) => {\n if (field.kind === 'boolean') {\n output[field.id] = field.defaultValue ?? false;\n return;\n }\n if (field.kind === 'multiEnum') {\n output[field.id] = field.defaultValue ?? [];\n return;\n }\n if (field.defaultValue != null) {\n output[field.id] = field.defaultValue;\n return;\n }\n output[field.id] = '';\n });\n return output;\n};\n\nconst normalizeInitialValue = (\n field: BackofficeEntityActionFormFieldSpec,\n value: unknown,\n): unknown => {\n if (field.kind === 'number') {\n if (typeof value === 'number') {\n return String(value);\n }\n if (typeof value === 'string') {\n return value;\n }\n return '';\n }\n if (field.kind === 'multiEnum') {\n if (Array.isArray(value)) {\n return value.filter((entry): entry is string => {\n return typeof entry === 'string' && entry.trim() !== '';\n });\n }\n return [];\n }\n if (field.kind === 'boolean') {\n return value === true;\n }\n if (typeof value === 'string') {\n return value;\n }\n return value ?? '';\n};\n\nconst buildInitialValues = <Node,>(\n action: BackofficeEntityFormMutationActionSpec<Node>,\n node: Node,\n): Record<string, unknown> => {\n const defaults = buildDefaultValues(action.fields);\n if (action.getInitialValues == null) {\n return defaults;\n }\n const overrides = action.getInitialValues(node);\n const next: Record<string, unknown> = { ...defaults };\n action.fields.forEach((field) => {\n if (!(field.id in overrides)) {\n return;\n }\n next[field.id] = normalizeInitialValue(field, overrides[field.id]);\n });\n return next;\n};\n\nexport const BackofficeEntityActionFormDialog = <Node,>({\n isOpen,\n action,\n node,\n onClose,\n onSuccess,\n}: BackofficeEntityActionFormDialogProps<Node>): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { entities } = useBackofficeConfig();\n const routing = useContext(RoutingContext);\n const environment = useRelayEnvironment();\n const toast = useToast();\n\n const [values, setValues] = useState<Record<string, unknown>>({});\n const [formError, setFormError] = useState<string | null>(null);\n const [fieldErrors, setFieldErrors] = useState<Record<string, string>>({});\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [resultValue, setResultValue] = useState<string | null>(null);\n const [resultResponse, setResultResponse] = useState<unknown>(null);\n const [activeEntityPicker, setActiveEntityPicker] = useState<{\n fieldId: string;\n entity: string;\n label: string;\n } | null>(null);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n setValues(buildInitialValues(action, node));\n setFormError(null);\n setFieldErrors({});\n setResultValue(null);\n setResultResponse(null);\n }, [action, isOpen, node]);\n\n const setFieldValue = useCallback((fieldId: string, value: unknown) => {\n setValues((current) => {\n return { ...current, [fieldId]: value };\n });\n setFieldErrors((current) => {\n if (current[fieldId] == null) {\n return current;\n }\n const { [fieldId]: removedValue, ...next } = current;\n return next;\n });\n }, []);\n\n const title = resolveLabel(action.label, tApp);\n\n const resolveRequiredError = useCallback(\n (fieldLabel: string): string => {\n return t('actions.form.errors.required', {\n label: fieldLabel,\n });\n },\n [t],\n );\n\n const resolveInvalidNumberError = useCallback(\n (fieldLabel: string): string => {\n return t('actions.form.errors.invalidNumber', {\n label: fieldLabel,\n });\n },\n [t],\n );\n\n const resolveInvalidJsonError = useCallback(\n (fieldLabel: string): string => {\n return t('actions.form.errors.invalidJson', {\n label: fieldLabel,\n });\n },\n [t],\n );\n\n const resolveInvalidJsonObjectError = useCallback(\n (fieldLabel: string): string => {\n return t('actions.form.errors.invalidJsonObject', {\n label: fieldLabel,\n });\n },\n [t],\n );\n\n const resolveInvalidJsonArrayError = useCallback(\n (fieldLabel: string): string => {\n return t('actions.form.errors.invalidJsonArray', {\n label: fieldLabel,\n });\n },\n [t],\n );\n\n const buildPayload = useCallback(():\n | { values: Record<string, unknown> }\n | { error: string; fieldId?: string } => {\n const output: Record<string, unknown> = {};\n\n for (const field of action.fields) {\n const fieldLabel = resolveLabel(field.label, tApp);\n const rawValue = values[field.id];\n\n switch (field.kind) {\n case 'text': {\n let value = '';\n if (typeof rawValue === 'string') {\n value = rawValue.trim();\n }\n if (value === '') {\n if (field.required) {\n return {\n error: resolveRequiredError(fieldLabel),\n fieldId: field.id,\n };\n }\n break;\n }\n output[field.id] = value;\n break;\n }\n case 'number': {\n let valueString = '';\n if (typeof rawValue === 'string') {\n valueString = rawValue.trim();\n } else if (\n typeof rawValue === 'number' &&\n Number.isFinite(rawValue)\n ) {\n valueString = String(rawValue);\n }\n if (valueString === '') {\n if (field.required) {\n return {\n error: resolveRequiredError(fieldLabel),\n fieldId: field.id,\n };\n }\n break;\n }\n const parsed = Number(valueString);\n if (!Number.isFinite(parsed)) {\n return {\n error: resolveInvalidNumberError(fieldLabel),\n fieldId: field.id,\n };\n }\n output[field.id] = parsed;\n break;\n }\n case 'json': {\n let valueString = '';\n if (typeof rawValue === 'string') {\n valueString = rawValue.trim();\n }\n if (valueString === '') {\n if (field.required) {\n return {\n error: resolveRequiredError(fieldLabel),\n fieldId: field.id,\n };\n }\n break;\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(valueString);\n } catch {\n return {\n error: resolveInvalidJsonError(fieldLabel),\n fieldId: field.id,\n };\n }\n\n const jsonType = field.jsonType ?? 'object';\n if (jsonType === 'object' && !isPlainObject(parsed)) {\n return {\n error: resolveInvalidJsonObjectError(fieldLabel),\n fieldId: field.id,\n };\n }\n if (jsonType === 'array' && !Array.isArray(parsed)) {\n return {\n error: resolveInvalidJsonArrayError(fieldLabel),\n fieldId: field.id,\n };\n }\n\n output[field.id] = parsed;\n break;\n }\n case 'enum': {\n let value = '';\n if (typeof rawValue === 'string') {\n value = rawValue.trim();\n }\n if (value === '') {\n if (field.required) {\n return {\n error: resolveRequiredError(fieldLabel),\n fieldId: field.id,\n };\n }\n break;\n }\n output[field.id] = value;\n break;\n }\n case 'boolean': {\n output[field.id] = rawValue === true;\n break;\n }\n case 'entityId': {\n let value = '';\n if (typeof rawValue === 'string') {\n value = rawValue.trim();\n }\n if (value === '') {\n if (field.required) {\n return {\n error: resolveRequiredError(fieldLabel),\n fieldId: field.id,\n };\n }\n break;\n }\n output[field.id] = value;\n break;\n }\n case 'multiEnum': {\n let list: string[] = [];\n if (Array.isArray(rawValue)) {\n list = rawValue.filter((entry): entry is string => {\n return typeof entry === 'string' && entry.trim() !== '';\n });\n }\n if (list.length === 0) {\n if (field.required) {\n return {\n error: resolveRequiredError(fieldLabel),\n fieldId: field.id,\n };\n }\n break;\n }\n output[field.id] = list;\n break;\n }\n default: {\n break;\n }\n }\n }\n\n return { values: output };\n }, [\n action.fields,\n resolveInvalidJsonArrayError,\n resolveInvalidJsonError,\n resolveInvalidJsonObjectError,\n resolveInvalidNumberError,\n resolveRequiredError,\n tApp,\n values,\n ]);\n\n const handleSubmit = useCallback(() => {\n if (isSubmitting) {\n return;\n }\n\n setFormError(null);\n setFieldErrors({});\n\n const payload = buildPayload();\n if ('error' in payload) {\n setFormError(payload.error);\n if (payload.fieldId != null) {\n setFieldErrors({ [payload.fieldId]: payload.error });\n }\n return;\n }\n\n let variables: ReturnType<typeof action.getVariables>;\n try {\n variables = action.getVariables(node, payload.values);\n } catch (error) {\n let message = t('actions.form.errors.invalidPayload');\n if (error instanceof Error) {\n message = error.message;\n }\n setFormError(message);\n return;\n }\n\n setIsSubmitting(true);\n commitMutation(environment, {\n mutation: action.mutation,\n variables,\n updater: (store) => {\n action.updater?.(store, node);\n },\n onCompleted: (response) => {\n setIsSubmitting(false);\n const mutationPayload = extractMutationPayload(response);\n if (mutationPayload != null) {\n let defaultErrorMessage = t('actions.form.errors.invalidPayload');\n if (action.toasts?.error?.message != null) {\n defaultErrorMessage = resolveLabel(\n action.toasts.error.message,\n tApp,\n );\n } else if (action.toasts?.error?.title != null) {\n defaultErrorMessage = resolveLabel(action.toasts.error.title, tApp);\n }\n\n const outcome = resolveMutationOutcome(mutationPayload, {\n defaultErrorMessage,\n mapReason: (reason) => {\n const mapped = action.mapErrorReason?.(reason, node);\n if (mapped == null) {\n return null;\n }\n if (typeof mapped === 'function') {\n return resolveLabel(mapped, tApp);\n }\n return String(mapped);\n },\n });\n if (!outcome.ok) {\n const error = new Error(outcome.message);\n setFormError(outcome.message);\n action.onError?.(error, node);\n if (action.toasts?.error != null) {\n const toastTitle = resolveLabel(action.toasts.error.title, tApp);\n let toastMessage: string | undefined;\n if (action.toasts.error.message != null) {\n toastMessage = resolveLabel(action.toasts.error.message, tApp);\n }\n toast.error(toastTitle, toastMessage);\n }\n return;\n }\n }\n\n action.onCompleted?.(response, node);\n\n let hasCustomResult = false;\n if (action.result?.render != null) {\n const renderedResult = action.result.render(response, node);\n if (renderedResult != null) {\n hasCustomResult = true;\n setResultResponse(response);\n }\n }\n if (action.toasts?.success != null) {\n const toastSpec = resolveToastSpec(action.toasts.success, tApp);\n const toastActions = resolveToastViewActions({\n toast: action.toasts.success,\n response,\n node,\n tApp,\n entities,\n defaultLabel: t('actions.view'),\n navigateTo: (to) => {\n routing?.history.push({ pathname: to });\n },\n });\n toast.push({\n kind: 'info',\n title: toastSpec.title,\n message: toastSpec.message,\n actions: toastActions,\n });\n }\n\n if (action.result != null) {\n const nextValue = action.result.getValue(response, node);\n if (typeof nextValue === 'string' && nextValue.trim() !== '') {\n setResultValue(nextValue);\n onSuccess?.();\n return;\n }\n }\n\n if (hasCustomResult) {\n onSuccess?.();\n return;\n }\n\n onSuccess?.();\n onClose();\n },\n onError: (error) => {\n setIsSubmitting(false);\n action.onError?.(error, node);\n if (action.toasts?.error != null) {\n const toastTitle = resolveLabel(action.toasts.error.title, tApp);\n let toastMessage: string | undefined;\n if (action.toasts.error.message != null) {\n toastMessage = resolveLabel(action.toasts.error.message, tApp);\n }\n toast.error(toastTitle, toastMessage);\n }\n },\n });\n }, [\n action,\n buildPayload,\n entities,\n environment,\n isSubmitting,\n node,\n onClose,\n onSuccess,\n routing?.history,\n t,\n tApp,\n toast,\n ]);\n\n const handleFormSubmit = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n handleSubmit();\n },\n [handleSubmit],\n );\n\n const resultLabel = useMemo(() => {\n if (action.result == null) {\n return null;\n }\n return resolveLabel(action.result.label, tApp);\n }, [action.result, tApp]);\n\n const resultRender = useMemo(() => {\n if (action.result?.render == null || resultResponse == null) {\n return null;\n }\n return action.result.render(resultResponse as never, node);\n }, [action.result, node, resultResponse]);\n\n const showResult =\n (resultValue != null && resultLabel != null) || resultRender != null;\n\n const submitLabel = resolveLabel(action.label, tApp);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <>\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n footer={\n <div className={styles.actions}>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"small\"\n onClick={onClose}\n >\n {t('actions.form.cancel')}\n </Button>\n {!showResult && (\n <Button\n type=\"submit\"\n variant=\"primary\"\n size=\"small\"\n disabled={isSubmitting}\n onClick={handleSubmit}\n >\n {submitLabel}\n </Button>\n )}\n </div>\n }\n >\n <Form onSubmit={handleFormSubmit} className={styles.form}>\n <FormErrorBanner message={formError} />\n <BackofficeFormSection>\n {action.fields.map((field) => {\n const fieldLabel = resolveLabel(field.label, tApp);\n let fieldDescription: string | null = null;\n if (field.description != null) {\n fieldDescription = resolveLabel(field.description, tApp);\n }\n\n switch (field.kind) {\n case 'text': {\n const rawValue = values[field.id];\n let value = '';\n if (typeof rawValue === 'string') {\n value = rawValue;\n }\n let placeholder: string | undefined;\n if (field.placeholder != null) {\n placeholder = resolveLabel(field.placeholder, tApp);\n }\n return (\n <FormGroup key={field.id}>\n <Label>{fieldLabel}</Label>\n {fieldDescription != null && (\n <span className={styles.fieldDescription}>\n {fieldDescription}\n </span>\n )}\n <Input\n type=\"text\"\n value={value}\n placeholder={placeholder}\n onChange={(event) => {\n setFieldValue(field.id, event.target.value);\n }}\n fullWidth\n />\n {fieldErrors[field.id] != null && (\n <span className={styles.fieldError}>\n {fieldErrors[field.id]}\n </span>\n )}\n </FormGroup>\n );\n }\n case 'number': {\n const rawValue = values[field.id];\n let value = '';\n if (typeof rawValue === 'string') {\n value = rawValue;\n }\n let placeholder: string | undefined;\n if (field.placeholder != null) {\n placeholder = resolveLabel(field.placeholder, tApp);\n }\n return (\n <FormGroup key={field.id}>\n <Label>{fieldLabel}</Label>\n {fieldDescription != null && (\n <span className={styles.fieldDescription}>\n {fieldDescription}\n </span>\n )}\n <Input\n type=\"number\"\n value={value}\n placeholder={placeholder}\n onChange={(event) => {\n setFieldValue(field.id, event.target.value);\n }}\n fullWidth\n />\n {fieldErrors[field.id] != null && (\n <span className={styles.fieldError}>\n {fieldErrors[field.id]}\n </span>\n )}\n </FormGroup>\n );\n }\n case 'json': {\n const rawValue = values[field.id];\n let value = '';\n if (typeof rawValue === 'string') {\n value = rawValue;\n }\n let placeholder: string | undefined;\n if (field.placeholder != null) {\n placeholder = resolveLabel(field.placeholder, tApp);\n }\n return (\n <FormGroup key={field.id}>\n <Label>{fieldLabel}</Label>\n {fieldDescription != null && (\n <span className={styles.fieldDescription}>\n {fieldDescription}\n </span>\n )}\n <Textarea\n value={value}\n placeholder={placeholder}\n rows={8}\n onChange={(event) => {\n setFieldValue(field.id, event.target.value);\n }}\n fullWidth\n />\n {fieldErrors[field.id] != null && (\n <span className={styles.fieldError}>\n {fieldErrors[field.id]}\n </span>\n )}\n </FormGroup>\n );\n }\n case 'enum': {\n const rawValue = values[field.id];\n let selected = '';\n if (typeof rawValue === 'string') {\n selected = rawValue;\n }\n const options = field.options.map((option) => {\n return {\n id: option.value,\n value: option.value,\n label: resolveLabel(option.label, tApp),\n };\n });\n return (\n <FormGroup key={field.id}>\n <Label>{fieldLabel}</Label>\n {fieldDescription != null && (\n <span className={styles.fieldDescription}>\n {fieldDescription}\n </span>\n )}\n <SimpleSelect\n options={options}\n value={selected}\n placeholder={fieldLabel}\n onChange={(nextValue) => {\n setFieldValue(field.id, nextValue);\n }}\n />\n {fieldErrors[field.id] != null && (\n <span className={styles.fieldError}>\n {fieldErrors[field.id]}\n </span>\n )}\n </FormGroup>\n );\n }\n case 'boolean': {\n const checked = values[field.id] === true;\n return (\n <FormGroup key={field.id}>\n {fieldDescription != null && (\n <span className={styles.fieldDescription}>\n {fieldDescription}\n </span>\n )}\n <CheckboxField\n label={fieldLabel}\n checked={checked}\n onChange={(event) => {\n setFieldValue(field.id, event.target.checked);\n }}\n />\n {fieldErrors[field.id] != null && (\n <span className={styles.fieldError}>\n {fieldErrors[field.id]}\n </span>\n )}\n </FormGroup>\n );\n }\n case 'entityId': {\n const rawValue = values[field.id];\n let value = '';\n if (typeof rawValue === 'string') {\n value = rawValue;\n }\n return (\n <FormGroup key={field.id}>\n <Label>{fieldLabel}</Label>\n {fieldDescription != null && (\n <span className={styles.fieldDescription}>\n {fieldDescription}\n </span>\n )}\n <EntityIdFilterField\n label={fieldLabel}\n value={value}\n onPick={() => {\n setActiveEntityPicker({\n fieldId: field.id,\n entity: field.entity,\n label: fieldLabel,\n });\n }}\n onClear={() => {\n setFieldValue(field.id, '');\n }}\n />\n {fieldErrors[field.id] != null && (\n <span className={styles.fieldError}>\n {fieldErrors[field.id]}\n </span>\n )}\n </FormGroup>\n );\n }\n case 'multiEnum': {\n const rawValue = values[field.id];\n let selected: string[] = [];\n if (Array.isArray(rawValue)) {\n selected = rawValue.filter((entry): entry is string => {\n return typeof entry === 'string';\n });\n }\n return (\n <FormGroup key={field.id}>\n <Label>{fieldLabel}</Label>\n {fieldDescription != null && (\n <span className={styles.fieldDescription}>\n {fieldDescription}\n </span>\n )}\n <div className={styles.checkboxGroup}>\n {field.options.map((option) => {\n const optionLabel = resolveLabel(option.label, tApp);\n const isChecked = selected.includes(option.value);\n return (\n <CheckboxField\n key={option.value}\n label={optionLabel}\n checked={isChecked}\n onChange={(event) => {\n let nextList = selected;\n if (event.target.checked) {\n if (!selected.includes(option.value)) {\n nextList = [...selected, option.value];\n }\n } else {\n nextList = selected.filter((value) => {\n return value !== option.value;\n });\n }\n setFieldValue(field.id, nextList);\n }}\n />\n );\n })}\n </div>\n {fieldErrors[field.id] != null && (\n <span className={styles.fieldError}>\n {fieldErrors[field.id]}\n </span>\n )}\n </FormGroup>\n );\n }\n default: {\n return null;\n }\n }\n })}\n </BackofficeFormSection>\n\n {showResult && (\n <div className={styles.resultSection}>\n {resultValue != null && resultLabel != null && (\n <HighlightCode\n badgeLabel={resultLabel}\n copyCode={resultValue}\n fallbackCodeText={resultValue}\n />\n )}\n {resultRender}\n </div>\n )}\n </Form>\n </Modal>\n <EntityIdPickerDialog\n isOpen={activeEntityPicker != null}\n entity={activeEntityPicker?.entity ?? ''}\n title={activeEntityPicker?.label ?? ''}\n onClose={() => {\n setActiveEntityPicker(null);\n }}\n onSelectId={(id) => {\n if (activeEntityPicker == null) {\n return;\n }\n setFieldValue(activeEntityPicker.fieldId, id);\n setActiveEntityPicker(null);\n }}\n />\n </>\n );\n};\n\nexport default BackofficeEntityActionFormDialog;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BackofficeEntityActionFormDialog.js","names":[],"sources":["../../../../../src/components/backoffice/actions/BackofficeEntityActionFormDialog.tsx"],"sourcesContent":["import {\n type FormEvent,\n type JSX,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport type { TFunction } from 'i18next';\nimport { useTranslation } from 'react-i18next';\nimport * as ReactRelay from 'react-relay';\nimport {\n type MutationPayloadBase,\n resolveMutationOutcome,\n} from '../../../relay/mutationResult.js';\nimport { Input } from '@plumile/ui/atomic/atoms/input/Input.js';\nimport { Label } from '@plumile/ui/atomic/atoms/label/Label.js';\nimport { Modal } from '@plumile/ui/atomic/atoms/modal/Modal.js';\nimport { Textarea } from '@plumile/ui/atomic/atoms/textarea/Textarea.js';\nimport { CheckboxField } from '@plumile/ui/atomic/molecules/checkbox_field/CheckboxField.js';\nimport { Form } from '@plumile/ui/atomic/molecules/form/Form.js';\nimport { FormErrorBanner } from '@plumile/ui/atomic/molecules/form/FormErrorBanner.js';\nimport { FormGroup } from '@plumile/ui/atomic/molecules/form/FormGroup.js';\nimport { HighlightCode } from '@plumile/ui/atomic/molecules/highlight/HighlightCode.js';\nimport {\n BackofficeFormSection,\n Button,\n SimpleSelect,\n useToast,\n} from '@plumile/ui';\nimport type {\n BackofficeEntityActionFormFieldSpec,\n BackofficeEntityFormMutationActionSpec,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\n\nimport { useBackofficeReactTranslation } from '../../../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeConfig } from '../../../provider/BackofficeConfigContext.js';\nimport { EntityIdFilterField } from '../filters/EntityIdFilterField.js';\nimport { EntityIdPickerDialog } from '../pickers/EntityIdPickerDialog.js';\nimport {\n resolveToastSpec,\n resolveToastViewActions,\n} from './toastViewAction.js';\n\nconst { commitMutation, useRelayEnvironment } = ReactRelay;\nimport { RoutingContext } from '@plumile/router';\n\nimport * as styles from './backofficeEntityActionFormDialog.css.js';\n\nexport type BackofficeEntityActionFormDialogProps<Node> = {\n isOpen: boolean;\n action: BackofficeEntityFormMutationActionSpec<Node>;\n node: Node;\n onClose: () => void;\n onSuccess?: () => void;\n};\n\nconst resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value != null && !Array.isArray(value);\n};\n\nconst extractMutationPayload = (\n response: unknown,\n): MutationPayloadBase | null => {\n if (!isPlainObject(response)) {\n return null;\n }\n\n for (const value of Object.values(response)) {\n if (isPlainObject(value) && ('status' in value || 'result' in value)) {\n return value as MutationPayloadBase;\n }\n }\n\n return null;\n};\n\nconst buildDefaultValues = (\n fields: readonly BackofficeEntityActionFormFieldSpec[],\n): Record<string, unknown> => {\n const output: Record<string, unknown> = {};\n fields.forEach((field) => {\n if (field.kind === 'boolean') {\n output[field.id] = field.defaultValue ?? false;\n return;\n }\n if (field.kind === 'multiEnum') {\n output[field.id] = field.defaultValue ?? [];\n return;\n }\n if (field.defaultValue != null) {\n output[field.id] = field.defaultValue;\n return;\n }\n output[field.id] = '';\n });\n return output;\n};\n\nconst normalizeInitialValue = (\n field: BackofficeEntityActionFormFieldSpec,\n value: unknown,\n): unknown => {\n if (field.kind === 'number') {\n if (typeof value === 'number') {\n return String(value);\n }\n if (typeof value === 'string') {\n return value;\n }\n return '';\n }\n if (field.kind === 'multiEnum') {\n if (Array.isArray(value)) {\n return value.filter((entry): entry is string => {\n return typeof entry === 'string' && entry.trim() !== '';\n });\n }\n return [];\n }\n if (field.kind === 'boolean') {\n return value === true;\n }\n if (typeof value === 'string') {\n return value;\n }\n return value ?? '';\n};\n\nconst buildInitialValues = <Node,>(\n action: BackofficeEntityFormMutationActionSpec<Node>,\n node: Node,\n): Record<string, unknown> => {\n const defaults = buildDefaultValues(action.fields);\n if (action.getInitialValues == null) {\n return defaults;\n }\n const overrides = action.getInitialValues(node);\n const next: Record<string, unknown> = { ...defaults };\n action.fields.forEach((field) => {\n if (!(field.id in overrides)) {\n return;\n }\n next[field.id] = normalizeInitialValue(field, overrides[field.id]);\n });\n return next;\n};\n\nexport const BackofficeEntityActionFormDialog = <Node,>({\n isOpen,\n action,\n node,\n onClose,\n onSuccess,\n}: BackofficeEntityActionFormDialogProps<Node>): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { entities } = useBackofficeConfig();\n const routing = useContext(RoutingContext);\n const environment = useRelayEnvironment();\n const toast = useToast();\n\n const [values, setValues] = useState<Record<string, unknown>>({});\n const [formError, setFormError] = useState<string | null>(null);\n const [fieldErrors, setFieldErrors] = useState<Record<string, string>>({});\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [resultValue, setResultValue] = useState<string | null>(null);\n const [resultResponse, setResultResponse] = useState<unknown>(null);\n const [activeEntityPicker, setActiveEntityPicker] = useState<{\n fieldId: string;\n entity: string;\n label: string;\n } | null>(null);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n setValues(buildInitialValues(action, node));\n setFormError(null);\n setFieldErrors({});\n setResultValue(null);\n setResultResponse(null);\n }, [action, isOpen, node]);\n\n const setFieldValue = useCallback((fieldId: string, value: unknown) => {\n setValues((current) => {\n return { ...current, [fieldId]: value };\n });\n setFieldErrors((current) => {\n if (current[fieldId] == null) {\n return current;\n }\n const { [fieldId]: removedValue, ...next } = current;\n return next;\n });\n }, []);\n\n const title = resolveLabel(action.label, tApp);\n\n const resolveRequiredError = useCallback(\n (fieldLabel: string): string => {\n return t('actions.form.errors.required', {\n label: fieldLabel,\n });\n },\n [t],\n );\n\n const resolveInvalidNumberError = useCallback(\n (fieldLabel: string): string => {\n return t('actions.form.errors.invalidNumber', {\n label: fieldLabel,\n });\n },\n [t],\n );\n\n const resolveInvalidJsonError = useCallback(\n (fieldLabel: string): string => {\n return t('actions.form.errors.invalidJson', {\n label: fieldLabel,\n });\n },\n [t],\n );\n\n const resolveInvalidJsonObjectError = useCallback(\n (fieldLabel: string): string => {\n return t('actions.form.errors.invalidJsonObject', {\n label: fieldLabel,\n });\n },\n [t],\n );\n\n const resolveInvalidJsonArrayError = useCallback(\n (fieldLabel: string): string => {\n return t('actions.form.errors.invalidJsonArray', {\n label: fieldLabel,\n });\n },\n [t],\n );\n\n const buildPayload = useCallback(():\n | { values: Record<string, unknown> }\n | { error: string; fieldId?: string } => {\n const output: Record<string, unknown> = {};\n\n for (const field of action.fields) {\n const fieldLabel = resolveLabel(field.label, tApp);\n const rawValue = values[field.id];\n\n switch (field.kind) {\n case 'text': {\n let value = '';\n if (typeof rawValue === 'string') {\n value = rawValue.trim();\n }\n if (value === '') {\n if (field.required) {\n return {\n error: resolveRequiredError(fieldLabel),\n fieldId: field.id,\n };\n }\n break;\n }\n output[field.id] = value;\n break;\n }\n case 'number': {\n let valueString = '';\n if (typeof rawValue === 'string') {\n valueString = rawValue.trim();\n } else if (\n typeof rawValue === 'number' &&\n Number.isFinite(rawValue)\n ) {\n valueString = String(rawValue);\n }\n if (valueString === '') {\n if (field.required) {\n return {\n error: resolveRequiredError(fieldLabel),\n fieldId: field.id,\n };\n }\n break;\n }\n const parsed = Number(valueString);\n if (!Number.isFinite(parsed)) {\n return {\n error: resolveInvalidNumberError(fieldLabel),\n fieldId: field.id,\n };\n }\n output[field.id] = parsed;\n break;\n }\n case 'json': {\n let valueString = '';\n if (typeof rawValue === 'string') {\n valueString = rawValue.trim();\n }\n if (valueString === '') {\n if (field.required) {\n return {\n error: resolveRequiredError(fieldLabel),\n fieldId: field.id,\n };\n }\n break;\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(valueString);\n } catch {\n return {\n error: resolveInvalidJsonError(fieldLabel),\n fieldId: field.id,\n };\n }\n\n const jsonType = field.jsonType ?? 'object';\n if (jsonType === 'object' && !isPlainObject(parsed)) {\n return {\n error: resolveInvalidJsonObjectError(fieldLabel),\n fieldId: field.id,\n };\n }\n if (jsonType === 'array' && !Array.isArray(parsed)) {\n return {\n error: resolveInvalidJsonArrayError(fieldLabel),\n fieldId: field.id,\n };\n }\n\n output[field.id] = parsed;\n break;\n }\n case 'enum': {\n let value = '';\n if (typeof rawValue === 'string') {\n value = rawValue.trim();\n }\n if (value === '') {\n if (field.required) {\n return {\n error: resolveRequiredError(fieldLabel),\n fieldId: field.id,\n };\n }\n break;\n }\n output[field.id] = value;\n break;\n }\n case 'boolean': {\n output[field.id] = rawValue === true;\n break;\n }\n case 'entityId': {\n let value = '';\n if (typeof rawValue === 'string') {\n value = rawValue.trim();\n }\n if (value === '') {\n if (field.required) {\n return {\n error: resolveRequiredError(fieldLabel),\n fieldId: field.id,\n };\n }\n break;\n }\n output[field.id] = value;\n break;\n }\n case 'multiEnum': {\n let list: string[] = [];\n if (Array.isArray(rawValue)) {\n list = rawValue.filter((entry): entry is string => {\n return typeof entry === 'string' && entry.trim() !== '';\n });\n }\n if (list.length === 0) {\n if (field.required) {\n return {\n error: resolveRequiredError(fieldLabel),\n fieldId: field.id,\n };\n }\n break;\n }\n output[field.id] = list;\n break;\n }\n default: {\n break;\n }\n }\n }\n\n return { values: output };\n }, [\n action.fields,\n resolveInvalidJsonArrayError,\n resolveInvalidJsonError,\n resolveInvalidJsonObjectError,\n resolveInvalidNumberError,\n resolveRequiredError,\n tApp,\n values,\n ]);\n\n const handleSubmit = useCallback(() => {\n if (isSubmitting) {\n return;\n }\n\n setFormError(null);\n setFieldErrors({});\n\n const payload = buildPayload();\n if ('error' in payload) {\n setFormError(payload.error);\n if (payload.fieldId != null) {\n setFieldErrors({ [payload.fieldId]: payload.error });\n }\n return;\n }\n\n let variables: ReturnType<typeof action.getVariables>;\n try {\n variables = action.getVariables(node, payload.values);\n } catch (error) {\n let message = t('actions.form.errors.invalidPayload');\n if (error instanceof Error) {\n message = error.message;\n }\n setFormError(message);\n return;\n }\n\n setIsSubmitting(true);\n commitMutation(environment, {\n mutation: action.mutation,\n variables,\n updater: (store) => {\n action.updater?.(store, node);\n },\n onCompleted: (response) => {\n setIsSubmitting(false);\n const mutationPayload = extractMutationPayload(response);\n if (mutationPayload != null) {\n let defaultErrorMessage = t('actions.form.errors.invalidPayload');\n if (action.toasts?.error?.message != null) {\n defaultErrorMessage = resolveLabel(\n action.toasts.error.message,\n tApp,\n );\n } else if (action.toasts?.error?.title != null) {\n defaultErrorMessage = resolveLabel(action.toasts.error.title, tApp);\n }\n\n const outcome = resolveMutationOutcome(mutationPayload, {\n defaultErrorMessage,\n mapReason: (reason) => {\n const mapped = action.mapErrorReason?.(reason, node);\n if (mapped == null) {\n return null;\n }\n if (typeof mapped === 'function') {\n return resolveLabel(mapped, tApp);\n }\n return String(mapped);\n },\n });\n if (!outcome.ok) {\n const error = new Error(outcome.message);\n setFormError(outcome.message);\n action.onError?.(error, node);\n if (action.toasts?.error != null) {\n const toastTitle = resolveLabel(action.toasts.error.title, tApp);\n let toastMessage: string | undefined;\n if (action.toasts.error.message != null) {\n toastMessage = resolveLabel(action.toasts.error.message, tApp);\n }\n toast.error(toastTitle, toastMessage);\n }\n return;\n }\n }\n\n action.onCompleted?.(response, node);\n\n let hasCustomResult = false;\n if (action.result?.render != null) {\n const renderedResult = action.result.render(response, node);\n if (renderedResult != null) {\n hasCustomResult = true;\n setResultResponse(response);\n }\n }\n if (action.toasts?.success != null) {\n const toastSpec = resolveToastSpec(action.toasts.success, tApp);\n const toastActions = resolveToastViewActions({\n toast: action.toasts.success,\n response,\n node,\n tApp,\n entities,\n defaultLabel: t('actions.view'),\n navigateTo: (to) => {\n routing?.history.push({ pathname: to });\n },\n });\n toast.push({\n kind: 'info',\n title: toastSpec.title,\n message: toastSpec.message,\n actions: toastActions,\n });\n }\n\n if (action.result != null) {\n const nextValue = action.result.getValue(response, node);\n if (typeof nextValue === 'string' && nextValue.trim() !== '') {\n setResultValue(nextValue);\n onSuccess?.();\n return;\n }\n }\n\n if (hasCustomResult) {\n onSuccess?.();\n return;\n }\n\n onSuccess?.();\n onClose();\n },\n onError: (error) => {\n setIsSubmitting(false);\n action.onError?.(error, node);\n if (action.toasts?.error != null) {\n const toastTitle = resolveLabel(action.toasts.error.title, tApp);\n let toastMessage: string | undefined;\n if (action.toasts.error.message != null) {\n toastMessage = resolveLabel(action.toasts.error.message, tApp);\n }\n toast.error(toastTitle, toastMessage);\n }\n },\n });\n }, [\n action,\n buildPayload,\n entities,\n environment,\n isSubmitting,\n node,\n onClose,\n onSuccess,\n routing?.history,\n t,\n tApp,\n toast,\n ]);\n\n const handleFormSubmit = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n handleSubmit();\n },\n [handleSubmit],\n );\n\n const resultLabel = useMemo(() => {\n if (action.result == null) {\n return null;\n }\n return resolveLabel(action.result.label, tApp);\n }, [action.result, tApp]);\n\n const resultRender = useMemo(() => {\n if (action.result?.render == null || resultResponse == null) {\n return null;\n }\n return action.result.render(resultResponse as never, node);\n }, [action.result, node, resultResponse]);\n\n const showResult =\n (resultValue != null && resultLabel != null) || resultRender != null;\n\n const submitLabel = resolveLabel(action.label, tApp);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <>\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n footer={\n <div className={styles.actions}>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"small\"\n onClick={onClose}\n >\n {t('actions.form.cancel')}\n </Button>\n {!showResult && (\n <Button\n type=\"submit\"\n variant=\"primary\"\n size=\"small\"\n disabled={isSubmitting}\n onClick={handleSubmit}\n >\n {submitLabel}\n </Button>\n )}\n </div>\n }\n >\n <Form onSubmit={handleFormSubmit} className={styles.form}>\n <FormErrorBanner message={formError} />\n <BackofficeFormSection>\n {action.fields.map((field) => {\n const fieldLabel = resolveLabel(field.label, tApp);\n let fieldDescription: string | null = null;\n if (field.description != null) {\n fieldDescription = resolveLabel(field.description, tApp);\n }\n\n switch (field.kind) {\n case 'text': {\n const rawValue = values[field.id];\n let value = '';\n if (typeof rawValue === 'string') {\n value = rawValue;\n }\n let placeholder: string | undefined;\n if (field.placeholder != null) {\n placeholder = resolveLabel(field.placeholder, tApp);\n }\n return (\n <FormGroup key={field.id}>\n <Label>{fieldLabel}</Label>\n {fieldDescription != null && (\n <span className={styles.fieldDescription}>\n {fieldDescription}\n </span>\n )}\n <Input\n type=\"text\"\n value={value}\n placeholder={placeholder}\n onChange={(event) => {\n setFieldValue(field.id, event.target.value);\n }}\n fullWidth\n />\n {fieldErrors[field.id] != null && (\n <span className={styles.fieldError}>\n {fieldErrors[field.id]}\n </span>\n )}\n </FormGroup>\n );\n }\n case 'number': {\n const rawValue = values[field.id];\n let value = '';\n if (typeof rawValue === 'string') {\n value = rawValue;\n }\n let placeholder: string | undefined;\n if (field.placeholder != null) {\n placeholder = resolveLabel(field.placeholder, tApp);\n }\n return (\n <FormGroup key={field.id}>\n <Label>{fieldLabel}</Label>\n {fieldDescription != null && (\n <span className={styles.fieldDescription}>\n {fieldDescription}\n </span>\n )}\n <Input\n type=\"number\"\n value={value}\n placeholder={placeholder}\n onChange={(event) => {\n setFieldValue(field.id, event.target.value);\n }}\n fullWidth\n />\n {fieldErrors[field.id] != null && (\n <span className={styles.fieldError}>\n {fieldErrors[field.id]}\n </span>\n )}\n </FormGroup>\n );\n }\n case 'json': {\n const rawValue = values[field.id];\n let value = '';\n if (typeof rawValue === 'string') {\n value = rawValue;\n }\n let placeholder: string | undefined;\n if (field.placeholder != null) {\n placeholder = resolveLabel(field.placeholder, tApp);\n }\n return (\n <FormGroup key={field.id}>\n <Label>{fieldLabel}</Label>\n {fieldDescription != null && (\n <span className={styles.fieldDescription}>\n {fieldDescription}\n </span>\n )}\n <Textarea\n value={value}\n placeholder={placeholder}\n rows={8}\n onChange={(event) => {\n setFieldValue(field.id, event.target.value);\n }}\n fullWidth\n />\n {fieldErrors[field.id] != null && (\n <span className={styles.fieldError}>\n {fieldErrors[field.id]}\n </span>\n )}\n </FormGroup>\n );\n }\n case 'enum': {\n const rawValue = values[field.id];\n let selected = '';\n if (typeof rawValue === 'string') {\n selected = rawValue;\n }\n const options = field.options.map((option) => {\n return {\n id: option.value,\n value: option.value,\n label: resolveLabel(option.label, tApp),\n };\n });\n return (\n <FormGroup key={field.id}>\n <Label>{fieldLabel}</Label>\n {fieldDescription != null && (\n <span className={styles.fieldDescription}>\n {fieldDescription}\n </span>\n )}\n <SimpleSelect\n options={options}\n value={selected}\n placeholder={fieldLabel}\n onChange={(nextValue) => {\n setFieldValue(field.id, nextValue);\n }}\n />\n {fieldErrors[field.id] != null && (\n <span className={styles.fieldError}>\n {fieldErrors[field.id]}\n </span>\n )}\n </FormGroup>\n );\n }\n case 'boolean': {\n const checked = values[field.id] === true;\n return (\n <FormGroup key={field.id}>\n {fieldDescription != null && (\n <span className={styles.fieldDescription}>\n {fieldDescription}\n </span>\n )}\n <CheckboxField\n label={fieldLabel}\n checked={checked}\n onChange={(event) => {\n setFieldValue(field.id, event.target.checked);\n }}\n />\n {fieldErrors[field.id] != null && (\n <span className={styles.fieldError}>\n {fieldErrors[field.id]}\n </span>\n )}\n </FormGroup>\n );\n }\n case 'entityId': {\n const rawValue = values[field.id];\n let value = '';\n if (typeof rawValue === 'string') {\n value = rawValue;\n }\n return (\n <FormGroup key={field.id}>\n <Label>{fieldLabel}</Label>\n {fieldDescription != null && (\n <span className={styles.fieldDescription}>\n {fieldDescription}\n </span>\n )}\n <EntityIdFilterField\n label={fieldLabel}\n value={value}\n onPick={() => {\n setActiveEntityPicker({\n fieldId: field.id,\n entity: field.entity,\n label: fieldLabel,\n });\n }}\n onClear={() => {\n setFieldValue(field.id, '');\n }}\n />\n {fieldErrors[field.id] != null && (\n <span className={styles.fieldError}>\n {fieldErrors[field.id]}\n </span>\n )}\n </FormGroup>\n );\n }\n case 'multiEnum': {\n const rawValue = values[field.id];\n let selected: string[] = [];\n if (Array.isArray(rawValue)) {\n selected = rawValue.filter((entry): entry is string => {\n return typeof entry === 'string';\n });\n }\n return (\n <FormGroup key={field.id}>\n <Label>{fieldLabel}</Label>\n {fieldDescription != null && (\n <span className={styles.fieldDescription}>\n {fieldDescription}\n </span>\n )}\n <div className={styles.checkboxGroup}>\n {field.options.map((option) => {\n const optionLabel = resolveLabel(option.label, tApp);\n const isChecked = selected.includes(option.value);\n return (\n <CheckboxField\n key={option.value}\n label={optionLabel}\n checked={isChecked}\n onChange={(event) => {\n let nextList = selected;\n if (event.target.checked) {\n if (!selected.includes(option.value)) {\n nextList = [...selected, option.value];\n }\n } else {\n nextList = selected.filter((value) => {\n return value !== option.value;\n });\n }\n setFieldValue(field.id, nextList);\n }}\n />\n );\n })}\n </div>\n {fieldErrors[field.id] != null && (\n <span className={styles.fieldError}>\n {fieldErrors[field.id]}\n </span>\n )}\n </FormGroup>\n );\n }\n default: {\n return null;\n }\n }\n })}\n </BackofficeFormSection>\n\n {showResult && (\n <div className={styles.resultSection}>\n {resultValue != null && resultLabel != null && (\n <HighlightCode\n badgeLabel={resultLabel}\n copyCode={resultValue}\n fallbackCodeText={resultValue}\n />\n )}\n {resultRender}\n </div>\n )}\n </Form>\n </Modal>\n <EntityIdPickerDialog\n isOpen={activeEntityPicker != null}\n entity={activeEntityPicker?.entity ?? ''}\n title={activeEntityPicker?.label ?? ''}\n onClose={() => {\n setActiveEntityPicker(null);\n }}\n onSelectId={(id) => {\n if (activeEntityPicker == null) {\n return;\n }\n setFieldValue(activeEntityPicker.fieldId, id);\n setActiveEntityPicker(null);\n }}\n />\n </>\n );\n};\n\nexport default BackofficeEntityActionFormDialog;\n"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { Fragment as e, jsx as t } from "react/jsx-runtime";
2
2
  import { FormattedDate as n } from "@plumile/ui";
3
3
  import { Link as r } from "@plumile/router";
4
4
  import { BACKOFFICE_DATE_TIME_OPTIONS as i } from "@plumile/backoffice-core/constants.js";
5
- import { Tag as a } from "@plumile/ui-backoffice/backoffice/atoms/tag/Tag.js";
5
+ import { Tag as a } from "@plumile/ui/backoffice/atoms/tag/Tag.js";
6
6
  //#region src/components/backoffice/columns/buildDataTableColumns.tsx
7
7
  var o = (e, t) => e(t), s = (e, t) => e == null || typeof e == "string" && e.trim() === "" ? t : String(e);
8
8
  function c(c, l) {
@@ -1 +1 @@
1
- {"version":3,"file":"buildDataTableColumns.js","names":[],"sources":["../../../../../src/components/backoffice/columns/buildDataTableColumns.tsx"],"sourcesContent":["import { BACKOFFICE_DATE_TIME_OPTIONS } from '@plumile/backoffice-core/constants.js';\nimport type {\n BackofficeColumnSpec,\n BackofficeFieldSize,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\nimport type { TFunction } from 'i18next';\nimport { Link } from '@plumile/router';\nimport { Tag } from '@plumile/ui-backoffice/backoffice/atoms/tag/Tag.js';\nimport { FormattedDate, type DataTableColumn } from '@plumile/ui';\n\nconst resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\nconst resolveTextValue = (\n value: string | number | null,\n fallback: string,\n): string => {\n if (value == null) {\n return fallback;\n }\n if (typeof value === 'string' && value.trim() === '') {\n return fallback;\n }\n return String(value);\n};\n\nexport type BuildDataTableColumnsOptions = {\n tApp: TFunction;\n t: TFunction;\n resolveEntityHref?: (entityId: string, refId: string) => string | null;\n};\n\nexport type BackofficeSizedDataTableColumn<Row> = DataTableColumn<Row> & {\n size: BackofficeFieldSize;\n};\n\n/**\n *\n */\nexport function buildDataTableColumns<Row>(\n columns: readonly BackofficeColumnSpec<Row>[],\n options: BuildDataTableColumnsOptions,\n): readonly BackofficeSizedDataTableColumn<Row>[] {\n const { tApp, t, resolveEntityHref } = options;\n const fallback = t('common.notAvailable');\n const filteredColumns = columns.filter((column) => {\n return column.key !== 'id';\n });\n\n return filteredColumns.map((column) => {\n return {\n id: column.key,\n header: resolveLabel(column.header, tApp),\n size: column.size,\n cell: (row) => {\n const { cell } = column;\n switch (cell.type) {\n case 'text': {\n return resolveTextValue(cell.value(row), fallback);\n }\n case 'link': {\n const value = cell.value(row);\n if (\n value == null ||\n (typeof value === 'string' && value.trim() === '')\n ) {\n return fallback;\n }\n return <Link to={cell.to(row)}>{value}</Link>;\n }\n case 'badge': {\n const value = cell.value(row);\n if (value == null || value.trim() === '') {\n return fallback;\n }\n let { tone } = cell;\n if (typeof tone === 'function') {\n tone = tone(row);\n }\n return <Tag tone={tone}>{value}</Tag>;\n }\n case 'dateTime': {\n const value = cell.value(row);\n return (\n <FormattedDate\n value={value}\n fallback={fallback}\n options={BACKOFFICE_DATE_TIME_OPTIONS}\n />\n );\n }\n case 'entityRef': {\n const id = cell.value(row);\n if (id.trim() === '') {\n return fallback;\n }\n const href = resolveEntityHref?.(cell.entity, id) ?? null;\n if (href != null) {\n return <Link to={href}>{t('actions.view')}</Link>;\n }\n return fallback;\n }\n case 'custom': {\n const rendered = cell.render(row);\n if (rendered == null || rendered === '') {\n return fallback;\n }\n return <>{rendered}</>;\n }\n default: {\n return fallback;\n }\n }\n },\n };\n });\n}\n"],"mappings":";;;;;;AAWA,IAAM,KAAgB,GAAkB,MAC/B,EAAM,EAAK,EAGd,KACJ,GACA,MAEI,KAAS,QAGT,OAAO,KAAU,YAAY,EAAM,MAAM,KAAK,KACzC,IAEF,OAAO,EAAM;AAgBtB,SAAgB,EACd,GACA,GACgD;CAChD,IAAM,EAAE,SAAM,MAAG,yBAAsB,GACjC,IAAW,EAAE,sBAAsB;AAKzC,QAJwB,EAAQ,QAAQ,MAC/B,EAAO,QAAQ,KACtB,CAEqB,KAAK,OACnB;EACL,IAAI,EAAO;EACX,QAAQ,EAAa,EAAO,QAAQ,EAAK;EACzC,MAAM,EAAO;EACb,OAAO,MAAQ;GACb,IAAM,EAAE,YAAS;AACjB,WAAQ,EAAK,MAAb;IACE,KAAK,OACH,QAAO,EAAiB,EAAK,MAAM,EAAI,EAAE,EAAS;IAEpD,KAAK,QAAQ;KACX,IAAM,IAAQ,EAAK,MAAM,EAAI;AAO7B,YALE,KAAS,QACR,OAAO,KAAU,YAAY,EAAM,MAAM,KAAK,KAExC,IAEF,kBAAC,GAAD;MAAM,IAAI,EAAK,GAAG,EAAI;gBAAG;MAAa,CAAA;;IAE/C,KAAK,SAAS;KACZ,IAAM,IAAQ,EAAK,MAAM,EAAI;AAC7B,SAAI,KAAS,QAAQ,EAAM,MAAM,KAAK,GACpC,QAAO;KAET,IAAI,EAAE,YAAS;AAIf,YAHI,OAAO,KAAS,eAClB,IAAO,EAAK,EAAI,GAEX,kBAAC,GAAD;MAAW;gBAAO;MAAY,CAAA;;IAEvC,KAAK,WAEH,QACE,kBAAC,GAAD;KACS,OAHG,EAAK,MAAM,EAAI;KAIf;KACV,SAAS;KACT,CAAA;IAGN,KAAK,aAAa;KAChB,IAAM,IAAK,EAAK,MAAM,EAAI;AAC1B,SAAI,EAAG,MAAM,KAAK,GAChB,QAAO;KAET,IAAM,IAAO,IAAoB,EAAK,QAAQ,EAAG,IAAI;AAIrD,YAHI,KAAQ,OAGL,IAFE,kBAAC,GAAD;MAAM,IAAI;gBAAO,EAAE,eAAe;MAAQ,CAAA;;IAIrD,KAAK,UAAU;KACb,IAAM,IAAW,EAAK,OAAO,EAAI;AAIjC,YAHI,KAAY,QAAQ,MAAa,KAC5B,IAEF,kBAAA,GAAA,EAAA,UAAG,GAAY,CAAA;;IAExB,QACE,QAAO;;;EAId,EACD"}
1
+ {"version":3,"file":"buildDataTableColumns.js","names":[],"sources":["../../../../../src/components/backoffice/columns/buildDataTableColumns.tsx"],"sourcesContent":["import { BACKOFFICE_DATE_TIME_OPTIONS } from '@plumile/backoffice-core/constants.js';\nimport type {\n BackofficeColumnSpec,\n BackofficeFieldSize,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\nimport type { TFunction } from 'i18next';\nimport { Link } from '@plumile/router';\nimport { Tag } from '@plumile/ui/backoffice/atoms/tag/Tag.js';\nimport { FormattedDate, type DataTableColumn } from '@plumile/ui';\n\nconst resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\nconst resolveTextValue = (\n value: string | number | null,\n fallback: string,\n): string => {\n if (value == null) {\n return fallback;\n }\n if (typeof value === 'string' && value.trim() === '') {\n return fallback;\n }\n return String(value);\n};\n\nexport type BuildDataTableColumnsOptions = {\n tApp: TFunction;\n t: TFunction;\n resolveEntityHref?: (entityId: string, refId: string) => string | null;\n};\n\nexport type BackofficeSizedDataTableColumn<Row> = DataTableColumn<Row> & {\n size: BackofficeFieldSize;\n};\n\n/**\n *\n */\nexport function buildDataTableColumns<Row>(\n columns: readonly BackofficeColumnSpec<Row>[],\n options: BuildDataTableColumnsOptions,\n): readonly BackofficeSizedDataTableColumn<Row>[] {\n const { tApp, t, resolveEntityHref } = options;\n const fallback = t('common.notAvailable');\n const filteredColumns = columns.filter((column) => {\n return column.key !== 'id';\n });\n\n return filteredColumns.map((column) => {\n return {\n id: column.key,\n header: resolveLabel(column.header, tApp),\n size: column.size,\n cell: (row) => {\n const { cell } = column;\n switch (cell.type) {\n case 'text': {\n return resolveTextValue(cell.value(row), fallback);\n }\n case 'link': {\n const value = cell.value(row);\n if (\n value == null ||\n (typeof value === 'string' && value.trim() === '')\n ) {\n return fallback;\n }\n return <Link to={cell.to(row)}>{value}</Link>;\n }\n case 'badge': {\n const value = cell.value(row);\n if (value == null || value.trim() === '') {\n return fallback;\n }\n let { tone } = cell;\n if (typeof tone === 'function') {\n tone = tone(row);\n }\n return <Tag tone={tone}>{value}</Tag>;\n }\n case 'dateTime': {\n const value = cell.value(row);\n return (\n <FormattedDate\n value={value}\n fallback={fallback}\n options={BACKOFFICE_DATE_TIME_OPTIONS}\n />\n );\n }\n case 'entityRef': {\n const id = cell.value(row);\n if (id.trim() === '') {\n return fallback;\n }\n const href = resolveEntityHref?.(cell.entity, id) ?? null;\n if (href != null) {\n return <Link to={href}>{t('actions.view')}</Link>;\n }\n return fallback;\n }\n case 'custom': {\n const rendered = cell.render(row);\n if (rendered == null || rendered === '') {\n return fallback;\n }\n return <>{rendered}</>;\n }\n default: {\n return fallback;\n }\n }\n },\n };\n });\n}\n"],"mappings":";;;;;;AAWA,IAAM,KAAgB,GAAkB,MAC/B,EAAM,EAAK,EAGd,KACJ,GACA,MAEI,KAAS,QAGT,OAAO,KAAU,YAAY,EAAM,MAAM,KAAK,KACzC,IAEF,OAAO,EAAM;AAgBtB,SAAgB,EACd,GACA,GACgD;CAChD,IAAM,EAAE,SAAM,MAAG,yBAAsB,GACjC,IAAW,EAAE,sBAAsB;AAKzC,QAJwB,EAAQ,QAAQ,MAC/B,EAAO,QAAQ,KACtB,CAEqB,KAAK,OACnB;EACL,IAAI,EAAO;EACX,QAAQ,EAAa,EAAO,QAAQ,EAAK;EACzC,MAAM,EAAO;EACb,OAAO,MAAQ;GACb,IAAM,EAAE,YAAS;AACjB,WAAQ,EAAK,MAAb;IACE,KAAK,OACH,QAAO,EAAiB,EAAK,MAAM,EAAI,EAAE,EAAS;IAEpD,KAAK,QAAQ;KACX,IAAM,IAAQ,EAAK,MAAM,EAAI;AAO7B,YALE,KAAS,QACR,OAAO,KAAU,YAAY,EAAM,MAAM,KAAK,KAExC,IAEF,kBAAC,GAAD;MAAM,IAAI,EAAK,GAAG,EAAI;gBAAG;MAAa,CAAA;;IAE/C,KAAK,SAAS;KACZ,IAAM,IAAQ,EAAK,MAAM,EAAI;AAC7B,SAAI,KAAS,QAAQ,EAAM,MAAM,KAAK,GACpC,QAAO;KAET,IAAI,EAAE,YAAS;AAIf,YAHI,OAAO,KAAS,eAClB,IAAO,EAAK,EAAI,GAEX,kBAAC,GAAD;MAAW;gBAAO;MAAY,CAAA;;IAEvC,KAAK,WAEH,QACE,kBAAC,GAAD;KACS,OAHG,EAAK,MAAM,EAAI;KAIf;KACV,SAAS;KACT,CAAA;IAGN,KAAK,aAAa;KAChB,IAAM,IAAK,EAAK,MAAM,EAAI;AAC1B,SAAI,EAAG,MAAM,KAAK,GAChB,QAAO;KAET,IAAM,IAAO,IAAoB,EAAK,QAAQ,EAAG,IAAI;AAIrD,YAHI,KAAQ,OAGL,IAFE,kBAAC,GAAD;MAAM,IAAI;gBAAO,EAAE,eAAe;MAAQ,CAAA;;IAIrD,KAAK,UAAU;KACb,IAAM,IAAW,EAAK,OAAO,EAAI;AAIjC,YAHI,KAAY,QAAQ,MAAa,KAC5B,IAEF,kBAAA,GAAA,EAAA,UAAG,GAAY,CAAA;;IAExB,QACE,QAAO;;;EAId,EACD"}
@@ -1,7 +1,7 @@
1
1
  import { row as e } from "./backofficeDetailBadgeRow.css.js";
2
2
  import { jsx as t } from "react/jsx-runtime";
3
3
  import { useTranslation as n } from "react-i18next";
4
- import { Tag as r } from "@plumile/ui-backoffice/backoffice/atoms/tag/Tag.js";
4
+ import { Tag as r } from "@plumile/ui/backoffice/atoms/tag/Tag.js";
5
5
  //#region src/components/backoffice/detail/BackofficeDetailBadgeRow.tsx
6
6
  var i = ({ items: i }) => {
7
7
  let { t: a } = n();
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeDetailBadgeRow.js","names":[],"sources":["../../../../../src/components/backoffice/detail/BackofficeDetailBadgeRow.tsx"],"sourcesContent":["/* eslint-disable no-ternary */\nimport { type JSX } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { BackofficeBadgeItem } from '@plumile/backoffice-core/types.js';\nimport { Tag } from '@plumile/ui-backoffice/backoffice/atoms/tag/Tag.js';\n\nimport * as styles from './backofficeDetailBadgeRow.css.js';\n\nexport type BackofficeDetailBadgeRowProps = {\n items: readonly BackofficeBadgeItem[];\n};\n\nexport const BackofficeDetailBadgeRow = ({\n items,\n}: BackofficeDetailBadgeRowProps): JSX.Element => {\n const { t } = useTranslation();\n return (\n <div className={styles.row}>\n {items.map((item) => {\n const label =\n typeof item.label === 'function' ? item.label(t) : item.label;\n return (\n <Tag key={item.id} tone={item.tone ?? 'neutral'}>\n {label}\n </Tag>\n );\n })}\n </div>\n );\n};\n\nexport default BackofficeDetailBadgeRow;\n"],"mappings":";;;;;AAaA,IAAa,KAA4B,EACvC,eACgD;CAChD,IAAM,EAAE,SAAM,GAAgB;AAC9B,QACE,kBAAC,OAAD;EAAK,WAAW;YACb,EAAM,KAAK,MAAS;GACnB,IAAM,IACJ,OAAO,EAAK,SAAU,aAAa,EAAK,MAAM,EAAE,GAAG,EAAK;AAC1D,UACE,kBAAC,GAAD;IAAmB,MAAM,EAAK,QAAQ;cACnC;IACG,EAFI,EAAK,GAET;IAER;EACE,CAAA"}
1
+ {"version":3,"file":"BackofficeDetailBadgeRow.js","names":[],"sources":["../../../../../src/components/backoffice/detail/BackofficeDetailBadgeRow.tsx"],"sourcesContent":["/* eslint-disable no-ternary */\nimport { type JSX } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { BackofficeBadgeItem } from '@plumile/backoffice-core/types.js';\nimport { Tag } from '@plumile/ui/backoffice/atoms/tag/Tag.js';\n\nimport * as styles from './backofficeDetailBadgeRow.css.js';\n\nexport type BackofficeDetailBadgeRowProps = {\n items: readonly BackofficeBadgeItem[];\n};\n\nexport const BackofficeDetailBadgeRow = ({\n items,\n}: BackofficeDetailBadgeRowProps): JSX.Element => {\n const { t } = useTranslation();\n return (\n <div className={styles.row}>\n {items.map((item) => {\n const label =\n typeof item.label === 'function' ? item.label(t) : item.label;\n return (\n <Tag key={item.id} tone={item.tone ?? 'neutral'}>\n {label}\n </Tag>\n );\n })}\n </div>\n );\n};\n\nexport default BackofficeDetailBadgeRow;\n"],"mappings":";;;;;AAaA,IAAa,KAA4B,EACvC,eACgD;CAChD,IAAM,EAAE,SAAM,GAAgB;AAC9B,QACE,kBAAC,OAAD;EAAK,WAAW;YACb,EAAM,KAAK,MAAS;GACnB,IAAM,IACJ,OAAO,EAAK,SAAU,aAAa,EAAK,MAAM,EAAE,GAAG,EAAK;AAC1D,UACE,kBAAC,GAAD;IAAmB,MAAM,EAAK,QAAQ;cACnC;IACG,EAFI,EAAK,GAET;IAER;EACE,CAAA"}
@@ -2,7 +2,7 @@ import { useBackofficeReactTranslation as e } from "../../../i18n/useBackofficeR
2
2
  import { field as t, fullWidth as n, label as r, size as i, value as a } from "./backofficeDetailField.css.js";
3
3
  import { jsx as o, jsxs as s } from "react/jsx-runtime";
4
4
  import { cx as c } from "@plumile/ui/theme/tools.js";
5
- import { CopyableText as l } from "@plumile/ui-backoffice/backoffice/atoms/copyable_text/CopyableText.js";
5
+ import { CopyableText as l } from "@plumile/ui/backoffice/atoms/copyable_text/CopyableText.js";
6
6
  //#region src/components/backoffice/detail/BackofficeDetailField.tsx
7
7
  var u = ({ label: u, size: d, value: f, copyValue: p, fullWidth: m = !1 }) => {
8
8
  let { t: h } = e(), g = f;
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeDetailField.js","names":[],"sources":["../../../../../src/components/backoffice/detail/BackofficeDetailField.tsx"],"sourcesContent":["import { type JSX, type ReactNode } from 'react';\nimport type { BackofficeFieldSize } from '@plumile/backoffice-core/types.js';\n\nimport { CopyableText } from '@plumile/ui-backoffice/backoffice/atoms/copyable_text/CopyableText.js';\nimport { cx } from '@plumile/ui/theme/tools.js';\n\nimport { useBackofficeReactTranslation } from '../../../i18n/useBackofficeReactTranslation.js';\n\nimport * as styles from './backofficeDetailField.css.js';\n\nexport type BackofficeDetailFieldProps = {\n id: string;\n label: string;\n size: BackofficeFieldSize;\n value: ReactNode | null | undefined;\n copyValue?: string;\n fullWidth?: boolean;\n};\n\nexport const BackofficeDetailField = ({\n label,\n size,\n value,\n copyValue,\n fullWidth = false,\n}: BackofficeDetailFieldProps): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n let resolvedValue: ReactNode = value;\n if (\n resolvedValue == null ||\n (typeof resolvedValue === 'string' && resolvedValue.trim() === '')\n ) {\n resolvedValue = t('common.notAvailable');\n }\n\n if (copyValue != null && copyValue !== '') {\n resolvedValue = (\n <CopyableText\n value={copyValue}\n copyValue={copyValue}\n truncate={false}\n copyLabel={t('common.actions.copy')}\n copiedLabel={t('common.actions.copied')}\n />\n );\n }\n\n const fieldClassNames = [styles.field, styles.size[size]];\n if (fullWidth) {\n fieldClassNames.push(styles.fullWidth);\n }\n\n return (\n <div className={cx(...fieldClassNames)}>\n <span className={styles.label}>{label}</span>\n <div className={styles.value}>{resolvedValue}</div>\n </div>\n );\n};\n\nexport default BackofficeDetailField;\n"],"mappings":";;;;;;AAmBA,IAAa,KAAyB,EACpC,OAAA,GACA,MAAA,GACA,OAAA,GACA,cACA,WAAA,IAAY,SACiC;CAC7C,IAAM,EAAE,SAAM,GAA+B,EACzC,IAA2B;AAQ/B,EANE,KAAiB,QAChB,OAAO,KAAkB,YAAY,EAAc,MAAM,KAAK,QAE/D,IAAgB,EAAE,sBAAsB,GAGtC,KAAa,QAAQ,MAAc,OACrC,IACE,kBAAC,GAAD;EACE,OAAO;EACI;EACX,UAAU;EACV,WAAW,EAAE,sBAAsB;EACnC,aAAa,EAAE,wBAAwB;EACvC,CAAA;CAIN,IAAM,IAAkB,CAAC,GAAc,EAAY,GAAM;AAKzD,QAJI,KACF,EAAgB,KAAK,EAAiB,EAItC,kBAAC,OAAD;EAAK,WAAW,EAAG,GAAG,EAAgB;YAAtC,CACE,kBAAC,QAAD;GAAM,WAAW;aAAe;GAAa,CAAA,EAC7C,kBAAC,OAAD;GAAK,WAAW;aAAe;GAAoB,CAAA,CAC/C"}
1
+ {"version":3,"file":"BackofficeDetailField.js","names":[],"sources":["../../../../../src/components/backoffice/detail/BackofficeDetailField.tsx"],"sourcesContent":["import { type JSX, type ReactNode } from 'react';\nimport type { BackofficeFieldSize } from '@plumile/backoffice-core/types.js';\n\nimport { CopyableText } from '@plumile/ui/backoffice/atoms/copyable_text/CopyableText.js';\nimport { cx } from '@plumile/ui/theme/tools.js';\n\nimport { useBackofficeReactTranslation } from '../../../i18n/useBackofficeReactTranslation.js';\n\nimport * as styles from './backofficeDetailField.css.js';\n\nexport type BackofficeDetailFieldProps = {\n id: string;\n label: string;\n size: BackofficeFieldSize;\n value: ReactNode | null | undefined;\n copyValue?: string;\n fullWidth?: boolean;\n};\n\nexport const BackofficeDetailField = ({\n label,\n size,\n value,\n copyValue,\n fullWidth = false,\n}: BackofficeDetailFieldProps): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n let resolvedValue: ReactNode = value;\n if (\n resolvedValue == null ||\n (typeof resolvedValue === 'string' && resolvedValue.trim() === '')\n ) {\n resolvedValue = t('common.notAvailable');\n }\n\n if (copyValue != null && copyValue !== '') {\n resolvedValue = (\n <CopyableText\n value={copyValue}\n copyValue={copyValue}\n truncate={false}\n copyLabel={t('common.actions.copy')}\n copiedLabel={t('common.actions.copied')}\n />\n );\n }\n\n const fieldClassNames = [styles.field, styles.size[size]];\n if (fullWidth) {\n fieldClassNames.push(styles.fullWidth);\n }\n\n return (\n <div className={cx(...fieldClassNames)}>\n <span className={styles.label}>{label}</span>\n <div className={styles.value}>{resolvedValue}</div>\n </div>\n );\n};\n\nexport default BackofficeDetailField;\n"],"mappings":";;;;;;AAmBA,IAAa,KAAyB,EACpC,OAAA,GACA,MAAA,GACA,OAAA,GACA,cACA,WAAA,IAAY,SACiC;CAC7C,IAAM,EAAE,SAAM,GAA+B,EACzC,IAA2B;AAQ/B,EANE,KAAiB,QAChB,OAAO,KAAkB,YAAY,EAAc,MAAM,KAAK,QAE/D,IAAgB,EAAE,sBAAsB,GAGtC,KAAa,QAAQ,MAAc,OACrC,IACE,kBAAC,GAAD;EACE,OAAO;EACI;EACX,UAAU;EACV,WAAW,EAAE,sBAAsB;EACnC,aAAa,EAAE,wBAAwB;EACvC,CAAA;CAIN,IAAM,IAAkB,CAAC,GAAc,EAAY,GAAM;AAKzD,QAJI,KACF,EAAgB,KAAK,EAAiB,EAItC,kBAAC,OAAD;EAAK,WAAW,EAAG,GAAG,EAAgB;YAAtC,CACE,kBAAC,QAAD;GAAM,WAAW;aAAe;GAAa,CAAA,EAC7C,kBAAC,OAAD;GAAK,WAAW;aAAe;GAAoB,CAAA,CAC/C"}
@@ -1,6 +1,6 @@
1
1
  import { content as e, icon as t, label as n } from "./BackofficeDetailFlagTag.css.js";
2
2
  import { jsx as r, jsxs as i } from "react/jsx-runtime";
3
- import { Tag as a } from "@plumile/ui-backoffice/backoffice/atoms/tag/Tag.js";
3
+ import { Tag as a } from "@plumile/ui/backoffice/atoms/tag/Tag.js";
4
4
  //#region src/components/backoffice/detail/BackofficeDetailFlagTag.tsx
5
5
  var o = ({ tone: o, icon: s, label: c }) => {
6
6
  let l = s != null, u = null;