@plumile/backoffice-react 0.1.196 → 0.1.197

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +7 -0
  2. package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js +23 -20
  3. package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js.map +1 -1
  4. package/lib/esm/components/backoffice/layout/breadcrumb/buildBreadcrumbs.js.map +1 -1
  5. package/lib/esm/components/backoffice/links/BackofficeInlineLink.js +19 -9
  6. package/lib/esm/components/backoffice/links/BackofficeInlineLink.js.map +1 -1
  7. package/lib/esm/components/backoffice/links/BackofficeLink.js +12 -8
  8. package/lib/esm/components/backoffice/links/BackofficeLink.js.map +1 -1
  9. package/lib/esm/components/backoffice/links/resolveBackofficeLink.js +64 -45
  10. package/lib/esm/components/backoffice/links/resolveBackofficeLink.js.map +1 -1
  11. package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js +30 -61
  12. package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js.map +1 -1
  13. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js +1 -4
  14. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js.map +1 -1
  15. package/lib/esm/components/backoffice/scaffolds/BackofficeListFilterContext.js +18 -27
  16. package/lib/esm/components/backoffice/scaffolds/BackofficeListFilterContext.js.map +1 -1
  17. package/lib/esm/hooks/useBackofficeListUrlState.js +27 -24
  18. package/lib/esm/hooks/useBackofficeListUrlState.js.map +1 -1
  19. package/lib/esm/pages/BackofficeDashboardWidgetContent.js +194 -227
  20. package/lib/esm/pages/BackofficeDashboardWidgetContent.js.map +1 -1
  21. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js +107 -120
  22. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js.map +1 -1
  23. package/lib/esm/pages/BackofficeEntityListDataPage.js +2 -8
  24. package/lib/esm/pages/BackofficeEntityListDataPage.js.map +1 -1
  25. package/lib/esm/pages/resolveDashboardTargetDestination.js +17 -0
  26. package/lib/esm/pages/resolveDashboardTargetDestination.js.map +1 -0
  27. package/lib/esm/router/createBackofficeRoutes.js +88 -99
  28. package/lib/esm/router/createBackofficeRoutes.js.map +1 -1
  29. package/lib/types/components/backoffice/filters/BackofficeFilterAction.d.ts.map +1 -1
  30. package/lib/types/components/backoffice/layout/breadcrumb/buildBreadcrumbs.d.ts +3 -3
  31. package/lib/types/components/backoffice/layout/breadcrumb/buildBreadcrumbs.d.ts.map +1 -1
  32. package/lib/types/components/backoffice/links/BackofficeInlineLink.d.ts.map +1 -1
  33. package/lib/types/components/backoffice/links/BackofficeLink.d.ts.map +1 -1
  34. package/lib/types/components/backoffice/links/resolveBackofficeLink.d.ts.map +1 -1
  35. package/lib/types/components/backoffice/links/types.d.ts +19 -15
  36. package/lib/types/components/backoffice/links/types.d.ts.map +1 -1
  37. package/lib/types/components/backoffice/refs/BackofficeRelatedCountLink.d.ts.map +1 -1
  38. package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts.map +1 -1
  39. package/lib/types/components/backoffice/scaffolds/BackofficeListFilterContext.d.ts +0 -4
  40. package/lib/types/components/backoffice/scaffolds/BackofficeListFilterContext.d.ts.map +1 -1
  41. package/lib/types/hooks/useBackofficeListUrlState.d.ts.map +1 -1
  42. package/lib/types/index.d.ts +1 -1
  43. package/lib/types/index.d.ts.map +1 -1
  44. package/lib/types/pages/BackofficeDashboardWidgetContent.d.ts.map +1 -1
  45. package/lib/types/pages/BackofficeEntityDetailLayoutPage.d.ts.map +1 -1
  46. package/lib/types/pages/BackofficeEntityListDataPage.d.ts.map +1 -1
  47. package/lib/types/pages/resolveDashboardTargetDestination.d.ts +5 -0
  48. package/lib/types/pages/resolveDashboardTargetDestination.d.ts.map +1 -0
  49. package/lib/types/router/createBackofficeRoutes.d.ts +0 -2
  50. package/lib/types/router/createBackofficeRoutes.d.ts.map +1 -1
  51. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeEntityListDataPage.js","names":[],"sources":["../../../src/pages/BackofficeEntityListDataPage.tsx"],"sourcesContent":["import {\n type JSX,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { loadQuery, usePreloadedQuery } from 'react-relay';\nimport type { OperationType } from 'relay-runtime';\nimport {\n BACKOFFICE_LIST_DEFAULTS,\n BACKOFFICE_LIST_REFETCH_POLICY,\n} from '@plumile/backoffice-core/constants.js';\nimport { stableListVariablesKey } from '@plumile/backoffice-core/state/stableKey.js';\nimport type { BackofficePreparedListDataRoute } from '@plumile/backoffice-core/types.js';\nimport { Button } from '@plumile/ui/atomic/atoms/button/Button.js';\nimport { InlineBanner } from '@plumile/ui/components/feedback/InlineBanner.js';\n\nimport { BackofficeErrorBoundary } from '../components/backoffice/errors/BackofficeErrorBoundary.js';\nimport { BackofficeEntityListScaffold } from '../components/backoffice/scaffolds/BackofficeEntityListScaffold.js';\nimport { BackofficeLazyEntityCountLabel } from '../components/backoffice/refs/BackofficeLazyEntityCount.js';\nimport { useBackofficeLoadMore } from '../hooks/useBackofficeLoadMore.js';\nimport { useBackofficeListRefetch } from '../hooks/useBackofficeListRefetch.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficePaginationFragment } from '../relay/typedRelayHooks.js';\nimport { useRelayEnvironment } from '../relay/useRelayEnvironment.js';\nimport { useBackofficeEntityListRouteContext } from './BackofficeEntityListRouteContext.js';\n\nexport type BackofficeEntityListDataPageProps = {\n prepared: BackofficePreparedListDataRoute;\n};\n\ntype BackofficeEntityConnectionListDataProps = {\n queryRef: BackofficePreparedListDataRoute['query'];\n};\n\n/**\n * Renders the Relay-backed row data under the list layout route boundary.\n */\nfunction BackofficeEntityConnectionListData({\n queryRef,\n}: BackofficeEntityConnectionListDataProps): JSX.Element | null {\n const {\n config,\n state,\n pushState,\n headerActions,\n columns,\n gridTemplateColumns,\n getRowId,\n countFetchKey,\n bumpCountFetchKey,\n filterDrawerState,\n registerRefresh,\n } = useBackofficeEntityListRouteContext();\n const listConfig = config.list;\n const { t } = useBackofficeReactTranslation();\n\n const queryData = usePreloadedQuery(listConfig.query, queryRef);\n const {\n data: fragmentData,\n loadNext,\n hasNext,\n isLoadingNext,\n refetch,\n } = useBackofficePaginationFragment<OperationType, unknown, unknown>(\n listConfig.fragment,\n queryData,\n );\n\n const connection = listConfig.getConnection(fragmentData);\n\n const rows = useMemo(() => {\n return connection.edges.map((edge) => {\n return listConfig.toRow(edge.node);\n });\n }, [connection.edges, listConfig]);\n\n const listDefaults = config.listDefaults ??\n listConfig.defaultState ?? { where: null, sort: null };\n const resolvedSort = state.sort ?? listDefaults.sort;\n const { pageSize } = BACKOFFICE_LIST_DEFAULTS;\n\n const baseVariables = useMemo(() => {\n return {\n where: state.where,\n sort: resolvedSort,\n count: pageSize,\n cursor: null,\n };\n }, [pageSize, resolvedSort, state.where]);\n const countVariablesKey = useMemo(() => {\n return stableListVariablesKey(baseVariables);\n }, [baseVariables]);\n const previousCountVariablesKeyRef = useRef(countVariablesKey);\n\n const { isRefreshing, onRefresh } = useBackofficeListRefetch({\n refetch,\n variables: baseVariables,\n defaults: {\n where: listDefaults.where,\n sort: listDefaults.sort,\n count: pageSize,\n cursor: null,\n },\n fetchPolicy: BACKOFFICE_LIST_REFETCH_POLICY,\n buildQueryVariables: listConfig.buildQueryVariables,\n });\n\n useEffect(() => {\n if (previousCountVariablesKeyRef.current === countVariablesKey) {\n return;\n }\n previousCountVariablesKeyRef.current = countVariablesKey;\n bumpCountFetchKey();\n }, [bumpCountFetchKey, countVariablesKey]);\n\n const handleRefresh = useCallback(() => {\n bumpCountFetchKey();\n onRefresh();\n }, [bumpCountFetchKey, onRefresh]);\n\n useEffect(() => {\n registerRefresh(handleRefresh);\n return () => {\n registerRefresh(null);\n };\n }, [handleRefresh, registerRefresh]);\n\n const handleLoadMore = useBackofficeLoadMore({\n hasNext,\n isLoadingNext,\n loadNext,\n count: pageSize,\n });\n\n let loadedCountFallback: JSX.Element = <span>{t('common.loading')}</span>;\n if (rows.length > 0) {\n loadedCountFallback = (\n <span>\n {t('list.loaded', {\n count: rows.length,\n })}\n </span>\n );\n }\n const loadedCountLabel = (\n <BackofficeLazyEntityCountLabel\n count={listConfig.count}\n where={state.where}\n fetchKey={countFetchKey}\n loadingFallback={loadedCountFallback}\n >\n {(totalCount) => {\n return (\n <span>\n {t('list.showing', {\n shown: rows.length,\n total: totalCount,\n })}\n </span>\n );\n }}\n </BackofficeLazyEntityCountLabel>\n );\n\n return (\n <BackofficeEntityListScaffold\n config={config}\n state={state}\n pushState={pushState}\n headerActions={headerActions}\n rows={rows}\n columns={columns}\n gridTemplateColumns={gridTemplateColumns}\n getRowId={getRowId}\n hasNextPage={hasNext}\n isLoadingMore={isLoadingNext}\n isRefreshing={isRefreshing}\n onLoadMore={handleLoadMore}\n onRefresh={handleRefresh}\n totalCount={null}\n loadedCountLabel={loadedCountLabel}\n filterDrawerState={filterDrawerState}\n />\n );\n}\n\nexport const BackofficeEntityListDataPage = ({\n prepared,\n}: BackofficeEntityListDataPageProps): JSX.Element | null => {\n const {\n config,\n state,\n pushState,\n headerActions,\n columns,\n gridTemplateColumns,\n getRowId,\n filterDrawerState,\n } = useBackofficeEntityListRouteContext();\n const relayEnvironment = useRelayEnvironment();\n const { t } = useBackofficeReactTranslation();\n const [queryRef, setQueryRef] = useState(() => {\n return prepared.query;\n });\n const ownedQueryRef = useRef<BackofficePreparedListDataRoute['query'] | null>(\n null,\n );\n\n const disposeOwnedQueryRef = useCallback(() => {\n ownedQueryRef.current?.dispose();\n ownedQueryRef.current = null;\n }, []);\n\n useEffect(() => {\n disposeOwnedQueryRef();\n setQueryRef(prepared.query);\n }, [disposeOwnedQueryRef, prepared.query]);\n\n useEffect(() => {\n return () => {\n disposeOwnedQueryRef();\n };\n }, [disposeOwnedQueryRef]);\n\n const reloadInitialQuery = useCallback(() => {\n const listConfig = config.list;\n const listDefaults = config.listDefaults ??\n listConfig.defaultState ?? { where: null, sort: null };\n const { pageSize } = BACKOFFICE_LIST_DEFAULTS;\n const variablesBase = {\n where: state.where,\n sort: state.sort ?? listDefaults.sort,\n count: pageSize,\n cursor: null,\n };\n const variables = listConfig.buildQueryVariables(variablesBase);\n const nextQueryRef = loadQuery<OperationType>(\n relayEnvironment,\n listConfig.query,\n variables,\n {\n fetchPolicy: 'network-only',\n },\n );\n disposeOwnedQueryRef();\n ownedQueryRef.current = nextQueryRef;\n setQueryRef(nextQueryRef);\n }, [config, disposeOwnedQueryRef, relayEnvironment, state.sort, state.where]);\n\n return (\n <BackofficeErrorBoundary\n fallback={({ reset }) => {\n return (\n <BackofficeEntityListScaffold\n config={config}\n state={state}\n pushState={pushState}\n headerActions={headerActions}\n rows={[]}\n columns={columns}\n gridTemplateColumns={gridTemplateColumns}\n getRowId={getRowId}\n hasNextPage={false}\n isLoadingMore={false}\n isRefreshing={false}\n onLoadMore={() => {}}\n onRefresh={() => {\n reset();\n reloadInitialQuery();\n }}\n totalCount={null}\n filterDrawerState={filterDrawerState}\n emptyState={\n <InlineBanner\n tone=\"danger\"\n title={t('list.errors.title')}\n actions={\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"small\"\n onClick={() => {\n reset();\n reloadInitialQuery();\n }}\n >\n {t('list.actions.retry')}\n </Button>\n }\n >\n {t('list.errors.tableFailed')}\n </InlineBanner>\n }\n />\n );\n }}\n >\n <BackofficeEntityConnectionListData queryRef={queryRef} />\n </BackofficeErrorBoundary>\n );\n};\n\nexport default BackofficeEntityListDataPage;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BackofficeEntityListDataPage.js","names":[],"sources":["../../../src/pages/BackofficeEntityListDataPage.tsx"],"sourcesContent":["import {\n type JSX,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { loadQuery, usePreloadedQuery } from 'react-relay';\nimport type { OperationType } from 'relay-runtime';\nimport {\n BACKOFFICE_LIST_DEFAULTS,\n BACKOFFICE_LIST_REFETCH_POLICY,\n} from '@plumile/backoffice-core/constants.js';\nimport { stableListVariablesKey } from '@plumile/backoffice-core/state/stableKey.js';\nimport type { BackofficePreparedListDataRoute } from '@plumile/backoffice-core/types.js';\nimport { Button } from '@plumile/ui/atomic/atoms/button/Button.js';\nimport { InlineBanner } from '@plumile/ui/components/feedback/InlineBanner.js';\n\nimport { BackofficeErrorBoundary } from '../components/backoffice/errors/BackofficeErrorBoundary.js';\nimport { BackofficeEntityListScaffold } from '../components/backoffice/scaffolds/BackofficeEntityListScaffold.js';\nimport { BackofficeLazyEntityCountLabel } from '../components/backoffice/refs/BackofficeLazyEntityCount.js';\nimport { useBackofficeLoadMore } from '../hooks/useBackofficeLoadMore.js';\nimport { useBackofficeListRefetch } from '../hooks/useBackofficeListRefetch.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficePaginationFragment } from '../relay/typedRelayHooks.js';\nimport { useRelayEnvironment } from '../relay/useRelayEnvironment.js';\nimport { useBackofficeEntityListRouteContext } from './BackofficeEntityListRouteContext.js';\n\nexport type BackofficeEntityListDataPageProps = {\n prepared: BackofficePreparedListDataRoute;\n};\n\ntype BackofficeEntityConnectionListDataProps = {\n queryRef: BackofficePreparedListDataRoute['query'];\n};\n\n/**\n * Renders the Relay-backed row data under the list layout route boundary.\n */\nfunction BackofficeEntityConnectionListData({\n queryRef,\n}: BackofficeEntityConnectionListDataProps): JSX.Element | null {\n const {\n config,\n state,\n pushState,\n headerActions,\n columns,\n gridTemplateColumns,\n getRowId,\n countFetchKey,\n bumpCountFetchKey,\n filterDrawerState,\n registerRefresh,\n } = useBackofficeEntityListRouteContext();\n const listConfig = config.list;\n const { t } = useBackofficeReactTranslation();\n\n const queryData = usePreloadedQuery(listConfig.query, queryRef);\n const {\n data: fragmentData,\n loadNext,\n hasNext,\n isLoadingNext,\n refetch,\n } = useBackofficePaginationFragment<OperationType, unknown, unknown>(\n listConfig.fragment,\n queryData,\n );\n\n const connection = listConfig.getConnection(fragmentData);\n\n const rows = useMemo(() => {\n return connection.edges.map((edge) => {\n return listConfig.toRow(edge.node);\n });\n }, [connection.edges, listConfig]);\n\n const { listDefaults } = config;\n const resolvedSort = state.sort ?? listDefaults.sort;\n const { pageSize } = BACKOFFICE_LIST_DEFAULTS;\n\n const baseVariables = useMemo(() => {\n return {\n where: state.where,\n sort: resolvedSort,\n count: pageSize,\n cursor: null,\n };\n }, [pageSize, resolvedSort, state.where]);\n const countVariablesKey = useMemo(() => {\n return stableListVariablesKey(baseVariables);\n }, [baseVariables]);\n const previousCountVariablesKeyRef = useRef(countVariablesKey);\n\n const { isRefreshing, onRefresh } = useBackofficeListRefetch({\n refetch,\n variables: baseVariables,\n defaults: {\n where: listDefaults.where,\n sort: listDefaults.sort,\n count: pageSize,\n cursor: null,\n },\n fetchPolicy: BACKOFFICE_LIST_REFETCH_POLICY,\n buildQueryVariables: listConfig.buildQueryVariables,\n });\n\n useEffect(() => {\n if (previousCountVariablesKeyRef.current === countVariablesKey) {\n return;\n }\n previousCountVariablesKeyRef.current = countVariablesKey;\n bumpCountFetchKey();\n }, [bumpCountFetchKey, countVariablesKey]);\n\n const handleRefresh = useCallback(() => {\n bumpCountFetchKey();\n onRefresh();\n }, [bumpCountFetchKey, onRefresh]);\n\n useEffect(() => {\n registerRefresh(handleRefresh);\n return () => {\n registerRefresh(null);\n };\n }, [handleRefresh, registerRefresh]);\n\n const handleLoadMore = useBackofficeLoadMore({\n hasNext,\n isLoadingNext,\n loadNext,\n count: pageSize,\n });\n\n let loadedCountFallback: JSX.Element = <span>{t('common.loading')}</span>;\n if (rows.length > 0) {\n loadedCountFallback = (\n <span>\n {t('list.loaded', {\n count: rows.length,\n })}\n </span>\n );\n }\n const loadedCountLabel = (\n <BackofficeLazyEntityCountLabel\n count={listConfig.count}\n where={state.where}\n fetchKey={countFetchKey}\n loadingFallback={loadedCountFallback}\n >\n {(totalCount) => {\n return (\n <span>\n {t('list.showing', {\n shown: rows.length,\n total: totalCount,\n })}\n </span>\n );\n }}\n </BackofficeLazyEntityCountLabel>\n );\n\n return (\n <BackofficeEntityListScaffold\n config={config}\n state={state}\n pushState={pushState}\n headerActions={headerActions}\n rows={rows}\n columns={columns}\n gridTemplateColumns={gridTemplateColumns}\n getRowId={getRowId}\n hasNextPage={hasNext}\n isLoadingMore={isLoadingNext}\n isRefreshing={isRefreshing}\n onLoadMore={handleLoadMore}\n onRefresh={handleRefresh}\n totalCount={null}\n loadedCountLabel={loadedCountLabel}\n filterDrawerState={filterDrawerState}\n />\n );\n}\n\nexport const BackofficeEntityListDataPage = ({\n prepared,\n}: BackofficeEntityListDataPageProps): JSX.Element | null => {\n const {\n config,\n state,\n pushState,\n headerActions,\n columns,\n gridTemplateColumns,\n getRowId,\n filterDrawerState,\n } = useBackofficeEntityListRouteContext();\n const relayEnvironment = useRelayEnvironment();\n const { t } = useBackofficeReactTranslation();\n const [queryRef, setQueryRef] = useState(() => {\n return prepared.query;\n });\n const ownedQueryRef = useRef<BackofficePreparedListDataRoute['query'] | null>(\n null,\n );\n\n const disposeOwnedQueryRef = useCallback(() => {\n ownedQueryRef.current?.dispose();\n ownedQueryRef.current = null;\n }, []);\n\n useEffect(() => {\n disposeOwnedQueryRef();\n setQueryRef(prepared.query);\n }, [disposeOwnedQueryRef, prepared.query]);\n\n useEffect(() => {\n return () => {\n disposeOwnedQueryRef();\n };\n }, [disposeOwnedQueryRef]);\n\n const reloadInitialQuery = useCallback(() => {\n const listConfig = config.list;\n const { listDefaults } = config;\n const { pageSize } = BACKOFFICE_LIST_DEFAULTS;\n const variablesBase = {\n where: state.where,\n sort: state.sort ?? listDefaults.sort,\n count: pageSize,\n cursor: null,\n };\n const variables = listConfig.buildQueryVariables(variablesBase);\n const nextQueryRef = loadQuery<OperationType>(\n relayEnvironment,\n listConfig.query,\n variables,\n {\n fetchPolicy: 'network-only',\n },\n );\n disposeOwnedQueryRef();\n ownedQueryRef.current = nextQueryRef;\n setQueryRef(nextQueryRef);\n }, [config, disposeOwnedQueryRef, relayEnvironment, state.sort, state.where]);\n\n return (\n <BackofficeErrorBoundary\n fallback={({ reset }) => {\n return (\n <BackofficeEntityListScaffold\n config={config}\n state={state}\n pushState={pushState}\n headerActions={headerActions}\n rows={[]}\n columns={columns}\n gridTemplateColumns={gridTemplateColumns}\n getRowId={getRowId}\n hasNextPage={false}\n isLoadingMore={false}\n isRefreshing={false}\n onLoadMore={() => {}}\n onRefresh={() => {\n reset();\n reloadInitialQuery();\n }}\n totalCount={null}\n filterDrawerState={filterDrawerState}\n emptyState={\n <InlineBanner\n tone=\"danger\"\n title={t('list.errors.title')}\n actions={\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"small\"\n onClick={() => {\n reset();\n reloadInitialQuery();\n }}\n >\n {t('list.actions.retry')}\n </Button>\n }\n >\n {t('list.errors.tableFailed')}\n </InlineBanner>\n }\n />\n );\n }}\n >\n <BackofficeEntityConnectionListData queryRef={queryRef} />\n </BackofficeErrorBoundary>\n );\n};\n\nexport default BackofficeEntityListDataPage;\n"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ //#region src/pages/resolveDashboardTargetDestination.ts
2
+ var e = (e, t, n) => {
3
+ if (e == null) return n == null ? void 0 : { pathname: n };
4
+ if (e.kind === "href") return { pathname: e.href };
5
+ let r = t[e.entityId];
6
+ if (r?.hasList !== !0) return n == null ? void 0 : { pathname: n };
7
+ let i = r.listNavigation.encode(e.state ?? {});
8
+ return {
9
+ pathname: r.routes.list,
10
+ filters: i.filters,
11
+ query: i.query
12
+ };
13
+ };
14
+ //#endregion
15
+ export { e as default, e as resolveDashboardTargetDestination };
16
+
17
+ //# sourceMappingURL=resolveDashboardTargetDestination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveDashboardTargetDestination.js","names":[],"sources":["../../../src/pages/resolveDashboardTargetDestination.ts"],"sourcesContent":["import type {\n BackofficeDashboardLinkTarget,\n BackofficeEntityManifestMap,\n} from '@plumile/backoffice-core/types.js';\nimport type { RouterDestination } from '@plumile/router/types.js';\n\n/** Resolves dashboard targets synchronously from the eager entity manifest. */\nexport const resolveDashboardTargetDestination = (\n target: BackofficeDashboardLinkTarget | undefined,\n entities: BackofficeEntityManifestMap,\n fallbackHref: string | undefined,\n): RouterDestination | undefined => {\n if (target == null) {\n if (fallbackHref == null) {\n return undefined;\n }\n return { pathname: fallbackHref };\n }\n if (target.kind === 'href') {\n return { pathname: target.href };\n }\n\n const entity = entities[target.entityId];\n if (entity?.hasList !== true) {\n if (fallbackHref == null) {\n return undefined;\n }\n return { pathname: fallbackHref };\n }\n\n const encoded = entity.listNavigation.encode(target.state ?? {});\n return {\n pathname: entity.routes.list,\n filters: encoded.filters,\n query: encoded.query,\n };\n};\n\nexport default resolveDashboardTargetDestination;\n"],"mappings":";AAOA,IAAa,KACX,GACA,GACA,MACkC;CAClC,IAAI,KAAU,MAIZ,OAHI,KAAgB,OAClB,SAEK,EAAE,UAAU,EAAa;CAElC,IAAI,EAAO,SAAS,QAClB,OAAO,EAAE,UAAU,EAAO,KAAK;CAGjC,IAAM,IAAS,EAAS,EAAO;CAC/B,IAAI,GAAQ,YAAY,IAItB,OAHI,KAAgB,OAClB,SAEK,EAAE,UAAU,EAAa;CAGlC,IAAM,IAAU,EAAO,eAAe,OAAO,EAAO,SAAS,CAAC,CAAC;CAC/D,OAAO;EACL,UAAU,EAAO,OAAO;EACxB,SAAS,EAAQ;EACjB,OAAO,EAAQ;CACjB;AACF"}
@@ -9,7 +9,7 @@ import { BACKOFFICE_LIST_DEFAULTS as ee } from "@plumile/backoffice-core/constan
9
9
  import { getResourcePage as u } from "@plumile/router/ResourcePage.js";
10
10
  import { r as d } from "@plumile/router/tools.js";
11
11
  //#region src/router/createBackofficeRoutes.tsx
12
- var { loadQuery: f, usePreloadedQuery: p } = c, m = u("WrapperPage", async () => ({ default: (await import("@plumile/ui/pages/WrapperPage.js")).WrapperPage })), h = u("BackofficeLayoutPage", async () => import("../pages/BackofficeLayoutPage.js")), g = u("BackofficeEntityListPage", async () => import("../pages/BackofficeEntityListPage.js")), _ = u("BackofficeEntityListShellPage", async () => import("../pages/BackofficeEntityListShellPage.js")), v = u("BackofficeEntityListDataPage", async () => import("../pages/BackofficeEntityListDataPage.js")), te = u("BackofficeEntityDetailPage", async () => import("../pages/BackofficeEntityDetailPage.js")), y = u("BackofficeEntityDetailFramePage", async () => import("../pages/BackofficeEntityDetailFramePage.js")), b = u("BackofficeEntityDetailLayoutPage", async () => import("../pages/BackofficeEntityDetailLayoutPage.js")), x = u("BackofficeEntityDetailPageConfigPage", async () => import("../pages/BackofficeEntityDetailPageConfigPage.js")), S = u("BackofficeEntityDetailShellPage", async () => import("../pages/BackofficeEntityDetailShellPage.js")), C = u("BackofficeEntityDetailUnknownPageRedirect", async () => import("../pages/BackofficeEntityDetailUnknownPageRedirect.js")), w = u("BackofficeDashboardPage", async () => import("../pages/BackofficeDashboardPage.js")), T = u("BackofficeDashboardShellPage", async () => import("../pages/BackofficeDashboardShellPage.js")), E = u("BackofficeToolShellPage", async () => import("../pages/BackofficeToolShellPage.js")), ne = u("BackofficeHubPage", async () => import("../pages/BackofficeHubPage.js")), re = u("BackofficeLoginPage", async () => import("../pages/BackofficeLoginPage.js")), ie = u("BackofficePasswordResetRequestPage", async () => import("../pages/BackofficePasswordResetRequestPage.js")), D = u("BackofficePasswordResetCompletePage", async () => import("../pages/BackofficePasswordResetCompletePage.js")), O = u("BackofficeVerifyEmailPage", async () => import("../pages/BackofficeVerifyEmailPage.js")), k = u("BackofficeAcceptInvitationPage", async () => import("../pages/BackofficeAcceptInvitationPage.js")), A = ({ pathname: e }) => {
12
+ var { loadQuery: f, usePreloadedQuery: p } = c, m = u("WrapperPage", async () => ({ default: (await import("@plumile/ui/pages/WrapperPage.js")).WrapperPage })), h = u("BackofficeLayoutPage", async () => import("../pages/BackofficeLayoutPage.js")), g = u("BackofficeEntityListPage", async () => import("../pages/BackofficeEntityListPage.js")), _ = u("BackofficeEntityListShellPage", async () => import("../pages/BackofficeEntityListShellPage.js")), v = u("BackofficeEntityListDataPage", async () => import("../pages/BackofficeEntityListDataPage.js")), te = u("BackofficeEntityDetailPage", async () => import("../pages/BackofficeEntityDetailPage.js")), y = u("BackofficeEntityDetailFramePage", async () => import("../pages/BackofficeEntityDetailFramePage.js")), b = u("BackofficeEntityDetailLayoutPage", async () => import("../pages/BackofficeEntityDetailLayoutPage.js")), x = u("BackofficeEntityDetailPageConfigPage", async () => import("../pages/BackofficeEntityDetailPageConfigPage.js")), S = u("BackofficeEntityDetailShellPage", async () => import("../pages/BackofficeEntityDetailShellPage.js")), C = u("BackofficeEntityDetailUnknownPageRedirect", async () => import("../pages/BackofficeEntityDetailUnknownPageRedirect.js")), w = u("BackofficeDashboardPage", async () => import("../pages/BackofficeDashboardPage.js")), T = u("BackofficeDashboardShellPage", async () => import("../pages/BackofficeDashboardShellPage.js")), E = u("BackofficeToolShellPage", async () => import("../pages/BackofficeToolShellPage.js")), D = u("BackofficeHubPage", async () => import("../pages/BackofficeHubPage.js")), ne = u("BackofficeLoginPage", async () => import("../pages/BackofficeLoginPage.js")), re = u("BackofficePasswordResetRequestPage", async () => import("../pages/BackofficePasswordResetRequestPage.js")), ie = u("BackofficePasswordResetCompletePage", async () => import("../pages/BackofficePasswordResetCompletePage.js")), O = u("BackofficeVerifyEmailPage", async () => import("../pages/BackofficeVerifyEmailPage.js")), k = u("BackofficeAcceptInvitationPage", async () => import("../pages/BackofficeAcceptInvitationPage.js")), A = ({ pathname: e }) => {
13
13
  let t = a(l);
14
14
  return o(() => {
15
15
  t?.history.set({ pathname: e });
@@ -51,64 +51,51 @@ var { loadQuery: f, usePreloadedQuery: p } = c, m = u("WrapperPage", async () =>
51
51
  }
52
52
  }
53
53
  return null;
54
- }, z = (e) => {
55
- let t = new URLSearchParams();
56
- return Object.entries(e).forEach(([e, n]) => {
57
- if (n != null) {
58
- if (Array.isArray(n)) {
59
- n.forEach((n) => {
60
- n != null && t.append(e, String(n));
61
- });
62
- return;
63
- }
64
- t.set(e, String(n));
65
- }
66
- }), t;
67
- }, B = (e, t) => {
54
+ }, z = (e, t) => {
68
55
  let n = I(t);
69
56
  return e.detailPages?.find((e) => I(e.pathSegment) === n) ?? null;
70
- }, V = (e, t) => B(e, t)?.id ?? t, H = d;
71
- function U(a) {
72
- let { basePath: o, entityManifest: c, entityRegistry: l, sidebar: u, auth: d, dashboard: p } = a, N = r(a.dashboards), I = M(o), B = P(I, "login"), U = P(I, "login/reset"), W = P(I, "login/reset/complete"), oe = P(I, "verify-email"), se = P(I, "accept-invitation"), ce = F(I, "login"), G = t(c, u), le = n(G, u), ue = e(G, u), K = /* @__PURE__ */ new Map();
57
+ }, B = (e, t) => z(e, t)?.id ?? t, V = d;
58
+ function H(a) {
59
+ let { basePath: o, entityManifest: c, entityRegistry: l, sidebar: u, auth: d, dashboard: p } = a, N = r(a.dashboards), I = M(o), z = P(I, "login"), H = P(I, "login/reset"), U = P(I, "login/reset/complete"), oe = P(I, "verify-email"), se = P(I, "accept-invitation"), ce = F(I, "login"), W = t(c, u), le = n(W, u), ue = e(W, u), G = /* @__PURE__ */ new Map();
73
60
  ue.forEach((e, t) => {
74
- K.set(t, e.groupId);
61
+ G.set(t, e.groupId);
75
62
  });
76
- let q = /* @__PURE__ */ new WeakMap(), J = /* @__PURE__ */ new WeakMap(), Y = u?.permissionsQuery, de = async ({ context: e }) => {
63
+ let K = /* @__PURE__ */ new WeakMap(), q = /* @__PURE__ */ new WeakMap(), J = u?.permissionsQuery, de = async ({ context: e }) => {
77
64
  let t = await d.session.load();
78
65
  return {
79
- permissionsQuery: Y == null ? null : f(e.relayEnvironment, Y, {}),
66
+ permissionsQuery: J == null ? null : f(e.relayEnvironment, J, {}),
80
67
  authStatusQuery: t.authStatusQuery == null ? null : f(e.relayEnvironment, t.authStatusQuery, {}, { fetchPolicy: "network-only" })
81
68
  };
82
- }, X = async () => p == null ? null : {
69
+ }, Y = async () => p == null ? null : {
83
70
  dashboardId: "dashboard",
84
71
  config: await p.load()
85
- }, fe = () => p == null ? null : { dashboardId: "dashboard" }, Z = ({ prepared: e, Component: t }) => t == null ? null : /* @__PURE__ */ s(t, { prepared: e }), Q = ({ children: e, prepared: t, Component: n }) => n == null ? null : /* @__PURE__ */ s(n, {
72
+ }, X = () => p == null ? null : { dashboardId: "dashboard" }, Z = ({ prepared: e, Component: t }) => t == null ? null : /* @__PURE__ */ s(t, { prepared: e }), Q = ({ children: e, prepared: t, Component: n }) => n == null ? null : /* @__PURE__ */ s(n, {
86
73
  prepared: t,
87
74
  children: e
88
- }), pe = H({
75
+ }), fe = V({
89
76
  path: "",
90
77
  resourcePage: T,
91
- prepare: fe,
78
+ prepare: X,
92
79
  render: Q,
93
- children: [H({
80
+ children: [V({
94
81
  path: "",
95
82
  resourcePage: w,
96
- prepare: X,
83
+ prepare: Y,
97
84
  render: Z
98
85
  })]
99
- }), me = H({
86
+ }), pe = V({
100
87
  path: "dashboard",
101
88
  resourcePage: T,
102
- prepare: fe,
89
+ prepare: X,
103
90
  render: Q,
104
- children: [H({
91
+ children: [V({
105
92
  path: "",
106
93
  resourcePage: w,
107
- prepare: X,
94
+ prepare: Y,
108
95
  render: Z
109
96
  })]
110
- }), he = N.map((e) => {
111
- let t = H({
97
+ }), me = N.map((e) => {
98
+ let t = V({
112
99
  path: "",
113
100
  resourcePage: w,
114
101
  prepare: async () => {
@@ -121,7 +108,7 @@ function U(a) {
121
108
  },
122
109
  render: Z
123
110
  });
124
- return H({
111
+ return V({
125
112
  path: `dashboard/${e.id}`,
126
113
  resourcePage: T,
127
114
  prepare: () => ({
@@ -131,20 +118,20 @@ function U(a) {
131
118
  render: Q,
132
119
  children: [t]
133
120
  });
134
- }), ge = Object.values(c).filter((e) => e.kind === "list-detail"), _e = le.map((e) => {
135
- let t = H({
121
+ }), he = Object.values(c).filter((e) => e.kind === "list-detail"), ge = le.map((e) => {
122
+ let t = V({
136
123
  path: L(e.hub.href, I),
137
- resourcePage: ne,
124
+ resourcePage: D,
138
125
  prepare: () => ({
139
126
  hubId: e.hub.id,
140
127
  hub: e.hub
141
128
  }),
142
129
  render: ({ prepared: e, Component: t }) => t == null ? null : /* @__PURE__ */ s(t, { prepared: e })
143
130
  });
144
- return e.groupId != null && J.set(t, e.groupId), t;
145
- }), ve = ge.map((e) => {
131
+ return e.groupId != null && q.set(t, e.groupId), t;
132
+ }), _e = he.map((e) => {
146
133
  let t = e.routes.list, n = L(t, I), r = [], a = ({ match: t }) => {
147
- let n = String(t?.params.id ?? ""), r = typeof t?.params.pagePath == "string" ? t.params.pagePath : null, a = r == null ? e.defaultDetailPageId ?? "overview" : V(e, r);
134
+ let n = String(t?.params.id ?? ""), r = typeof t?.params.pagePath == "string" ? t.params.pagePath : null, a = r == null ? e.defaultDetailPageId ?? "overview" : B(e, r);
148
135
  return /* @__PURE__ */ s(i, {
149
136
  entityManifest: e,
150
137
  id: n,
@@ -153,36 +140,39 @@ function U(a) {
153
140
  });
154
141
  };
155
142
  if (e.hasList) {
156
- let t = H({
143
+ let t = V({
157
144
  path: "",
145
+ querySchema: e.listNavigation.querySchema,
158
146
  resourcePage: v,
159
147
  prepareSearchBehavior: "path",
160
- prepare: async ({ context: t, query: n }) => {
161
- let { config: r } = await l.loadListEntity(e.id), { list: i, listUrlCodec: a, listDefaults: o } = r;
162
- if (a == null || o == null) throw Error(`Backoffice entity ${e.id} does not expose a list configuration.`);
163
- let s = z(n), c = a.parse(s), { pageSize: u } = ee, d = {
164
- where: c.where,
165
- sort: c.sort ?? o.sort,
166
- count: u,
148
+ prepare: async ({ context: t, filters: n, query: r }) => {
149
+ let { config: i } = await l.loadListEntity(e.id), { list: a } = i, { defaults: o } = e.listNavigation, s = {};
150
+ typeof r.sort == "string" && (s.sort = r.sort);
151
+ let c = n, u = e.listNavigation.decode({
152
+ filters: c,
153
+ query: s
154
+ }), { pageSize: d } = ee, p = {
155
+ where: u.where,
156
+ sort: u.sort ?? o.sort,
157
+ count: d,
167
158
  cursor: null
168
- }, p = i.buildQueryVariables(d), m = f(t.relayEnvironment, i.query, p);
159
+ }, m = a.buildQueryVariables(p), h = f(t.relayEnvironment, a.query, m);
169
160
  return {
170
161
  entityId: e.id,
171
162
  entityManifest: e,
172
- entityConfig: r,
173
- query: m
163
+ entityConfig: i,
164
+ query: h
174
165
  };
175
166
  },
176
167
  render: ({ prepared: e, Component: t }) => t == null ? null : /* @__PURE__ */ s(t, { prepared: e })
177
168
  });
178
- q.set(t, e.id);
179
- let n = H({
169
+ K.set(t, e.id);
170
+ let n = V({
180
171
  path: "",
181
172
  resourcePage: g,
182
173
  prepareSearchBehavior: "path",
183
174
  prepare: async () => {
184
- let { config: t } = await l.loadListEntity(e.id), { listUrlCodec: n, listDefaults: r } = t;
185
- if (n == null || r == null) throw Error(`Backoffice entity ${e.id} does not expose a list configuration.`);
175
+ let { config: t } = await l.loadListEntity(e.id);
186
176
  return {
187
177
  entityId: e.id,
188
178
  entityManifest: e,
@@ -201,8 +191,8 @@ function U(a) {
201
191
  },
202
192
  children: [t]
203
193
  });
204
- q.set(n, e.id);
205
- let i = H({
194
+ K.set(n, e.id);
195
+ let i = V({
206
196
  path: "",
207
197
  resourcePage: _,
208
198
  prepareSearchBehavior: "path",
@@ -221,10 +211,10 @@ function U(a) {
221
211
  },
222
212
  children: [n]
223
213
  });
224
- q.set(i, e.id), r.push(i);
214
+ K.set(i, e.id), r.push(i);
225
215
  }
226
216
  let o = (e.detailPages ?? []).map((t) => {
227
- let n = H({
217
+ let n = V({
228
218
  path: "",
229
219
  resourcePage: te,
230
220
  suspenseBoundary: "segment",
@@ -244,8 +234,8 @@ function U(a) {
244
234
  },
245
235
  render: ({ prepared: e, Component: t }) => t == null ? null : /* @__PURE__ */ s(t, { prepared: e })
246
236
  });
247
- q.set(n, e.id);
248
- let r = H({
237
+ K.set(n, e.id);
238
+ let r = V({
249
239
  path: t.pathSegment,
250
240
  resourcePage: x,
251
241
  suspenseBoundary: "segment",
@@ -273,8 +263,8 @@ function U(a) {
273
263
  },
274
264
  children: [n]
275
265
  });
276
- return q.set(r, e.id), r;
277
- }), c = H({
266
+ return K.set(r, e.id), r;
267
+ }), c = V({
278
268
  path: "",
279
269
  resourcePage: b,
280
270
  suspenseBoundary: "segment",
@@ -300,7 +290,7 @@ function U(a) {
300
290
  });
301
291
  },
302
292
  children: [
303
- H({
293
+ V({
304
294
  path: "",
305
295
  resourcePage: m,
306
296
  prepare: ({ variables: t }) => {
@@ -313,7 +303,7 @@ function U(a) {
313
303
  }
314
304
  }),
315
305
  ...o,
316
- H({
306
+ V({
317
307
  path: ":pagePath",
318
308
  resourcePage: C,
319
309
  suspenseBoundary: "segment",
@@ -340,14 +330,14 @@ function U(a) {
340
330
  })
341
331
  ]
342
332
  });
343
- q.set(c, e.id);
344
- let u = H({
333
+ K.set(c, e.id);
334
+ let u = V({
345
335
  path: "",
346
336
  resourcePage: S,
347
337
  suspenseBoundary: "segment",
348
338
  fallback: a,
349
339
  prepare: ({ variables: t }) => {
350
- let n = String(t.id ?? ""), r = typeof t.pagePath == "string" ? t.pagePath : null, i = r == null ? e.defaultDetailPageId ?? "overview" : V(e, r);
340
+ let n = String(t.id ?? ""), r = typeof t.pagePath == "string" ? t.pagePath : null, i = r == null ? e.defaultDetailPageId ?? "overview" : B(e, r);
351
341
  return {
352
342
  entityId: e.id,
353
343
  entityManifest: e,
@@ -367,8 +357,8 @@ function U(a) {
367
357
  },
368
358
  children: [c]
369
359
  });
370
- q.set(u, e.id);
371
- let d = H({
360
+ K.set(u, e.id);
361
+ let d = V({
372
362
  path: ":id",
373
363
  resourcePage: y,
374
364
  suspenseBoundary: "segment",
@@ -392,14 +382,14 @@ function U(a) {
392
382
  },
393
383
  children: [u]
394
384
  });
395
- return q.set(d, e.id), r.push(d), H({
385
+ return K.set(d, e.id), r.push(d), V({
396
386
  path: n,
397
387
  children: r,
398
388
  resourcePage: m,
399
389
  suspenseBoundary: "segment"
400
390
  });
401
- }), ye = Object.values(c).filter((e) => e.kind === "tool").map((e) => {
402
- let t = L(e.routes.list, I), n = H({
391
+ }), ve = Object.values(c).filter((e) => e.kind === "tool").map((e) => {
392
+ let t = L(e.routes.list, I), n = V({
403
393
  path: "",
404
394
  resourcePage: a.toolsOperationPage ?? null,
405
395
  prepare: async () => {
@@ -420,8 +410,8 @@ function U(a) {
420
410
  });
421
411
  }
422
412
  });
423
- q.set(n, e.id);
424
- let r = H({
413
+ K.set(n, e.id);
414
+ let r = V({
425
415
  path: t,
426
416
  resourcePage: E,
427
417
  prepare: () => ({
@@ -439,8 +429,8 @@ function U(a) {
439
429
  },
440
430
  children: [n]
441
431
  });
442
- return q.set(r, e.id), r;
443
- }), be = H({
432
+ return K.set(r, e.id), r;
433
+ }), ye = V({
444
434
  path: I,
445
435
  resourcePage: h,
446
436
  prepareSearchBehavior: "path",
@@ -448,7 +438,7 @@ function U(a) {
448
438
  prepare: de,
449
439
  render: ({ children: e, prepared: t, route: n, Component: r }) => {
450
440
  if (r == null) return null;
451
- let i = t, a = R(n, q), o = a == null ? R(n, J) : K.get(a) ?? null, c = r, l = d.session.get()?.authStatusQuery ?? null;
441
+ let i = t, a = R(n, K), o = a == null ? R(n, q) : G.get(a) ?? null, c = r, l = d.session.get()?.authStatusQuery ?? null;
452
442
  return l != null && i?.authStatusQuery != null ? /* @__PURE__ */ s(j, {
453
443
  Component: c,
454
444
  preparedLayout: i,
@@ -467,63 +457,62 @@ function U(a) {
467
457
  });
468
458
  },
469
459
  children: [
470
- pe,
460
+ fe,
461
+ ...ge,
471
462
  ..._e,
472
463
  ...ve,
473
- ...ye,
474
- ...he,
475
- me
464
+ ...me,
465
+ pe
476
466
  ]
477
467
  }), $ = [
478
- H({
479
- path: B,
480
- resourcePage: re,
468
+ V({
469
+ path: z,
470
+ resourcePage: ne,
481
471
  prepare: async ({ context: e }) => {
482
472
  let t = await d.login.load();
483
473
  return { query: f(e.relayEnvironment, t.loginQuery, {}) };
484
474
  },
485
475
  render: ({ prepared: e, Component: t }) => t == null ? null : /* @__PURE__ */ s(t, { prepared: e })
486
476
  }),
487
- H({
488
- path: U,
489
- resourcePage: ie,
477
+ V({
478
+ path: H,
479
+ resourcePage: re,
490
480
  prepare: async () => (await d.passwordResetRequest.load(), null),
491
481
  render: ({ Component: e }) => e == null ? null : /* @__PURE__ */ s(e, {})
492
482
  }),
493
- H({
494
- path: W,
495
- resourcePage: D,
483
+ V({
484
+ path: U,
485
+ resourcePage: ie,
496
486
  prepare: async () => (await d.passwordResetComplete.load(), null),
497
487
  render: ({ Component: e }) => e == null ? null : /* @__PURE__ */ s(e, {})
498
488
  }),
499
- H({
489
+ V({
500
490
  path: oe,
501
491
  resourcePage: O,
502
492
  prepare: async () => (await d.verifyEmail.load(), null),
503
493
  render: ({ Component: e }) => e == null ? null : /* @__PURE__ */ s(e, {})
504
494
  })
505
495
  ];
506
- return (d.hasAcceptInvitation === !0 || d.acceptInvitation != null) && $.push(H({
496
+ return (d.hasAcceptInvitation === !0 || d.acceptInvitation != null) && $.push(V({
507
497
  path: se,
508
498
  resourcePage: k,
509
499
  prepare: async () => (await d.acceptInvitation?.load(), null),
510
500
  render: ({ Component: e }) => e == null ? null : /* @__PURE__ */ s(e, {})
511
- })), $.push(be), $;
501
+ })), $.push(ye), $;
512
502
  }
513
- var W = {
503
+ var U = {
514
504
  normalizeBaseSegment: M,
515
505
  normalizePath: N,
516
506
  buildScopedPath: P,
517
507
  buildScopedAbsolutePath: F,
518
508
  buildRelativePath: L,
519
509
  resolveActiveEntityIdFromRoute: R,
520
- resolveDetailPageIdForPath: V,
521
- resolveDetailPageManifestByPath: B,
522
- toSearchParams: z,
510
+ resolveDetailPageIdForPath: B,
511
+ resolveDetailPageManifestByPath: z,
523
512
  validateBackofficeDashboardRegistrations: r,
524
513
  BackofficeLayoutRouteWithAuthStatus: j
525
514
  };
526
515
  //#endregion
527
- export { k as BackofficeAcceptInvitationPageResource, w as BackofficeDashboardPageResource, T as BackofficeDashboardShellPageResource, y as BackofficeEntityDetailFramePageResource, b as BackofficeEntityDetailLayoutPageResource, x as BackofficeEntityDetailPageConfigPageResource, te as BackofficeEntityDetailPageResource, S as BackofficeEntityDetailShellPageResource, C as BackofficeEntityDetailUnknownPageRedirectResource, v as BackofficeEntityListDataPageResource, g as BackofficeEntityListPageResource, _ as BackofficeEntityListShellPageResource, ne as BackofficeHubPageResource, h as BackofficeLayoutPageResource, re as BackofficeLoginPageResource, D as BackofficePasswordResetCompletePageResource, ie as BackofficePasswordResetRequestPageResource, E as BackofficeToolShellPageResource, O as BackofficeVerifyEmailPageResource, m as WrapperPageResource, W as __test, U as createBackofficeRoutes, U as default };
516
+ export { k as BackofficeAcceptInvitationPageResource, w as BackofficeDashboardPageResource, T as BackofficeDashboardShellPageResource, y as BackofficeEntityDetailFramePageResource, b as BackofficeEntityDetailLayoutPageResource, x as BackofficeEntityDetailPageConfigPageResource, te as BackofficeEntityDetailPageResource, S as BackofficeEntityDetailShellPageResource, C as BackofficeEntityDetailUnknownPageRedirectResource, v as BackofficeEntityListDataPageResource, g as BackofficeEntityListPageResource, _ as BackofficeEntityListShellPageResource, D as BackofficeHubPageResource, h as BackofficeLayoutPageResource, ne as BackofficeLoginPageResource, ie as BackofficePasswordResetCompletePageResource, re as BackofficePasswordResetRequestPageResource, E as BackofficeToolShellPageResource, O as BackofficeVerifyEmailPageResource, m as WrapperPageResource, U as __test, H as createBackofficeRoutes, H as default };
528
517
 
529
518
  //# sourceMappingURL=createBackofficeRoutes.js.map