@plumile/backoffice-react 0.1.103 → 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.
- package/lib/esm/{BackofficeDashboardPage-C0zP0QO7.js → BackofficeDashboardPage-CZAcZwRc.js} +4 -4
- package/lib/esm/BackofficeDashboardPage-CZAcZwRc.js.map +1 -0
- package/lib/esm/backoffice-react.js +1 -1
- package/lib/types/pages/BackofficeDashboardPage.d.ts.map +1 -1
- package/package.json +5 -5
- package/lib/esm/BackofficeDashboardPage-C0zP0QO7.js.map +0 -1
|
@@ -177,9 +177,9 @@ var D = (e, t, n) => {
|
|
|
177
177
|
children: e.map((e) => {
|
|
178
178
|
let t = e.value ?? o("common.notAvailable");
|
|
179
179
|
return /* @__PURE__ */ g(p, {
|
|
180
|
-
label: e.label,
|
|
180
|
+
label: v(e.label, a),
|
|
181
181
|
value: t,
|
|
182
|
-
hint: e.meta
|
|
182
|
+
hint: e.meta == null ? void 0 : v(e.meta, a)
|
|
183
183
|
}, e.id);
|
|
184
184
|
})
|
|
185
185
|
});
|
|
@@ -201,7 +201,7 @@ var D = (e, t, n) => {
|
|
|
201
201
|
children: /* @__PURE__ */ g("div", {
|
|
202
202
|
className: P,
|
|
203
203
|
children: e.map((e) => {
|
|
204
|
-
let t = e.value ?? o("common.notAvailable"), n = /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g("span", { children: e.label }), /* @__PURE__ */ g("span", {
|
|
204
|
+
let t = e.value ?? o("common.notAvailable"), n = /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g("span", { children: v(e.label, a) }), /* @__PURE__ */ g("span", {
|
|
205
205
|
className: I,
|
|
206
206
|
children: t
|
|
207
207
|
})] });
|
|
@@ -341,4 +341,4 @@ var D = (e, t, n) => {
|
|
|
341
341
|
//#endregion
|
|
342
342
|
export { U as BackofficeDashboardPage, U as default };
|
|
343
343
|
|
|
344
|
-
//# sourceMappingURL=BackofficeDashboardPage-
|
|
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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"}
|
|
@@ -871,7 +871,7 @@ function tt(e = {}) {
|
|
|
871
871
|
var { RelayEnvironmentProvider: nt } = A, rt = ({ children: e }) => (xe(a, () => t().generation, () => t().generation), /* @__PURE__ */ j(nt, {
|
|
872
872
|
environment: n(),
|
|
873
873
|
children: e
|
|
874
|
-
})), { loadQuery: z, usePreloadedQuery: it } = A, at = k("WrapperPage", async () => ({ default: (await import("@plumile/ui")).WrapperPage })), ot = k("BackofficeLayoutPage", async () => import("./BackofficeLayoutPage-r6dXo9SI.js")), st = k("BackofficeEntityListPage", async () => import("./BackofficeEntityListPage-BACvfX6c.js")), ct = k("BackofficeEntityDetailPage", async () => import("./BackofficeEntityDetailPage-ChxBrqz8.js")), lt = k("BackofficeEntityDetailLayoutPage", async () => import("./BackofficeEntityDetailLayoutPage-Duc_DcIV.js")), ut = k("BackofficeEntityDetailUnknownPageRedirect", async () => import("./BackofficeEntityDetailUnknownPageRedirect-xupMeril.js")), dt = k("BackofficeDashboardPage", async () => import("./BackofficeDashboardPage-
|
|
874
|
+
})), { loadQuery: z, usePreloadedQuery: it } = A, at = k("WrapperPage", async () => ({ default: (await import("@plumile/ui")).WrapperPage })), ot = k("BackofficeLayoutPage", async () => import("./BackofficeLayoutPage-r6dXo9SI.js")), st = k("BackofficeEntityListPage", async () => import("./BackofficeEntityListPage-BACvfX6c.js")), ct = k("BackofficeEntityDetailPage", async () => import("./BackofficeEntityDetailPage-ChxBrqz8.js")), lt = k("BackofficeEntityDetailLayoutPage", async () => import("./BackofficeEntityDetailLayoutPage-Duc_DcIV.js")), ut = k("BackofficeEntityDetailUnknownPageRedirect", async () => import("./BackofficeEntityDetailUnknownPageRedirect-xupMeril.js")), dt = k("BackofficeDashboardPage", async () => import("./BackofficeDashboardPage-CZAcZwRc.js")), ft = k("BackofficeHubPage", async () => import("./BackofficeHubPage-BsUXulN0.js")), pt = k("BackofficeLoginPage", async () => import("./BackofficeLoginPage-BMPhO1cr.js")), mt = k("BackofficePasswordResetRequestPage", async () => import("./BackofficePasswordResetRequestPage-DPDImb37.js")), ht = k("BackofficePasswordResetCompletePage", async () => import("./BackofficePasswordResetCompletePage-OApMUiOi.js")), gt = k("BackofficeVerifyEmailPage", async () => import("./BackofficeVerifyEmailPage-DHuSOxDf.js")), _t = k("BackofficeAcceptInvitationPage", async () => import("./BackofficeAcceptInvitationPage-BfRsORii.js")), vt = (e) => {
|
|
875
875
|
let t = e.trim();
|
|
876
876
|
return t === "" || t === "/" ? "" : t.replace(/^\/+|\/+$/g, "");
|
|
877
877
|
}, yt = (e) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackofficeDashboardPage.d.ts","sourceRoot":"","sources":["../../../src/pages/BackofficeDashboardPage.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,GAAG,EAAY,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"BackofficeDashboardPage.d.ts","sourceRoot":"","sources":["../../../src/pages/BackofficeDashboardPage.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,GAAG,EAAY,MAAM,OAAO,CAAC;AAyX3C,eAAO,MAAM,uBAAuB,QAAO,GAAG,CAAC,OAoE9C,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plumile/backoffice-react",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.104",
|
|
4
4
|
"description": "React provider and pages for Kronex backoffice",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -160,10 +160,10 @@
|
|
|
160
160
|
"npm": ">=8.0.0"
|
|
161
161
|
},
|
|
162
162
|
"dependencies": {
|
|
163
|
-
"@plumile/backoffice-core": "^0.1.
|
|
164
|
-
"@plumile/filter-query": "^0.1.
|
|
165
|
-
"@plumile/router": "^0.1.
|
|
166
|
-
"@plumile/ui": "^0.1.
|
|
163
|
+
"@plumile/backoffice-core": "^0.1.104",
|
|
164
|
+
"@plumile/filter-query": "^0.1.104",
|
|
165
|
+
"@plumile/router": "^0.1.104",
|
|
166
|
+
"@plumile/ui": "^0.1.104",
|
|
167
167
|
"graphql-ws": "6.0.8",
|
|
168
168
|
"i18next": "^26.0.10",
|
|
169
169
|
"i18next-browser-languagedetector": "8.2.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BackofficeDashboardPage-C0zP0QO7.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} 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: string;\n value: string | number | null;\n meta?: string;\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={metric.label}\n value={value}\n hint={metric.meta}\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: string;\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>{item.label}</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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"}
|