@plumile/backoffice-react 0.1.101 → 0.1.102
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.
- package/lib/esm/{BackofficeAcceptInvitationPage-CEtApVwL.js → BackofficeAcceptInvitationPage-BfRsORii.js} +3 -3
- package/lib/esm/{BackofficeAcceptInvitationPage-CEtApVwL.js.map → BackofficeAcceptInvitationPage-BfRsORii.js.map} +1 -1
- package/lib/esm/{BackofficeDashboardPage-r8vK_JA6.js → BackofficeDashboardPage-COKOYq4D.js} +5 -4
- package/lib/esm/{BackofficeDashboardPage-r8vK_JA6.js.map → BackofficeDashboardPage-COKOYq4D.js.map} +1 -1
- package/lib/esm/{BackofficeEntityActionFormDialog-BgRTJ_JS.js → BackofficeEntityActionFormDialog-BgMuhyU8.js} +2 -2
- package/lib/esm/{BackofficeEntityActionFormDialog-BgRTJ_JS.js.map → BackofficeEntityActionFormDialog-BgMuhyU8.js.map} +1 -1
- package/lib/esm/{BackofficeEntityDetailLayoutContext-C_tBqkVq.js → BackofficeEntityDetailLayoutContext-DeuH5PCW.js} +1 -1
- package/lib/esm/{BackofficeEntityDetailLayoutContext-C_tBqkVq.js.map → BackofficeEntityDetailLayoutContext-DeuH5PCW.js.map} +1 -1
- package/lib/esm/{BackofficeEntityDetailLayoutPage-DXjRqvcZ.js → BackofficeEntityDetailLayoutPage-Duc_DcIV.js} +2 -2
- package/lib/esm/{BackofficeEntityDetailLayoutPage-DXjRqvcZ.js.map → BackofficeEntityDetailLayoutPage-Duc_DcIV.js.map} +1 -1
- package/lib/esm/{BackofficeEntityDetailPage-CwzKp_Yw.js → BackofficeEntityDetailPage-ByioPO5K.js} +7 -6
- package/lib/esm/{BackofficeEntityDetailPage-CwzKp_Yw.js.map → BackofficeEntityDetailPage-ByioPO5K.js.map} +1 -1
- package/lib/esm/{BackofficeEntityDetailUnknownPageRedirect-DRWTeox-.js → BackofficeEntityDetailUnknownPageRedirect-xupMeril.js} +2 -2
- package/lib/esm/{BackofficeEntityDetailUnknownPageRedirect-DRWTeox-.js.map → BackofficeEntityDetailUnknownPageRedirect-xupMeril.js.map} +1 -1
- package/lib/esm/{BackofficeEntityListPage-DVT3rrfa.js → BackofficeEntityListPage-dyE4er_s.js} +5 -4
- package/lib/esm/{BackofficeEntityListPage-DVT3rrfa.js.map → BackofficeEntityListPage-dyE4er_s.js.map} +1 -1
- package/lib/esm/BackofficeHubPage-D2k0ZO6c.js +136 -0
- package/lib/esm/BackofficeHubPage-D2k0ZO6c.js.map +1 -0
- package/lib/esm/BackofficeLayoutPage-BiSUwAi9.js +625 -0
- package/lib/esm/BackofficeLayoutPage-BiSUwAi9.js.map +1 -0
- package/lib/esm/{BackofficeLoginPage-Cc3kcOQV.js → BackofficeLoginPage-BMPhO1cr.js} +4 -4
- package/lib/esm/{BackofficeLoginPage-Cc3kcOQV.js.map → BackofficeLoginPage-BMPhO1cr.js.map} +1 -1
- package/lib/esm/{BackofficePasswordResetCompletePage-CF_0t3Nq.js → BackofficePasswordResetCompletePage-OApMUiOi.js} +3 -3
- package/lib/esm/{BackofficePasswordResetCompletePage-CF_0t3Nq.js.map → BackofficePasswordResetCompletePage-OApMUiOi.js.map} +1 -1
- package/lib/esm/{BackofficePasswordResetRequestPage-BJOrQXcy.js → BackofficePasswordResetRequestPage-DPDImb37.js} +2 -2
- package/lib/esm/{BackofficePasswordResetRequestPage-BJOrQXcy.js.map → BackofficePasswordResetRequestPage-DPDImb37.js.map} +1 -1
- package/lib/esm/BackofficePermissionsContext-CmWwudBU.js +11 -0
- package/lib/esm/BackofficePermissionsContext-CmWwudBU.js.map +1 -0
- package/lib/esm/BackofficeRightPageLayout-BZb7LhT-.js +53 -0
- package/lib/esm/BackofficeRightPageLayout-BZb7LhT-.js.map +1 -0
- package/lib/esm/{BackofficeTopbarPortalContext-iD7dm4_h.js → BackofficeTopbarPortalContext-CphoSrZD.js} +1 -1
- package/lib/esm/{BackofficeTopbarPortalContext-iD7dm4_h.js.map → BackofficeTopbarPortalContext-CphoSrZD.js.map} +1 -1
- package/lib/esm/{BackofficeVerifyEmailPage-C81LlsNM.js → BackofficeVerifyEmailPage-DHuSOxDf.js} +3 -3
- package/lib/esm/{BackofficeVerifyEmailPage-C81LlsNM.js.map → BackofficeVerifyEmailPage-DHuSOxDf.js.map} +1 -1
- package/lib/esm/{LazyBackofficeEntityActionFormDialog-L8xwaGqH.js → LazyBackofficeEntityActionFormDialog-DwPGe2Qv.js} +2 -2
- package/lib/esm/{LazyBackofficeEntityActionFormDialog-L8xwaGqH.js.map → LazyBackofficeEntityActionFormDialog-DwPGe2Qv.js.map} +1 -1
- package/lib/esm/backoffice-react.js +287 -250
- package/lib/esm/backoffice-react.js.map +1 -1
- package/lib/esm/{backofficeAuthPaths-BiJvoI5Q.js → backofficeAuthPaths-2KMmkBLv.js} +1 -1
- package/lib/esm/{backofficeAuthPaths-BiJvoI5Q.js.map → backofficeAuthPaths-2KMmkBLv.js.map} +1 -1
- package/lib/esm/{buildBreadcrumbs-CqF9Nh6x.js → buildBreadcrumbs-C9cyiXb7.js} +8 -4
- package/lib/esm/buildBreadcrumbs-C9cyiXb7.js.map +1 -0
- package/lib/esm/buildDataTableColumns-D95yRO2W.js +65 -0
- package/lib/esm/buildDataTableColumns-D95yRO2W.js.map +1 -0
- package/lib/esm/sidebarUtils-BZETlHea.js +74 -0
- package/lib/esm/sidebarUtils-BZETlHea.js.map +1 -0
- package/lib/esm/style.css +1 -1
- package/lib/esm/{toastViewAction-BGTS7vqm.js → toastViewAction-DJkv_4p9.js} +1 -1
- package/lib/esm/{toastViewAction-BGTS7vqm.js.map → toastViewAction-DJkv_4p9.js.map} +1 -1
- package/lib/esm/{useBackofficeAuth-ers1FUGe.js → useBackofficeAuth-DVAXNAjP.js} +1 -1
- package/lib/esm/{useBackofficeAuth-ers1FUGe.js.map → useBackofficeAuth-DVAXNAjP.js.map} +1 -1
- package/lib/esm/{useBackofficeLazyValue-Bh_13h8A.js → useBackofficeLazyValue-CoIAK-5N.js} +1 -1
- package/lib/esm/{useBackofficeLazyValue-Bh_13h8A.js.map → useBackofficeLazyValue-CoIAK-5N.js.map} +1 -1
- package/lib/types/components/backoffice/layout/BackofficePermissionsContext.d.ts +8 -0
- package/lib/types/components/backoffice/layout/BackofficePermissionsContext.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/breadcrumb/buildBreadcrumbs.d.ts +4 -0
- package/lib/types/components/backoffice/layout/breadcrumb/buildBreadcrumbs.d.ts.map +1 -1
- package/lib/types/components/backoffice/layout/buildSidebarSections.d.ts.map +1 -1
- package/lib/types/components/backoffice/layout/sidebarUtils.d.ts +11 -3
- package/lib/types/components/backoffice/layout/sidebarUtils.d.ts.map +1 -1
- package/lib/types/i18n/resources.d.ts +28 -0
- package/lib/types/i18n/resources.d.ts.map +1 -1
- package/lib/types/pages/BackofficeHubPage.d.ts +8 -0
- package/lib/types/pages/BackofficeHubPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficeLayoutPage.d.ts.map +1 -1
- package/lib/types/pages/backofficeHubPage.css.d.ts +15 -0
- package/lib/types/pages/backofficeHubPage.css.d.ts.map +1 -0
- package/lib/types/provider/types.d.ts +22 -5
- package/lib/types/provider/types.d.ts.map +1 -1
- package/lib/types/router/createBackofficeRoutes.d.ts +6 -1
- package/lib/types/router/createBackofficeRoutes.d.ts.map +1 -1
- package/package.json +5 -5
- package/lib/esm/BackofficeLayoutPage-DQ0sVv24.js +0 -609
- package/lib/esm/BackofficeLayoutPage-DQ0sVv24.js.map +0 -1
- package/lib/esm/BackofficeRightPageLayout-hexJmpam.js +0 -113
- package/lib/esm/BackofficeRightPageLayout-hexJmpam.js.map +0 -1
- package/lib/esm/buildBreadcrumbs-CqF9Nh6x.js.map +0 -1
- package/lib/esm/sidebarUtils-DVkLmFbS.js +0 -52
- package/lib/esm/sidebarUtils-DVkLmFbS.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backofficeAuthPaths-
|
|
1
|
+
{"version":3,"file":"backofficeAuthPaths-2KMmkBLv.js","names":[],"sources":["../../src/router/backofficeAuthPaths.ts"],"sourcesContent":["const normalizeAbsolutePath = (value: string): string => {\n if (value.trim() === '' || value === '/') {\n return '/';\n }\n let withLeadingSlash = value;\n if (!value.startsWith('/')) {\n withLeadingSlash = `/${value}`;\n }\n if (withLeadingSlash.endsWith('/')) {\n return withLeadingSlash.slice(0, -1);\n }\n return withLeadingSlash;\n};\n\nconst prefixBackofficePath = (basePath: string, value: string): string => {\n const normalizedPath = normalizeAbsolutePath(value);\n const normalizedBasePath = normalizeAbsolutePath(basePath);\n\n if (normalizedBasePath === '/') {\n return normalizedPath;\n }\n if (\n normalizedPath === normalizedBasePath ||\n normalizedPath.startsWith(`${normalizedBasePath}/`)\n ) {\n return normalizedPath;\n }\n if (normalizedPath === '/') {\n return normalizedBasePath;\n }\n return `${normalizedBasePath}${normalizedPath}`;\n};\n\nexport const getBackofficeLoginPath = (basePath: string): string => {\n return prefixBackofficePath(basePath, '/login');\n};\n\nexport const getBackofficePasswordResetPath = (basePath: string): string => {\n return prefixBackofficePath(basePath, '/login/reset');\n};\n"],"mappings":";AAAA,IAAM,KAAyB,MAA0B;CACvD,IAAI,EAAM,MAAM,KAAK,MAAM,MAAU,KACnC,OAAO;CAET,IAAI,IAAmB;CAOvB,OANK,EAAM,WAAW,IAAI,KACxB,IAAmB,IAAI,MAErB,EAAiB,SAAS,IAAI,GACzB,EAAiB,MAAM,GAAG,GAAG,GAE/B;GAGH,KAAwB,GAAkB,MAA0B;CACxE,IAAM,IAAiB,EAAsB,EAAM,EAC7C,IAAqB,EAAsB,EAAS;CAc1D,OAZI,MAAuB,OAIzB,MAAmB,KACnB,EAAe,WAAW,GAAG,EAAmB,GAAG,GAE5C,IAEL,MAAmB,MACd,IAEF,GAAG,IAAqB;GAGpB,KAA0B,MAC9B,EAAqB,GAAU,SAAS,EAGpC,KAAkC,MACtC,EAAqB,GAAU,eAAe"}
|
|
@@ -10,11 +10,15 @@ var e = (e, t) => e(t), t = (t) => {
|
|
|
10
10
|
id: "dashboard",
|
|
11
11
|
label: e("dashboard.title"),
|
|
12
12
|
isCurrent: !0
|
|
13
|
-
}], r = (
|
|
13
|
+
}], r = (e) => [{
|
|
14
|
+
id: `hub-${e.id}`,
|
|
15
|
+
label: e.title,
|
|
16
|
+
isCurrent: !0
|
|
17
|
+
}], i = (t, n) => [{
|
|
14
18
|
id: `${t.id}-list`,
|
|
15
19
|
label: e(t.label, n),
|
|
16
20
|
isCurrent: !0
|
|
17
|
-
}],
|
|
21
|
+
}], a = (n) => {
|
|
18
22
|
let r = e(n.config.label, n.tApp), i = t({
|
|
19
23
|
layoutView: n.layoutView,
|
|
20
24
|
detailHeader: n.config.header,
|
|
@@ -39,6 +43,6 @@ var e = (e, t) => e(t), t = (t) => {
|
|
|
39
43
|
];
|
|
40
44
|
};
|
|
41
45
|
//#endregion
|
|
42
|
-
export { i as n, r, n as t };
|
|
46
|
+
export { r as i, a as n, i as r, n as t };
|
|
43
47
|
|
|
44
|
-
//# sourceMappingURL=buildBreadcrumbs-
|
|
48
|
+
//# sourceMappingURL=buildBreadcrumbs-C9cyiXb7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildBreadcrumbs-C9cyiXb7.js","names":[],"sources":["../../src/components/backoffice/layout/breadcrumb/buildBreadcrumbs.ts"],"sourcesContent":["import type { TFunction } from 'i18next';\n\nimport type {\n BackofficeResolvedDetailLayoutFacetConfig,\n BackofficeResolvedDetailPageFacetConfig,\n BackofficeResolvedListFacetConfig,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\n\nimport type { BackofficeTopbarBreadcrumbItem } from './types.js';\n\nconst resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\nexport const resolveEntityTitleFromDetailHeader = <\n LayoutView extends object,\n>(input: {\n layoutView: LayoutView;\n detailHeader: BackofficeResolvedDetailLayoutFacetConfig['header'];\n tApp: TFunction;\n}): string => {\n const titleValue = input.detailHeader.titleValue?.(\n input.layoutView,\n input.tApp,\n );\n if (typeof titleValue === 'string' && titleValue.trim() !== '') {\n return titleValue;\n }\n\n const title = resolveLabel(input.detailHeader.title, input.tApp);\n if (title.trim() !== '') {\n return title;\n }\n\n const maybeId = (input.layoutView as { id?: unknown }).id;\n if (typeof maybeId === 'string' && maybeId.trim() !== '') {\n return maybeId;\n }\n\n return '';\n};\n\nexport const buildDashboardBreadcrumb = (\n t: TFunction,\n): readonly BackofficeTopbarBreadcrumbItem[] => {\n return [\n {\n id: 'dashboard',\n label: t('dashboard.title'),\n isCurrent: true,\n },\n ];\n};\n\nexport const buildHubBreadcrumb = (input: {\n id: string;\n title: string;\n}): readonly BackofficeTopbarBreadcrumbItem[] => {\n return [\n {\n id: `hub-${input.id}`,\n label: input.title,\n isCurrent: true,\n },\n ];\n};\n\nexport const buildEntityListBreadcrumb = (\n config: BackofficeResolvedListFacetConfig,\n tApp: TFunction,\n): readonly BackofficeTopbarBreadcrumbItem[] => {\n return [\n {\n id: `${config.id}-list`,\n label: resolveLabel(config.label, tApp),\n isCurrent: true,\n },\n ];\n};\n\nexport const buildEntityDetailBreadcrumb = (input: {\n config:\n | BackofficeResolvedDetailLayoutFacetConfig\n | BackofficeResolvedDetailPageFacetConfig;\n tApp: TFunction;\n entityId: string;\n layoutView: unknown;\n pageLabel: string;\n}): readonly BackofficeTopbarBreadcrumbItem[] => {\n const listLabel = resolveLabel(input.config.label, input.tApp);\n const entityTitle = resolveEntityTitleFromDetailHeader({\n layoutView: input.layoutView as object,\n detailHeader: input.config.header,\n tApp: input.tApp,\n });\n\n return [\n {\n id: `${input.config.id}-list`,\n label: listLabel,\n to: input.config.routes.list,\n },\n {\n id: `${input.config.id}-entity-${input.entityId}`,\n label: entityTitle,\n to: input.config.routes.detail(input.entityId),\n },\n {\n id: `${input.config.id}-page-${input.pageLabel}`,\n label: input.pageLabel,\n isCurrent: true,\n },\n ];\n};\n\nexport const buildToolBreadcrumb = (input: {\n title: string;\n}): readonly BackofficeTopbarBreadcrumbItem[] => {\n return [\n {\n id: `tool-${input.title}`,\n label: input.title,\n isCurrent: true,\n },\n ];\n};\n"],"mappings":";AAWA,IAAM,KAAgB,GAAkB,MAC/B,EAAM,EAAK,EAGP,KAEX,MAIY;CACZ,IAAM,IAAa,EAAM,aAAa,aACpC,EAAM,YACN,EAAM,KACP;CACD,IAAI,OAAO,KAAe,YAAY,EAAW,MAAM,KAAK,IAC1D,OAAO;CAGT,IAAM,IAAQ,EAAa,EAAM,aAAa,OAAO,EAAM,KAAK;CAChE,IAAI,EAAM,MAAM,KAAK,IACnB,OAAO;CAGT,IAAM,IAAW,EAAM,WAAgC;CAKvD,OAJI,OAAO,KAAY,YAAY,EAAQ,MAAM,KAAK,KAC7C,IAGF;GAGI,KACX,MAEO,CACL;CACE,IAAI;CACJ,OAAO,EAAE,kBAAkB;CAC3B,WAAW;CACZ,CACF,EAGU,KAAsB,MAI1B,CACL;CACE,IAAI,OAAO,EAAM;CACjB,OAAO,EAAM;CACb,WAAW;CACZ,CACF,EAGU,KACX,GACA,MAEO,CACL;CACE,IAAI,GAAG,EAAO,GAAG;CACjB,OAAO,EAAa,EAAO,OAAO,EAAK;CACvC,WAAW;CACZ,CACF,EAGU,KAA+B,MAQK;CAC/C,IAAM,IAAY,EAAa,EAAM,OAAO,OAAO,EAAM,KAAK,EACxD,IAAc,EAAmC;EACrD,YAAY,EAAM;EAClB,cAAc,EAAM,OAAO;EAC3B,MAAM,EAAM;EACb,CAAC;CAEF,OAAO;EACL;GACE,IAAI,GAAG,EAAM,OAAO,GAAG;GACvB,OAAO;GACP,IAAI,EAAM,OAAO,OAAO;GACzB;EACD;GACE,IAAI,GAAG,EAAM,OAAO,GAAG,UAAU,EAAM;GACvC,OAAO;GACP,IAAI,EAAM,OAAO,OAAO,OAAO,EAAM,SAAS;GAC/C;EACD;GACE,IAAI,GAAG,EAAM,OAAO,GAAG,QAAQ,EAAM;GACrC,OAAO,EAAM;GACb,WAAW;GACZ;EACF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Link as e } from "@plumile/router";
|
|
2
|
+
import { FormattedDate as t, Tag as n } from "@plumile/ui";
|
|
3
|
+
import { Fragment as r, jsx as i } from "react/jsx-runtime";
|
|
4
|
+
import { BACKOFFICE_DATE_TIME_OPTIONS as a } from "@plumile/backoffice-core/constants.js";
|
|
5
|
+
//#region src/components/backoffice/columns/buildDataTableColumns.tsx
|
|
6
|
+
var o = (e, t) => e(t), s = (e, t) => e == null || typeof e == "string" && e.trim() === "" ? t : String(e), c = (e) => {
|
|
7
|
+
if (e === "sm" || e === "md" || e === "lg" || e === "xl") return e;
|
|
8
|
+
};
|
|
9
|
+
function l(l, u) {
|
|
10
|
+
let { tApp: d, t: f, resolveEntityHref: p } = u, m = f("common.notAvailable");
|
|
11
|
+
return l.filter((e) => e.key !== "id").map((l) => ({
|
|
12
|
+
id: l.key,
|
|
13
|
+
header: o(l.header, d),
|
|
14
|
+
size: l.size,
|
|
15
|
+
isPrimary: l.visibility?.priority === "primary",
|
|
16
|
+
priority: l.visibility?.priority,
|
|
17
|
+
mobileRole: l.visibility?.mobile,
|
|
18
|
+
minVisibleAt: c(l.visibility?.minVisibleAt),
|
|
19
|
+
cell: (o) => {
|
|
20
|
+
let { cell: c } = l;
|
|
21
|
+
switch (c.type) {
|
|
22
|
+
case "text": return s(c.value(o), m);
|
|
23
|
+
case "link": {
|
|
24
|
+
let t = c.value(o);
|
|
25
|
+
return t == null || typeof t == "string" && t.trim() === "" ? m : /* @__PURE__ */ i(e, {
|
|
26
|
+
to: c.to(o),
|
|
27
|
+
children: t
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
case "badge": {
|
|
31
|
+
let e = c.value(o);
|
|
32
|
+
if (e == null || e.trim() === "") return m;
|
|
33
|
+
let { tone: t } = c;
|
|
34
|
+
return typeof t == "function" && (t = t(o)), /* @__PURE__ */ i(n, {
|
|
35
|
+
tone: t,
|
|
36
|
+
children: e
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
case "dateTime": return /* @__PURE__ */ i(t, {
|
|
40
|
+
value: c.value(o),
|
|
41
|
+
fallback: m,
|
|
42
|
+
options: a
|
|
43
|
+
});
|
|
44
|
+
case "entityRef": {
|
|
45
|
+
let t = c.value(o);
|
|
46
|
+
if (t.trim() === "") return m;
|
|
47
|
+
let n = p?.(c.entity, t) ?? null;
|
|
48
|
+
return n == null ? m : /* @__PURE__ */ i(e, {
|
|
49
|
+
to: n,
|
|
50
|
+
children: f("actions.view")
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
case "custom": {
|
|
54
|
+
let e = c.render(o);
|
|
55
|
+
return e == null || e === "" ? m : /* @__PURE__ */ i(r, { children: e });
|
|
56
|
+
}
|
|
57
|
+
default: return m;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
//#endregion
|
|
63
|
+
export { l as t };
|
|
64
|
+
|
|
65
|
+
//# sourceMappingURL=buildDataTableColumns-D95yRO2W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildDataTableColumns-D95yRO2W.js","names":[],"sources":["../../src/components/backoffice/columns/buildDataTableColumns.tsx"],"sourcesContent":["import { BACKOFFICE_DATE_TIME_OPTIONS } from '@plumile/backoffice-core/constants.js';\nimport type {\n BackofficeColumnSpec,\n BackofficeFieldSize,\n BackofficeListColumnVisibility,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\nimport type { TFunction } from 'i18next';\nimport { Link } from '@plumile/router';\nimport {\n FormattedDate,\n Tag,\n type DataTableBreakpoint,\n type DataTableColumn,\n} from '@plumile/ui';\n\nconst resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\nconst resolveTextValue = (\n value: string | number | null,\n fallback: string,\n): string => {\n if (value == null) {\n return fallback;\n }\n if (typeof value === 'string' && value.trim() === '') {\n return fallback;\n }\n return String(value);\n};\n\nexport type BuildDataTableColumnsOptions = {\n tApp: TFunction;\n t: TFunction;\n resolveEntityHref?: (entityId: string, refId: string) => string | null;\n};\n\nexport type BackofficeSizedDataTableColumn<Row> = DataTableColumn<Row> & {\n size: BackofficeFieldSize;\n};\n\nconst resolveBreakpoint = (\n value: BackofficeListColumnVisibility['minVisibleAt'] | undefined,\n): DataTableBreakpoint | undefined => {\n if (value === 'sm' || value === 'md' || value === 'lg' || value === 'xl') {\n return value;\n }\n return undefined;\n};\n\n/**\n *\n */\nexport function buildDataTableColumns<Row>(\n columns: readonly BackofficeColumnSpec<Row>[],\n options: BuildDataTableColumnsOptions,\n): readonly BackofficeSizedDataTableColumn<Row>[] {\n const { tApp, t, resolveEntityHref } = options;\n const fallback = t('common.notAvailable');\n const filteredColumns = columns.filter((column) => {\n return column.key !== 'id';\n });\n\n return filteredColumns.map((column) => {\n return {\n id: column.key,\n header: resolveLabel(column.header, tApp),\n size: column.size,\n isPrimary: column.visibility?.priority === 'primary',\n priority: column.visibility?.priority,\n mobileRole: column.visibility?.mobile,\n minVisibleAt: resolveBreakpoint(column.visibility?.minVisibleAt),\n cell: (row) => {\n const { cell } = column;\n switch (cell.type) {\n case 'text': {\n return resolveTextValue(cell.value(row), fallback);\n }\n case 'link': {\n const value = cell.value(row);\n if (\n value == null ||\n (typeof value === 'string' && value.trim() === '')\n ) {\n return fallback;\n }\n return <Link to={cell.to(row)}>{value}</Link>;\n }\n case 'badge': {\n const value = cell.value(row);\n if (value == null || value.trim() === '') {\n return fallback;\n }\n let { tone } = cell;\n if (typeof tone === 'function') {\n tone = tone(row);\n }\n return <Tag tone={tone}>{value}</Tag>;\n }\n case 'dateTime': {\n const value = cell.value(row);\n return (\n <FormattedDate\n value={value}\n fallback={fallback}\n options={BACKOFFICE_DATE_TIME_OPTIONS}\n />\n );\n }\n case 'entityRef': {\n const id = cell.value(row);\n if (id.trim() === '') {\n return fallback;\n }\n const href = resolveEntityHref?.(cell.entity, id) ?? null;\n if (href != null) {\n return <Link to={href}>{t('actions.view')}</Link>;\n }\n return fallback;\n }\n case 'custom': {\n const rendered = cell.render(row);\n if (rendered == null || rendered === '') {\n return fallback;\n }\n return <>{rendered}</>;\n }\n default: {\n return fallback;\n }\n }\n },\n };\n });\n}\n"],"mappings":";;;;;AAgBA,IAAM,KAAgB,GAAkB,MAC/B,EAAM,EAAK,EAGd,KACJ,GACA,MAEI,KAAS,QAGT,OAAO,KAAU,YAAY,EAAM,MAAM,KAAK,KACzC,IAEF,OAAO,EAAM,EAahB,KACJ,MACoC;CACpC,IAAI,MAAU,QAAQ,MAAU,QAAQ,MAAU,QAAQ,MAAU,MAClE,OAAO;;AAQX,SAAgB,EACd,GACA,GACgD;CAChD,IAAM,EAAE,SAAM,MAAG,yBAAsB,GACjC,IAAW,EAAE,sBAAsB;CAKzC,OAJwB,EAAQ,QAAQ,MAC/B,EAAO,QAAQ,KAGjB,CAAgB,KAAK,OACnB;EACL,IAAI,EAAO;EACX,QAAQ,EAAa,EAAO,QAAQ,EAAK;EACzC,MAAM,EAAO;EACb,WAAW,EAAO,YAAY,aAAa;EAC3C,UAAU,EAAO,YAAY;EAC7B,YAAY,EAAO,YAAY;EAC/B,cAAc,EAAkB,EAAO,YAAY,aAAa;EAChE,OAAO,MAAQ;GACb,IAAM,EAAE,YAAS;GACjB,QAAQ,EAAK,MAAb;IACE,KAAK,QACH,OAAO,EAAiB,EAAK,MAAM,EAAI,EAAE,EAAS;IAEpD,KAAK,QAAQ;KACX,IAAM,IAAQ,EAAK,MAAM,EAAI;KAO7B,OALE,KAAS,QACR,OAAO,KAAU,YAAY,EAAM,MAAM,KAAK,KAExC,IAEF,kBAAC,GAAD;MAAM,IAAI,EAAK,GAAG,EAAI;gBAAG;MAAa,CAAA;;IAE/C,KAAK,SAAS;KACZ,IAAM,IAAQ,EAAK,MAAM,EAAI;KAC7B,IAAI,KAAS,QAAQ,EAAM,MAAM,KAAK,IACpC,OAAO;KAET,IAAI,EAAE,YAAS;KAIf,OAHI,OAAO,KAAS,eAClB,IAAO,EAAK,EAAI,GAEX,kBAAC,GAAD;MAAW;gBAAO;MAAY,CAAA;;IAEvC,KAAK,YAEH,OACE,kBAAC,GAAD;KACS,OAHG,EAAK,MAAM,EAGd;KACG;KACV,SAAS;KACT,CAAA;IAGN,KAAK,aAAa;KAChB,IAAM,IAAK,EAAK,MAAM,EAAI;KAC1B,IAAI,EAAG,MAAM,KAAK,IAChB,OAAO;KAET,IAAM,IAAO,IAAoB,EAAK,QAAQ,EAAG,IAAI;KAIrD,OAHI,KAAQ,OAGL,IAFE,kBAAC,GAAD;MAAM,IAAI;gBAAO,EAAE,eAAe;MAAQ,CAAA;;IAIrD,KAAK,UAAU;KACb,IAAM,IAAW,EAAK,OAAO,EAAI;KAIjC,OAHI,KAAY,QAAQ,MAAa,KAC5B,IAEF,kBAAA,GAAA,EAAA,UAAG,GAAY,CAAA;;IAExB,SACE,OAAO;;;EAId,EACD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
//#region src/components/backoffice/layout/sidebarUtils.ts
|
|
2
|
+
var e = (e, t) => e(t), t = (e, t) => !!(e === t || t !== "/" && e.startsWith(`${t}/`)), n = (e) => ({ main: { entities: Object.keys(e) } }), r = (e, t) => t?.groups ?? n(e), i = (e) => e.items == null ? e.entities?.map((e) => ({
|
|
3
|
+
kind: "entity",
|
|
4
|
+
id: e
|
|
5
|
+
})) ?? [] : e.items, a = (e, t) => {
|
|
6
|
+
let n = t?.hubs?.[e.id];
|
|
7
|
+
return {
|
|
8
|
+
...n,
|
|
9
|
+
...e,
|
|
10
|
+
groups: e.groups ?? n?.groups ?? []
|
|
11
|
+
};
|
|
12
|
+
}, o = (e) => {
|
|
13
|
+
let t = [], n = /* @__PURE__ */ new Set();
|
|
14
|
+
return e.groups.forEach((e) => {
|
|
15
|
+
e.items.forEach((e) => {
|
|
16
|
+
n.has(e.id) || (n.add(e.id), t.push(e.id));
|
|
17
|
+
});
|
|
18
|
+
}), t;
|
|
19
|
+
}, s = (e, t) => {
|
|
20
|
+
let n = [], r = /* @__PURE__ */ new Set();
|
|
21
|
+
return Object.entries(e).forEach(([e, o]) => {
|
|
22
|
+
i(o).forEach((i) => {
|
|
23
|
+
i.kind !== "hub" || r.has(i.id) || (r.add(i.id), n.push({
|
|
24
|
+
groupId: e,
|
|
25
|
+
hub: a(i, t),
|
|
26
|
+
icon: i.icon ?? o.icon
|
|
27
|
+
}));
|
|
28
|
+
});
|
|
29
|
+
}), Object.values(t?.hubs ?? {}).forEach((e) => {
|
|
30
|
+
r.has(e.id) || (r.add(e.id), n.push({
|
|
31
|
+
groupId: null,
|
|
32
|
+
hub: a(e, t),
|
|
33
|
+
icon: e.icon
|
|
34
|
+
}));
|
|
35
|
+
}), n;
|
|
36
|
+
}, c = (e, t) => i(e).flatMap((e) => e.kind === "entity" || e.kind === "tool" ? [e.id] : e.kind === "hub" ? o(a(e, t)) : []), l = (e, t) => {
|
|
37
|
+
let n = /* @__PURE__ */ new Map();
|
|
38
|
+
return Object.entries(e).forEach(([e, r]) => {
|
|
39
|
+
c(r, t).forEach((t) => {
|
|
40
|
+
n.has(t) || n.set(t, {
|
|
41
|
+
groupId: e,
|
|
42
|
+
icon: r.icon
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}), n;
|
|
46
|
+
}, u = (e, t, n, r) => {
|
|
47
|
+
let i = t[e];
|
|
48
|
+
if (i == null) return !1;
|
|
49
|
+
let a = {
|
|
50
|
+
kind: "entity",
|
|
51
|
+
id: e
|
|
52
|
+
};
|
|
53
|
+
return i.kind === "tool" && (a = {
|
|
54
|
+
kind: "tool",
|
|
55
|
+
id: e
|
|
56
|
+
}), n?.isItemVisible == null ? i.kind === "tool" ? !0 : i.hasList : n.isItemVisible(a, r);
|
|
57
|
+
}, d = (e, t, n, r) => {
|
|
58
|
+
let i = [], a = /* @__PURE__ */ new Set();
|
|
59
|
+
return Object.entries(e).forEach(([, e]) => {
|
|
60
|
+
e.isVisible != null && !e.isVisible(r) || c(e, n).forEach((e) => {
|
|
61
|
+
a.has(e) || u(e, t, n, r) && (a.add(e), i.push(e));
|
|
62
|
+
});
|
|
63
|
+
}), i;
|
|
64
|
+
}, f = (e, n) => {
|
|
65
|
+
let r = Object.entries(n);
|
|
66
|
+
for (let [n, i] of r) if (i.kind === "tool") {
|
|
67
|
+
if (t(e, i.routes.list)) return n;
|
|
68
|
+
} else if (i.hasList && t(e, i.routes.list)) return n;
|
|
69
|
+
return null;
|
|
70
|
+
};
|
|
71
|
+
//#endregion
|
|
72
|
+
export { o as a, a as c, i, s as l, t as n, e as o, f as r, r as s, l as t, d as u };
|
|
73
|
+
|
|
74
|
+
//# sourceMappingURL=sidebarUtils-BZETlHea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidebarUtils-BZETlHea.js","names":[],"sources":["../../src/components/backoffice/layout/sidebarUtils.ts"],"sourcesContent":["import type { TFunction } from 'i18next';\n\nimport type {\n BackofficeEntityManifestMap,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\nimport type {\n BackofficeSidebarConfig,\n BackofficeIconComponent,\n BackofficeSidebarGroupConfig,\n BackofficeSidebarItemDescriptor,\n BackofficeSidebarItemConfig,\n BackofficeSidebarHubConfig,\n BackofficeResolvedSidebarHubConfig,\n} from '../../../provider/types.js';\n\nexport const resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\nexport const isActivePath = (pathname: string, href: string): boolean => {\n if (pathname === href) {\n return true;\n }\n if (href !== '/' && pathname.startsWith(`${href}/`)) {\n return true;\n }\n return false;\n};\n\nexport const buildDefaultGroups = (\n entities: BackofficeEntityManifestMap,\n): Record<string, BackofficeSidebarGroupConfig> => {\n const entityIds = Object.keys(entities);\n\n return {\n main: {\n entities: entityIds,\n },\n };\n};\n\nexport const resolveSidebarGroups = (\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n): Record<string, BackofficeSidebarGroupConfig> => {\n return sidebar?.groups ?? buildDefaultGroups(entities);\n};\n\nexport type EntityGroupLookup = Map<\n string,\n { groupId: string; icon?: BackofficeIconComponent }\n>;\n\nexport const resolveItemDescriptor = (\n item: BackofficeSidebarItemConfig,\n): BackofficeSidebarItemDescriptor => {\n if (item.kind === 'dashboard') {\n return { kind: 'dashboard', id: item.id ?? 'dashboard' };\n }\n return { kind: item.kind, id: item.id };\n};\n\nexport const resolveGroupItems = (\n group: BackofficeSidebarGroupConfig,\n): readonly BackofficeSidebarItemConfig[] => {\n if (group.items != null) {\n return group.items;\n }\n return (\n group.entities?.map((entityId) => {\n return { kind: 'entity', id: entityId } as const;\n }) ?? []\n );\n};\n\nexport const resolveSidebarHub = (\n item: BackofficeSidebarHubConfig,\n sidebar: BackofficeSidebarConfig | undefined,\n): BackofficeResolvedSidebarHubConfig => {\n const registeredHub = sidebar?.hubs?.[item.id];\n return {\n ...registeredHub,\n ...item,\n groups: item.groups ?? registeredHub?.groups ?? [],\n };\n};\n\nexport const resolveHubEntityIds = (\n hub: BackofficeResolvedSidebarHubConfig,\n): readonly string[] => {\n const output: string[] = [];\n const seen = new Set<string>();\n hub.groups.forEach((group) => {\n group.items.forEach((item) => {\n if (seen.has(item.id)) {\n return;\n }\n seen.add(item.id);\n output.push(item.id);\n });\n });\n return output;\n};\n\nexport type ResolvedSidebarHubEntry = {\n groupId: string | null;\n hub: BackofficeResolvedSidebarHubConfig;\n icon?: BackofficeIconComponent;\n};\n\nexport const resolveSidebarHubEntries = (\n groups: Record<string, BackofficeSidebarGroupConfig>,\n sidebar: BackofficeSidebarConfig | undefined,\n): readonly ResolvedSidebarHubEntry[] => {\n const output: ResolvedSidebarHubEntry[] = [];\n const seen = new Set<string>();\n\n Object.entries(groups).forEach(([groupId, group]) => {\n resolveGroupItems(group).forEach((item) => {\n if (item.kind !== 'hub' || seen.has(item.id)) {\n return;\n }\n seen.add(item.id);\n output.push({\n groupId,\n hub: resolveSidebarHub(item, sidebar),\n icon: item.icon ?? group.icon,\n });\n });\n });\n\n Object.values(sidebar?.hubs ?? {}).forEach((hub) => {\n if (seen.has(hub.id)) {\n return;\n }\n seen.add(hub.id);\n output.push({\n groupId: null,\n hub: resolveSidebarHub(hub, sidebar),\n icon: hub.icon,\n });\n });\n\n return output;\n};\n\nexport const resolveGroupEntityIds = (\n group: BackofficeSidebarGroupConfig,\n sidebar?: BackofficeSidebarConfig,\n): readonly string[] => {\n return resolveGroupItems(group).flatMap((item) => {\n if (item.kind === 'entity' || item.kind === 'tool') {\n return [item.id];\n }\n if (item.kind === 'hub') {\n return resolveHubEntityIds(resolveSidebarHub(item, sidebar));\n }\n return [];\n });\n};\n\nexport const buildEntityGroupLookup = (\n groups: Record<string, BackofficeSidebarGroupConfig>,\n sidebar?: BackofficeSidebarConfig,\n): EntityGroupLookup => {\n const lookup: EntityGroupLookup = new Map();\n\n Object.entries(groups).forEach(([groupId, group]) => {\n const entityIds = resolveGroupEntityIds(group, sidebar);\n entityIds.forEach((entityId) => {\n if (!lookup.has(entityId)) {\n lookup.set(entityId, { groupId, icon: group.icon });\n }\n });\n });\n\n return lookup;\n};\n\nconst isEntityVisible = (\n entityId: string,\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n permissions: unknown,\n): boolean => {\n const config = entities[entityId];\n if (config == null) {\n return false;\n }\n\n let descriptor: BackofficeSidebarItemDescriptor = {\n kind: 'entity',\n id: entityId,\n };\n if (config.kind === 'tool') {\n descriptor = { kind: 'tool', id: entityId };\n }\n\n if (sidebar?.isItemVisible != null) {\n return sidebar.isItemVisible(descriptor, permissions);\n }\n\n if (config.kind === 'tool') {\n return true;\n }\n return config.hasList;\n};\n\nexport const resolveVisibleEntityIds = (\n groups: Record<string, BackofficeSidebarGroupConfig>,\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n permissions: unknown,\n): string[] => {\n const output: string[] = [];\n const seen = new Set<string>();\n\n Object.entries(groups).forEach(([, group]) => {\n if (group.isVisible != null && !group.isVisible(permissions)) {\n return;\n }\n resolveGroupEntityIds(group, sidebar).forEach((entityId) => {\n if (seen.has(entityId)) {\n return;\n }\n if (!isEntityVisible(entityId, entities, sidebar, permissions)) {\n return;\n }\n seen.add(entityId);\n output.push(entityId);\n });\n });\n\n return output;\n};\n\nexport const resolveActiveEntityId = (\n pathname: string,\n entities: BackofficeEntityManifestMap,\n): string | null => {\n const entries = Object.entries(entities);\n for (const [entityId, config] of entries) {\n if (config.kind === 'tool') {\n if (isActivePath(pathname, config.routes.list)) {\n return entityId;\n }\n } else if (config.hasList && isActivePath(pathname, config.routes.list)) {\n return entityId;\n }\n }\n return null;\n};\n\nexport const resolveActiveGroupId = (\n groups: Record<string, BackofficeSidebarGroupConfig>,\n activeEntityId: string | null,\n entities: BackofficeEntityManifestMap,\n sidebar: BackofficeSidebarConfig | undefined,\n permissions: unknown,\n): string | null => {\n if (activeEntityId == null) {\n return null;\n }\n\n if (!isEntityVisible(activeEntityId, entities, sidebar, permissions)) {\n return null;\n }\n\n for (const [groupId, group] of Object.entries(groups)) {\n const isVisible = group.isVisible == null || group.isVisible(permissions);\n if (\n isVisible &&\n resolveGroupEntityIds(group, sidebar).includes(activeEntityId)\n ) {\n return groupId;\n }\n }\n\n return null;\n};\n"],"mappings":"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"}
|
package/lib/esm/style.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
.w8yhmy0{cursor:pointer;background:0 0;border-style:none;border-width:0;padding:0;text-decoration:none}.w8yhmy0:hover{color:var(--plumile-colors-brandSecondaryOrange);text-decoration:underline}.w8yhmy1:hover:not(:disabled){background-color:color-mix(in srgb, var(--plumile-colors-brandPrimaryRed) 8%, transparent);color:var(--plumile-colors-brandSecondaryOrange);border-color:var(--plumile-colors-brandSecondaryOrange)}.
|
|
1
|
+
.w8yhmy0{cursor:pointer;background:0 0;border-style:none;border-width:0;padding:0;text-decoration:none}.w8yhmy0:hover{color:var(--plumile-colors-brandSecondaryOrange);text-decoration:underline}.w8yhmy1:hover:not(:disabled){background-color:color-mix(in srgb, var(--plumile-colors-brandPrimaryRed) 8%, transparent);color:var(--plumile-colors-brandSecondaryOrange);border-color:var(--plumile-colors-brandSecondaryOrange)}._1vn15b70{max-width:10ch}._1vn15b71{max-width:18ch}._1vn15b72{max-width:28ch}._1vn15b73{max-width:44ch}._1vn15b74{max-width:64ch}._1vn15b75{max-width:100%}._80s44h0{margin:0;padding:0;list-style:none}._80s44h1{text-decoration:none}._80s44h1:hover{text-decoration:underline}@keyframes _11exksg0{0%{transform:translate(-120%)}60%{transform:translate(30%)}to{transform:translate(120%)}}._11exksg1{height:3px}._11exksg2{background:linear-gradient(90deg, var(--plumile-colors-primaryLight) 0%, var(--plumile-colors-primary) 60%, var(--plumile-colors-primaryLight) 100%);animation:1.1s ease-in-out infinite _11exksg0}.hwnq700:hover{color:var(--plumile-colors-text);background-color:var(--plumile-colors-surfaceSecondary);border-color:var(--plumile-colors-borderSubtle)}.hwnq700:focus-visible{outline:2px solid var(--plumile-colors-primary);outline-offset:2px}._1xws1b00:hover{background-color:var(--plumile-colors-surfaceMuted);color:var(--plumile-colors-text)}._1xws1b00:focus-visible{outline:2px solid var(--plumile-colors-blue-500);outline-offset:2px}.wy96wu0{justify-content:center;padding:0 4px}.wy96wu1{justify-content:center;align-items:center;gap:6px;width:100%;display:inline-flex}.wy96wu2{place-items:center;width:24px;height:24px;display:grid}.c0tad0{justify-content:flex-end}.c0tad1{flex-shrink:0;justify-content:center;align-items:center;width:2rem;height:2rem;display:inline-flex}._1lzrtns0{flex:none}._1lzrtns1{flex:0 auto}._1myhzvp0{min-height:112px}._1myhzvp0:hover{border-color:var(--plumile-colors-border);background-color:var(--plumile-colors-surfaceMuted)}._1myhzvp0:focus-visible{outline:2px solid var(--plumile-colors-primary);outline-offset:2px}
|
|
2
2
|
/*$vite$:1*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toastViewAction-
|
|
1
|
+
{"version":3,"file":"toastViewAction-DJkv_4p9.js","names":[],"sources":["../../src/components/backoffice/actions/toastViewAction.ts"],"sourcesContent":["import type { TFunction } from 'i18next';\n\nimport type {\n BackofficeActionToastSpec,\n BackofficeEntityManifestMap,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\nimport type { ToastAction } from '@plumile/ui';\n\nconst resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\nexport const resolveToastSpec = <Node = unknown, Response = unknown>(\n toast: BackofficeActionToastSpec<Node, Response>,\n tApp: TFunction,\n): { title: string; message?: string } => {\n const title = resolveLabel(toast.title, tApp);\n let message: string | undefined;\n if (toast.message != null) {\n message = resolveLabel(toast.message, tApp);\n }\n return { title, message };\n};\n\nexport const resolveToastViewActions = <\n Node = unknown,\n Response = unknown,\n>(input: {\n toast: BackofficeActionToastSpec<Node, Response>;\n response: Response;\n node: Node;\n tApp: TFunction;\n entities: BackofficeEntityManifestMap;\n defaultLabel: string;\n navigateTo: (to: string) => void;\n}): readonly ToastAction[] | undefined => {\n const { toast } = input;\n if (toast.view == null) {\n return undefined;\n }\n\n const targetId = toast.view.getTargetId(input.response, input.node);\n if (targetId == null || targetId.trim() === '') {\n return undefined;\n }\n\n const entity = input.entities[toast.view.entityId];\n if (entity == null) {\n return undefined;\n }\n\n const href = entity.routes.detail(targetId);\n let label = input.defaultLabel;\n if (toast.view.label != null) {\n label = resolveLabel(toast.view.label, input.tApp);\n }\n\n return [\n {\n id: `view-${toast.view.entityId}-${targetId}`,\n label,\n onClick: () => {\n input.navigateTo(href);\n },\n },\n ];\n};\n"],"mappings":";AASA,IAAM,KAAgB,GAAkB,MAC/B,EAAM,EAAK,EAGP,KACX,GACA,MACwC;CACxC,IAAM,IAAQ,EAAa,EAAM,OAAO,EAAK,EACzC;CAIJ,OAHI,EAAM,WAAW,SACnB,IAAU,EAAa,EAAM,SAAS,EAAK,GAEtC;EAAE;EAAO;EAAS;GAGd,KAGX,MAQwC;CACxC,IAAM,EAAE,aAAU;CAClB,IAAI,EAAM,QAAQ,MAChB;CAGF,IAAM,IAAW,EAAM,KAAK,YAAY,EAAM,UAAU,EAAM,KAAK;CACnE,IAAI,KAAY,QAAQ,EAAS,MAAM,KAAK,IAC1C;CAGF,IAAM,IAAS,EAAM,SAAS,EAAM,KAAK;CACzC,IAAI,KAAU,MACZ;CAGF,IAAM,IAAO,EAAO,OAAO,OAAO,EAAS,EACvC,IAAQ,EAAM;CAKlB,OAJI,EAAM,KAAK,SAAS,SACtB,IAAQ,EAAa,EAAM,KAAK,OAAO,EAAM,KAAK,GAG7C,CACL;EACE,IAAI,QAAQ,EAAM,KAAK,SAAS,GAAG;EACnC;EACA,eAAe;GACb,EAAM,WAAW,EAAK;;EAEzB,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBackofficeAuth-ers1FUGe.js","names":[],"sources":["../../src/hooks/useBackofficeAuth.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react';\nimport * as ReactRelay from 'react-relay';\nimport type { GraphQLTaggedNode, PayloadError } from 'relay-runtime';\n\nimport {\n createUseAuth,\n type UseAuthReturn,\n type AcceptInvitationResponse,\n type AcceptInvitationVariables,\n type BeginAuthenticationResponse,\n type BeginAuthenticationVariables,\n type BeginPasskeyLoginResponse,\n type BeginPasskeyLoginVariables,\n type CompleteMfaResponse,\n type CompleteMfaVariables,\n type FinishPasskeyLoginResponse,\n type FinishPasskeyLoginVariables,\n type LoginResponse,\n type LoginVariables,\n type LogoutResponse,\n type LogoutVariables,\n} from './useAuth.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport type { BackofficeLazyValue } from '../provider/lazyValue.js';\nimport { useRelayEnvironment } from '../relay/useRelayEnvironment.js';\n\nconst { commitMutation } = ReactRelay;\n\ntype MutationCommitConfig<TVariables, TResponse> = {\n variables: TVariables;\n onCompleted?: (\n response: TResponse,\n errors: readonly PayloadError[] | null,\n ) => void;\n onError?: (error: Error) => void;\n};\n\nconst toMutationLoadError = (error: unknown): Error => {\n if (error instanceof Error) {\n return error;\n }\n return new Error('Unable to load auth mutation.');\n};\n\nconst useDeferredMutation = <TVariables extends object, TResponse>(\n loadMutation: () => Promise<GraphQLTaggedNode | null>,\n) => {\n const relayEnvironment = useRelayEnvironment();\n const [inFlightCount, setInFlightCount] = useState(0);\n\n const commit = useCallback(\n (config: MutationCommitConfig<TVariables, TResponse>) => {\n setInFlightCount((count) => {\n return count + 1;\n });\n\n const finish = () => {\n setInFlightCount((count) => {\n return Math.max(0, count - 1);\n });\n };\n\n loadMutation()\n .then((mutation) => {\n if (mutation == null) {\n throw new Error('Missing auth mutation config.');\n }\n\n commitMutation(relayEnvironment, {\n mutation,\n variables: config.variables,\n onCompleted: (response, errors) => {\n finish();\n config.onCompleted?.(response as TResponse, errors ?? null);\n },\n onError: (error) => {\n finish();\n config.onError?.(error);\n },\n });\n })\n .catch((error: unknown) => {\n finish();\n config.onError?.(toMutationLoadError(error));\n });\n },\n [loadMutation, relayEnvironment],\n );\n\n return {\n commit,\n isInFlight: inFlightCount > 0,\n };\n};\n\nconst loadOptionalMutation = async <TConfig>(\n eagerMutation: GraphQLTaggedNode | null | undefined,\n lazyConfig: BackofficeLazyValue<TConfig> | null | undefined,\n selectMutation: (config: TConfig) => GraphQLTaggedNode,\n): Promise<GraphQLTaggedNode | null> => {\n if (eagerMutation != null) {\n return eagerMutation;\n }\n if (lazyConfig == null) {\n return null;\n }\n const loadedConfig = await lazyConfig.load();\n return selectMutation(loadedConfig);\n};\n\n/**\n * Provides auth actions/state backed by Relay mutations from BackofficeProvider.\n */\nexport function useBackofficeAuth(): UseAuthReturn {\n const { auth: authConfig } = useBackofficeConfig();\n const { commit: commitLogin, isInFlight: isLoginInFlight } =\n useDeferredMutation<LoginVariables, LoginResponse>(\n useCallback(async () => {\n const loginConfig = authConfig.login.get();\n return loadOptionalMutation(\n loginConfig?.loginMutation,\n authConfig.login,\n (config) => {\n return config.loginMutation;\n },\n );\n }, [authConfig.login]),\n );\n const { commit: commitLogout, isInFlight: isLogoutInFlight } =\n useDeferredMutation<LogoutVariables, LogoutResponse>(\n useCallback(async () => {\n const logoutConfig = await authConfig.logout.load();\n return logoutConfig.logoutMutation;\n }, [authConfig.logout]),\n );\n const { commit: commitCompleteMfa, isInFlight: isCompleteMfaInFlight } =\n useDeferredMutation<CompleteMfaVariables, CompleteMfaResponse>(\n useCallback(async () => {\n return loadOptionalMutation(\n authConfig.login.get()?.completeMfaMutation,\n authConfig.completeMfa,\n (config) => {\n return config.completeMfaMutation;\n },\n );\n }, [authConfig.completeMfa, authConfig.login]),\n );\n const {\n commit: commitBeginPasskeyLogin,\n isInFlight: isBeginPasskeyLoginInFlight,\n } = useDeferredMutation<\n BeginPasskeyLoginVariables,\n BeginPasskeyLoginResponse\n >(\n useCallback(async () => {\n return loadOptionalMutation(\n authConfig.login.get()?.beginPasskeyLoginMutation,\n authConfig.passkeyLogin,\n (config) => {\n return config.beginPasskeyLoginMutation;\n },\n );\n }, [authConfig.login, authConfig.passkeyLogin]),\n );\n const {\n commit: commitFinishPasskeyLogin,\n isInFlight: isFinishPasskeyLoginInFlight,\n } = useDeferredMutation<\n FinishPasskeyLoginVariables,\n FinishPasskeyLoginResponse\n >(\n useCallback(async () => {\n return loadOptionalMutation(\n authConfig.login.get()?.finishPasskeyLoginMutation,\n authConfig.passkeyLogin,\n (config) => {\n return config.finishPasskeyLoginMutation;\n },\n );\n }, [authConfig.login, authConfig.passkeyLogin]),\n );\n const {\n commit: commitBeginAuthentication,\n isInFlight: isBeginAuthenticationInFlight,\n } = useDeferredMutation<\n BeginAuthenticationVariables,\n BeginAuthenticationResponse\n >(\n useCallback(async () => {\n return loadOptionalMutation(\n authConfig.login.get()?.beginAuthenticationMutation,\n authConfig.authentication,\n (config) => {\n return config.beginAuthenticationMutation;\n },\n );\n }, [authConfig.authentication, authConfig.login]),\n );\n const {\n commit: commitAcceptInvitation,\n isInFlight: isAcceptInvitationInFlight,\n } = useDeferredMutation<AcceptInvitationVariables, AcceptInvitationResponse>(\n useCallback(async () => {\n return loadOptionalMutation(\n authConfig.login.get()?.acceptInvitationMutation,\n authConfig.acceptInvitation,\n (config) => {\n return config.acceptInvitationMutation;\n },\n );\n }, [authConfig.acceptInvitation, authConfig.login]),\n );\n const hasAcceptInvitationMutation =\n authConfig.login.get()?.acceptInvitationMutation != null ||\n authConfig.acceptInvitation != null;\n\n const useAuthWithMutations = useMemo(() => {\n let acceptInvitation:\n | {\n commit: typeof commitAcceptInvitation;\n isInFlight: boolean;\n }\n | undefined;\n if (hasAcceptInvitationMutation) {\n acceptInvitation = {\n commit: commitAcceptInvitation,\n isInFlight: isAcceptInvitationInFlight,\n };\n }\n return createUseAuth({\n login: { commit: commitLogin, isInFlight: isLoginInFlight },\n logout: { commit: commitLogout, isInFlight: isLogoutInFlight },\n completeMfa: {\n commit: commitCompleteMfa,\n isInFlight: isCompleteMfaInFlight,\n },\n beginPasskeyLogin: {\n commit: commitBeginPasskeyLogin,\n isInFlight: isBeginPasskeyLoginInFlight,\n },\n finishPasskeyLogin: {\n commit: commitFinishPasskeyLogin,\n isInFlight: isFinishPasskeyLoginInFlight,\n },\n beginAuthentication: {\n commit: commitBeginAuthentication,\n isInFlight: isBeginAuthenticationInFlight,\n },\n acceptInvitation,\n });\n }, [\n commitAcceptInvitation,\n commitBeginAuthentication,\n commitBeginPasskeyLogin,\n commitCompleteMfa,\n commitFinishPasskeyLogin,\n commitLogin,\n commitLogout,\n hasAcceptInvitationMutation,\n isAcceptInvitationInFlight,\n isBeginAuthenticationInFlight,\n isBeginPasskeyLoginInFlight,\n isCompleteMfaInFlight,\n isFinishPasskeyLoginInFlight,\n isLoginInFlight,\n isLogoutInFlight,\n ]);\n\n return useAuthWithMutations();\n}\n"],"mappings":";;;;;;AA0BA,IAAM,EAAE,gBAAA,MAAmB,GAWrB,KAAuB,MACvB,aAAiB,QACZ,IAEF,gBAAI,MAAM,gCAAgC,EAG7C,KACJ,MACG;CACH,IAAM,IAAmB,GAAqB,EACxC,CAAC,GAAe,KAAoB,EAAS,EAAE;CAyCrD,OAAO;EACL,QAxCa,GACZ,MAAwD;GACvD,GAAkB,MACT,IAAQ,EACf;GAEF,IAAM,UAAe;IACnB,GAAkB,MACT,KAAK,IAAI,GAAG,IAAQ,EAAE,CAC7B;;GAGJ,GAAc,CACX,MAAM,MAAa;IAClB,IAAI,KAAY,MACd,MAAU,MAAM,gCAAgC;IAGlD,EAAe,GAAkB;KAC/B;KACA,WAAW,EAAO;KAClB,cAAc,GAAU,MAAW;MAEjC,AADA,GAAQ,EACR,EAAO,cAAc,GAAuB,KAAU,KAAK;;KAE7D,UAAU,MAAU;MAElB,AADA,GAAQ,EACR,EAAO,UAAU,EAAM;;KAE1B,CAAC;KACF,CACD,OAAO,MAAmB;IAEzB,AADA,GAAQ,EACR,EAAO,UAAU,EAAoB,EAAM,CAAC;KAC5C;KAEN,CAAC,GAAc,EAAiB,CAIhC;EACA,YAAY,IAAgB;EAC7B;GAGG,IAAuB,OAC3B,GACA,GACA,MAEI,MAGA,KAAc,OACT,OAGF,EAAe,MADK,EAAW,MAAM,CACT;AAMrC,SAAgB,IAAmC;CACjD,IAAM,EAAE,MAAM,MAAe,GAAqB,EAC5C,EAAE,QAAQ,GAAa,YAAY,MACvC,EACE,EAAY,YAEH,EADa,EAAW,MAAM,KAEnC,EAAa,eACb,EAAW,QACV,MACQ,EAAO,cAEjB,EACA,CAAC,EAAW,MAAM,CAAC,CACvB,EACG,EAAE,QAAQ,GAAc,YAAY,MACxC,EACE,EAAY,aAEH,MADoB,EAAW,OAAO,MAAM,EAC/B,gBACnB,CAAC,EAAW,OAAO,CAAC,CACxB,EACG,EAAE,QAAQ,GAAmB,YAAY,MAC7C,EACE,EAAY,YACH,EACL,EAAW,MAAM,KAAK,EAAE,qBACxB,EAAW,cACV,MACQ,EAAO,oBAEjB,EACA,CAAC,EAAW,aAAa,EAAW,MAAM,CAAC,CAC/C,EACG,EACJ,QAAQ,GACR,YAAY,MACV,EAIF,EAAY,YACH,EACL,EAAW,MAAM,KAAK,EAAE,2BACxB,EAAW,eACV,MACQ,EAAO,0BAEjB,EACA,CAAC,EAAW,OAAO,EAAW,aAAa,CAAC,CAChD,EACK,EACJ,QAAQ,GACR,YAAY,MACV,EAIF,EAAY,YACH,EACL,EAAW,MAAM,KAAK,EAAE,4BACxB,EAAW,eACV,MACQ,EAAO,2BAEjB,EACA,CAAC,EAAW,OAAO,EAAW,aAAa,CAAC,CAChD,EACK,EACJ,QAAQ,GACR,YAAY,MACV,EAIF,EAAY,YACH,EACL,EAAW,MAAM,KAAK,EAAE,6BACxB,EAAW,iBACV,MACQ,EAAO,4BAEjB,EACA,CAAC,EAAW,gBAAgB,EAAW,MAAM,CAAC,CAClD,EACK,EACJ,QAAQ,GACR,YAAY,MACV,EACF,EAAY,YACH,EACL,EAAW,MAAM,KAAK,EAAE,0BACxB,EAAW,mBACV,MACQ,EAAO,yBAEjB,EACA,CAAC,EAAW,kBAAkB,EAAW,MAAM,CAAC,CACpD,EACK,IACJ,EAAW,MAAM,KAAK,EAAE,4BAA4B,QACpD,EAAW,oBAAoB;CAsDjC,OApD6B,QAAc;EACzC,IAAI;EAYJ,OANI,MACF,IAAmB;GACjB,QAAQ;GACR,YAAY;GACb,GAEI,EAAc;GACnB,OAAO;IAAE,QAAQ;IAAa,YAAY;IAAiB;GAC3D,QAAQ;IAAE,QAAQ;IAAc,YAAY;IAAkB;GAC9D,aAAa;IACX,QAAQ;IACR,YAAY;IACb;GACD,mBAAmB;IACjB,QAAQ;IACR,YAAY;IACb;GACD,oBAAoB;IAClB,QAAQ;IACR,YAAY;IACb;GACD,qBAAqB;IACnB,QAAQ;IACR,YAAY;IACb;GACD;GACD,CAAC;IACD;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAEM,EAAsB"}
|
|
1
|
+
{"version":3,"file":"useBackofficeAuth-DVAXNAjP.js","names":[],"sources":["../../src/hooks/useBackofficeAuth.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react';\nimport * as ReactRelay from 'react-relay';\nimport type { GraphQLTaggedNode, PayloadError } from 'relay-runtime';\n\nimport {\n createUseAuth,\n type UseAuthReturn,\n type AcceptInvitationResponse,\n type AcceptInvitationVariables,\n type BeginAuthenticationResponse,\n type BeginAuthenticationVariables,\n type BeginPasskeyLoginResponse,\n type BeginPasskeyLoginVariables,\n type CompleteMfaResponse,\n type CompleteMfaVariables,\n type FinishPasskeyLoginResponse,\n type FinishPasskeyLoginVariables,\n type LoginResponse,\n type LoginVariables,\n type LogoutResponse,\n type LogoutVariables,\n} from './useAuth.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport type { BackofficeLazyValue } from '../provider/lazyValue.js';\nimport { useRelayEnvironment } from '../relay/useRelayEnvironment.js';\n\nconst { commitMutation } = ReactRelay;\n\ntype MutationCommitConfig<TVariables, TResponse> = {\n variables: TVariables;\n onCompleted?: (\n response: TResponse,\n errors: readonly PayloadError[] | null,\n ) => void;\n onError?: (error: Error) => void;\n};\n\nconst toMutationLoadError = (error: unknown): Error => {\n if (error instanceof Error) {\n return error;\n }\n return new Error('Unable to load auth mutation.');\n};\n\nconst useDeferredMutation = <TVariables extends object, TResponse>(\n loadMutation: () => Promise<GraphQLTaggedNode | null>,\n) => {\n const relayEnvironment = useRelayEnvironment();\n const [inFlightCount, setInFlightCount] = useState(0);\n\n const commit = useCallback(\n (config: MutationCommitConfig<TVariables, TResponse>) => {\n setInFlightCount((count) => {\n return count + 1;\n });\n\n const finish = () => {\n setInFlightCount((count) => {\n return Math.max(0, count - 1);\n });\n };\n\n loadMutation()\n .then((mutation) => {\n if (mutation == null) {\n throw new Error('Missing auth mutation config.');\n }\n\n commitMutation(relayEnvironment, {\n mutation,\n variables: config.variables,\n onCompleted: (response, errors) => {\n finish();\n config.onCompleted?.(response as TResponse, errors ?? null);\n },\n onError: (error) => {\n finish();\n config.onError?.(error);\n },\n });\n })\n .catch((error: unknown) => {\n finish();\n config.onError?.(toMutationLoadError(error));\n });\n },\n [loadMutation, relayEnvironment],\n );\n\n return {\n commit,\n isInFlight: inFlightCount > 0,\n };\n};\n\nconst loadOptionalMutation = async <TConfig>(\n eagerMutation: GraphQLTaggedNode | null | undefined,\n lazyConfig: BackofficeLazyValue<TConfig> | null | undefined,\n selectMutation: (config: TConfig) => GraphQLTaggedNode,\n): Promise<GraphQLTaggedNode | null> => {\n if (eagerMutation != null) {\n return eagerMutation;\n }\n if (lazyConfig == null) {\n return null;\n }\n const loadedConfig = await lazyConfig.load();\n return selectMutation(loadedConfig);\n};\n\n/**\n * Provides auth actions/state backed by Relay mutations from BackofficeProvider.\n */\nexport function useBackofficeAuth(): UseAuthReturn {\n const { auth: authConfig } = useBackofficeConfig();\n const { commit: commitLogin, isInFlight: isLoginInFlight } =\n useDeferredMutation<LoginVariables, LoginResponse>(\n useCallback(async () => {\n const loginConfig = authConfig.login.get();\n return loadOptionalMutation(\n loginConfig?.loginMutation,\n authConfig.login,\n (config) => {\n return config.loginMutation;\n },\n );\n }, [authConfig.login]),\n );\n const { commit: commitLogout, isInFlight: isLogoutInFlight } =\n useDeferredMutation<LogoutVariables, LogoutResponse>(\n useCallback(async () => {\n const logoutConfig = await authConfig.logout.load();\n return logoutConfig.logoutMutation;\n }, [authConfig.logout]),\n );\n const { commit: commitCompleteMfa, isInFlight: isCompleteMfaInFlight } =\n useDeferredMutation<CompleteMfaVariables, CompleteMfaResponse>(\n useCallback(async () => {\n return loadOptionalMutation(\n authConfig.login.get()?.completeMfaMutation,\n authConfig.completeMfa,\n (config) => {\n return config.completeMfaMutation;\n },\n );\n }, [authConfig.completeMfa, authConfig.login]),\n );\n const {\n commit: commitBeginPasskeyLogin,\n isInFlight: isBeginPasskeyLoginInFlight,\n } = useDeferredMutation<\n BeginPasskeyLoginVariables,\n BeginPasskeyLoginResponse\n >(\n useCallback(async () => {\n return loadOptionalMutation(\n authConfig.login.get()?.beginPasskeyLoginMutation,\n authConfig.passkeyLogin,\n (config) => {\n return config.beginPasskeyLoginMutation;\n },\n );\n }, [authConfig.login, authConfig.passkeyLogin]),\n );\n const {\n commit: commitFinishPasskeyLogin,\n isInFlight: isFinishPasskeyLoginInFlight,\n } = useDeferredMutation<\n FinishPasskeyLoginVariables,\n FinishPasskeyLoginResponse\n >(\n useCallback(async () => {\n return loadOptionalMutation(\n authConfig.login.get()?.finishPasskeyLoginMutation,\n authConfig.passkeyLogin,\n (config) => {\n return config.finishPasskeyLoginMutation;\n },\n );\n }, [authConfig.login, authConfig.passkeyLogin]),\n );\n const {\n commit: commitBeginAuthentication,\n isInFlight: isBeginAuthenticationInFlight,\n } = useDeferredMutation<\n BeginAuthenticationVariables,\n BeginAuthenticationResponse\n >(\n useCallback(async () => {\n return loadOptionalMutation(\n authConfig.login.get()?.beginAuthenticationMutation,\n authConfig.authentication,\n (config) => {\n return config.beginAuthenticationMutation;\n },\n );\n }, [authConfig.authentication, authConfig.login]),\n );\n const {\n commit: commitAcceptInvitation,\n isInFlight: isAcceptInvitationInFlight,\n } = useDeferredMutation<AcceptInvitationVariables, AcceptInvitationResponse>(\n useCallback(async () => {\n return loadOptionalMutation(\n authConfig.login.get()?.acceptInvitationMutation,\n authConfig.acceptInvitation,\n (config) => {\n return config.acceptInvitationMutation;\n },\n );\n }, [authConfig.acceptInvitation, authConfig.login]),\n );\n const hasAcceptInvitationMutation =\n authConfig.login.get()?.acceptInvitationMutation != null ||\n authConfig.acceptInvitation != null;\n\n const useAuthWithMutations = useMemo(() => {\n let acceptInvitation:\n | {\n commit: typeof commitAcceptInvitation;\n isInFlight: boolean;\n }\n | undefined;\n if (hasAcceptInvitationMutation) {\n acceptInvitation = {\n commit: commitAcceptInvitation,\n isInFlight: isAcceptInvitationInFlight,\n };\n }\n return createUseAuth({\n login: { commit: commitLogin, isInFlight: isLoginInFlight },\n logout: { commit: commitLogout, isInFlight: isLogoutInFlight },\n completeMfa: {\n commit: commitCompleteMfa,\n isInFlight: isCompleteMfaInFlight,\n },\n beginPasskeyLogin: {\n commit: commitBeginPasskeyLogin,\n isInFlight: isBeginPasskeyLoginInFlight,\n },\n finishPasskeyLogin: {\n commit: commitFinishPasskeyLogin,\n isInFlight: isFinishPasskeyLoginInFlight,\n },\n beginAuthentication: {\n commit: commitBeginAuthentication,\n isInFlight: isBeginAuthenticationInFlight,\n },\n acceptInvitation,\n });\n }, [\n commitAcceptInvitation,\n commitBeginAuthentication,\n commitBeginPasskeyLogin,\n commitCompleteMfa,\n commitFinishPasskeyLogin,\n commitLogin,\n commitLogout,\n hasAcceptInvitationMutation,\n isAcceptInvitationInFlight,\n isBeginAuthenticationInFlight,\n isBeginPasskeyLoginInFlight,\n isCompleteMfaInFlight,\n isFinishPasskeyLoginInFlight,\n isLoginInFlight,\n isLogoutInFlight,\n ]);\n\n return useAuthWithMutations();\n}\n"],"mappings":"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"}
|
package/lib/esm/{useBackofficeLazyValue-Bh_13h8A.js.map → useBackofficeLazyValue-CoIAK-5N.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBackofficeLazyValue-
|
|
1
|
+
{"version":3,"file":"useBackofficeLazyValue-CoIAK-5N.js","names":[],"sources":["../../src/provider/useBackofficeLazyValue.ts"],"sourcesContent":["import type { BackofficeDashboardConfig } from '@plumile/backoffice-core/types.js';\n\nimport { useBackofficeConfig } from './BackofficeConfigContext.js';\nimport type {\n BackofficeResolvedAuthLoginConfig,\n BackofficeResolvedAuthLogoutConfig,\n BackofficeResolvedAuthPasswordResetCompleteConfig,\n BackofficeResolvedAuthPasswordResetRequestConfig,\n BackofficeResolvedAuthSessionConfig,\n BackofficeResolvedAuthVerifyEmailConfig,\n} from './types.js';\nimport type { BackofficeLazyValue } from './lazyValue.js';\n\nconst useResolvedLazyValue = <TValue>(\n resource: BackofficeLazyValue<TValue> | null | undefined,\n): TValue | null => {\n if (resource == null) {\n return null;\n }\n const loadedValue = resource.get();\n if (loadedValue != null) {\n return loadedValue;\n }\n // React Suspense expects a pending promise to be thrown while the lazy value loads.\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw resource.load();\n};\n\nexport const useBackofficeAuthSessionConfig =\n (): BackofficeResolvedAuthSessionConfig => {\n const { auth } = useBackofficeConfig();\n const resolved = useResolvedLazyValue(auth.session);\n if (resolved == null) {\n throw new Error('Missing backoffice auth session config.');\n }\n return resolved;\n };\n\nexport const useBackofficeAuthLoginConfig =\n (): BackofficeResolvedAuthLoginConfig => {\n const { auth } = useBackofficeConfig();\n const resolved = useResolvedLazyValue(auth.login);\n if (resolved == null) {\n throw new Error('Missing backoffice auth login config.');\n }\n return resolved;\n };\n\nexport const useBackofficeAuthLogoutConfig =\n (): BackofficeResolvedAuthLogoutConfig => {\n const { auth } = useBackofficeConfig();\n const resolved = useResolvedLazyValue(auth.logout);\n if (resolved == null) {\n throw new Error('Missing backoffice logout auth config.');\n }\n return resolved;\n };\n\nexport const useBackofficeAuthPasswordResetRequestConfig =\n (): BackofficeResolvedAuthPasswordResetRequestConfig => {\n const { auth } = useBackofficeConfig();\n const resolved = useResolvedLazyValue(auth.passwordResetRequest);\n if (resolved == null) {\n throw new Error('Missing backoffice password reset request auth config.');\n }\n return resolved;\n };\n\nexport const useBackofficeAuthPasswordResetCompleteConfig =\n (): BackofficeResolvedAuthPasswordResetCompleteConfig => {\n const { auth } = useBackofficeConfig();\n const resolved = useResolvedLazyValue(auth.passwordResetComplete);\n if (resolved == null) {\n throw new Error(\n 'Missing backoffice password reset completion auth config.',\n );\n }\n return resolved;\n };\n\nexport const useBackofficeAuthVerifyEmailConfig =\n (): BackofficeResolvedAuthVerifyEmailConfig => {\n const { auth } = useBackofficeConfig();\n const resolved = useResolvedLazyValue(auth.verifyEmail);\n if (resolved == null) {\n throw new Error('Missing backoffice verify email auth config.');\n }\n return resolved;\n };\n\nexport const useBackofficeDashboardConfig =\n (): BackofficeDashboardConfig | null => {\n const { dashboard } = useBackofficeConfig();\n return useResolvedLazyValue(dashboard);\n };\n\nexport default useResolvedLazyValue;\n"],"mappings":";;AAaA,IAAM,KACJ,MACkB;CAClB,IAAI,KAAY,MACd,OAAO;CAET,IAAM,IAAc,EAAS,KAAK;CAClC,IAAI,KAAe,MACjB,OAAO;CAIT,MAAM,EAAS,MAAM;GAaV,UAC8B;CACvC,IAAM,EAAE,YAAS,GAAqB,EAChC,IAAW,EAAqB,EAAK,MAAM;CACjD,IAAI,KAAY,MACd,MAAU,MAAM,wCAAwC;CAE1D,OAAO;GAaE,UAC6C;CACtD,IAAM,EAAE,YAAS,GAAqB,EAChC,IAAW,EAAqB,EAAK,qBAAqB;CAChE,IAAI,KAAY,MACd,MAAU,MAAM,yDAAyD;CAE3E,OAAO;GAGE,UAC8C;CACvD,IAAM,EAAE,YAAS,GAAqB,EAChC,IAAW,EAAqB,EAAK,sBAAsB;CACjE,IAAI,KAAY,MACd,MAAU,MACR,4DACD;CAEH,OAAO;GAGE,UACoC;CAC7C,IAAM,EAAE,YAAS,GAAqB,EAChC,IAAW,EAAqB,EAAK,YAAY;CACvD,IAAI,KAAY,MACd,MAAU,MAAM,+CAA+C;CAEjE,OAAO;GAGE,UAC6B;CACtC,IAAM,EAAE,iBAAc,GAAqB;CAC3C,OAAO,EAAqB,EAAU"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type JSX, type ReactNode } from 'react';
|
|
2
|
+
export type BackofficePermissionsProviderProps = {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
permissions: unknown;
|
|
5
|
+
};
|
|
6
|
+
export declare const BackofficePermissionsProvider: ({ children, permissions, }: BackofficePermissionsProviderProps) => JSX.Element;
|
|
7
|
+
export declare const useBackofficePermissions: () => unknown;
|
|
8
|
+
//# sourceMappingURL=BackofficePermissionsContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BackofficePermissionsContext.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/layout/BackofficePermissionsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI5E,MAAM,MAAM,kCAAkC,GAAG;IAC/C,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,6BAA6B,GAAI,4BAG3C,kCAAkC,KAAG,GAAG,CAAC,OAM3C,CAAC;AAEF,eAAO,MAAM,wBAAwB,QAAO,OAE3C,CAAC"}
|
|
@@ -7,6 +7,10 @@ export declare const resolveEntityTitleFromDetailHeader: <LayoutView extends obj
|
|
|
7
7
|
tApp: TFunction;
|
|
8
8
|
}) => string;
|
|
9
9
|
export declare const buildDashboardBreadcrumb: (t: TFunction) => readonly BackofficeTopbarBreadcrumbItem[];
|
|
10
|
+
export declare const buildHubBreadcrumb: (input: {
|
|
11
|
+
id: string;
|
|
12
|
+
title: string;
|
|
13
|
+
}) => readonly BackofficeTopbarBreadcrumbItem[];
|
|
10
14
|
export declare const buildEntityListBreadcrumb: (config: BackofficeResolvedListFacetConfig, tApp: TFunction) => readonly BackofficeTopbarBreadcrumbItem[];
|
|
11
15
|
export declare const buildEntityDetailBreadcrumb: (input: {
|
|
12
16
|
config: BackofficeResolvedDetailLayoutFacetConfig | BackofficeResolvedDetailPageFacetConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildBreadcrumbs.d.ts","sourceRoot":"","sources":["../../../../../../src/components/backoffice/layout/breadcrumb/buildBreadcrumbs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,KAAK,EACV,yCAAyC,EACzC,uCAAuC,EACvC,iCAAiC,EAElC,MAAM,mCAAmC,CAAC;AAE3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAMjE,eAAO,MAAM,kCAAkC,GAC7C,UAAU,SAAS,MAAM,EACzB,OAAO;IACP,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,yCAAyC,CAAC,QAAQ,CAAC,CAAC;IAClE,IAAI,EAAE,SAAS,CAAC;CACjB,KAAG,MAoBH,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,GAAG,SAAS,KACX,SAAS,8BAA8B,EAQzC,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,QAAQ,iCAAiC,EACzC,MAAM,SAAS,KACd,SAAS,8BAA8B,EAQzC,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,OAAO;IACjD,MAAM,EACF,yCAAyC,GACzC,uCAAuC,CAAC;IAC5C,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,KAAG,SAAS,8BAA8B,EAyB1C,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,OAAO;IACzC,KAAK,EAAE,MAAM,CAAC;CACf,KAAG,SAAS,8BAA8B,EAQ1C,CAAC"}
|
|
1
|
+
{"version":3,"file":"buildBreadcrumbs.d.ts","sourceRoot":"","sources":["../../../../../../src/components/backoffice/layout/breadcrumb/buildBreadcrumbs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,KAAK,EACV,yCAAyC,EACzC,uCAAuC,EACvC,iCAAiC,EAElC,MAAM,mCAAmC,CAAC;AAE3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAMjE,eAAO,MAAM,kCAAkC,GAC7C,UAAU,SAAS,MAAM,EACzB,OAAO;IACP,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,yCAAyC,CAAC,QAAQ,CAAC,CAAC;IAClE,IAAI,EAAE,SAAS,CAAC;CACjB,KAAG,MAoBH,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,GAAG,SAAS,KACX,SAAS,8BAA8B,EAQzC,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,OAAO;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf,KAAG,SAAS,8BAA8B,EAQ1C,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,QAAQ,iCAAiC,EACzC,MAAM,SAAS,KACd,SAAS,8BAA8B,EAQzC,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,OAAO;IACjD,MAAM,EACF,yCAAyC,GACzC,uCAAuC,CAAC;IAC5C,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,KAAG,SAAS,8BAA8B,EAyB1C,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,OAAO;IACzC,KAAK,EAAE,MAAM,CAAC;CACf,KAAG,SAAS,8BAA8B,EAQ1C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildSidebarSections.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/layout/buildSidebarSections.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AACrF,OAAO,KAAK,EACV,uBAAuB,EAGvB,2BAA2B,EAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,KAAK,mBAAmB,EAOzB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"buildSidebarSections.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/layout/buildSidebarSections.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AACrF,OAAO,KAAK,EACV,uBAAuB,EAGvB,2BAA2B,EAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,KAAK,mBAAmB,EAOzB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AAsB3F,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,2BAA2B,CAAC;IACtC,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,CAAC,EAAE,SAAS,CAAC;IACb,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,WAAW,CAAC,EAAE,SAAS,2BAA2B,EAAE,CAAC;IACrD,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;IAC/C,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CACxE,CAAC;AAKF,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,yBAAyB,GAC/B,SAAS,mBAAmB,EAAE,CAuchC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TFunction } from 'i18next';
|
|
2
2
|
import type { BackofficeEntityManifestMap, I18nLabel } from '@plumile/backoffice-core/types.js';
|
|
3
|
-
import type { BackofficeSidebarConfig, BackofficeIconComponent, BackofficeSidebarGroupConfig, BackofficeSidebarItemDescriptor, BackofficeSidebarItemConfig } from '../../../provider/types.js';
|
|
3
|
+
import type { BackofficeSidebarConfig, BackofficeIconComponent, BackofficeSidebarGroupConfig, BackofficeSidebarItemDescriptor, BackofficeSidebarItemConfig, BackofficeSidebarHubConfig, BackofficeResolvedSidebarHubConfig } from '../../../provider/types.js';
|
|
4
4
|
export declare const resolveLabel: (label: I18nLabel, tApp: TFunction) => string;
|
|
5
5
|
export declare const isActivePath: (pathname: string, href: string) => boolean;
|
|
6
6
|
export declare const buildDefaultGroups: (entities: BackofficeEntityManifestMap) => Record<string, BackofficeSidebarGroupConfig>;
|
|
@@ -11,8 +11,16 @@ export type EntityGroupLookup = Map<string, {
|
|
|
11
11
|
}>;
|
|
12
12
|
export declare const resolveItemDescriptor: (item: BackofficeSidebarItemConfig) => BackofficeSidebarItemDescriptor;
|
|
13
13
|
export declare const resolveGroupItems: (group: BackofficeSidebarGroupConfig) => readonly BackofficeSidebarItemConfig[];
|
|
14
|
-
export declare const
|
|
15
|
-
export declare const
|
|
14
|
+
export declare const resolveSidebarHub: (item: BackofficeSidebarHubConfig, sidebar: BackofficeSidebarConfig | undefined) => BackofficeResolvedSidebarHubConfig;
|
|
15
|
+
export declare const resolveHubEntityIds: (hub: BackofficeResolvedSidebarHubConfig) => readonly string[];
|
|
16
|
+
export type ResolvedSidebarHubEntry = {
|
|
17
|
+
groupId: string | null;
|
|
18
|
+
hub: BackofficeResolvedSidebarHubConfig;
|
|
19
|
+
icon?: BackofficeIconComponent;
|
|
20
|
+
};
|
|
21
|
+
export declare const resolveSidebarHubEntries: (groups: Record<string, BackofficeSidebarGroupConfig>, sidebar: BackofficeSidebarConfig | undefined) => readonly ResolvedSidebarHubEntry[];
|
|
22
|
+
export declare const resolveGroupEntityIds: (group: BackofficeSidebarGroupConfig, sidebar?: BackofficeSidebarConfig) => readonly string[];
|
|
23
|
+
export declare const buildEntityGroupLookup: (groups: Record<string, BackofficeSidebarGroupConfig>, sidebar?: BackofficeSidebarConfig) => EntityGroupLookup;
|
|
16
24
|
export declare const resolveVisibleEntityIds: (groups: Record<string, BackofficeSidebarGroupConfig>, entities: BackofficeEntityManifestMap, sidebar: BackofficeSidebarConfig | undefined, permissions: unknown) => string[];
|
|
17
25
|
export declare const resolveActiveEntityId: (pathname: string, entities: BackofficeEntityManifestMap) => string | null;
|
|
18
26
|
export declare const resolveActiveGroupId: (groups: Record<string, BackofficeSidebarGroupConfig>, activeEntityId: string | null, entities: BackofficeEntityManifestMap, sidebar: BackofficeSidebarConfig | undefined, permissions: unknown) => string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebarUtils.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/layout/sidebarUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,KAAK,EACV,2BAA2B,EAC3B,SAAS,EACV,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EACvB,4BAA4B,EAC5B,+BAA+B,EAC/B,2BAA2B,
|
|
1
|
+
{"version":3,"file":"sidebarUtils.d.ts","sourceRoot":"","sources":["../../../../../src/components/backoffice/layout/sidebarUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,KAAK,EACV,2BAA2B,EAC3B,SAAS,EACV,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EACvB,4BAA4B,EAC5B,+BAA+B,EAC/B,2BAA2B,EAC3B,0BAA0B,EAC1B,kCAAkC,EACnC,MAAM,4BAA4B,CAAC;AAEpC,eAAO,MAAM,YAAY,GAAI,OAAO,SAAS,EAAE,MAAM,SAAS,KAAG,MAEhE,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,UAAU,MAAM,EAAE,MAAM,MAAM,KAAG,OAQ7D,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,UAAU,2BAA2B,KACpC,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAQ7C,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,UAAU,2BAA2B,EACrC,SAAS,uBAAuB,GAAG,SAAS,KAC3C,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAE7C,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,GAAG,CACjC,MAAM,EACN;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,uBAAuB,CAAA;CAAE,CACpD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,MAAM,2BAA2B,KAChC,+BAKF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,OAAO,4BAA4B,KAClC,SAAS,2BAA2B,EAStC,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,MAAM,0BAA0B,EAChC,SAAS,uBAAuB,GAAG,SAAS,KAC3C,kCAOF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,KAAK,kCAAkC,KACtC,SAAS,MAAM,EAajB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,GAAG,EAAE,kCAAkC,CAAC;IACxC,IAAI,CAAC,EAAE,uBAAuB,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,QAAQ,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,EACpD,SAAS,uBAAuB,GAAG,SAAS,KAC3C,SAAS,uBAAuB,EA+BlC,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,OAAO,4BAA4B,EACnC,UAAU,uBAAuB,KAChC,SAAS,MAAM,EAUjB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,QAAQ,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,EACpD,UAAU,uBAAuB,KAChC,iBAaF,CAAC;AA+BF,eAAO,MAAM,uBAAuB,GAClC,QAAQ,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,EACpD,UAAU,2BAA2B,EACrC,SAAS,uBAAuB,GAAG,SAAS,EAC5C,aAAa,OAAO,KACnB,MAAM,EAqBR,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,UAAU,MAAM,EAChB,UAAU,2BAA2B,KACpC,MAAM,GAAG,IAYX,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,EACpD,gBAAgB,MAAM,GAAG,IAAI,EAC7B,UAAU,2BAA2B,EACrC,SAAS,uBAAuB,GAAG,SAAS,EAC5C,aAAa,OAAO,KACnB,MAAM,GAAG,IAoBX,CAAC"}
|
|
@@ -323,6 +323,20 @@ export declare const backofficeReactI18nResources: {
|
|
|
323
323
|
percent: string;
|
|
324
324
|
};
|
|
325
325
|
history: string;
|
|
326
|
+
hub: {
|
|
327
|
+
empty: {
|
|
328
|
+
description: string;
|
|
329
|
+
title: string;
|
|
330
|
+
};
|
|
331
|
+
itemKinds: {
|
|
332
|
+
entity: string;
|
|
333
|
+
tool: string;
|
|
334
|
+
};
|
|
335
|
+
search: {
|
|
336
|
+
placeholder: string;
|
|
337
|
+
};
|
|
338
|
+
subtitle: string;
|
|
339
|
+
};
|
|
326
340
|
list: {
|
|
327
341
|
actions: {
|
|
328
342
|
refresh: string;
|
|
@@ -722,6 +736,20 @@ export declare const backofficeReactI18nResources: {
|
|
|
722
736
|
percent: string;
|
|
723
737
|
};
|
|
724
738
|
history: string;
|
|
739
|
+
hub: {
|
|
740
|
+
empty: {
|
|
741
|
+
description: string;
|
|
742
|
+
title: string;
|
|
743
|
+
};
|
|
744
|
+
itemKinds: {
|
|
745
|
+
entity: string;
|
|
746
|
+
tool: string;
|
|
747
|
+
};
|
|
748
|
+
search: {
|
|
749
|
+
placeholder: string;
|
|
750
|
+
};
|
|
751
|
+
subtitle: string;
|
|
752
|
+
};
|
|
725
753
|
list: {
|
|
726
754
|
actions: {
|
|
727
755
|
refresh: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../src/i18n/resources.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,SAAS,CAAC;AAI1D,eAAO,MAAM,4BAA4B
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../src/i18n/resources.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,SAAS,CAAC;AAI1D,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAG/B,CAAC;AAEX,MAAM,MAAM,4BAA4B,GAAG,OAAO,4BAA4B,CAAC;AAsB/E,wBAAgB,gCAAgC,CAC9C,YAAY,GAAE,QAAa,GAC1B,QAAQ,CAsBV"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type JSX } from 'react';
|
|
2
|
+
import type { BackofficePreparedHubRoute } from '../router/createBackofficeRoutes.js';
|
|
3
|
+
export type BackofficeHubPageProps = {
|
|
4
|
+
prepared: BackofficePreparedHubRoute;
|
|
5
|
+
};
|
|
6
|
+
export declare const BackofficeHubPage: ({ prepared, }: BackofficeHubPageProps) => JSX.Element;
|
|
7
|
+
export default BackofficeHubPage;
|
|
8
|
+
//# sourceMappingURL=BackofficeHubPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BackofficeHubPage.d.ts","sourceRoot":"","sources":["../../../src/pages/BackofficeHubPage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,GAAG,EAAkB,MAAM,OAAO,CAAC;AASpE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAQtF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,0BAA0B,CAAC;CACtC,CAAC;AAwCF,eAAO,MAAM,iBAAiB,GAAI,eAE/B,sBAAsB,KAAG,GAAG,CAAC,OAuK/B,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackofficeLayoutPage.d.ts","sourceRoot":"","sources":["../../../src/pages/BackofficeLayoutPage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,GAAG,EACR,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAEf,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,iBAAiB,EAEjB,aAAa,EACd,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"BackofficeLayoutPage.d.ts","sourceRoot":"","sources":["../../../src/pages/BackofficeLayoutPage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,GAAG,EACR,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAEf,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,iBAAiB,EAEjB,aAAa,EACd,MAAM,eAAe,CAAC;AAyBvB,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,kEAAkE,CAAC;AAM1E,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IAChD,UAAU,CAAC,EAAE;QACX,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAC5B,EAAE,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;KACtC,GAAG,IAAI,CAAC;IACT,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AA+VF,eAAO,MAAM,oBAAoB,GAAI,sEAMlC,yBAAyB,KAAG,GAAG,CAAC,OAuBlC,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const content: string;
|
|
2
|
+
export declare const search: string;
|
|
3
|
+
export declare const groups: string;
|
|
4
|
+
export declare const group: string;
|
|
5
|
+
export declare const groupHeader: string;
|
|
6
|
+
export declare const groupTitle: string;
|
|
7
|
+
export declare const groupDescription: string;
|
|
8
|
+
export declare const grid: string;
|
|
9
|
+
export declare const item: string;
|
|
10
|
+
export declare const itemHeader: string;
|
|
11
|
+
export declare const itemIcon: string;
|
|
12
|
+
export declare const itemTitle: string;
|
|
13
|
+
export declare const itemDescription: string;
|
|
14
|
+
export declare const empty: string;
|
|
15
|
+
//# sourceMappingURL=backofficeHubPage.css.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backofficeHubPage.css.d.ts","sourceRoot":"","sources":["../../../src/pages/backofficeHubPage.css.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,QAIlB,CAAC;AAEH,eAAO,MAAM,MAAM,QAEjB,CAAC;AAEH,eAAO,MAAM,MAAM,QAIjB,CAAC;AAEH,eAAO,MAAM,KAAK,QAIhB,CAAC;AAEH,eAAO,MAAM,WAAW,QAItB,CAAC;AAEH,eAAO,MAAM,UAAU,QAIrB,CAAC;AAEH,eAAO,MAAM,gBAAgB,QAG3B,CAAC;AAEH,eAAO,MAAM,IAAI,QAIf,CAAC;AAEH,eAAO,MAAM,IAAI,QA2Bf,CAAC;AAEH,eAAO,MAAM,UAAU,QAIrB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAInB,CAAC;AAEH,eAAO,MAAM,SAAS,QAEpB,CAAC;AAEH,eAAO,MAAM,eAAe,QAG1B,CAAC;AAEH,eAAO,MAAM,KAAK,QAQhB,CAAC"}
|
|
@@ -48,6 +48,16 @@ export type BackofficeSidebarToolItemConfig = {
|
|
|
48
48
|
label?: I18nLabel;
|
|
49
49
|
badge?: (permissions: unknown) => string | number | null;
|
|
50
50
|
};
|
|
51
|
+
export type BackofficeSidebarHubItemDescriptor = {
|
|
52
|
+
kind: 'entity' | 'tool';
|
|
53
|
+
id: string;
|
|
54
|
+
};
|
|
55
|
+
export type BackofficeSidebarHubGroupConfig = {
|
|
56
|
+
id: string;
|
|
57
|
+
title: I18nLabel;
|
|
58
|
+
description?: I18nLabel;
|
|
59
|
+
items: readonly BackofficeSidebarHubItemDescriptor[];
|
|
60
|
+
};
|
|
51
61
|
export type BackofficeSidebarHubConfig = {
|
|
52
62
|
kind: 'hub';
|
|
53
63
|
id: string;
|
|
@@ -55,11 +65,18 @@ export type BackofficeSidebarHubConfig = {
|
|
|
55
65
|
description?: I18nLabel;
|
|
56
66
|
icon?: BackofficeIconComponent;
|
|
57
67
|
href: string;
|
|
58
|
-
groups?: readonly
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
68
|
+
groups?: readonly BackofficeSidebarHubGroupConfig[];
|
|
69
|
+
search?: {
|
|
70
|
+
enabled?: boolean;
|
|
71
|
+
placeholder?: I18nLabel;
|
|
72
|
+
};
|
|
73
|
+
emptyState?: {
|
|
74
|
+
title?: I18nLabel;
|
|
75
|
+
description?: I18nLabel;
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
export type BackofficeResolvedSidebarHubConfig = BackofficeSidebarHubConfig & {
|
|
79
|
+
groups: readonly BackofficeSidebarHubGroupConfig[];
|
|
63
80
|
};
|
|
64
81
|
export type BackofficeSidebarItemConfig = BackofficeSidebarDashboardItemConfig | BackofficeSidebarEntityItemConfig | BackofficeSidebarToolItemConfig | BackofficeSidebarHubConfig;
|
|
65
82
|
export type BackofficeSidebarRecentItem = {
|