@plumile/backoffice-react 0.1.102 → 0.1.104

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 (41) hide show
  1. package/lib/esm/BackofficeDashboardPage-CZAcZwRc.js +344 -0
  2. package/lib/esm/BackofficeDashboardPage-CZAcZwRc.js.map +1 -0
  3. package/lib/esm/{BackofficeEntityDetailPage-ByioPO5K.js → BackofficeEntityDetailPage-ChxBrqz8.js} +3 -3
  4. package/lib/esm/{BackofficeEntityDetailPage-ByioPO5K.js.map → BackofficeEntityDetailPage-ChxBrqz8.js.map} +1 -1
  5. package/lib/esm/{BackofficeEntityListPage-dyE4er_s.js → BackofficeEntityListPage-BACvfX6c.js} +3 -3
  6. package/lib/esm/{BackofficeEntityListPage-dyE4er_s.js.map → BackofficeEntityListPage-BACvfX6c.js.map} +1 -1
  7. package/lib/esm/{BackofficeHubPage-D2k0ZO6c.js → BackofficeHubPage-BsUXulN0.js} +2 -2
  8. package/lib/esm/BackofficeHubPage-BsUXulN0.js.map +1 -0
  9. package/lib/esm/{BackofficeLayoutPage-BiSUwAi9.js → BackofficeLayoutPage-r6dXo9SI.js} +242 -168
  10. package/lib/esm/BackofficeLayoutPage-r6dXo9SI.js.map +1 -0
  11. package/lib/esm/{LazyBackofficeEntityActionFormDialog-DwPGe2Qv.js → LazyBackofficeEntityActionFormDialog-uyYFFJGM.js} +92 -44
  12. package/lib/esm/LazyBackofficeEntityActionFormDialog-uyYFFJGM.js.map +1 -0
  13. package/lib/esm/backoffice-react.js +4 -6
  14. package/lib/esm/backoffice-react.js.map +1 -1
  15. package/lib/esm/{buildDataTableColumns-D95yRO2W.js → buildDataTableColumns-DGPjPK4N.js} +2 -1
  16. package/lib/esm/buildDataTableColumns-DGPjPK4N.js.map +1 -0
  17. package/lib/esm/style.css +1 -1
  18. package/lib/types/components/backoffice/columns/buildDataTableColumns.d.ts.map +1 -1
  19. package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts.map +1 -1
  20. package/lib/types/hooks/useBackofficeInfiniteScrollSentinel.d.ts +14 -0
  21. package/lib/types/hooks/useBackofficeInfiniteScrollSentinel.d.ts.map +1 -0
  22. package/lib/types/hooks/useBackofficeSidebarPins.d.ts +1 -0
  23. package/lib/types/hooks/useBackofficeSidebarPins.d.ts.map +1 -1
  24. package/lib/types/hooks/useSidebarGroupCollapse.d.ts +2 -0
  25. package/lib/types/hooks/useSidebarGroupCollapse.d.ts.map +1 -1
  26. package/lib/types/i18n/resources.d.ts +0 -2
  27. package/lib/types/i18n/resources.d.ts.map +1 -1
  28. package/lib/types/pages/BackofficeDashboardPage.d.ts.map +1 -1
  29. package/lib/types/pages/BackofficeDashboardPage.helpers.d.ts.map +1 -1
  30. package/lib/types/pages/BackofficeLayoutPage.d.ts.map +1 -1
  31. package/lib/types/pages/backofficeDashboardPage.css.d.ts +12 -0
  32. package/lib/types/pages/backofficeDashboardPage.css.d.ts.map +1 -1
  33. package/lib/types/provider/types.d.ts +5 -0
  34. package/lib/types/provider/types.d.ts.map +1 -1
  35. package/package.json +5 -5
  36. package/lib/esm/BackofficeDashboardPage-COKOYq4D.js +0 -197
  37. package/lib/esm/BackofficeDashboardPage-COKOYq4D.js.map +0 -1
  38. package/lib/esm/BackofficeHubPage-D2k0ZO6c.js.map +0 -1
  39. package/lib/esm/BackofficeLayoutPage-BiSUwAi9.js.map +0 -1
  40. package/lib/esm/LazyBackofficeEntityActionFormDialog-DwPGe2Qv.js.map +0 -1
  41. package/lib/esm/buildDataTableColumns-D95yRO2W.js.map +0 -1
@@ -0,0 +1,344 @@
1
+ import { r as e, t } from "./useBackofficeReactTranslation-Btt58EIo.js";
2
+ import { t as n } from "./BackofficeErrorBoundary-BwRVSDHU.js";
3
+ import { t as r } from "./buildDataTableColumns-DGPjPK4N.js";
4
+ import { t as i } from "./BackofficeRightPageLayout-BZb7LhT-.js";
5
+ import { a } from "./useBackofficeLazyValue-CoIAK-5N.js";
6
+ import { t as o } from "./buildBreadcrumbs-C9cyiXb7.js";
7
+ import { Suspense as s } from "react";
8
+ import { useTranslation as c } from "react-i18next";
9
+ import { Link as l } from "@plumile/router";
10
+ import { DataTable as u, DetailPageTemplate as d, InfoTile as f, MetricCard as p } from "@plumile/ui";
11
+ import * as m from "react-relay";
12
+ import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
13
+ //#region src/pages/BackofficeDashboardPage.helpers.ts
14
+ var v = (e, t) => e(t), y = (e, t) => {
15
+ switch (e.kind) {
16
+ case "entityCount":
17
+ case "shortcut": return e.label;
18
+ case "tablePreview":
19
+ case "textBlock": return e.title;
20
+ case "recentItems":
21
+ case "metricGroup":
22
+ case "quickActions":
23
+ case "statusSummary": return e.title == null ? t.title : e.title;
24
+ default: return t.title;
25
+ }
26
+ }, b = (e) => "query" in e && e.query != null;
27
+ //#endregion
28
+ //#region ../../node_modules/@vanilla-extract/recipes/dist/createRuntimeFn-62c9670f.esm.js
29
+ function x(e, t) {
30
+ if (typeof e != "object" || !e) return e;
31
+ var n = e[Symbol.toPrimitive];
32
+ if (n !== void 0) {
33
+ var r = n.call(e, t || "default");
34
+ if (typeof r != "object") return r;
35
+ throw TypeError("@@toPrimitive must return a primitive value.");
36
+ }
37
+ return (t === "string" ? String : Number)(e);
38
+ }
39
+ function S(e) {
40
+ var t = x(e, "string");
41
+ return typeof t == "symbol" ? t : String(t);
42
+ }
43
+ function C(e, t, n) {
44
+ return t = S(t), t in e ? Object.defineProperty(e, t, {
45
+ value: n,
46
+ enumerable: !0,
47
+ configurable: !0,
48
+ writable: !0
49
+ }) : e[t] = n, e;
50
+ }
51
+ function w(e, t) {
52
+ var n = Object.keys(e);
53
+ if (Object.getOwnPropertySymbols) {
54
+ var r = Object.getOwnPropertySymbols(e);
55
+ t && (r = r.filter(function(t) {
56
+ return Object.getOwnPropertyDescriptor(e, t).enumerable;
57
+ })), n.push.apply(n, r);
58
+ }
59
+ return n;
60
+ }
61
+ function T(e) {
62
+ for (var t = 1; t < arguments.length; t++) {
63
+ var n = arguments[t] == null ? {} : arguments[t];
64
+ t % 2 ? w(Object(n), !0).forEach(function(t) {
65
+ C(e, t, n[t]);
66
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : w(Object(n)).forEach(function(t) {
67
+ Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t));
68
+ });
69
+ }
70
+ return e;
71
+ }
72
+ function E(e, t) {
73
+ var n = {};
74
+ for (var r in e) n[r] = t(e[r], r);
75
+ return n;
76
+ }
77
+ var D = (e, t, n) => {
78
+ for (var r of Object.keys(e)) if (e[r] !== (t[r] ?? n[r])) return !1;
79
+ return !0;
80
+ }, O = (e) => {
81
+ var t = (t) => {
82
+ var n = e.defaultClassName, r = T(T({}, e.defaultVariants), t);
83
+ for (var i in r) {
84
+ var a = r[i] ?? e.defaultVariants[i];
85
+ if (a != null) {
86
+ var o = a;
87
+ typeof o == "boolean" && (o = o === !0 ? "true" : "false");
88
+ var s = e.variantClassNames[i][o];
89
+ s && (n += " " + s);
90
+ }
91
+ }
92
+ for (var [c, l] of e.compoundVariants) D(c, r, e.defaultVariants) && (n += " " + l);
93
+ return n;
94
+ };
95
+ return t.variants = () => Object.keys(e.variantClassNames), t.classNames = {
96
+ get base() {
97
+ return e.defaultClassName.split(" ")[0];
98
+ },
99
+ get variants() {
100
+ return E(e.variantClassNames, (e) => E(e, (e) => e.split(" ")[0]));
101
+ }
102
+ }, t;
103
+ }, k = "mt26ef0 txvbqb9iy txvbqbaog", A = O({
104
+ defaultClassName: "mt26ef7 mt26ef1",
105
+ variantClassNames: { size: {
106
+ s: "mt26ef8 mt26ef2",
107
+ m: "mt26ef9 mt26ef3",
108
+ l: "mt26efa mt26ef4",
109
+ xl: "mt26efb mt26ef5",
110
+ full: "mt26efc mt26ef6"
111
+ } },
112
+ defaultVariants: { size: "m" },
113
+ compoundVariants: []
114
+ }), j = "txvbqb9ip txvbqbai7 txvbqbao7", M = "txvbqba7 txvbqbamy txvbqbehy", N = "txvbqb9ip txvbqbajy txvbqbqi7 txvbqb8vg", P = "txvbqb9ip txvbqbai7 txvbqbao7", F = "mt26efd txvbqbp6g txvbqbly7 txvbqb9ip txvbqbcp txvbqbdpp txvbqbaog txvbqb12g txvbqb62p txvbqb1qg txvbqb3og txvbqbv9z txvbqb3b", I = "txvbqbamp txvbqbakg", { useLazyLoadQuery: L } = m, R = (e) => e ?? "m", z = ({ widget: n, globalData: i }) => {
115
+ let { t: a } = c(), { t: o } = t(), { entities: s } = e(), d = (e) => "resolve" in n && n.resolve != null ? n.resolve(e) : null;
116
+ if (n.kind === "textBlock") return /* @__PURE__ */ g(f, {
117
+ title: v(n.title, a),
118
+ children: /* @__PURE__ */ g("div", {
119
+ className: j,
120
+ children: v(n.body, a)
121
+ })
122
+ });
123
+ if (n.kind === "shortcut") {
124
+ let e = s[n.entityId];
125
+ if (e == null) return null;
126
+ let t = v(n.label, a);
127
+ return e.kind === "tool" ? /* @__PURE__ */ g(f, {
128
+ title: t,
129
+ children: /* @__PURE__ */ g("div", {
130
+ className: N,
131
+ children: /* @__PURE__ */ g(l, {
132
+ to: e.routes.list,
133
+ children: o("dashboard.actions.openTool")
134
+ })
135
+ })
136
+ }) : /* @__PURE__ */ g(f, {
137
+ title: t,
138
+ children: /* @__PURE__ */ g("div", {
139
+ className: N,
140
+ children: /* @__PURE__ */ g(l, {
141
+ to: e.routes.list,
142
+ children: o("dashboard.actions.openList")
143
+ })
144
+ })
145
+ });
146
+ }
147
+ if (n.kind === "tablePreview") {
148
+ let e = d(i);
149
+ if (e == null) return null;
150
+ let t = r(e.columns, {
151
+ tApp: a,
152
+ t: o,
153
+ resolveEntityHref: (e, t) => {
154
+ let n = s[e];
155
+ return n == null ? null : n.routes.detail(t);
156
+ }
157
+ });
158
+ return /* @__PURE__ */ g(f, {
159
+ title: v(n.title, a),
160
+ children: /* @__PURE__ */ g(u, {
161
+ columns: t,
162
+ rows: e.rows,
163
+ getRowId: (e, t) => {
164
+ if (typeof e == "object" && e) {
165
+ let { id: t } = e;
166
+ if (typeof t == "string" && t.trim() !== "") return t;
167
+ }
168
+ return String(t);
169
+ }
170
+ })
171
+ });
172
+ }
173
+ if (n.kind === "metricGroup") {
174
+ let e = d(i);
175
+ return e == null ? null : /* @__PURE__ */ g("div", {
176
+ className: k,
177
+ children: e.map((e) => {
178
+ let t = e.value ?? o("common.notAvailable");
179
+ return /* @__PURE__ */ g(p, {
180
+ label: v(e.label, a),
181
+ value: t,
182
+ hint: e.meta == null ? void 0 : v(e.meta, a)
183
+ }, e.id);
184
+ })
185
+ });
186
+ }
187
+ if (n.kind === "quickActions") return /* @__PURE__ */ g(f, {
188
+ title: n.title == null ? o("dashboard.actions.openTool") : v(n.title, a),
189
+ children: /* @__PURE__ */ g("div", {
190
+ className: N,
191
+ children: n.actions.map((e) => /* @__PURE__ */ g(l, {
192
+ to: e.href,
193
+ children: v(e.label, a)
194
+ }, e.id))
195
+ })
196
+ });
197
+ if (n.kind === "statusSummary") {
198
+ let e = d(i);
199
+ return e == null ? null : /* @__PURE__ */ g(f, {
200
+ title: n.title == null ? void 0 : v(n.title, a),
201
+ children: /* @__PURE__ */ g("div", {
202
+ className: P,
203
+ children: e.map((e) => {
204
+ let t = e.value ?? o("common.notAvailable"), n = /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g("span", { children: v(e.label, a) }), /* @__PURE__ */ g("span", {
205
+ className: I,
206
+ children: t
207
+ })] });
208
+ return e.href == null ? /* @__PURE__ */ g("div", {
209
+ className: F,
210
+ children: n
211
+ }, e.id) : /* @__PURE__ */ g(l, {
212
+ to: e.href,
213
+ className: F,
214
+ children: n
215
+ }, e.id);
216
+ })
217
+ })
218
+ });
219
+ }
220
+ if (n.kind === "recentItems") return /* @__PURE__ */ g(f, {
221
+ title: n.title == null ? o("dashboard.title") : v(n.title, a),
222
+ children: /* @__PURE__ */ g("div", {
223
+ className: j,
224
+ children: o("common.notAvailable")
225
+ })
226
+ });
227
+ let m = s[n.entityId];
228
+ if (m?.kind !== "list-detail") return null;
229
+ let y = d(i), b = o("common.notAvailable");
230
+ return typeof y?.count == "number" && (b = y.count), /* @__PURE__ */ g(f, {
231
+ title: v(n.label, a),
232
+ children: /* @__PURE__ */ _("div", {
233
+ className: j,
234
+ children: [/* @__PURE__ */ g("div", {
235
+ className: M,
236
+ children: b
237
+ }), /* @__PURE__ */ g("div", {
238
+ className: N,
239
+ children: /* @__PURE__ */ g(l, {
240
+ to: m.routes.list,
241
+ children: o("dashboard.actions.openList")
242
+ })
243
+ })]
244
+ })
245
+ });
246
+ }, B = ({ widget: e }) => /* @__PURE__ */ g(z, {
247
+ widget: e,
248
+ globalData: L(e.query, {}, { fetchPolicy: "store-or-network" })
249
+ }), V = ({ config: e, globalData: r }) => {
250
+ let { t: i } = c(), { t: a } = t();
251
+ return /* @__PURE__ */ g(d, {
252
+ header: {
253
+ title: v(e.title, i),
254
+ subtitle: (e.subtitle == null ? void 0 : v(e.subtitle, i)) ?? a("dashboard.subtitle")
255
+ },
256
+ children: /* @__PURE__ */ g("div", {
257
+ className: k,
258
+ children: e.widgets.map((t) => {
259
+ let o = b(t) ? /* @__PURE__ */ g(B, { widget: t }) : /* @__PURE__ */ g(z, {
260
+ widget: t,
261
+ globalData: r
262
+ });
263
+ return /* @__PURE__ */ g(n, {
264
+ fallback: () => /* @__PURE__ */ g(f, {
265
+ title: v(y(t, e), i),
266
+ children: /* @__PURE__ */ g("div", {
267
+ className: j,
268
+ children: a("common.notAvailable")
269
+ })
270
+ }),
271
+ children: /* @__PURE__ */ g(s, {
272
+ fallback: /* @__PURE__ */ g(f, {
273
+ title: v(y(t, e), i),
274
+ children: /* @__PURE__ */ g("div", {
275
+ className: j,
276
+ children: a("common.loading")
277
+ })
278
+ }),
279
+ children: /* @__PURE__ */ g("div", {
280
+ className: A({ size: R(t.size) }),
281
+ children: o
282
+ })
283
+ })
284
+ }, t.id);
285
+ })
286
+ })
287
+ });
288
+ }, H = ({ config: e }) => /* @__PURE__ */ g(V, {
289
+ config: e,
290
+ globalData: L(e.query, {}, { fetchPolicy: "store-or-network" })
291
+ }), U = () => {
292
+ let { t: n } = c(), { t: r } = t(), { entities: s } = e(), u = a(), p = o(r);
293
+ if (u == null) {
294
+ let e = Object.values(s).filter((e) => e.kind === "list-detail" && e.hasList).map((e) => ({
295
+ config: e,
296
+ label: v(e.label, n)
297
+ })).sort((e, t) => e.label.localeCompare(t.label));
298
+ return /* @__PURE__ */ g(i, {
299
+ breadcrumb: p,
300
+ children: /* @__PURE__ */ g(d, {
301
+ header: {
302
+ title: r("dashboard.title"),
303
+ subtitle: r("dashboard.subtitle")
304
+ },
305
+ children: /* @__PURE__ */ g("div", {
306
+ className: k,
307
+ children: e.map(({ config: e, label: t }) => /* @__PURE__ */ g("div", {
308
+ className: A({ size: "m" }),
309
+ children: /* @__PURE__ */ g(f, {
310
+ title: t,
311
+ children: /* @__PURE__ */ _("div", {
312
+ className: j,
313
+ children: [/* @__PURE__ */ g("div", {
314
+ className: M,
315
+ children: r("common.notAvailable")
316
+ }), /* @__PURE__ */ g("div", {
317
+ className: N,
318
+ children: /* @__PURE__ */ g(l, {
319
+ to: e.routes.list,
320
+ children: r("dashboard.actions.openList")
321
+ })
322
+ })]
323
+ })
324
+ })
325
+ }, e.id))
326
+ })
327
+ })
328
+ });
329
+ }
330
+ return u.query == null ? /* @__PURE__ */ g(i, {
331
+ breadcrumb: p,
332
+ children: /* @__PURE__ */ g(V, {
333
+ config: u,
334
+ globalData: null
335
+ })
336
+ }) : /* @__PURE__ */ g(i, {
337
+ breadcrumb: p,
338
+ children: /* @__PURE__ */ g(H, { config: u })
339
+ });
340
+ };
341
+ //#endregion
342
+ export { U as BackofficeDashboardPage, U as default };
343
+
344
+ //# sourceMappingURL=BackofficeDashboardPage-CZAcZwRc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackofficeDashboardPage-CZAcZwRc.js","names":[],"sources":["../../src/pages/BackofficeDashboardPage.helpers.ts","../../../../node_modules/@vanilla-extract/recipes/dist/createRuntimeFn-62c9670f.esm.js","../../src/pages/backofficeDashboardPage.css.ts","../../src/pages/BackofficeDashboardPage.tsx"],"sourcesContent":["import type {\n BackofficeDashboardConfig,\n BackofficeDashboardWidget,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\nimport type { TFunction } from 'i18next';\nimport type { GraphQLTaggedNode } from 'relay-runtime';\n\nexport const resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\nexport const getWidgetLabel = (\n widget: BackofficeDashboardWidget,\n config: BackofficeDashboardConfig,\n): I18nLabel => {\n switch (widget.kind) {\n case 'entityCount':\n case 'shortcut':\n return widget.label;\n case 'tablePreview':\n case 'textBlock':\n return widget.title;\n case 'recentItems':\n case 'metricGroup':\n case 'quickActions':\n case 'statusSummary':\n if (widget.title != null) {\n return widget.title;\n }\n return config.title;\n default:\n return config.title;\n }\n};\n\nexport const hasWidgetQuery = (\n widget: BackofficeDashboardWidget,\n): widget is BackofficeDashboardWidget & { query: GraphQLTaggedNode } => {\n return 'query' in widget && widget.query != null;\n};\n","function toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\n\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : String(i);\n}\n\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\n\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\n\nfunction mapValues(input, fn) {\n var result = {};\n for (var _key in input) {\n result[_key] = fn(input[_key], _key);\n }\n return result;\n}\n\nvar shouldApplyCompound = (compoundCheck, selections, defaultVariants) => {\n for (var key of Object.keys(compoundCheck)) {\n var _selections$key;\n if (compoundCheck[key] !== ((_selections$key = selections[key]) !== null && _selections$key !== void 0 ? _selections$key : defaultVariants[key])) {\n return false;\n }\n }\n return true;\n};\nvar createRuntimeFn = config => {\n var runtimeFn = options => {\n var className = config.defaultClassName;\n var selections = _objectSpread2(_objectSpread2({}, config.defaultVariants), options);\n for (var variantName in selections) {\n var _selections$variantNa;\n var variantSelection = (_selections$variantNa = selections[variantName]) !== null && _selections$variantNa !== void 0 ? _selections$variantNa : config.defaultVariants[variantName];\n if (variantSelection != null) {\n var selection = variantSelection;\n if (typeof selection === 'boolean') {\n // @ts-expect-error\n selection = selection === true ? 'true' : 'false';\n }\n var selectionClassName =\n // @ts-expect-error\n config.variantClassNames[variantName][selection];\n if (selectionClassName) {\n className += ' ' + selectionClassName;\n }\n }\n }\n for (var [compoundCheck, compoundClassName] of config.compoundVariants) {\n if (shouldApplyCompound(compoundCheck, selections, config.defaultVariants)) {\n className += ' ' + compoundClassName;\n }\n }\n return className;\n };\n runtimeFn.variants = () => Object.keys(config.variantClassNames);\n runtimeFn.classNames = {\n get base() {\n return config.defaultClassName.split(' ')[0];\n },\n get variants() {\n return mapValues(config.variantClassNames, classNames => mapValues(classNames, className => className.split(' ')[0]));\n }\n };\n return runtimeFn;\n};\n\nexport { createRuntimeFn as c, mapValues as m };\n","import { style } from '@vanilla-extract/css';\nimport { recipe } from '@vanilla-extract/recipes';\nimport { sprinkles, vars } from '@plumile/ui';\n\nexport const tilesGrid = style([\n sprinkles({\n display: 'grid',\n gap: 3,\n }),\n {\n gridTemplateColumns: 'repeat(12, minmax(0, 1fr))',\n '@media': {\n 'screen and (max-width: 1199px)': {\n gridTemplateColumns: 'repeat(2, minmax(0, 1fr))',\n },\n 'screen and (max-width: 767px)': {\n gridTemplateColumns: 'minmax(0, 1fr)',\n },\n },\n },\n]);\n\nexport const widget = recipe({\n base: style({\n minWidth: 0,\n }),\n variants: {\n size: {\n s: style({\n gridColumn: 'span 3',\n '@media': {\n 'screen and (max-width: 1199px)': {\n gridColumn: 'span 1',\n },\n },\n }),\n m: style({\n gridColumn: 'span 4',\n '@media': {\n 'screen and (max-width: 1199px)': {\n gridColumn: 'span 1',\n },\n },\n }),\n l: style({\n gridColumn: 'span 6',\n '@media': {\n 'screen and (max-width: 1199px)': {\n gridColumn: 'span 2',\n },\n 'screen and (max-width: 767px)': {\n gridColumn: 'span 1',\n },\n },\n }),\n xl: style({\n gridColumn: 'span 8',\n '@media': {\n 'screen and (max-width: 1199px)': {\n gridColumn: 'span 2',\n },\n 'screen and (max-width: 767px)': {\n gridColumn: 'span 1',\n },\n },\n }),\n full: style({\n gridColumn: '1 / -1',\n }),\n },\n },\n defaultVariants: {\n size: 'm',\n },\n});\n\nexport const tileBody = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n});\n\nexport const tileCount = sprinkles({\n fontSize: '3xl',\n fontWeight: 'bold',\n lineHeight: 1,\n});\n\nexport const links = sprinkles({\n display: 'flex',\n flexWrap: 'wrap',\n rowGap: 2,\n columnGap: 3,\n});\n\nexport const statusList = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n});\n\nexport const statusItem = style([\n sprinkles({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 3,\n paddingY: 2,\n borderWidth: 0,\n borderBottomWidth: 'default',\n borderStyle: 'solid',\n borderBottomColor: 'borderLight',\n color: 'text',\n textDecoration: 'none',\n }),\n {\n selectors: {\n '&:last-child': {\n borderBottomWidth: 0,\n },\n '&:hover': {\n color: vars.colors.primary,\n },\n },\n },\n]);\n\nexport const statusValue = sprinkles({\n fontWeight: 'semibold',\n fontVariantNumeric: 'tabular-nums',\n});\n","/* eslint-disable no-ternary */\nimport { type JSX, Suspense } from 'react';\nimport { Link } from '@plumile/router';\nimport type {\n BackofficeDashboardConfig,\n BackofficeDashboardWidget,\n BackofficeDashboardWidgetSize,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\nimport {\n DataTable,\n DetailPageTemplate,\n InfoTile,\n MetricCard,\n} from '@plumile/ui';\nimport { useTranslation } from 'react-i18next';\nimport * as ReactRelay from 'react-relay';\nimport type { GraphQLTaggedNode, OperationType } from 'relay-runtime';\n\nimport { BackofficeErrorBoundary } from '../components/backoffice/errors/BackofficeErrorBoundary.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport { useBackofficeDashboardConfig } from '../provider/useBackofficeLazyValue.js';\nimport { buildDataTableColumns } from '../components/backoffice/columns/buildDataTableColumns.js';\nimport { BackofficeRightPageLayout } from '../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js';\nimport { buildDashboardBreadcrumb } from '../components/backoffice/layout/breadcrumb/buildBreadcrumbs.js';\nimport {\n getWidgetLabel,\n hasWidgetQuery,\n resolveLabel,\n} from './BackofficeDashboardPage.helpers.js';\n\nimport * as styles from './backofficeDashboardPage.css.js';\n\nconst { useLazyLoadQuery } = ReactRelay;\n\ntype WidgetContentProps = {\n widget: BackofficeDashboardWidget;\n globalData: unknown;\n};\n\nconst resolveWidgetSize = (\n size: BackofficeDashboardWidgetSize | undefined,\n): BackofficeDashboardWidgetSize => {\n return size ?? 'm';\n};\n\nconst WidgetContent = ({\n widget,\n globalData,\n}: WidgetContentProps): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { entities } = useBackofficeConfig();\n\n const resolveData = (data: unknown): unknown => {\n if ('resolve' in widget && widget.resolve != null) {\n return widget.resolve(data);\n }\n return null;\n };\n\n if (widget.kind === 'textBlock') {\n const title = resolveLabel(widget.title, tApp);\n const body = resolveLabel(widget.body, tApp);\n return (\n <InfoTile title={title}>\n <div className={styles.tileBody}>{body}</div>\n </InfoTile>\n );\n }\n\n if (widget.kind === 'shortcut') {\n const entity = entities[widget.entityId];\n if (entity == null) {\n return null;\n }\n const title = resolveLabel(widget.label, tApp);\n if (entity.kind === 'tool') {\n return (\n <InfoTile title={title}>\n <div className={styles.links}>\n <Link to={entity.routes.list}>\n {t('dashboard.actions.openTool')}\n </Link>\n </div>\n </InfoTile>\n );\n }\n return (\n <InfoTile title={title}>\n <div className={styles.links}>\n <Link to={entity.routes.list}>{t('dashboard.actions.openList')}</Link>\n </div>\n </InfoTile>\n );\n }\n\n if (widget.kind === 'tablePreview') {\n const resolved = resolveData(globalData) as {\n columns: readonly unknown[];\n rows: readonly unknown[];\n } | null;\n if (resolved == null) {\n return null;\n }\n const columns = buildDataTableColumns(resolved.columns as never, {\n tApp,\n t,\n resolveEntityHref: (entityId, refId) => {\n const entityConfig = entities[entityId];\n if (entityConfig == null) {\n return null;\n }\n return entityConfig.routes.detail(refId);\n },\n });\n const title = resolveLabel(widget.title, tApp);\n return (\n <InfoTile title={title}>\n <DataTable\n columns={columns}\n rows={resolved.rows}\n getRowId={(row, index) => {\n if (row != null && typeof row === 'object') {\n const record = row as Record<string, unknown>;\n const { id } = record;\n if (typeof id === 'string' && id.trim() !== '') {\n return id;\n }\n }\n return String(index);\n }}\n />\n </InfoTile>\n );\n }\n\n if (widget.kind === 'metricGroup') {\n const resolved = resolveData(globalData) as\n | readonly {\n id: string;\n label: I18nLabel;\n value: string | number | null;\n meta?: I18nLabel;\n href?: string;\n }[]\n | null;\n if (resolved == null) {\n return null;\n }\n return (\n <div className={styles.tilesGrid}>\n {resolved.map((metric) => {\n const value = metric.value ?? t('common.notAvailable');\n return (\n <MetricCard\n key={metric.id}\n label={resolveLabel(metric.label, tApp)}\n value={value}\n hint={\n metric.meta != null\n ? resolveLabel(metric.meta, tApp)\n : undefined\n }\n />\n );\n })}\n </div>\n );\n }\n\n if (widget.kind === 'quickActions') {\n const title =\n widget.title != null\n ? resolveLabel(widget.title, tApp)\n : t('dashboard.actions.openTool');\n return (\n <InfoTile title={title}>\n <div className={styles.links}>\n {widget.actions.map((action) => {\n return (\n <Link key={action.id} to={action.href}>\n {resolveLabel(action.label, tApp)}\n </Link>\n );\n })}\n </div>\n </InfoTile>\n );\n }\n\n if (widget.kind === 'statusSummary') {\n const resolved = resolveData(globalData) as\n | readonly {\n id: string;\n label: I18nLabel;\n value: string | number | null;\n href?: string;\n }[]\n | null;\n if (resolved == null) {\n return null;\n }\n const title =\n widget.title != null ? resolveLabel(widget.title, tApp) : undefined;\n return (\n <InfoTile title={title}>\n <div className={styles.statusList}>\n {resolved.map((item) => {\n const value = item.value ?? t('common.notAvailable');\n const content = (\n <>\n <span>{resolveLabel(item.label, tApp)}</span>\n <span className={styles.statusValue}>{value}</span>\n </>\n );\n if (item.href != null) {\n return (\n <Link\n key={item.id}\n to={item.href}\n className={styles.statusItem}\n >\n {content}\n </Link>\n );\n }\n return (\n <div key={item.id} className={styles.statusItem}>\n {content}\n </div>\n );\n })}\n </div>\n </InfoTile>\n );\n }\n\n if (widget.kind === 'recentItems') {\n const title =\n widget.title != null\n ? resolveLabel(widget.title, tApp)\n : t('dashboard.title');\n return (\n <InfoTile title={title}>\n <div className={styles.tileBody}>{t('common.notAvailable')}</div>\n </InfoTile>\n );\n }\n\n const entityManifest = entities[widget.entityId];\n if (entityManifest?.kind !== 'list-detail') {\n return null;\n }\n const resolved = resolveData(globalData) as { count: number | null } | null;\n let countLabel: number | string = t('common.notAvailable');\n if (typeof resolved?.count === 'number') {\n countLabel = resolved.count;\n }\n const title = resolveLabel(widget.label, tApp);\n return (\n <InfoTile title={title}>\n <div className={styles.tileBody}>\n <div className={styles.tileCount}>{countLabel}</div>\n <div className={styles.links}>\n <Link to={entityManifest.routes.list}>\n {t('dashboard.actions.openList')}\n </Link>\n </div>\n </div>\n </InfoTile>\n );\n};\n\ntype WidgetWithQueryProps = {\n widget: BackofficeDashboardWidget & { query: GraphQLTaggedNode };\n};\n\nconst WidgetWithQuery = ({ widget }: WidgetWithQueryProps): JSX.Element => {\n const data = useLazyLoadQuery<OperationType>(\n widget.query,\n {},\n {\n fetchPolicy: 'store-or-network',\n },\n );\n\n return <WidgetContent widget={widget} globalData={data} />;\n};\n\ntype DashboardContentProps = {\n config: BackofficeDashboardConfig;\n globalData: unknown;\n};\n\nconst DashboardContent = ({\n config,\n globalData,\n}: DashboardContentProps): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n\n const title = resolveLabel(config.title, tApp);\n const subtitle =\n config.subtitle != null ? resolveLabel(config.subtitle, tApp) : undefined;\n\n return (\n <DetailPageTemplate\n header={{\n title,\n subtitle: subtitle ?? t('dashboard.subtitle'),\n }}\n >\n <div className={styles.tilesGrid}>\n {config.widgets.map((widget) => {\n const content = hasWidgetQuery(widget) ? (\n <WidgetWithQuery widget={widget} />\n ) : (\n <WidgetContent widget={widget} globalData={globalData} />\n );\n\n return (\n <BackofficeErrorBoundary\n key={widget.id}\n fallback={() => {\n return (\n <InfoTile\n title={resolveLabel(getWidgetLabel(widget, config), tApp)}\n >\n <div className={styles.tileBody}>\n {t('common.notAvailable')}\n </div>\n </InfoTile>\n );\n }}\n >\n <Suspense\n fallback={\n <InfoTile\n title={resolveLabel(getWidgetLabel(widget, config), tApp)}\n >\n <div className={styles.tileBody}>{t('common.loading')}</div>\n </InfoTile>\n }\n >\n <div\n className={styles.widget({\n size: resolveWidgetSize(widget.size),\n })}\n >\n {content}\n </div>\n </Suspense>\n </BackofficeErrorBoundary>\n );\n })}\n </div>\n </DetailPageTemplate>\n );\n};\n\ntype DashboardWithQueryProps = {\n config: BackofficeDashboardConfig;\n};\n\nconst DashboardWithQuery = ({\n config,\n}: DashboardWithQueryProps): JSX.Element => {\n const data = useLazyLoadQuery<OperationType>(\n config.query as never,\n {},\n { fetchPolicy: 'store-or-network' },\n );\n\n return <DashboardContent config={config} globalData={data} />;\n};\n\nexport const BackofficeDashboardPage = (): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { entities } = useBackofficeConfig();\n const dashboard = useBackofficeDashboardConfig();\n const breadcrumb = buildDashboardBreadcrumb(t);\n\n if (dashboard == null) {\n const items = Object.values(entities)\n .filter((config) => {\n return config.kind === 'list-detail' && config.hasList;\n })\n .map((config) => {\n return {\n config,\n label: resolveLabel(config.label, tApp),\n };\n })\n .sort((left, right) => {\n return left.label.localeCompare(right.label);\n });\n\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <DetailPageTemplate\n header={{\n title: t('dashboard.title'),\n subtitle: t('dashboard.subtitle'),\n }}\n >\n <div className={styles.tilesGrid}>\n {items.map(({ config, label }) => {\n return (\n <div key={config.id} className={styles.widget({ size: 'm' })}>\n <InfoTile title={label}>\n <div className={styles.tileBody}>\n <div className={styles.tileCount}>\n {t('common.notAvailable')}\n </div>\n <div className={styles.links}>\n <Link to={config.routes.list}>\n {t('dashboard.actions.openList')}\n </Link>\n </div>\n </div>\n </InfoTile>\n </div>\n );\n })}\n </div>\n </DetailPageTemplate>\n </BackofficeRightPageLayout>\n );\n }\n\n if (dashboard.query != null) {\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <DashboardWithQuery config={dashboard} />\n </BackofficeRightPageLayout>\n );\n }\n\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <DashboardContent config={dashboard} globalData={null} />\n </BackofficeRightPageLayout>\n );\n};\n\nexport default BackofficeDashboardPage;\n"],"x_google_ignoreList":[1],"mappings":"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"}
@@ -5,12 +5,12 @@ import { n as i } from "./EntityIdPickerDialog-Yhmr-WsV.js";
5
5
  import { a, n as o, r as s, t as c } from "./BackofficeDetailPayload-P61MDRLE.js";
6
6
  import { i as l } from "./mutationResult-CcQMY13J.js";
7
7
  import { t as u } from "./pageResolution-hAQA5C6S.js";
8
- import { t as d } from "./buildDataTableColumns-D95yRO2W.js";
8
+ import { t as d } from "./buildDataTableColumns-DGPjPK4N.js";
9
9
  import { t as f } from "./BackofficeRightPageLayout-BZb7LhT-.js";
10
10
  import { n as p, t as m } from "./toastViewAction-DJkv_4p9.js";
11
11
  import { n as h } from "./buildBreadcrumbs-C9cyiXb7.js";
12
12
  import { n as g } from "./BackofficeEntityDetailLayoutContext-DeuH5PCW.js";
13
- import { i as _, n as ee, r as v, t as y } from "./LazyBackofficeEntityActionFormDialog-DwPGe2Qv.js";
13
+ import { i as _, n as ee, r as v, t as y } from "./LazyBackofficeEntityActionFormDialog-uyYFFJGM.js";
14
14
  import { Fragment as b, Suspense as x, createElement as S, useCallback as C, useContext as w, useMemo as T, useState as E } from "react";
15
15
  import { useTranslation as D } from "react-i18next";
16
16
  import { HttpRedirect as O, Link as k, RoutingContext as A } from "@plumile/router";
@@ -1050,4 +1050,4 @@ var Qe = (e) => e.pages.map((t) => ({
1050
1050
  //#endregion
1051
1051
  export { ht as BackofficeEntityDetailPage, ht as default };
1052
1052
 
1053
- //# sourceMappingURL=BackofficeEntityDetailPage-ByioPO5K.js.map
1053
+ //# sourceMappingURL=BackofficeEntityDetailPage-ChxBrqz8.js.map