@plumile/backoffice-react 0.1.154 → 0.1.157

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 (72) hide show
  1. package/lib/esm/auth/login/synchronizeAuthStatusQuery.js.map +1 -1
  2. package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js.map +1 -1
  3. package/lib/esm/components/backoffice/columns/buildDataTableColumns.js +1 -0
  4. package/lib/esm/components/backoffice/columns/buildDataTableColumns.js.map +1 -1
  5. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js +1 -1
  6. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js.map +1 -1
  7. package/lib/esm/components/backoffice/detail/BackofficeRelationsSummaryGrid.js +1 -0
  8. package/lib/esm/components/backoffice/detail/BackofficeRelationsSummaryGrid.js.map +1 -1
  9. package/lib/esm/components/backoffice/detail/backofficeDetailRelationLink.css.js +0 -1
  10. package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js +1 -0
  11. package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js.map +1 -1
  12. package/lib/esm/components/backoffice/hub/BackofficeHubTemplate.js +1 -0
  13. package/lib/esm/components/backoffice/hub/BackofficeHubTemplate.js.map +1 -1
  14. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js +1 -0
  15. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js.map +1 -1
  16. package/lib/esm/components/backoffice/links/BackofficeInlineLink.js +15 -14
  17. package/lib/esm/components/backoffice/links/BackofficeInlineLink.js.map +1 -1
  18. package/lib/esm/components/backoffice/links/BackofficeLink.js +9 -8
  19. package/lib/esm/components/backoffice/links/BackofficeLink.js.map +1 -1
  20. package/lib/esm/components/backoffice/list/RowFlagsCell.css.js +1 -0
  21. package/lib/esm/components/backoffice/refs/BackofficeLazyEntityCount.js +31 -0
  22. package/lib/esm/components/backoffice/refs/BackofficeLazyEntityCount.js.map +1 -0
  23. package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js +36 -32
  24. package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js.map +1 -1
  25. package/lib/esm/i18n/locales/en/backofficeReact.js +0 -1
  26. package/lib/esm/i18n/locales/en/backofficeReact.js.map +1 -1
  27. package/lib/esm/i18n/locales/fr/backofficeReact.js +0 -1
  28. package/lib/esm/i18n/locales/fr/backofficeReact.js.map +1 -1
  29. package/lib/esm/index.js +33 -32
  30. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js +110 -10
  31. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js.map +1 -1
  32. package/lib/esm/pages/BackofficeEntityDetailPage.js +220 -283
  33. package/lib/esm/pages/BackofficeEntityDetailPage.js.map +1 -1
  34. package/lib/esm/pages/BackofficeEntityDetailPage.view-helpers.js +0 -1
  35. package/lib/esm/pages/BackofficeEntityDetailPage.view-helpers.js.map +1 -1
  36. package/lib/esm/pages/BackofficeEntityListPage.helpers.js +2 -2
  37. package/lib/esm/pages/BackofficeEntityListPage.helpers.js.map +1 -1
  38. package/lib/esm/pages/BackofficeEntityListPage.js +78 -267
  39. package/lib/esm/pages/BackofficeEntityListPage.js.map +1 -1
  40. package/lib/esm/pages/detail/BackofficeEntityDetailLayoutContext.js.map +1 -1
  41. package/lib/esm/pages/detail/buildTabsItems.js +1 -0
  42. package/lib/esm/pages/detail/buildTabsItems.js.map +1 -1
  43. package/lib/types/components/backoffice/columns/buildDataTableColumns.d.ts.map +1 -1
  44. package/lib/types/components/backoffice/detail/BackofficeDetailRelationListBlock.d.ts.map +1 -1
  45. package/lib/types/components/backoffice/detail/BackofficeRelationsSummaryGrid.d.ts +1 -1
  46. package/lib/types/components/backoffice/detail/BackofficeRelationsSummaryGrid.d.ts.map +1 -1
  47. package/lib/types/components/backoffice/filters/BackofficeFilterAction.d.ts.map +1 -1
  48. package/lib/types/components/backoffice/hub/BackofficeHubTemplate.d.ts.map +1 -1
  49. package/lib/types/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.d.ts.map +1 -1
  50. package/lib/types/components/backoffice/links/BackofficeInlineLink.d.ts +2 -1
  51. package/lib/types/components/backoffice/links/BackofficeInlineLink.d.ts.map +1 -1
  52. package/lib/types/components/backoffice/links/BackofficeLink.d.ts +2 -1
  53. package/lib/types/components/backoffice/links/BackofficeLink.d.ts.map +1 -1
  54. package/lib/types/components/backoffice/refs/BackofficeLazyEntityCount.d.ts +8 -0
  55. package/lib/types/components/backoffice/refs/BackofficeLazyEntityCount.d.ts.map +1 -0
  56. package/lib/types/components/backoffice/refs/BackofficeRelatedCountLink.d.ts +1 -1
  57. package/lib/types/components/backoffice/refs/BackofficeRelatedCountLink.d.ts.map +1 -1
  58. package/lib/types/i18n/resources.d.ts +0 -2
  59. package/lib/types/i18n/resources.d.ts.map +1 -1
  60. package/lib/types/index.d.ts +1 -0
  61. package/lib/types/index.d.ts.map +1 -1
  62. package/lib/types/pages/BackofficeEntityDetailLayoutPage.d.ts.map +1 -1
  63. package/lib/types/pages/BackofficeEntityDetailPage.d.ts.map +1 -1
  64. package/lib/types/pages/BackofficeEntityDetailPage.view-helpers.d.ts +2 -3
  65. package/lib/types/pages/BackofficeEntityDetailPage.view-helpers.d.ts.map +1 -1
  66. package/lib/types/pages/BackofficeEntityListPage.d.ts.map +1 -1
  67. package/lib/types/pages/BackofficeEntityListPage.helpers.d.ts +1 -6
  68. package/lib/types/pages/BackofficeEntityListPage.helpers.d.ts.map +1 -1
  69. package/lib/types/pages/detail/BackofficeEntityDetailLayoutContext.d.ts +7 -0
  70. package/lib/types/pages/detail/BackofficeEntityDetailLayoutContext.d.ts.map +1 -1
  71. package/lib/types/pages/detail/buildTabsItems.d.ts.map +1 -1
  72. package/package.json +11 -11
@@ -9,23 +9,20 @@ import { buildEntityListBreadcrumb as s } from "../components/backoffice/layout/
9
9
  import { rowFlagsColumnCell as c } from "../components/backoffice/list/RowFlagsCell.css.js";
10
10
  import { RowFlagsCell as l } from "../components/backoffice/list/RowFlagsCell.js";
11
11
  import { useBackofficeListUrlState as u } from "../hooks/useBackofficeListUrlState.js";
12
- import { buildActionsColumn as d, computeActionsColumnWidthPx as f, computeRowFlagsColumnWidthPx as p, isConnectionListConfig as m, isFormMutationAction as h, isRecordListConfig as g, isRouteAction as ee, resolveActionVariant as te, resolveLabel as _, resolveTrackBySize as v } from "./BackofficeEntityListPage.helpers.js";
13
- import { actionTrigger as ne, actionsColumnCell as re, headerActions as ie } from "./backofficeEntityListPage.css.js";
14
- import { useCallback as y, useEffect as b, useMemo as x, useRef as S, useState as C } from "react";
15
- import { InlineBanner as ae } from "@plumile/ui/components/feedback/InlineBanner.js";
16
- import { Fragment as w, jsx as T, jsxs as oe } from "react/jsx-runtime";
17
- import { useTranslation as E } from "react-i18next";
18
- import { Button as D } from "@plumile/ui/atomic/atoms/button/Button.js";
19
- import { fetchQuery as O } from "relay-runtime";
20
- import { useFragment as se, usePaginationFragment as k, usePreloadedQuery as ce, useRelayEnvironment as A } from "react-relay";
21
- import { BACKOFFICE_LIST_DEFAULTS as le, BACKOFFICE_LIST_REFETCH_POLICY as j } from "@plumile/backoffice-core/constants.js";
22
- import ue from "@plumile/router/routing/Link.js";
23
- import { stableListVariablesKey as M } from "@plumile/backoffice-core/state/stableKey.js";
24
- import { LinkButton as de } from "@plumile/ui/atomic/atoms/button/LinkButton.js";
25
- import { TableCell as fe } from "@plumile/ui/components/data-table/TableCell.js";
26
- import { EyeSvg as pe } from "@plumile/ui/icons/EyeSvg.js";
12
+ import { buildActionsColumn as d, computeActionsColumnWidthPx as f, computeRowFlagsColumnWidthPx as p, isFormMutationAction as m, isRouteAction as h, resolveActionVariant as g, resolveLabel as _, resolveTrackBySize as v } from "./BackofficeEntityListPage.helpers.js";
13
+ import { actionTrigger as y, actionsColumnCell as b, headerActions as x } from "./backofficeEntityListPage.css.js";
14
+ import { useCallback as S, useMemo as C, useState as w } from "react";
15
+ import { jsx as T, jsxs as E } from "react/jsx-runtime";
16
+ import { useTranslation as D } from "react-i18next";
17
+ import { Button as O } from "@plumile/ui/atomic/atoms/button/Button.js";
18
+ import { usePaginationFragment as k, usePreloadedQuery as ee } from "react-relay";
19
+ import { BACKOFFICE_LIST_DEFAULTS as te, BACKOFFICE_LIST_REFETCH_POLICY as ne } from "@plumile/backoffice-core/constants.js";
20
+ import re from "@plumile/router/routing/Link.js";
21
+ import { LinkButton as ie } from "@plumile/ui/atomic/atoms/button/LinkButton.js";
22
+ import { TableCell as ae } from "@plumile/ui/components/data-table/TableCell.js";
23
+ import { EyeSvg as A } from "@plumile/ui/icons/EyeSvg.js";
27
24
  //#region src/pages/BackofficeEntityListPage.tsx
28
- var me = "store-or-network", he = (e, t, n, r) => {
25
+ var j = (e, t, n, r) => {
29
26
  let i = t != null && t.length > 0, a = e;
30
27
  if (i) {
31
28
  let n = [{
@@ -53,315 +50,129 @@ var me = "store-or-network", he = (e, t, n, r) => {
53
50
  columns: a,
54
51
  gridTemplateColumns: g
55
52
  };
56
- }, N = ({ config: i, prepared: o }) => {
57
- let { t: s } = E(), { t: c } = e(), [l, f] = C(null), p = A(), m = i.list, g = i.listDefaults ?? m.defaultState ?? {
58
- where: null,
59
- sort: null
60
- }, v = ce(m.query, o.query), k = se(m.fragment, v), j = x(() => m.getRows(k).map((e) => m.toRow(e)), [k, m]), N = x(() => m.getNextCursor?.(v) ?? null, [m, v]), [P, F] = C(j), [I, L] = C(N), [R, z] = C(!1), [B, V] = C(!1), [ge, H] = C(!1);
61
- b(() => {
62
- F(j), L(N);
63
- }, [N, j]);
64
- let { columns: U, gridTemplateColumns: _e } = x(() => {
65
- let e = n(m.columns, {
66
- tApp: s,
67
- t: c
68
- }), t = d({
69
- ariaLabel: c("actions.view"),
70
- fallback: c("common.notAvailable"),
71
- className: re,
72
- resolveDetailHref: (e) => i.routes.detail(e),
73
- renderAction: ({ href: e, ariaLabel: t }) => /* @__PURE__ */ T(fe.Actions, { children: /* @__PURE__ */ T(ue, {
74
- to: e,
75
- className: ne,
76
- "aria-label": t,
77
- title: t,
78
- children: /* @__PURE__ */ T(pe, {
79
- width: 16,
80
- height: 16
81
- })
82
- }) })
83
- });
84
- return he([...e, t], m.rowFlags, 1, s);
85
- }, [
86
- i.routes,
87
- m.columns,
88
- m.rowFlags,
89
- c,
90
- s
91
- ]), W = y((e) => m.getRowId(e), [m]), { state: G, pushState: ve } = u(i), K = G.sort ?? g.sort, { pageSize: q } = le, ye = y((e) => m.buildQueryVariables(e), [m]), J = S(0), be = S(M({
92
- where: g.where,
93
- sort: g.sort,
94
- count: q
95
- })), Y = y(async (e) => {
96
- let t = J.current + 1;
97
- J.current = t, e.mode === "append" ? z(!0) : V(!0), H(!1);
98
- try {
99
- let n = ye({
100
- where: e.where,
101
- sort: e.sort,
102
- count: e.count,
103
- cursor: e.cursor
104
- }), r = await O(p, m.query, n, { fetchPolicy: me }).toPromise();
105
- if (r == null || J.current !== t) return;
106
- let i = m.getRows(r).map((e) => m.toRow(e));
107
- F((t) => e.mode === "append" ? [...t, ...i] : i), L(m.getNextCursor?.(r) ?? null);
108
- } catch {
109
- J.current === t && H(!0);
110
- } finally {
111
- e.mode === "append" ? z(!1) : V(!1);
112
- }
113
- }, [
114
- ye,
115
- p,
116
- m
117
- ]);
118
- b(() => {
119
- let e = M({
120
- where: G.where,
121
- sort: K,
122
- count: q
123
- });
124
- be.current !== e && (be.current = e, Y({
125
- where: G.where,
126
- sort: K,
127
- count: q,
128
- cursor: null,
129
- mode: "reset"
130
- }).catch(() => {
131
- H(!0);
132
- }));
133
- }, [
134
- q,
135
- K,
136
- Y,
137
- G.where
138
- ]);
139
- let X = y(() => {
140
- B || Y({
141
- where: G.where,
142
- sort: K,
143
- count: q,
144
- cursor: null,
145
- mode: "reset"
146
- }).catch(() => {
147
- H(!0);
148
- });
149
- }, [
150
- B,
151
- q,
152
- K,
153
- Y,
154
- G.where
155
- ]), xe = r({
156
- hasNext: I != null,
157
- isLoadingNext: R,
158
- loadNext: (e) => {
159
- I != null && Y({
160
- where: G.where,
161
- sort: K,
162
- count: e,
163
- cursor: I,
164
- mode: "append"
165
- }).catch(() => {
166
- H(!0);
167
- });
168
- },
169
- count: q
170
- }), Z = x(() => i.listActions ?? [], [i.listActions]), Q = x(() => Z.filter((e) => e.isVisible == null ? !0 : e.isVisible(null)), [Z]), Se = x(() => {
171
- if (Q.length !== 0) return /* @__PURE__ */ T("div", {
172
- className: ie,
173
- children: Q.map((e, t) => {
174
- let { variant: n } = e, r = _(e.label, s), i = r;
175
- e.ariaLabel != null && (i = _(e.ariaLabel, s));
176
- let a = te(n, t), o = e.size ?? "small", c = e.isDisabled?.(null) === !0;
177
- return ee(e) ? /* @__PURE__ */ T(de, {
178
- to: e.to(null),
179
- variant: a,
180
- size: o,
181
- isDisabled: c,
182
- "aria-label": i,
183
- children: r
184
- }, e.id) : h(e) ? /* @__PURE__ */ T(D, {
185
- type: "button",
186
- variant: a,
187
- size: o,
188
- disabled: c,
189
- onClick: () => {
190
- f(e.id);
191
- },
192
- "aria-label": i,
193
- children: r
194
- }, e.id) : null;
195
- })
196
- });
197
- }, [s, Q]), $ = Z.find((e) => e.id === l), Ce = null;
198
- return ge && (Ce = /* @__PURE__ */ T(ae, {
199
- tone: "danger",
200
- title: c("list.errors.title"),
201
- actions: /* @__PURE__ */ T(D, {
202
- type: "button",
203
- variant: "secondary",
204
- size: "small",
205
- onClick: X,
206
- children: c("list.actions.retry")
207
- }),
208
- onDismiss: () => {
209
- H(!1);
210
- },
211
- children: c("list.errors.fetchFailed")
212
- })), /* @__PURE__ */ oe(w, { children: [/* @__PURE__ */ T(a, {
213
- config: i,
214
- state: G,
215
- pushState: ve,
216
- headerActions: Se,
217
- rows: P,
218
- columns: U,
219
- gridTemplateColumns: _e,
220
- getRowId: W,
221
- hasNextPage: I != null,
222
- isLoadingMore: R,
223
- isRefreshing: B,
224
- onLoadMore: xe,
225
- onRefresh: X,
226
- totalCount: null,
227
- statusBanner: Ce
228
- }), $ != null && h($) && /* @__PURE__ */ T(t, {
229
- isOpen: !0,
230
- action: $,
231
- node: null,
232
- onClose: () => {
233
- f(null);
234
- },
235
- onSuccess: X
236
- })] });
237
- }, P = ({ config: s, prepared: c, breadcrumb: l }) => {
238
- let f = s.list, { t: p } = E(), { t: m } = e(), [g, v] = C(null), b = ce(f.query, c.query), { data: S, loadNext: ae, hasNext: w, isLoadingNext: O, refetch: se } = k(f.fragment, b), A = f.getConnection(S), M = x(() => A.edges.map((e) => f.toRow(e.node)), [A.edges, f]), { columns: me, gridTemplateColumns: N } = x(() => {
53
+ }, M = ({ config: s, prepared: c, breadcrumb: l }) => {
54
+ let f = s.list, { t: p } = D(), { t: v } = e(), [M, N] = w(null), P = ee(f.query, c.query), { data: F, loadNext: I, hasNext: L, isLoadingNext: R, refetch: z } = k(f.fragment, P), B = f.getConnection(F), V = C(() => B.edges.map((e) => f.toRow(e.node)), [B.edges, f]), { columns: H, gridTemplateColumns: U } = C(() => {
239
55
  let e = n(f.columns, {
240
56
  tApp: p,
241
- t: m
57
+ t: v
242
58
  }), t = d({
243
- ariaLabel: m("actions.view"),
244
- fallback: m("common.notAvailable"),
245
- className: re,
59
+ ariaLabel: v("actions.view"),
60
+ fallback: v("common.notAvailable"),
61
+ className: b,
246
62
  resolveDetailHref: (e) => s.routes.detail(e),
247
- renderAction: ({ href: e, ariaLabel: t }) => /* @__PURE__ */ T(fe.Actions, { children: /* @__PURE__ */ T(ue, {
63
+ renderAction: ({ href: e, ariaLabel: t }) => /* @__PURE__ */ T(ae.Actions, { children: /* @__PURE__ */ T(re, {
248
64
  to: e,
249
- className: ne,
65
+ className: y,
250
66
  "aria-label": t,
251
67
  title: t,
252
- children: /* @__PURE__ */ T(pe, {
68
+ preloadOnMouseEnter: !0,
69
+ children: /* @__PURE__ */ T(A, {
253
70
  width: 16,
254
71
  height: 16
255
72
  })
256
73
  }) })
257
74
  });
258
- return he([...e, t], f.rowFlags, 1, p);
75
+ return j([...e, t], f.rowFlags, 1, p);
259
76
  }, [
260
77
  s.routes,
261
78
  f.columns,
262
79
  f.rowFlags,
263
- m,
80
+ v,
264
81
  p
265
- ]), P = y((e) => f.getRowId(e), [f]), { state: F, pushState: I } = u(s), L = s.listDefaults ?? f.defaultState ?? {
82
+ ]), W = S((e) => f.getRowId(e), [f]), { state: G, pushState: K } = u(s), q = s.listDefaults ?? f.defaultState ?? {
266
83
  where: null,
267
84
  sort: null
268
- }, R = F.sort ?? L.sort, { pageSize: z } = le, { isRefreshing: B, onRefresh: V } = i({
269
- refetch: se,
270
- variables: x(() => ({
271
- where: F.where,
272
- sort: R,
273
- count: z,
85
+ }, J = G.sort ?? q.sort, { pageSize: Y } = te, { isRefreshing: oe, onRefresh: X } = i({
86
+ refetch: z,
87
+ variables: C(() => ({
88
+ where: G.where,
89
+ sort: J,
90
+ count: Y,
274
91
  cursor: null
275
92
  }), [
276
- z,
277
- R,
278
- F.where
93
+ Y,
94
+ J,
95
+ G.where
279
96
  ]),
280
97
  defaults: {
281
- where: L.where,
282
- sort: L.sort,
283
- count: z,
98
+ where: q.where,
99
+ sort: q.sort,
100
+ count: Y,
284
101
  cursor: null
285
102
  },
286
- fetchPolicy: j,
103
+ fetchPolicy: ne,
287
104
  buildQueryVariables: f.buildQueryVariables
288
- }), ge = r({
289
- hasNext: w,
290
- isLoadingNext: O,
291
- loadNext: ae,
292
- count: z
293
- }), H = x(() => s.listActions ?? [], [s.listActions]), U = x(() => H.filter((e) => e.isVisible == null ? !0 : e.isVisible(null)), [H]), _e = x(() => {
294
- if (U.length !== 0) return /* @__PURE__ */ T("div", {
295
- className: ie,
296
- children: U.map((e, t) => {
105
+ }), se = r({
106
+ hasNext: L,
107
+ isLoadingNext: R,
108
+ loadNext: I,
109
+ count: Y
110
+ }), Z = C(() => s.listActions ?? [], [s.listActions]), Q = C(() => Z.filter((e) => e.isVisible == null ? !0 : e.isVisible(null)), [Z]), ce = C(() => {
111
+ if (Q.length !== 0) return /* @__PURE__ */ T("div", {
112
+ className: x,
113
+ children: Q.map((e, t) => {
297
114
  let { variant: n } = e, r = _(e.label, p), i = r;
298
115
  e.ariaLabel != null && (i = _(e.ariaLabel, p));
299
- let a = te(n, t), o = e.size ?? "small", s = e.isDisabled?.(null) === !0;
300
- return ee(e) ? /* @__PURE__ */ T(de, {
116
+ let a = g(n, t), o = e.size ?? "small", s = e.isDisabled?.(null) === !0;
117
+ return h(e) ? /* @__PURE__ */ T(ie, {
301
118
  to: e.to(null),
302
119
  variant: a,
303
120
  size: o,
304
121
  isDisabled: s,
305
122
  "aria-label": i,
123
+ preloadOnMouseEnter: !0,
306
124
  children: r
307
- }, e.id) : h(e) ? /* @__PURE__ */ T(D, {
125
+ }, e.id) : m(e) ? /* @__PURE__ */ T(O, {
308
126
  type: "button",
309
127
  variant: a,
310
128
  size: o,
311
129
  disabled: s,
312
130
  onClick: () => {
313
- v(e.id);
131
+ N(e.id);
314
132
  },
315
133
  "aria-label": i,
316
134
  children: r
317
135
  }, e.id) : null;
318
136
  })
319
137
  });
320
- }, [p, U]), W = H.find((e) => e.id === g);
321
- return /* @__PURE__ */ oe(o, {
138
+ }, [p, Q]), $ = Z.find((e) => e.id === M);
139
+ return /* @__PURE__ */ E(o, {
322
140
  breadcrumb: l,
323
141
  children: [/* @__PURE__ */ T(a, {
324
142
  config: s,
325
- state: F,
326
- pushState: I,
327
- headerActions: _e,
328
- rows: M,
329
- columns: me,
330
- gridTemplateColumns: N,
331
- getRowId: P,
332
- hasNextPage: w,
333
- isLoadingMore: O,
334
- isRefreshing: B,
335
- onLoadMore: ge,
336
- onRefresh: V,
337
- totalCount: A.totalCount ?? null
338
- }), W != null && h(W) && /* @__PURE__ */ T(t, {
143
+ state: G,
144
+ pushState: K,
145
+ headerActions: ce,
146
+ rows: V,
147
+ columns: H,
148
+ gridTemplateColumns: U,
149
+ getRowId: W,
150
+ hasNextPage: L,
151
+ isLoadingMore: R,
152
+ isRefreshing: oe,
153
+ onLoadMore: se,
154
+ onRefresh: X,
155
+ totalCount: B.totalCount ?? null
156
+ }), $ != null && m($) && /* @__PURE__ */ T(t, {
339
157
  isOpen: !0,
340
- action: W,
158
+ action: $,
341
159
  node: null,
342
160
  onClose: () => {
343
- v(null);
161
+ N(null);
344
162
  },
345
- onSuccess: V
163
+ onSuccess: X
346
164
  })]
347
165
  });
348
- }, F = ({ entityManifest: e, config: t, prepared: n }) => {
349
- let { t: r } = E(), i = s(t, r);
350
- return g(t) ? /* @__PURE__ */ T(o, {
351
- breadcrumb: i,
352
- children: /* @__PURE__ */ T(N, {
353
- entityManifest: e,
354
- config: t,
355
- prepared: n
356
- })
357
- }) : m(t) ? /* @__PURE__ */ T(P, {
166
+ }, N = ({ entityManifest: e, config: t, prepared: n }) => {
167
+ let { t: r } = D();
168
+ return /* @__PURE__ */ T(M, {
358
169
  entityManifest: e,
359
170
  config: t,
360
171
  prepared: n,
361
- breadcrumb: i
362
- }) : null;
172
+ breadcrumb: s(t, r)
173
+ });
363
174
  };
364
175
  //#endregion
365
- export { F as BackofficeEntityListPage, F as default };
176
+ export { N as BackofficeEntityListPage, N as default };
366
177
 
367
178
  //# sourceMappingURL=BackofficeEntityListPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeEntityListPage.js","names":[],"sources":["../../../src/pages/BackofficeEntityListPage.tsx"],"sourcesContent":["import {\n type JSX,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { TFunction } from 'i18next';\nimport { useTranslation } from 'react-i18next';\nimport Link from '@plumile/router/routing/Link.js';\nimport {\n useFragment,\n usePaginationFragment,\n usePreloadedQuery,\n useRelayEnvironment,\n} from 'react-relay';\nimport { fetchQuery } from 'relay-runtime';\nimport {\n BACKOFFICE_LIST_DEFAULTS,\n BACKOFFICE_LIST_REFETCH_POLICY,\n} from '@plumile/backoffice-core/constants.js';\nimport { stableListVariablesKey } from '@plumile/backoffice-core/state/stableKey.js';\nimport type {\n BackofficeEntityManifestItem,\n BackofficePreparedListRoute,\n BackofficeRuntimeResolvedListFacetConfig,\n BackofficeRowFlagSpec,\n} from '@plumile/backoffice-core/types.js';\nimport { Button } from '@plumile/ui/atomic/atoms/button/Button.js';\nimport { LinkButton } from '@plumile/ui/atomic/atoms/button/LinkButton.js';\nimport { InlineBanner } from '@plumile/ui/components/feedback/InlineBanner.js';\nimport {\n type DataTableColumn,\n type GetRowId,\n} from '@plumile/ui/components/data-table/DataTable.js';\nimport { TableCell } from '@plumile/ui/components/data-table/TableCell.js';\nimport { EyeSvg } from '@plumile/ui/icons/EyeSvg.js';\nimport { BackofficeEntityListScaffold } from '../components/backoffice/scaffolds/BackofficeEntityListScaffold.js';\nimport { LazyBackofficeEntityActionFormDialog } from '../components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js';\nimport { buildDataTableColumns } from '../components/backoffice/columns/buildDataTableColumns.js';\nimport { RowFlagsCell } from '../components/backoffice/list/RowFlagsCell.js';\nimport { useBackofficeListUrlState } from '../hooks/useBackofficeListUrlState.js';\nimport { useBackofficeLoadMore } from '../hooks/useBackofficeLoadMore.js';\nimport { useBackofficeListRefetch } from '../hooks/useBackofficeListRefetch.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport * as pageStyles from './backofficeEntityListPage.css.js';\nimport { rowFlagsColumnCell } from '../components/backoffice/list/RowFlagsCell.css.js';\nimport { BackofficeRightPageLayout } from '../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js';\nimport { buildEntityListBreadcrumb } from '../components/backoffice/layout/breadcrumb/buildBreadcrumbs.js';\nimport {\n buildActionsColumn,\n computeActionsColumnWidthPx,\n computeRowFlagsColumnWidthPx,\n isFormMutationAction,\n isConnectionListConfig,\n isRecordListConfig,\n isRouteAction,\n resolveLabel,\n resolveActionVariant,\n resolveTrackBySize,\n type ConnectionListConfig,\n type RecordListConfig,\n} from './BackofficeEntityListPage.helpers.js';\n\nexport type BackofficeEntityListPageProps = {\n entityManifest: BackofficeEntityManifestItem;\n config: BackofficeRuntimeResolvedListFacetConfig;\n prepared: BackofficePreparedListRoute;\n};\n\ntype RecordFetchMode = 'append' | 'reset';\ntype RecordFetchInput = {\n where: Record<string, unknown> | null;\n sort: string | null;\n count: number;\n cursor: string | null;\n mode: RecordFetchMode;\n};\n\nconst RECORD_FETCH_POLICY = 'store-or-network' as const;\n\nconst applyListEdgeColumns = <Row,>(\n inputColumns: readonly DataTableColumn<Row>[],\n rowFlags: readonly BackofficeRowFlagSpec<Row>[] | undefined,\n actionCount: number,\n tApp: TFunction,\n): {\n columns: readonly DataTableColumn<Row>[];\n gridTemplateColumns?: string;\n} => {\n const hasFlags = rowFlags != null && rowFlags.length > 0;\n\n let columns = inputColumns;\n if (hasFlags) {\n const flagsColumn: DataTableColumn<Row> = {\n id: '__rowFlags',\n header: '',\n className: rowFlagsColumnCell,\n mobileRole: 'badge',\n cell: (row) => {\n return <RowFlagsCell row={row} flags={rowFlags} tApp={tApp} />;\n },\n };\n\n // Ensure we never pick the flags column as \"primary\".\n const withFlags = [flagsColumn, ...inputColumns];\n const hasPrimary = withFlags.some((col) => {\n return col.isPrimary === true;\n });\n\n columns = withFlags;\n if (!hasPrimary) {\n columns = withFlags.map((col, index) => {\n if (index === 1) {\n return { ...col, isPrimary: true };\n }\n return col;\n });\n }\n }\n\n let flagCount = 0;\n if (hasFlags) {\n flagCount = rowFlags.length;\n }\n const flagsWidthPx = computeRowFlagsColumnWidthPx(flagCount);\n const actionsWidthPx = computeActionsColumnWidthPx(actionCount);\n\n // We always include the right-side \"actions\" column in list pages.\n let leftColumnCount = 0;\n if (hasFlags) {\n leftColumnCount = 1;\n }\n const middleCount = columns.length - leftColumnCount - 1;\n\n const middleTracks = columns\n .slice(leftColumnCount, leftColumnCount + Math.max(0, middleCount))\n .map((column) => {\n return resolveTrackBySize(column as DataTableColumn<unknown>, '1fr');\n })\n .join(' ');\n\n let gridTemplateColumns = '';\n if (hasFlags) {\n gridTemplateColumns = `${flagsWidthPx}px ${middleTracks} ${actionsWidthPx}px`;\n } else {\n gridTemplateColumns = `${middleTracks} ${actionsWidthPx}px`;\n }\n\n return { columns, gridTemplateColumns };\n};\n\nconst BackofficeEntityRecordListPage = ({\n config,\n prepared,\n}: Omit<BackofficeEntityListPageProps, 'config'> & {\n config: RecordListConfig;\n}): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const [activeFormActionId, setActiveFormActionId] = useState<string | null>(\n null,\n );\n const environment = useRelayEnvironment();\n\n const listConfig = config.list;\n const listDefaults = config.listDefaults ??\n listConfig.defaultState ?? { where: null, sort: null };\n const queryData = usePreloadedQuery(listConfig.query, prepared.query);\n const fragmentData = useFragment(listConfig.fragment, queryData as never);\n\n const initialRows = useMemo(() => {\n return listConfig.getRows(fragmentData).map((row) => {\n return listConfig.toRow(row);\n });\n }, [fragmentData, listConfig]);\n\n const initialCursor = useMemo(() => {\n return listConfig.getNextCursor?.(queryData) ?? null;\n }, [listConfig, queryData]);\n\n const [rows, setRows] = useState(initialRows);\n const [nextCursor, setNextCursor] = useState(initialCursor);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [isRefreshing, setIsRefreshing] = useState(false);\n const [fetchError, setFetchError] = useState(false);\n\n useEffect(() => {\n setRows(initialRows);\n setNextCursor(initialCursor);\n }, [initialCursor, initialRows]);\n\n const { columns, gridTemplateColumns } = useMemo((): {\n columns: readonly DataTableColumn<unknown>[];\n gridTemplateColumns?: string;\n } => {\n const baseColumns = buildDataTableColumns(listConfig.columns, {\n tApp,\n t,\n });\n const actionsColumn = buildActionsColumn({\n ariaLabel: t('actions.view'),\n fallback: t('common.notAvailable'),\n className: pageStyles.actionsColumnCell,\n resolveDetailHref: (id) => {\n return config.routes.detail(id);\n },\n renderAction: ({ href, ariaLabel }) => {\n return (\n <TableCell.Actions>\n <Link\n to={href}\n className={pageStyles.actionTrigger}\n aria-label={ariaLabel}\n title={ariaLabel}\n >\n <EyeSvg width={16} height={16} />\n </Link>\n </TableCell.Actions>\n );\n },\n });\n const allColumns = [...baseColumns, actionsColumn];\n return applyListEdgeColumns(allColumns, listConfig.rowFlags, 1, tApp);\n }, [config.routes, listConfig.columns, listConfig.rowFlags, t, tApp]);\n\n const getRowId = useCallback<GetRowId<unknown>>(\n (row) => {\n return listConfig.getRowId(row);\n },\n [listConfig],\n );\n\n const { state, pushState } = useBackofficeListUrlState(config);\n const resolvedSort = state.sort ?? listDefaults.sort;\n const { pageSize } = BACKOFFICE_LIST_DEFAULTS;\n\n const buildVariables = useCallback(\n (input: {\n where: Record<string, unknown> | null;\n sort: string | null;\n count: number;\n cursor: string | null;\n }) => {\n return listConfig.buildQueryVariables(input);\n },\n [listConfig],\n );\n\n const requestIdRef = useRef(0);\n const lastRefetchKeyRef = useRef(\n stableListVariablesKey({\n where: listDefaults.where,\n sort: listDefaults.sort,\n count: pageSize,\n }),\n );\n\n const runFetch = useCallback(\n async (input: RecordFetchInput) => {\n const requestId = requestIdRef.current + 1;\n requestIdRef.current = requestId;\n\n if (input.mode === 'append') {\n setIsLoadingMore(true);\n } else {\n setIsRefreshing(true);\n }\n setFetchError(false);\n\n try {\n const variables = buildVariables({\n where: input.where,\n sort: input.sort,\n count: input.count,\n cursor: input.cursor,\n });\n\n const response = await fetchQuery(\n environment,\n listConfig.query,\n variables as never,\n { fetchPolicy: RECORD_FETCH_POLICY },\n ).toPromise();\n\n if (response == null || requestIdRef.current !== requestId) {\n return;\n }\n\n const nextRows = listConfig.getRows(response as never).map((row) => {\n return listConfig.toRow(row);\n });\n setRows((prev) => {\n if (input.mode === 'append') {\n return [...prev, ...nextRows];\n }\n return nextRows;\n });\n const cursor = listConfig.getNextCursor?.(response) ?? null;\n setNextCursor(cursor);\n } catch {\n if (requestIdRef.current === requestId) {\n setFetchError(true);\n }\n } finally {\n if (input.mode === 'append') {\n setIsLoadingMore(false);\n } else {\n setIsRefreshing(false);\n }\n }\n },\n [buildVariables, environment, listConfig],\n );\n\n useEffect(() => {\n const key = stableListVariablesKey({\n where: state.where,\n sort: resolvedSort,\n count: pageSize,\n });\n if (lastRefetchKeyRef.current === key) {\n return;\n }\n lastRefetchKeyRef.current = key;\n runFetch({\n where: state.where,\n sort: resolvedSort,\n count: pageSize,\n cursor: null,\n mode: 'reset',\n }).catch(() => {\n setFetchError(true);\n });\n }, [pageSize, resolvedSort, runFetch, state.where]);\n\n const handleRefresh = useCallback(() => {\n if (isRefreshing) {\n return;\n }\n runFetch({\n where: state.where,\n sort: resolvedSort,\n count: pageSize,\n cursor: null,\n mode: 'reset',\n }).catch(() => {\n setFetchError(true);\n });\n }, [isRefreshing, pageSize, resolvedSort, runFetch, state.where]);\n\n const handleLoadMore = useBackofficeLoadMore({\n hasNext: nextCursor != null,\n isLoadingNext: isLoadingMore,\n loadNext: (count) => {\n if (nextCursor == null) {\n return;\n }\n runFetch({\n where: state.where,\n sort: resolvedSort,\n count,\n cursor: nextCursor,\n mode: 'append',\n }).catch(() => {\n setFetchError(true);\n });\n },\n count: pageSize,\n });\n\n const listActions = useMemo(() => {\n return config.listActions ?? [];\n }, [config.listActions]);\n const visibleActions = useMemo(() => {\n return listActions.filter((action) => {\n if (action.isVisible == null) {\n return true;\n }\n return action.isVisible(null);\n });\n }, [listActions]);\n\n const headerActions = useMemo(() => {\n if (visibleActions.length === 0) {\n return undefined;\n }\n return (\n <div className={pageStyles.headerActions}>\n {visibleActions.map((action, index) => {\n const { variant: actionVariant } = action;\n const label = resolveLabel(action.label, tApp);\n let ariaLabel = label;\n if (action.ariaLabel != null) {\n ariaLabel = resolveLabel(action.ariaLabel, tApp);\n }\n const variant = resolveActionVariant(actionVariant, index);\n const size = action.size ?? 'small';\n const isDisabled = action.isDisabled?.(null) === true;\n\n if (isRouteAction(action)) {\n const href = action.to(null);\n return (\n <LinkButton\n key={action.id}\n to={href}\n variant={variant}\n size={size}\n isDisabled={isDisabled}\n aria-label={ariaLabel}\n >\n {label}\n </LinkButton>\n );\n }\n\n if (isFormMutationAction(action)) {\n return (\n <Button\n key={action.id}\n type=\"button\"\n variant={variant}\n size={size}\n disabled={isDisabled}\n onClick={() => {\n setActiveFormActionId(action.id);\n }}\n aria-label={ariaLabel}\n >\n {label}\n </Button>\n );\n }\n\n return null;\n })}\n </div>\n );\n }, [tApp, visibleActions]);\n\n const activeFormAction = listActions.find((action) => {\n return action.id === activeFormActionId;\n });\n\n let statusBanner: JSX.Element | null = null;\n if (fetchError) {\n statusBanner = (\n <InlineBanner\n tone=\"danger\"\n title={t('list.errors.title')}\n actions={\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"small\"\n onClick={handleRefresh}\n >\n {t('list.actions.retry')}\n </Button>\n }\n onDismiss={() => {\n setFetchError(false);\n }}\n >\n {t('list.errors.fetchFailed')}\n </InlineBanner>\n );\n }\n\n return (\n <>\n <BackofficeEntityListScaffold\n config={config}\n state={state}\n pushState={pushState}\n headerActions={headerActions}\n rows={rows}\n columns={columns}\n gridTemplateColumns={gridTemplateColumns}\n getRowId={getRowId}\n hasNextPage={nextCursor != null}\n isLoadingMore={isLoadingMore}\n isRefreshing={isRefreshing}\n onLoadMore={handleLoadMore}\n onRefresh={handleRefresh}\n totalCount={null}\n statusBanner={statusBanner}\n />\n {activeFormAction != null && isFormMutationAction(activeFormAction) && (\n <LazyBackofficeEntityActionFormDialog\n isOpen\n action={activeFormAction}\n node={null}\n onClose={() => {\n setActiveFormActionId(null);\n }}\n onSuccess={handleRefresh}\n />\n )}\n </>\n );\n};\n\nconst BackofficeEntityConnectionListPage = ({\n config,\n prepared,\n breadcrumb,\n}: Omit<BackofficeEntityListPageProps, 'config'> & {\n config: ConnectionListConfig;\n breadcrumb: ReturnType<typeof buildEntityListBreadcrumb>;\n}): JSX.Element | null => {\n const listConfig = config.list;\n\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const [activeFormActionId, setActiveFormActionId] = useState<string | null>(\n null,\n );\n\n const queryData = usePreloadedQuery(listConfig.query, prepared.query);\n const {\n data: fragmentData,\n loadNext,\n hasNext,\n isLoadingNext,\n refetch,\n } = usePaginationFragment(listConfig.fragment, queryData as never);\n\n const connection = listConfig.getConnection(fragmentData);\n\n const rows = useMemo(() => {\n return connection.edges.map((edge) => {\n return listConfig.toRow(edge.node);\n });\n }, [connection.edges, listConfig]);\n\n const { columns, gridTemplateColumns } = useMemo((): {\n columns: readonly DataTableColumn<unknown>[];\n gridTemplateColumns?: string;\n } => {\n const baseColumns = buildDataTableColumns(listConfig.columns, {\n tApp,\n t,\n });\n const actionsColumn = buildActionsColumn({\n ariaLabel: t('actions.view'),\n fallback: t('common.notAvailable'),\n className: pageStyles.actionsColumnCell,\n resolveDetailHref: (id) => {\n return config.routes.detail(id);\n },\n renderAction: ({ href, ariaLabel }) => {\n return (\n <TableCell.Actions>\n <Link\n to={href}\n className={pageStyles.actionTrigger}\n aria-label={ariaLabel}\n title={ariaLabel}\n >\n <EyeSvg width={16} height={16} />\n </Link>\n </TableCell.Actions>\n );\n },\n });\n const allColumns = [...baseColumns, actionsColumn];\n return applyListEdgeColumns(allColumns, listConfig.rowFlags, 1, tApp);\n }, [config.routes, listConfig.columns, listConfig.rowFlags, t, tApp]);\n\n const getRowId = useCallback<GetRowId<unknown>>(\n (row) => {\n return listConfig.getRowId(row);\n },\n [listConfig],\n );\n\n const { state, pushState } = useBackofficeListUrlState(config);\n const listDefaults = config.listDefaults ??\n listConfig.defaultState ?? { where: null, sort: null };\n const resolvedSort = state.sort ?? listDefaults.sort;\n const { pageSize } = BACKOFFICE_LIST_DEFAULTS;\n\n const baseVariables = useMemo(() => {\n return {\n where: state.where,\n sort: resolvedSort,\n count: pageSize,\n cursor: null,\n };\n }, [pageSize, resolvedSort, state.where]);\n\n const { isRefreshing, onRefresh } = useBackofficeListRefetch({\n refetch,\n variables: baseVariables,\n defaults: {\n where: listDefaults.where,\n sort: listDefaults.sort,\n count: pageSize,\n cursor: null,\n },\n fetchPolicy: BACKOFFICE_LIST_REFETCH_POLICY,\n buildQueryVariables: listConfig.buildQueryVariables,\n });\n\n const handleLoadMore = useBackofficeLoadMore({\n hasNext,\n isLoadingNext,\n loadNext,\n count: pageSize,\n });\n\n const listActions = useMemo(() => {\n return config.listActions ?? [];\n }, [config.listActions]);\n const visibleActions = useMemo(() => {\n return listActions.filter((action) => {\n if (action.isVisible == null) {\n return true;\n }\n return action.isVisible(null);\n });\n }, [listActions]);\n\n const headerActions = useMemo(() => {\n if (visibleActions.length === 0) {\n return undefined;\n }\n return (\n <div className={pageStyles.headerActions}>\n {visibleActions.map((action, index) => {\n const { variant: actionVariant } = action;\n const label = resolveLabel(action.label, tApp);\n let ariaLabel = label;\n if (action.ariaLabel != null) {\n ariaLabel = resolveLabel(action.ariaLabel, tApp);\n }\n const variant = resolveActionVariant(actionVariant, index);\n const size = action.size ?? 'small';\n const isDisabled = action.isDisabled?.(null) === true;\n\n if (isRouteAction(action)) {\n const href = action.to(null);\n return (\n <LinkButton\n key={action.id}\n to={href}\n variant={variant}\n size={size}\n isDisabled={isDisabled}\n aria-label={ariaLabel}\n >\n {label}\n </LinkButton>\n );\n }\n\n if (isFormMutationAction(action)) {\n return (\n <Button\n key={action.id}\n type=\"button\"\n variant={variant}\n size={size}\n disabled={isDisabled}\n onClick={() => {\n setActiveFormActionId(action.id);\n }}\n aria-label={ariaLabel}\n >\n {label}\n </Button>\n );\n }\n\n return null;\n })}\n </div>\n );\n }, [tApp, visibleActions]);\n\n const activeFormAction = listActions.find((action) => {\n return action.id === activeFormActionId;\n });\n\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <BackofficeEntityListScaffold\n config={config}\n state={state}\n pushState={pushState}\n headerActions={headerActions}\n rows={rows}\n columns={columns}\n gridTemplateColumns={gridTemplateColumns}\n getRowId={getRowId}\n hasNextPage={hasNext}\n isLoadingMore={isLoadingNext}\n isRefreshing={isRefreshing}\n onLoadMore={handleLoadMore}\n onRefresh={onRefresh}\n totalCount={connection.totalCount ?? null}\n />\n {activeFormAction != null && isFormMutationAction(activeFormAction) && (\n <LazyBackofficeEntityActionFormDialog\n isOpen\n action={activeFormAction}\n node={null}\n onClose={() => {\n setActiveFormActionId(null);\n }}\n onSuccess={onRefresh}\n />\n )}\n </BackofficeRightPageLayout>\n );\n};\n\nexport const BackofficeEntityListPage = ({\n entityManifest,\n config,\n prepared,\n}: BackofficeEntityListPageProps): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const breadcrumb = buildEntityListBreadcrumb(config, tApp);\n\n if (isRecordListConfig(config)) {\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <BackofficeEntityRecordListPage\n entityManifest={entityManifest}\n config={config}\n prepared={prepared}\n />\n </BackofficeRightPageLayout>\n );\n }\n if (!isConnectionListConfig(config)) {\n return null;\n }\n return (\n <BackofficeEntityConnectionListPage\n entityManifest={entityManifest}\n config={config}\n prepared={prepared}\n breadcrumb={breadcrumb}\n />\n );\n};\n\nexport default BackofficeEntityListPage;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BackofficeEntityListPage.js","names":[],"sources":["../../../src/pages/BackofficeEntityListPage.tsx"],"sourcesContent":["import { type JSX, useCallback, useMemo, useState } from 'react';\nimport type { TFunction } from 'i18next';\nimport { useTranslation } from 'react-i18next';\nimport Link from '@plumile/router/routing/Link.js';\nimport { usePaginationFragment, usePreloadedQuery } from 'react-relay';\nimport {\n BACKOFFICE_LIST_DEFAULTS,\n BACKOFFICE_LIST_REFETCH_POLICY,\n} from '@plumile/backoffice-core/constants.js';\nimport type {\n BackofficeEntityManifestItem,\n BackofficePreparedListRoute,\n BackofficeRuntimeResolvedListFacetConfig,\n BackofficeRowFlagSpec,\n} from '@plumile/backoffice-core/types.js';\nimport { Button } from '@plumile/ui/atomic/atoms/button/Button.js';\nimport { LinkButton } from '@plumile/ui/atomic/atoms/button/LinkButton.js';\nimport {\n type DataTableColumn,\n type GetRowId,\n} from '@plumile/ui/components/data-table/DataTable.js';\nimport { TableCell } from '@plumile/ui/components/data-table/TableCell.js';\nimport { EyeSvg } from '@plumile/ui/icons/EyeSvg.js';\nimport { BackofficeEntityListScaffold } from '../components/backoffice/scaffolds/BackofficeEntityListScaffold.js';\nimport { LazyBackofficeEntityActionFormDialog } from '../components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js';\nimport { buildDataTableColumns } from '../components/backoffice/columns/buildDataTableColumns.js';\nimport { RowFlagsCell } from '../components/backoffice/list/RowFlagsCell.js';\nimport { useBackofficeListUrlState } from '../hooks/useBackofficeListUrlState.js';\nimport { useBackofficeLoadMore } from '../hooks/useBackofficeLoadMore.js';\nimport { useBackofficeListRefetch } from '../hooks/useBackofficeListRefetch.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport * as pageStyles from './backofficeEntityListPage.css.js';\nimport { rowFlagsColumnCell } from '../components/backoffice/list/RowFlagsCell.css.js';\nimport { BackofficeRightPageLayout } from '../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js';\nimport { buildEntityListBreadcrumb } from '../components/backoffice/layout/breadcrumb/buildBreadcrumbs.js';\nimport {\n buildActionsColumn,\n computeActionsColumnWidthPx,\n computeRowFlagsColumnWidthPx,\n isFormMutationAction,\n isRouteAction,\n resolveLabel,\n resolveActionVariant,\n resolveTrackBySize,\n type ConnectionListConfig,\n} from './BackofficeEntityListPage.helpers.js';\n\nexport type BackofficeEntityListPageProps = {\n entityManifest: BackofficeEntityManifestItem;\n config: BackofficeRuntimeResolvedListFacetConfig;\n prepared: BackofficePreparedListRoute;\n};\n\nconst applyListEdgeColumns = <Row,>(\n inputColumns: readonly DataTableColumn<Row>[],\n rowFlags: readonly BackofficeRowFlagSpec<Row>[] | undefined,\n actionCount: number,\n tApp: TFunction,\n): {\n columns: readonly DataTableColumn<Row>[];\n gridTemplateColumns?: string;\n} => {\n const hasFlags = rowFlags != null && rowFlags.length > 0;\n\n let columns = inputColumns;\n if (hasFlags) {\n const flagsColumn: DataTableColumn<Row> = {\n id: '__rowFlags',\n header: '',\n className: rowFlagsColumnCell,\n mobileRole: 'badge',\n cell: (row) => {\n return <RowFlagsCell row={row} flags={rowFlags} tApp={tApp} />;\n },\n };\n\n // Ensure we never pick the flags column as \"primary\".\n const withFlags = [flagsColumn, ...inputColumns];\n const hasPrimary = withFlags.some((col) => {\n return col.isPrimary === true;\n });\n\n columns = withFlags;\n if (!hasPrimary) {\n columns = withFlags.map((col, index) => {\n if (index === 1) {\n return { ...col, isPrimary: true };\n }\n return col;\n });\n }\n }\n\n let flagCount = 0;\n if (hasFlags) {\n flagCount = rowFlags.length;\n }\n const flagsWidthPx = computeRowFlagsColumnWidthPx(flagCount);\n const actionsWidthPx = computeActionsColumnWidthPx(actionCount);\n\n // We always include the right-side \"actions\" column in list pages.\n let leftColumnCount = 0;\n if (hasFlags) {\n leftColumnCount = 1;\n }\n const middleCount = columns.length - leftColumnCount - 1;\n\n const middleTracks = columns\n .slice(leftColumnCount, leftColumnCount + Math.max(0, middleCount))\n .map((column) => {\n return resolveTrackBySize(column as DataTableColumn<unknown>, '1fr');\n })\n .join(' ');\n\n let gridTemplateColumns = '';\n if (hasFlags) {\n gridTemplateColumns = `${flagsWidthPx}px ${middleTracks} ${actionsWidthPx}px`;\n } else {\n gridTemplateColumns = `${middleTracks} ${actionsWidthPx}px`;\n }\n\n return { columns, gridTemplateColumns };\n};\n\nconst BackofficeEntityConnectionListPage = ({\n config,\n prepared,\n breadcrumb,\n}: Omit<BackofficeEntityListPageProps, 'config'> & {\n config: ConnectionListConfig;\n breadcrumb: ReturnType<typeof buildEntityListBreadcrumb>;\n}): JSX.Element | null => {\n const listConfig = config.list;\n\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const [activeFormActionId, setActiveFormActionId] = useState<string | null>(\n null,\n );\n\n const queryData = usePreloadedQuery(listConfig.query, prepared.query);\n const {\n data: fragmentData,\n loadNext,\n hasNext,\n isLoadingNext,\n refetch,\n } = usePaginationFragment(listConfig.fragment, queryData as never);\n\n const connection = listConfig.getConnection(fragmentData);\n\n const rows = useMemo(() => {\n return connection.edges.map((edge) => {\n return listConfig.toRow(edge.node);\n });\n }, [connection.edges, listConfig]);\n\n const { columns, gridTemplateColumns } = useMemo((): {\n columns: readonly DataTableColumn<unknown>[];\n gridTemplateColumns?: string;\n } => {\n const baseColumns = buildDataTableColumns(listConfig.columns, {\n tApp,\n t,\n });\n const actionsColumn = buildActionsColumn({\n ariaLabel: t('actions.view'),\n fallback: t('common.notAvailable'),\n className: pageStyles.actionsColumnCell,\n resolveDetailHref: (id) => {\n return config.routes.detail(id);\n },\n renderAction: ({ href, ariaLabel }) => {\n return (\n <TableCell.Actions>\n <Link\n to={href}\n className={pageStyles.actionTrigger}\n aria-label={ariaLabel}\n title={ariaLabel}\n preloadOnMouseEnter\n >\n <EyeSvg width={16} height={16} />\n </Link>\n </TableCell.Actions>\n );\n },\n });\n const allColumns = [...baseColumns, actionsColumn];\n return applyListEdgeColumns(allColumns, listConfig.rowFlags, 1, tApp);\n }, [config.routes, listConfig.columns, listConfig.rowFlags, t, tApp]);\n\n const getRowId = useCallback<GetRowId<unknown>>(\n (row) => {\n return listConfig.getRowId(row);\n },\n [listConfig],\n );\n\n const { state, pushState } = useBackofficeListUrlState(config);\n const listDefaults = config.listDefaults ??\n listConfig.defaultState ?? { where: null, sort: null };\n const resolvedSort = state.sort ?? listDefaults.sort;\n const { pageSize } = BACKOFFICE_LIST_DEFAULTS;\n\n const baseVariables = useMemo(() => {\n return {\n where: state.where,\n sort: resolvedSort,\n count: pageSize,\n cursor: null,\n };\n }, [pageSize, resolvedSort, state.where]);\n\n const { isRefreshing, onRefresh } = useBackofficeListRefetch({\n refetch,\n variables: baseVariables,\n defaults: {\n where: listDefaults.where,\n sort: listDefaults.sort,\n count: pageSize,\n cursor: null,\n },\n fetchPolicy: BACKOFFICE_LIST_REFETCH_POLICY,\n buildQueryVariables: listConfig.buildQueryVariables,\n });\n\n const handleLoadMore = useBackofficeLoadMore({\n hasNext,\n isLoadingNext,\n loadNext,\n count: pageSize,\n });\n\n const listActions = useMemo(() => {\n return config.listActions ?? [];\n }, [config.listActions]);\n const visibleActions = useMemo(() => {\n return listActions.filter((action) => {\n if (action.isVisible == null) {\n return true;\n }\n return action.isVisible(null);\n });\n }, [listActions]);\n\n const headerActions = useMemo(() => {\n if (visibleActions.length === 0) {\n return undefined;\n }\n return (\n <div className={pageStyles.headerActions}>\n {visibleActions.map((action, index) => {\n const { variant: actionVariant } = action;\n const label = resolveLabel(action.label, tApp);\n let ariaLabel = label;\n if (action.ariaLabel != null) {\n ariaLabel = resolveLabel(action.ariaLabel, tApp);\n }\n const variant = resolveActionVariant(actionVariant, index);\n const size = action.size ?? 'small';\n const isDisabled = action.isDisabled?.(null) === true;\n\n if (isRouteAction(action)) {\n const href = action.to(null);\n return (\n <LinkButton\n key={action.id}\n to={href}\n variant={variant}\n size={size}\n isDisabled={isDisabled}\n aria-label={ariaLabel}\n preloadOnMouseEnter\n >\n {label}\n </LinkButton>\n );\n }\n\n if (isFormMutationAction(action)) {\n return (\n <Button\n key={action.id}\n type=\"button\"\n variant={variant}\n size={size}\n disabled={isDisabled}\n onClick={() => {\n setActiveFormActionId(action.id);\n }}\n aria-label={ariaLabel}\n >\n {label}\n </Button>\n );\n }\n\n return null;\n })}\n </div>\n );\n }, [tApp, visibleActions]);\n\n const activeFormAction = listActions.find((action) => {\n return action.id === activeFormActionId;\n });\n\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <BackofficeEntityListScaffold\n config={config}\n state={state}\n pushState={pushState}\n headerActions={headerActions}\n rows={rows}\n columns={columns}\n gridTemplateColumns={gridTemplateColumns}\n getRowId={getRowId}\n hasNextPage={hasNext}\n isLoadingMore={isLoadingNext}\n isRefreshing={isRefreshing}\n onLoadMore={handleLoadMore}\n onRefresh={onRefresh}\n totalCount={connection.totalCount ?? null}\n />\n {activeFormAction != null && isFormMutationAction(activeFormAction) && (\n <LazyBackofficeEntityActionFormDialog\n isOpen\n action={activeFormAction}\n node={null}\n onClose={() => {\n setActiveFormActionId(null);\n }}\n onSuccess={onRefresh}\n />\n )}\n </BackofficeRightPageLayout>\n );\n};\n\nexport const BackofficeEntityListPage = ({\n entityManifest,\n config,\n prepared,\n}: BackofficeEntityListPageProps): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const breadcrumb = buildEntityListBreadcrumb(config, tApp);\n\n return (\n <BackofficeEntityConnectionListPage\n entityManifest={entityManifest}\n config={config}\n prepared={prepared}\n breadcrumb={breadcrumb}\n />\n );\n};\n\nexport default BackofficeEntityListPage;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeEntityDetailLayoutContext.js","names":[],"sources":["../../../../src/pages/detail/BackofficeEntityDetailLayoutContext.ts"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport type BackofficeEntityDetailLayoutContextValue = {\n layoutView: unknown;\n};\n\nconst BackofficeEntityDetailLayoutContext =\n createContext<BackofficeEntityDetailLayoutContextValue | null>(null);\n\nexport const BackofficeEntityDetailLayoutContextProvider =\n BackofficeEntityDetailLayoutContext.Provider;\n\nexport const useBackofficeEntityDetailLayoutContext =\n (): BackofficeEntityDetailLayoutContextValue => {\n const context = useContext(BackofficeEntityDetailLayoutContext);\n if (context == null) {\n throw new Error(\n 'BackofficeEntityDetailLayoutContext is missing. Ensure detail pages are rendered under the entity layout route.',\n );\n }\n return context;\n };\n"],"mappings":";;AAMA,IAAM,IACJ,EAA+D,IAAI,GAExD,IACX,EAAoC,UAEzB,UACqC;CAC9C,IAAM,IAAU,EAAW,CAAmC;CAC9D,IAAI,KAAW,MACb,MAAU,MACR,iHACF;CAEF,OAAO;AACT"}
1
+ {"version":3,"file":"BackofficeEntityDetailLayoutContext.js","names":[],"sources":["../../../../src/pages/detail/BackofficeEntityDetailLayoutContext.ts"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type {\n BackofficeDetailPageRouteSpec,\n BackofficeResolvedDetailLayoutFacetConfigBase,\n} from '@plumile/backoffice-core/types.js';\nimport type { TabItem } from '@plumile/ui/atomic/molecules/tabs/Tabs.js';\n\nexport type BackofficeEntityDetailLayoutContextValue = {\n activePage: BackofficeDetailPageRouteSpec;\n config: BackofficeResolvedDetailLayoutFacetConfigBase;\n entityId: string;\n layoutView: unknown;\n tabsItems: readonly TabItem[];\n visiblePages: readonly BackofficeDetailPageRouteSpec[];\n};\n\nconst BackofficeEntityDetailLayoutContext =\n createContext<BackofficeEntityDetailLayoutContextValue | null>(null);\n\nexport const BackofficeEntityDetailLayoutContextProvider =\n BackofficeEntityDetailLayoutContext.Provider;\n\nexport const useBackofficeEntityDetailLayoutContext =\n (): BackofficeEntityDetailLayoutContextValue => {\n const context = useContext(BackofficeEntityDetailLayoutContext);\n if (context == null) {\n throw new Error(\n 'BackofficeEntityDetailLayoutContext is missing. Ensure detail pages are rendered under the entity layout route.',\n );\n }\n return context;\n };\n"],"mappings":";;AAgBA,IAAM,IACJ,EAA+D,IAAI,GAExD,IACX,EAAoC,UAEzB,UACqC;CAC9C,IAAM,IAAU,EAAW,CAAmC;CAC9D,IAAI,KAAW,MACb,MAAU,MACR,iHACF;CAEF,OAAO;AACT"}
@@ -2,6 +2,7 @@
2
2
  var e = (e) => e.pages.map((t) => ({
3
3
  id: t.id,
4
4
  label: t.label(e.tApp),
5
+ preloadOnMouseEnter: !0,
5
6
  to: e.detailPageHref(e.id, t.id)
6
7
  }));
7
8
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"buildTabsItems.js","names":[],"sources":["../../../../src/pages/detail/buildTabsItems.ts"],"sourcesContent":["import type { BackofficeDetailPageRouteSpec } from '@plumile/backoffice-core/types.js';\nimport type { TabItem } from '@plumile/ui/atomic/molecules/tabs/Tabs.js';\nimport type { TFunction } from 'i18next';\n\ntype DetailRoutePage<Node> = BackofficeDetailPageRouteSpec<Node>;\n\nexport const buildTabsItems = <Node>(input: {\n pages: readonly DetailRoutePage<Node>[];\n id: string;\n tApp: TFunction;\n detailPageHref: (id: string, pageId: string) => string;\n}): readonly TabItem[] => {\n return input.pages.map((page) => {\n return {\n id: page.id,\n label: page.label(input.tApp),\n to: input.detailPageHref(input.id, page.id),\n };\n });\n};\n"],"mappings":";AAMA,IAAa,KAAwB,MAM5B,EAAM,MAAM,KAAK,OACf;CACL,IAAI,EAAK;CACT,OAAO,EAAK,MAAM,EAAM,IAAI;CAC5B,IAAI,EAAM,eAAe,EAAM,IAAI,EAAK,EAAE;AAC5C,EACD"}
1
+ {"version":3,"file":"buildTabsItems.js","names":[],"sources":["../../../../src/pages/detail/buildTabsItems.ts"],"sourcesContent":["import type { BackofficeDetailPageRouteSpec } from '@plumile/backoffice-core/types.js';\nimport type { TabItem } from '@plumile/ui/atomic/molecules/tabs/Tabs.js';\nimport type { TFunction } from 'i18next';\n\ntype DetailRoutePage<Node> = BackofficeDetailPageRouteSpec<Node>;\n\nexport const buildTabsItems = <Node>(input: {\n pages: readonly DetailRoutePage<Node>[];\n id: string;\n tApp: TFunction;\n detailPageHref: (id: string, pageId: string) => string;\n}): readonly TabItem[] => {\n return input.pages.map((page) => {\n return {\n id: page.id,\n label: page.label(input.tApp),\n preloadOnMouseEnter: true,\n to: input.detailPageHref(input.id, page.id),\n };\n });\n};\n"],"mappings":";AAMA,IAAa,KAAwB,MAM5B,EAAM,MAAM,KAAK,OACf;CACL,IAAI,EAAK;CACT,OAAO,EAAK,MAAM,EAAM,IAAI;CAC5B,qBAAqB;CACrB,IAAI,EAAM,eAAe,EAAM,IAAI,EAAK,EAAE;AAC5C,EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildDataTableColumns.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/columns/buildDataTableColumns.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EAGpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAIzC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAsBtF,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,SAAS,CAAC;IAChB,CAAC,EAAE,SAAS,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,8BAA8B,CAAC,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG;IACvE,IAAI,EAAE,mBAAmB,CAAC;CAC3B,CAAC;AAcF,wBAAgB,qBAAqB,CAAC,GAAG,EACvC,OAAO,EAAE,SAAS,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAC7C,OAAO,EAAE,4BAA4B,GACpC,SAAS,8BAA8B,CAAC,GAAG,CAAC,EAAE,CAqFhD"}
1
+ {"version":3,"file":"buildDataTableColumns.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/columns/buildDataTableColumns.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EAGpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAIzC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAsBtF,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,SAAS,CAAC;IAChB,CAAC,EAAE,SAAS,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,8BAA8B,CAAC,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG;IACvE,IAAI,EAAE,mBAAmB,CAAC;CAC3B,CAAC;AAcF,wBAAgB,qBAAqB,CAAC,GAAG,EACvC,OAAO,EAAE,SAAS,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAC7C,OAAO,EAAE,4BAA4B,GACpC,SAAS,8BAA8B,CAAC,GAAG,CAAC,EAAE,CAyFhD"}
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeDetailRelationListBlock.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/detail/BackofficeDetailRelationListBlock.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAU3E,OAAO,KAAK,EAEV,mCAAmC,EAEpC,MAAM,mCAAmC,CAAC;AAc3C,MAAM,MAAM,sCAAsC,GAAG;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,mCAAmC,CAAC;IAC9C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAkMF,eAAO,MAAM,iCAAiC,GAAI,6BAI/C,sCAAsC,KAAG,GAAG,CAAC,OAgB/C,CAAC;AAEF,eAAe,iCAAiC,CAAC"}
1
+ {"version":3,"file":"BackofficeDetailRelationListBlock.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/detail/BackofficeDetailRelationListBlock.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAU3E,OAAO,KAAK,EAEV,mCAAmC,EAEpC,MAAM,mCAAmC,CAAC;AAc3C,MAAM,MAAM,sCAAsC,GAAG;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,mCAAmC,CAAC;IAC9C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAyLF,eAAO,MAAM,iCAAiC,GAAI,6BAI/C,sCAAsC,KAAG,GAAG,CAAC,OAgB/C,CAAC;AAEF,eAAe,iCAAiC,CAAC"}
@@ -3,7 +3,7 @@ import type { MetricTone } from '@plumile/ui/components/dashboard/metric_card/Me
3
3
  export type BackofficeRelationSummaryItem = {
4
4
  readonly id: string;
5
5
  readonly label: string;
6
- readonly count?: number | null;
6
+ readonly count?: ReactNode;
7
7
  readonly href?: string;
8
8
  readonly description?: ReactNode;
9
9
  readonly tone?: MetricTone;
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeRelationsSummaryGrid.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/detail/BackofficeRelationsSummaryGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4DAA4D,CAAC;AAK7F,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,6BAA6B,EAAE,CAAC;CAC1D,CAAC;AAEF,eAAO,MAAM,8BAA8B,GAAI,mBAG5C,mCAAmC,KAAG,GAAG,CAAC,OAAO,GAAG,IAuCtD,CAAC;AAEF,eAAe,8BAA8B,CAAC"}
1
+ {"version":3,"file":"BackofficeRelationsSummaryGrid.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/detail/BackofficeRelationsSummaryGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4DAA4D,CAAC;AAK7F,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,6BAA6B,EAAE,CAAC;CAC1D,CAAC;AAEF,eAAO,MAAM,8BAA8B,GAAI,mBAG5C,mCAAmC,KAAG,GAAG,CAAC,OAAO,GAAG,IA4CtD,CAAC;AAEF,eAAe,8BAA8B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeFilterAction.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/filters/BackofficeFilterAction.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAKjC,OAAO,KAAK,EACV,wCAAwC,EAEzC,MAAM,mCAAmC,CAAC;AAgB3C,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,wCAAwC,CAAC;CACvD,CAAC;AAeF,eAAO,MAAM,sBAAsB,GACjC,OAAO,2BAA2B,KACjC,GAAG,CAAC,OAAO,GAAG,IA2EhB,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"BackofficeFilterAction.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/filters/BackofficeFilterAction.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAKjC,OAAO,KAAK,EACV,wCAAwC,EAEzC,MAAM,mCAAmC,CAAC;AAgB3C,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,wCAAwC,CAAC;CACvD,CAAC;AAeF,eAAO,MAAM,sBAAsB,GACjC,OAAO,2BAA2B,KACjC,GAAG,CAAC,OAAO,GAAG,IA4EhB,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeHubTemplate.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/hub/BackofficeHubTemplate.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAQjD,MAAM,MAAM,6BAA6B,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9D,MAAM,MAAM,yBAAyB,GAAG;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,6BAA6B,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,yBAAyB,EAAE,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,SAAS,0BAA0B,EAAE,CAAC;IAC9C,MAAM,CAAC,EAAE,2BAA2B,CAAC;IACrC,UAAU,EAAE,+BAA+B,CAAC;CAC7C,CAAC;AAMF,eAAO,MAAM,qBAAqB,GAAI,iCAInC,0BAA0B,KAAG,GAAG,CAAC,OAuFnC,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"BackofficeHubTemplate.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/hub/BackofficeHubTemplate.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAQjD,MAAM,MAAM,6BAA6B,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9D,MAAM,MAAM,yBAAyB,GAAG;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,6BAA6B,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,yBAAyB,EAAE,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,SAAS,0BAA0B,EAAE,CAAC;IAC9C,MAAM,CAAC,EAAE,2BAA2B,CAAC;IACrC,UAAU,EAAE,+BAA+B,CAAC;CAC7C,CAAC;AAMF,eAAO,MAAM,qBAAqB,GAAI,iCAInC,0BAA0B,KAAG,GAAG,CAAC,OAwFnC,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeTopbarBreadcrumb.d.ts","sourceRoot":"","sources":["../../../../../../src/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAOjC,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAIjE,MAAM,MAAM,+BAA+B,GAAG;IAC5C,KAAK,EAAE,SAAS,8BAA8B,EAAE,CAAC;CAClD,CAAC;AAyBF,eAAO,MAAM,0BAA0B,GAAI,YAExC,+BAA+B,KAAG,GAAG,CAAC,OAsFxC,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
1
+ {"version":3,"file":"BackofficeTopbarBreadcrumb.d.ts","sourceRoot":"","sources":["../../../../../../src/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAOjC,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAIjE,MAAM,MAAM,+BAA+B,GAAG;IAC5C,KAAK,EAAE,SAAS,8BAA8B,EAAE,CAAC;CAClD,CAAC;AAyBF,eAAO,MAAM,0BAA0B,GAAI,YAExC,+BAA+B,KAAG,GAAG,CAAC,OAuFxC,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
@@ -9,10 +9,11 @@ export type BackofficeInlineLinkProps<TManifest extends BackofficeEntityManifest
9
9
  ariaLabel?: string;
10
10
  icon?: 'auto' | 'none';
11
11
  openInNewTab?: boolean;
12
+ preloadOnMouseEnter?: boolean;
12
13
  endAdornment?: ReactNode;
13
14
  onClick?: MouseEventHandler<HTMLAnchorElement>;
14
15
  children?: ReactNode;
15
16
  };
16
- export declare const BackofficeInlineLink: <TManifest extends BackofficeEntityManifestMap = BackofficeEntityManifestMap>({ target, label, className, title, ariaLabel, icon, openInNewTab, endAdornment, onClick, children, }: BackofficeInlineLinkProps<TManifest>) => JSX.Element;
17
+ export declare const BackofficeInlineLink: <TManifest extends BackofficeEntityManifestMap = BackofficeEntityManifestMap>({ target, label, className, title, ariaLabel, icon, openInNewTab, preloadOnMouseEnter, endAdornment, onClick, children, }: BackofficeInlineLinkProps<TManifest>) => JSX.Element;
17
18
  export default BackofficeInlineLink;
18
19
  //# sourceMappingURL=BackofficeInlineLink.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeInlineLink.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/links/BackofficeInlineLink.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGzE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAGrF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD,MAAM,MAAM,yBAAyB,CACnC,SAAS,SAAS,2BAA2B,GAAG,2BAA2B,IACzE;IACF,MAAM,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACxC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,OAAO,CAAC,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAC/C,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,SAAS,2BAA2B,GAAG,2BAA2B,EAC3E,sGAWC,yBAAyB,CAAC,SAAS,CAAC,KAAG,GAAG,CAAC,OA2B7C,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"BackofficeInlineLink.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/links/BackofficeInlineLink.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGzE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAGrF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD,MAAM,MAAM,yBAAyB,CACnC,SAAS,SAAS,2BAA2B,GAAG,2BAA2B,IACzE;IACF,MAAM,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACxC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,OAAO,CAAC,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAC/C,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAgBF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,SAAS,2BAA2B,GAAG,2BAA2B,EAC3E,2HAYC,yBAAyB,CAAC,SAAS,CAAC,KAAG,GAAG,CAAC,OAgC7C,CAAC;AAEF,eAAe,oBAAoB,CAAC"}