@plumile/backoffice-react 0.1.164 → 0.1.166

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 (27) hide show
  1. package/lib/esm/auth/authRefreshNotice.css.js +0 -1
  2. package/lib/esm/auth/login/loginPage.css.js +1 -0
  3. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js +85 -69
  4. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js.map +1 -1
  5. package/lib/esm/components/backoffice/detail/backofficeDetailRelationLink.css.js +0 -1
  6. package/lib/esm/components/backoffice/filters/backofficeFilterAction.css.js +1 -0
  7. package/lib/esm/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.js +1 -1
  8. package/lib/esm/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.js.map +1 -1
  9. package/lib/esm/components/backoffice/refs/BackofficeLazyEntityCount.js +17 -8
  10. package/lib/esm/components/backoffice/refs/BackofficeLazyEntityCount.js.map +1 -1
  11. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js +54 -53
  12. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js.map +1 -1
  13. package/lib/esm/index.js +21 -21
  14. package/lib/esm/pages/BackofficeEntityDetailPage.js +19 -19
  15. package/lib/esm/pages/BackofficeEntityDetailPage.js.map +1 -1
  16. package/lib/esm/pages/BackofficeEntityListPage.helpers.js +8 -8
  17. package/lib/esm/pages/BackofficeEntityListPage.helpers.js.map +1 -1
  18. package/lib/esm/pages/BackofficeEntityListPage.js +112 -99
  19. package/lib/esm/pages/BackofficeEntityListPage.js.map +1 -1
  20. package/lib/types/components/backoffice/detail/BackofficeDetailRelationListBlock.d.ts.map +1 -1
  21. package/lib/types/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.d.ts.map +1 -1
  22. package/lib/types/components/backoffice/refs/BackofficeLazyEntityCount.d.ts +13 -1
  23. package/lib/types/components/backoffice/refs/BackofficeLazyEntityCount.d.ts.map +1 -1
  24. package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts +1 -0
  25. package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts.map +1 -1
  26. package/lib/types/pages/BackofficeEntityListPage.d.ts.map +1 -1
  27. package/package.json +12 -12
@@ -1,4 +1,3 @@
1
- /* empty css */
2
1
  /* empty css */
3
2
  //#region src/auth/authRefreshNotice.css.ts
4
3
  var e = "txvbqbqhu txvbqbrff txvbqbry7 txvbqbp5g txvbqb13ik txvbqb1auw txvbqblx6 txvbqb13l3 txvbqbdjn txvbqbtxc txvbqbegv";
@@ -1,3 +1,4 @@
1
+ /* empty css */
1
2
  /* empty css */
2
3
  /* empty css */
3
4
  //#region src/auth/login/loginPage.css.ts
@@ -5,106 +5,122 @@ import { buildDataTableColumns as r } from "../columns/buildDataTableColumns.js"
5
5
  import { useBackofficeLoadMore as i } from "../../../hooks/useBackofficeLoadMore.js";
6
6
  import { useBackofficeListRefetch as a } from "../../../hooks/useBackofficeListRefetch.js";
7
7
  import { BackofficeEntityListScaffold as o } from "../scaffolds/BackofficeEntityListScaffold.js";
8
- import { Suspense as s, useCallback as c, useMemo as l, useState as u } from "react";
9
- import { InlineBanner as d } from "@plumile/ui/components/feedback/InlineBanner.js";
10
- import { jsx as f } from "react/jsx-runtime";
11
- import { useTranslation as p } from "react-i18next";
12
- import * as m from "react-relay";
13
- import { BACKOFFICE_LIST_REFETCH_POLICY as h, BACKOFFICE_RELATED_TAB_PAGE_SIZE as g } from "@plumile/backoffice-core/constants.js";
14
- import { setWhereValue as _ } from "@plumile/backoffice-core/filters/where.js";
15
- import { BackofficeTableSkeleton as v } from "@plumile/ui/backoffice/molecules/backoffice_table_skeleton/BackofficeTableSkeleton.js";
8
+ import { BackofficeLazyEntityCountLabel as s } from "../refs/BackofficeLazyEntityCount.js";
9
+ import { Suspense as c, useCallback as l, useMemo as u, useState as d } from "react";
10
+ import { InlineBanner as f } from "@plumile/ui/components/feedback/InlineBanner.js";
11
+ import { jsx as p } from "react/jsx-runtime";
12
+ import { useTranslation as m } from "react-i18next";
13
+ import * as h from "react-relay";
14
+ import { BACKOFFICE_LIST_REFETCH_POLICY as g, BACKOFFICE_RELATED_TAB_PAGE_SIZE as _ } from "@plumile/backoffice-core/constants.js";
15
+ import { setWhereValue as v } from "@plumile/backoffice-core/filters/where.js";
16
+ import { BackofficeTableSkeleton as y } from "@plumile/ui/backoffice/molecules/backoffice_table_skeleton/BackofficeTableSkeleton.js";
16
17
  //#region src/components/backoffice/detail/BackofficeDetailRelationListBlock.tsx
17
- var { useLazyLoadQuery: y, usePaginationFragment: b } = m, x = () => {
18
+ var { useLazyLoadQuery: b, usePaginationFragment: x } = h, S = () => {
18
19
  let { t } = e();
19
- return /* @__PURE__ */ f(v, {
20
+ return /* @__PURE__ */ p(y, {
20
21
  rows: 6,
21
22
  ariaLabel: t("common.loading")
22
23
  });
23
- }, S = ({ title: t, config: n, relation: s, value: d }) => {
24
- let { t: m } = p(), { t: v } = e(), x = n.list, S = n.listDefaults ?? x.defaultState ?? {
24
+ }, C = ({ title: t, config: n, relation: c, value: f }) => {
25
+ let { t: h } = m(), { t: y } = e(), S = n.list, C = n.listDefaults ?? S.defaultState ?? {
25
26
  where: null,
26
27
  sort: null
27
- }, [C, w] = u({
28
- where: S.where,
29
- sort: S.sort ?? null
30
- }), T = l(() => d == null || d.trim() === "" ? null : _(C.where, s.whereKey, d, s.path), [
31
- s.path,
32
- s.whereKey,
33
- C.where,
34
- d
35
- ]), E = T ?? C.where, D = C.sort ?? S.sort, O = l(() => ({
36
- where: E,
37
- sort: D,
38
- count: g,
28
+ }, [w, T] = d({
29
+ where: C.where,
30
+ sort: C.sort ?? null
31
+ }), [E, D] = d(0), O = u(() => f == null || f.trim() === "" ? null : v(w.where, c.whereKey, f, c.path), [
32
+ c.path,
33
+ c.whereKey,
34
+ w.where,
35
+ f
36
+ ]), k = O ?? w.where, A = w.sort ?? C.sort, j = u(() => ({
37
+ where: k,
38
+ sort: A,
39
+ count: _,
39
40
  cursor: null
40
- }), [E, D]), k = l(() => x.buildQueryVariables(O), [x, O]), A = y(x.query, k, { fetchPolicy: "store-or-network" }), { data: j, loadNext: M, hasNext: N, isLoadingNext: P, refetch: F } = b(x.fragment, A), I = x.getConnection(j), L = l(() => I.edges.map((e) => x.toRow(e.node)), [I.edges, x]), R = l(() => r(x.columns, {
41
- tApp: m,
42
- t: v
41
+ }), [k, A]), M = u(() => S.buildQueryVariables(j), [S, j]), N = b(S.query, M, { fetchPolicy: "store-or-network" }), { data: P, loadNext: F, hasNext: I, isLoadingNext: L, refetch: R } = x(S.fragment, N), z = S.getConnection(P), B = u(() => z.edges.map((e) => S.toRow(e.node)), [z.edges, S]), V = u(() => r(S.columns, {
42
+ tApp: h,
43
+ t: y
43
44
  }), [
44
- x.columns,
45
- v,
46
- m
47
- ]), z = c((e) => x.getRowId(e), [x]), { onRefresh: B } = a({
48
- refetch: F,
49
- variables: O,
50
- defaults: l(() => ({
51
- where: T ?? S.where,
52
- sort: S.sort,
53
- count: g,
45
+ S.columns,
46
+ y,
47
+ h
48
+ ]), H = l((e) => S.getRowId(e), [S]), { isRefreshing: U, onRefresh: W } = a({
49
+ refetch: R,
50
+ variables: j,
51
+ defaults: u(() => ({
52
+ where: O ?? C.where,
53
+ sort: C.sort,
54
+ count: _,
54
55
  cursor: null
55
56
  }), [
56
- S.sort,
57
- S.where,
58
- T
57
+ C.sort,
58
+ C.where,
59
+ O
59
60
  ]),
60
- fetchPolicy: h,
61
- buildQueryVariables: x.buildQueryVariables
62
- }), V = i({
63
- hasNext: N,
64
- isLoadingNext: P,
65
- loadNext: M,
66
- count: g
61
+ fetchPolicy: g,
62
+ buildQueryVariables: S.buildQueryVariables
63
+ }), G = l(() => {
64
+ D((e) => e + 1), W();
65
+ }, [W]), K = i({
66
+ hasNext: I,
67
+ isLoadingNext: L,
68
+ loadNext: F,
69
+ count: _
70
+ }), q = null;
71
+ B.length > 0 && (q = /* @__PURE__ */ p("span", { children: y("list.loaded", { count: B.length }) }));
72
+ let J = /* @__PURE__ */ p(s, {
73
+ count: S.count,
74
+ where: k,
75
+ fetchKey: E,
76
+ fallback: q,
77
+ children: (e) => /* @__PURE__ */ p("span", { children: y("list.showing", {
78
+ shown: B.length,
79
+ total: e
80
+ }) })
67
81
  });
68
- return /* @__PURE__ */ f(o, {
82
+ return /* @__PURE__ */ p(o, {
69
83
  config: n,
70
- state: C,
84
+ state: w,
71
85
  pushState: (e) => {
72
- w(e);
86
+ T(e);
73
87
  },
74
88
  header: { title: t },
75
- rows: L,
76
- columns: R,
77
- getRowId: z,
78
- hasNextPage: N,
79
- isLoadingMore: P,
80
- onLoadMore: V,
81
- onRefresh: B,
82
- totalCount: I.totalCount ?? null,
89
+ rows: B,
90
+ columns: V,
91
+ getRowId: H,
92
+ hasNextPage: I,
93
+ isLoadingMore: L,
94
+ isRefreshing: U,
95
+ onLoadMore: K,
96
+ onRefresh: G,
97
+ totalCount: null,
98
+ loadedCountLabel: J,
83
99
  variant: "embedded"
84
100
  });
85
- }, C = ({ title: t, relation: r, value: i }) => {
86
- let { t: a } = e(), o = n(l(() => [r.target], [r.target]));
87
- if (o.status === "loading") return /* @__PURE__ */ f(v, {
101
+ }, w = ({ title: t, relation: r, value: i }) => {
102
+ let { t: a } = e(), o = n(u(() => [r.target], [r.target]));
103
+ if (o.status === "loading") return /* @__PURE__ */ p(y, {
88
104
  rows: 6,
89
105
  ariaLabel: a("common.loading")
90
106
  });
91
- if (o.status === "error") return /* @__PURE__ */ f(d, {
107
+ if (o.status === "error") return /* @__PURE__ */ p(f, {
92
108
  tone: "warning",
93
109
  title: a("relations.unavailable.title"),
94
110
  children: a("relations.unavailable.description")
95
111
  });
96
112
  let s = o.modules[r.target]?.config;
97
- return s == null ? null : /* @__PURE__ */ f(S, {
113
+ return s == null ? null : /* @__PURE__ */ p(C, {
98
114
  title: t,
99
115
  config: s,
100
116
  relation: r,
101
117
  value: i
102
118
  });
103
- }, w = ({ title: e, relation: n, value: r }) => /* @__PURE__ */ f(t, {
104
- fallback: () => /* @__PURE__ */ f(x, {}),
105
- children: /* @__PURE__ */ f(s, {
106
- fallback: /* @__PURE__ */ f(x, {}),
107
- children: /* @__PURE__ */ f(C, {
119
+ }, T = ({ title: e, relation: n, value: r }) => /* @__PURE__ */ p(t, {
120
+ fallback: () => /* @__PURE__ */ p(S, {}),
121
+ children: /* @__PURE__ */ p(c, {
122
+ fallback: /* @__PURE__ */ p(S, {}),
123
+ children: /* @__PURE__ */ p(w, {
108
124
  title: e,
109
125
  relation: n,
110
126
  value: r
@@ -112,6 +128,6 @@ var { useLazyLoadQuery: y, usePaginationFragment: b } = m, x = () => {
112
128
  })
113
129
  });
114
130
  //#endregion
115
- export { w as BackofficeDetailRelationListBlock, w as default };
131
+ export { T as BackofficeDetailRelationListBlock, T as default };
116
132
 
117
133
  //# sourceMappingURL=BackofficeDetailRelationListBlock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeDetailRelationListBlock.js","names":[],"sources":["../../../../../src/components/backoffice/detail/BackofficeDetailRelationListBlock.tsx"],"sourcesContent":["import { Suspense, useCallback, useMemo, useState, type JSX } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport * as ReactRelay from 'react-relay';\nimport type { OperationType } from 'relay-runtime';\n\nimport {\n BACKOFFICE_LIST_REFETCH_POLICY,\n BACKOFFICE_RELATED_TAB_PAGE_SIZE,\n} from '@plumile/backoffice-core/constants.js';\nimport { setWhereValue } from '@plumile/backoffice-core/filters/where.js';\nimport type {\n BackofficeListState,\n BackofficeRuntimeRelationFilterSpec,\n BackofficeRuntimeResolvedListFacetConfig,\n} from '@plumile/backoffice-core/types.js';\nimport { BackofficeTableSkeleton } from '@plumile/ui/backoffice/molecules/backoffice_table_skeleton/BackofficeTableSkeleton.js';\nimport { InlineBanner } from '@plumile/ui/components/feedback/InlineBanner.js';\n\nimport { buildDataTableColumns } from '../columns/buildDataTableColumns.js';\nimport { useBackofficeLoadMore } from '../../../hooks/useBackofficeLoadMore.js';\nimport { useBackofficeListRefetch } from '../../../hooks/useBackofficeListRefetch.js';\nimport { useBackofficeReactTranslation } from '../../../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeListEntitiesLoader } from '../../../provider/useBackofficeEntityLoader.js';\nimport { BackofficeEntityListScaffold } from '../scaffolds/BackofficeEntityListScaffold.js';\nimport { BackofficeErrorBoundary } from '../errors/BackofficeErrorBoundary.js';\n\nconst { useLazyLoadQuery, usePaginationFragment } = ReactRelay;\n\nexport type BackofficeDetailRelationListBlockProps = {\n title: string;\n relation: BackofficeRuntimeRelationFilterSpec;\n value: string | null;\n};\n\ntype RelationListContentProps = {\n title: string;\n config: BackofficeRuntimeResolvedListFacetConfig;\n relation: BackofficeRuntimeRelationFilterSpec;\n value: string | null;\n};\n\ntype RelationListBlockBodyProps = {\n title: string;\n relation: BackofficeRuntimeRelationFilterSpec;\n value: string | null;\n};\n\nconst RelationListSkeleton = (): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n\n return <BackofficeTableSkeleton rows={6} ariaLabel={t('common.loading')} />;\n};\n\nconst RelationListContent = ({\n title,\n config,\n relation,\n value,\n}: RelationListContentProps): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const listConfig = config.list;\n const listDefaults = config.listDefaults ??\n listConfig.defaultState ?? { where: null, sort: null };\n\n const [state, setState] = useState<BackofficeListState<unknown, string>>({\n where: listDefaults.where as never,\n sort: listDefaults.sort ?? null,\n });\n\n const relationWhere = useMemo(() => {\n if (value == null || value.trim() === '') {\n return null;\n }\n return setWhereValue(\n state.where as Record<string, unknown> | null,\n relation.whereKey as never,\n value,\n relation.path,\n );\n }, [relation.path, relation.whereKey, state.where, value]);\n\n const effectiveWhere = relationWhere ?? (state.where as never);\n const resolvedSort = state.sort ?? listDefaults.sort;\n const variablesBase = useMemo(() => {\n return {\n where: effectiveWhere as never,\n sort: resolvedSort as never,\n count: BACKOFFICE_RELATED_TAB_PAGE_SIZE,\n cursor: null,\n };\n }, [effectiveWhere, resolvedSort]);\n\n const variables = useMemo(() => {\n return listConfig.buildQueryVariables(variablesBase);\n }, [listConfig, variablesBase]);\n\n const queryData = useLazyLoadQuery<OperationType>(\n listConfig.query,\n variables,\n { fetchPolicy: 'store-or-network' },\n );\n\n const {\n data: fragmentData,\n loadNext,\n hasNext,\n isLoadingNext,\n refetch,\n } = usePaginationFragment(listConfig.fragment, queryData as never);\n\n const connection = listConfig.getConnection(fragmentData);\n const rows = useMemo(() => {\n return connection.edges.map((edge) => {\n return listConfig.toRow(edge.node);\n });\n }, [connection.edges, listConfig]);\n\n const columns = useMemo(() => {\n return buildDataTableColumns(listConfig.columns, {\n tApp,\n t,\n });\n }, [listConfig.columns, t, tApp]);\n\n const getRowId = useCallback(\n (row: unknown) => {\n return listConfig.getRowId(row);\n },\n [listConfig],\n );\n\n const defaults = useMemo(() => {\n const baseWhere = relationWhere ?? listDefaults.where;\n return {\n where: baseWhere,\n sort: listDefaults.sort,\n count: BACKOFFICE_RELATED_TAB_PAGE_SIZE,\n cursor: null,\n };\n }, [listDefaults.sort, listDefaults.where, relationWhere]);\n\n const { onRefresh } = useBackofficeListRefetch({\n refetch,\n variables: variablesBase,\n defaults,\n fetchPolicy: BACKOFFICE_LIST_REFETCH_POLICY,\n buildQueryVariables: listConfig.buildQueryVariables,\n });\n\n const handleLoadMore = useBackofficeLoadMore({\n hasNext,\n isLoadingNext,\n loadNext,\n count: BACKOFFICE_RELATED_TAB_PAGE_SIZE,\n });\n\n return (\n <BackofficeEntityListScaffold\n config={config as never}\n state={state as never}\n pushState={(next) => {\n setState(next);\n }}\n header={{ title }}\n rows={rows}\n columns={columns as never}\n getRowId={getRowId}\n hasNextPage={hasNext}\n isLoadingMore={isLoadingNext}\n onLoadMore={handleLoadMore}\n onRefresh={onRefresh}\n totalCount={connection.totalCount ?? null}\n variant=\"embedded\"\n />\n );\n};\n\nconst RelationListBlockBody = ({\n title,\n relation,\n value,\n}: RelationListBlockBodyProps): JSX.Element | null => {\n const { t } = useBackofficeReactTranslation();\n const relatedEntityIds = useMemo(() => {\n return [relation.target];\n }, [relation.target]);\n const relatedEntitiesState =\n useBackofficeListEntitiesLoader(relatedEntityIds);\n\n if (relatedEntitiesState.status === 'loading') {\n return <BackofficeTableSkeleton rows={6} ariaLabel={t('common.loading')} />;\n }\n\n if (relatedEntitiesState.status === 'error') {\n return (\n <InlineBanner tone=\"warning\" title={t('relations.unavailable.title')}>\n {t('relations.unavailable.description')}\n </InlineBanner>\n );\n }\n\n const config = relatedEntitiesState.modules[relation.target]?.config;\n if (config == null) {\n return null;\n }\n\n return (\n <RelationListContent\n title={title}\n config={config}\n relation={relation}\n value={value}\n />\n );\n};\n\nexport const BackofficeDetailRelationListBlock = ({\n title,\n relation,\n value,\n}: BackofficeDetailRelationListBlockProps): JSX.Element => {\n return (\n <BackofficeErrorBoundary\n fallback={() => {\n return <RelationListSkeleton />;\n }}\n >\n <Suspense fallback={<RelationListSkeleton />}>\n <RelationListBlockBody\n title={title}\n relation={relation}\n value={value}\n />\n </Suspense>\n </BackofficeErrorBoundary>\n );\n};\n\nexport default BackofficeDetailRelationListBlock;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BackofficeDetailRelationListBlock.js","names":[],"sources":["../../../../../src/components/backoffice/detail/BackofficeDetailRelationListBlock.tsx"],"sourcesContent":["import { Suspense, useCallback, useMemo, useState, type JSX } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport * as ReactRelay from 'react-relay';\nimport type { OperationType } from 'relay-runtime';\n\nimport {\n BACKOFFICE_LIST_REFETCH_POLICY,\n BACKOFFICE_RELATED_TAB_PAGE_SIZE,\n} from '@plumile/backoffice-core/constants.js';\nimport { setWhereValue } from '@plumile/backoffice-core/filters/where.js';\nimport type {\n BackofficeListState,\n BackofficeRuntimeRelationFilterSpec,\n BackofficeRuntimeResolvedListFacetConfig,\n} from '@plumile/backoffice-core/types.js';\nimport { BackofficeTableSkeleton } from '@plumile/ui/backoffice/molecules/backoffice_table_skeleton/BackofficeTableSkeleton.js';\nimport { InlineBanner } from '@plumile/ui/components/feedback/InlineBanner.js';\n\nimport { buildDataTableColumns } from '../columns/buildDataTableColumns.js';\nimport { useBackofficeLoadMore } from '../../../hooks/useBackofficeLoadMore.js';\nimport { useBackofficeListRefetch } from '../../../hooks/useBackofficeListRefetch.js';\nimport { useBackofficeReactTranslation } from '../../../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeListEntitiesLoader } from '../../../provider/useBackofficeEntityLoader.js';\nimport { BackofficeEntityListScaffold } from '../scaffolds/BackofficeEntityListScaffold.js';\nimport { BackofficeErrorBoundary } from '../errors/BackofficeErrorBoundary.js';\nimport { BackofficeLazyEntityCountLabel } from '../refs/BackofficeLazyEntityCount.js';\n\nconst { useLazyLoadQuery, usePaginationFragment } = ReactRelay;\n\nexport type BackofficeDetailRelationListBlockProps = {\n title: string;\n relation: BackofficeRuntimeRelationFilterSpec;\n value: string | null;\n};\n\ntype RelationListContentProps = {\n title: string;\n config: BackofficeRuntimeResolvedListFacetConfig;\n relation: BackofficeRuntimeRelationFilterSpec;\n value: string | null;\n};\n\ntype RelationListBlockBodyProps = {\n title: string;\n relation: BackofficeRuntimeRelationFilterSpec;\n value: string | null;\n};\n\nconst RelationListSkeleton = (): JSX.Element => {\n const { t } = useBackofficeReactTranslation();\n\n return <BackofficeTableSkeleton rows={6} ariaLabel={t('common.loading')} />;\n};\n\nconst RelationListContent = ({\n title,\n config,\n relation,\n value,\n}: RelationListContentProps): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const listConfig = config.list;\n const listDefaults = config.listDefaults ??\n listConfig.defaultState ?? { where: null, sort: null };\n\n const [state, setState] = useState<BackofficeListState<unknown, string>>({\n where: listDefaults.where as never,\n sort: listDefaults.sort ?? null,\n });\n const [countFetchKey, setCountFetchKey] = useState(0);\n\n const relationWhere = useMemo(() => {\n if (value == null || value.trim() === '') {\n return null;\n }\n return setWhereValue(\n state.where as Record<string, unknown> | null,\n relation.whereKey as never,\n value,\n relation.path,\n );\n }, [relation.path, relation.whereKey, state.where, value]);\n\n const effectiveWhere = relationWhere ?? (state.where as never);\n const resolvedSort = state.sort ?? listDefaults.sort;\n const variablesBase = useMemo(() => {\n return {\n where: effectiveWhere as never,\n sort: resolvedSort as never,\n count: BACKOFFICE_RELATED_TAB_PAGE_SIZE,\n cursor: null,\n };\n }, [effectiveWhere, resolvedSort]);\n\n const variables = useMemo(() => {\n return listConfig.buildQueryVariables(variablesBase);\n }, [listConfig, variablesBase]);\n\n const queryData = useLazyLoadQuery<OperationType>(\n listConfig.query,\n variables,\n { fetchPolicy: 'store-or-network' },\n );\n\n const {\n data: fragmentData,\n loadNext,\n hasNext,\n isLoadingNext,\n refetch,\n } = usePaginationFragment(listConfig.fragment, queryData as never);\n\n const connection = listConfig.getConnection(fragmentData);\n const rows = useMemo(() => {\n return connection.edges.map((edge) => {\n return listConfig.toRow(edge.node);\n });\n }, [connection.edges, listConfig]);\n\n const columns = useMemo(() => {\n return buildDataTableColumns(listConfig.columns, {\n tApp,\n t,\n });\n }, [listConfig.columns, t, tApp]);\n\n const getRowId = useCallback(\n (row: unknown) => {\n return listConfig.getRowId(row);\n },\n [listConfig],\n );\n\n const defaults = useMemo(() => {\n const baseWhere = relationWhere ?? listDefaults.where;\n return {\n where: baseWhere,\n sort: listDefaults.sort,\n count: BACKOFFICE_RELATED_TAB_PAGE_SIZE,\n cursor: null,\n };\n }, [listDefaults.sort, listDefaults.where, relationWhere]);\n\n const { isRefreshing, onRefresh } = useBackofficeListRefetch({\n refetch,\n variables: variablesBase,\n defaults,\n fetchPolicy: BACKOFFICE_LIST_REFETCH_POLICY,\n buildQueryVariables: listConfig.buildQueryVariables,\n });\n\n const handleRefresh = useCallback(() => {\n setCountFetchKey((current) => {\n return current + 1;\n });\n onRefresh();\n }, [onRefresh]);\n\n const handleLoadMore = useBackofficeLoadMore({\n hasNext,\n isLoadingNext,\n loadNext,\n count: BACKOFFICE_RELATED_TAB_PAGE_SIZE,\n });\n\n let loadedCountFallback: JSX.Element | null = null;\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={effectiveWhere}\n fetchKey={countFetchKey}\n fallback={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 as never}\n state={state as never}\n pushState={(next) => {\n setState(next);\n }}\n header={{ title }}\n rows={rows}\n columns={columns as never}\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 variant=\"embedded\"\n />\n );\n};\n\nconst RelationListBlockBody = ({\n title,\n relation,\n value,\n}: RelationListBlockBodyProps): JSX.Element | null => {\n const { t } = useBackofficeReactTranslation();\n const relatedEntityIds = useMemo(() => {\n return [relation.target];\n }, [relation.target]);\n const relatedEntitiesState =\n useBackofficeListEntitiesLoader(relatedEntityIds);\n\n if (relatedEntitiesState.status === 'loading') {\n return <BackofficeTableSkeleton rows={6} ariaLabel={t('common.loading')} />;\n }\n\n if (relatedEntitiesState.status === 'error') {\n return (\n <InlineBanner tone=\"warning\" title={t('relations.unavailable.title')}>\n {t('relations.unavailable.description')}\n </InlineBanner>\n );\n }\n\n const config = relatedEntitiesState.modules[relation.target]?.config;\n if (config == null) {\n return null;\n }\n\n return (\n <RelationListContent\n title={title}\n config={config}\n relation={relation}\n value={value}\n />\n );\n};\n\nexport const BackofficeDetailRelationListBlock = ({\n title,\n relation,\n value,\n}: BackofficeDetailRelationListBlockProps): JSX.Element => {\n return (\n <BackofficeErrorBoundary\n fallback={() => {\n return <RelationListSkeleton />;\n }}\n >\n <Suspense fallback={<RelationListSkeleton />}>\n <RelationListBlockBody\n title={title}\n relation={relation}\n value={value}\n />\n </Suspense>\n </BackofficeErrorBoundary>\n );\n};\n\nexport default BackofficeDetailRelationListBlock;\n"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- /* empty css */
2
1
  /* empty css */
3
2
  //#region src/components/backoffice/detail/backofficeDetailRelationLink.css.ts
4
3
  var e = "_93gupm0 qbwcueg qbwcuee txvbqb2tz txvbqb1bg1 txvbqb3f txvbqb7g txvbqb76 txvbqb7t qbwcuef txvbqb1ct1 txvbqb1dsd qbwcue0 txvbqb1ffs txvbqb1ga0 txvbqb10mx txvbqb11ki txvbqb12hq txvbqbxtt txvbqb7h txvbqb75 txvbqbfpn txvbqblt7 txvbqbhdy txvbqb28o txvbqb2sj txvbqbik txvbqb1b4r txvbqbey txvbqbem txvbqbh4k txvbqbh4y txvbqb1ct4 txvbqb1dsg", t = "txvbqb9j txvbqbhb2 txvbqbv7x txvbqbws9", n = "txvbqbfqq txvbqbey txvbqbhd8 txvbqbh6d txvbqbv7x", r = "txvbqb96 txvbqb1bg3 txvbqbws9 txvbqb18e2", i = "txvbqbfqq txvbqbey txvbqbls4 txvbqb1bg5 txvbqb9j txvbqbmzg";
@@ -1,3 +1,4 @@
1
+ /* empty css */
1
2
  /* empty css */
2
3
  //#region src/components/backoffice/filters/backofficeFilterAction.css.ts
3
4
  var e = "hwnq700 txvbqbfqq txvbqbey txvbqbls4 txvbqbh6d txvbqb19gp txvbqbjm4 txvbqbwvi txvbqb2tz txvbqb28o txvbqb2sj txvbqb1d9 txvbqb1b83 txvbqb1bhb txvbqbv txvbqb3f txvbqb7h txvbqb75 txvbqb7t txvbqb1eol txvbqb1czh txvbqb1dth qbwcue0 txvbqb1ffs txvbqb1ga0", t = "txvbqb19fm txvbqbjl1";
@@ -1,7 +1,7 @@
1
1
  /* empty css */
2
2
  /* empty css */
3
3
  //#region src/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.ts
4
- var e = "txvbqbfqq txvbqbey", t = "txvbqbfqq txvbqbey txvbqbhdl txvbqbo7v txvbqbwvi txvbqbo6s", n = "txvbqbfqq txvbqbey txvbqbhdl", r = "txvbqb1bg3 txvbqb9j txvbqbo5p", i = "_80s44h0 qbwcuej qbwcueh txvbqbfqq txvbqbey txvbqbls4 txvbqb1tv txvbqb2rt txvbqb2tz txvbqb1b4r txvbqb1bg3 txvbqbv txvbqbwvi txvbqb7h txvbqb76 txvbqb7t qbwcuei txvbqb1cta txvbqb1eom qbwcue4 txvbqb1f7o txvbqb1fe4 qbwcue0 txvbqb1ffs txvbqb1ga0 qbwcuex qbwcuer txvbqbh6d txvbqbo4m qbwcue11 qbwcuev txvbqb19h2 txvbqbjmh txvbqbvat txvbqbub2 txvbqb3f", a = "_80s44h1 _80s44h0 qbwcuej qbwcueh txvbqbfqq txvbqbey txvbqbls4 txvbqb1tv txvbqb2rt txvbqb2tz txvbqb1b4r txvbqb1bg3 txvbqbv txvbqbwvi txvbqb7h txvbqb76 txvbqb7t qbwcuei txvbqb1cta txvbqb1eom qbwcue4 txvbqb1f7o txvbqb1fe4 qbwcue0 txvbqb1ffs txvbqb1ga0 qbwcuex qbwcuer txvbqbh6d txvbqbo4m qbwcue11 qbwcuev txvbqb19h2 txvbqbjmh txvbqbvat txvbqbub2 txvbqb3f txvbqb1b83 txvbqb1bg1", o = "_4k5f060 txvbqb1tv txvbqb2rt txvbqb1j txvbqbk07 txvbqbonr txvbqbwr6 txvbqbwvi txvbqb13hu txvbqb18f5 txvbqblvq txvbqb19us", s = "_80s44h2 qbwcuep qbwcuen txvbqbfqq txvbqbey txvbqbhd8 txvbqb1bg1 txvbqb3f txvbqb7h txvbqb75 txvbqb7t qbwcueo txvbqb1gct qbwcue0 txvbqb1ffs txvbqb1ga0 txvbqb1bg3 txvbqb9j txvbqbo5p", c = "txvbqb1bg1 txvbqb9j txvbqbo5p txvbqbhbf";
4
+ var e = "txvbqbfpn txvbqbey txvbqb19uf txvbqbv7x txvbqbu4k", t = "txvbqbfpn txvbqbey txvbqbhdl txvbqbo7v txvbqbwvi txvbqbo6s txvbqbh7g txvbqbv7x txvbqbu4k", n = "txvbqbfqq txvbqbey txvbqbhdl txvbqbv7x", r = "txvbqb1bg3 txvbqb9j txvbqbo5p", i = "_80s44h0 qbwcuej qbwcueh txvbqbfqq txvbqbey txvbqbls4 txvbqb1tv txvbqb2rt txvbqb2tz txvbqb1b4r txvbqb1bg3 txvbqbv txvbqbwvi txvbqb7h txvbqb76 txvbqb7t qbwcuei txvbqb1cta txvbqb1eom qbwcue4 txvbqb1f7o txvbqb1fe4 qbwcue0 txvbqb1ffs txvbqb1ga0 qbwcuex qbwcuer txvbqbh6d txvbqbo4m qbwcue11 qbwcuev txvbqb19h2 txvbqbjmh txvbqbvat txvbqbub2 txvbqb3f", a = "_80s44h1 _80s44h0 qbwcuej qbwcueh txvbqbfqq txvbqbey txvbqbls4 txvbqb1tv txvbqb2rt txvbqb2tz txvbqb1b4r txvbqb1bg3 txvbqbv txvbqbwvi txvbqb7h txvbqb76 txvbqb7t qbwcuei txvbqb1cta txvbqb1eom qbwcue4 txvbqb1f7o txvbqb1fe4 qbwcue0 txvbqb1ffs txvbqb1ga0 qbwcuex qbwcuer txvbqbh6d txvbqbo4m qbwcue11 qbwcuev txvbqb19h2 txvbqbjmh txvbqbvat txvbqbub2 txvbqb3f txvbqb1b83 txvbqb1bg1", o = "_4k5f060 txvbqb1tv txvbqb2rt txvbqb1j txvbqbk07 txvbqbonr txvbqbwr6 txvbqbwvi txvbqb13hu txvbqb18f5 txvbqblvq txvbqb19us", s = "_80s44h2 qbwcuep qbwcuen txvbqbfqq txvbqbey txvbqbhd8 txvbqb1bg1 txvbqb3f txvbqb7h txvbqb75 txvbqb7t qbwcueo txvbqb1gct qbwcue0 txvbqb1ffs txvbqb1ga0 txvbqb1bg3 txvbqb9j txvbqbo5p txvbqbv7x txvbqbu4k txvbqbws9", c = "txvbqb1bg1 txvbqb9j txvbqbo5p txvbqbhbf txvbqbv7x txvbqbu4k txvbqbws9";
5
5
  //#endregion
6
6
  export { c as current, a as homeCurrent, o as homeLabel, i as homeLink, n as item, s as link, t as list, e as nav, r as separator };
7
7
 
@@ -1 +1 @@
1
- {"version":3,"file":"backofficeTopbarBreadcrumb.css.js","names":[],"sources":["../../../../../../src/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\nimport { sprinkles } from '@plumile/ui/theme/sprinkles.css.js';\nimport {\n entityReferenceLink,\n ghostIconButton,\n iconBox,\n} from '@plumile/ui/theme/styleRecipes.css.js';\nimport { visuallyHidden } from '@plumile/ui/theme/accessibility.css.js';\n\nconst INLINE_FLEX = 'inline-flex' as const;\n\nexport const nav = sprinkles({\n display: INLINE_FLEX,\n alignItems: 'center',\n});\n\nexport const list = sprinkles({\n display: INLINE_FLEX,\n alignItems: 'center',\n gap: 2,\n margin: 0,\n padding: 0,\n listStyleType: 'none',\n});\n\nexport const item = sprinkles({\n display: INLINE_FLEX,\n alignItems: 'center',\n gap: 2,\n});\n\nexport const separator = sprinkles({\n color: 'textSecondary',\n fontSize: 'sm',\n lineHeight: 'normal',\n});\n\nconst homeBase = style([\n ghostIconButton,\n iconBox({ size: 'lg' }),\n sprinkles({\n textDecoration: 'none',\n }),\n]);\n\nexport const homeLink = homeBase;\n\nexport const homeCurrent = style([\n homeBase,\n sprinkles({\n backgroundColor: 'surfaceMuted',\n color: 'text',\n }),\n]);\n\nexport const homeLabel = visuallyHidden;\n\nexport const link = style([\n entityReferenceLink,\n sprinkles({\n color: 'textSecondary',\n fontSize: 'sm',\n lineHeight: 'normal',\n }),\n]);\n\nexport const current = sprinkles({\n color: 'text',\n fontSize: 'sm',\n lineHeight: 'normal',\n fontWeight: 'semibold',\n});\n"],"mappings":""}
1
+ {"version":3,"file":"backofficeTopbarBreadcrumb.css.js","names":[],"sources":["../../../../../../src/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\nimport { sprinkles } from '@plumile/ui/theme/sprinkles.css.js';\nimport {\n entityReferenceLink,\n ghostIconButton,\n iconBox,\n} from '@plumile/ui/theme/styleRecipes.css.js';\nimport { visuallyHidden } from '@plumile/ui/theme/accessibility.css.js';\n\nconst INLINE_FLEX = 'inline-flex' as const;\n\nexport const nav = sprinkles({\n display: 'flex',\n alignItems: 'center',\n width: 'full',\n minWidth: 0,\n maxWidth: 'full',\n});\n\nexport const list = sprinkles({\n display: 'flex',\n alignItems: 'center',\n gap: 2,\n margin: 0,\n padding: 0,\n listStyleType: 'none',\n flexWrap: 'wrap',\n minWidth: 0,\n maxWidth: 'full',\n});\n\nexport const item = sprinkles({\n display: INLINE_FLEX,\n alignItems: 'center',\n gap: 2,\n minWidth: 0,\n});\n\nexport const separator = sprinkles({\n color: 'textSecondary',\n fontSize: 'sm',\n lineHeight: 'normal',\n});\n\nconst homeBase = style([\n ghostIconButton,\n iconBox({ size: 'lg' }),\n sprinkles({\n textDecoration: 'none',\n }),\n]);\n\nexport const homeLink = homeBase;\n\nexport const homeCurrent = style([\n homeBase,\n sprinkles({\n backgroundColor: 'surfaceMuted',\n color: 'text',\n }),\n]);\n\nexport const homeLabel = visuallyHidden;\n\nexport const link = style([\n entityReferenceLink,\n sprinkles({\n color: 'textSecondary',\n fontSize: 'sm',\n lineHeight: 'normal',\n minWidth: 0,\n maxWidth: 'full',\n overflowWrap: 'anywhere',\n }),\n]);\n\nexport const current = sprinkles({\n color: 'text',\n fontSize: 'sm',\n lineHeight: 'normal',\n fontWeight: 'semibold',\n minWidth: 0,\n maxWidth: 'full',\n overflowWrap: 'anywhere',\n});\n"],"mappings":""}
@@ -4,28 +4,37 @@ import { Suspense as n } from "react";
4
4
  import { Fragment as r, jsx as i } from "react/jsx-runtime";
5
5
  import { useLazyLoadQuery as a } from "react-relay";
6
6
  //#region src/components/backoffice/refs/BackofficeLazyEntityCount.tsx
7
- var o = "store-or-network", s = ({ config: e, where: t }) => {
8
- let { count: n } = e.list, s = n.buildVariables({ where: t }), c = a(n.query, s, { fetchPolicy: o }), l = n.getCount(c);
9
- return l == null ? null : /* @__PURE__ */ i(r, { children: l });
10
- }, c = ({ entity: e, where: n }) => {
7
+ var o = "store-or-network", s = ({ count: e, where: t, fetchKey: n, children: s }) => {
8
+ let c = e.buildVariables({ where: t }), l = a(e.query, c, {
9
+ fetchPolicy: o,
10
+ fetchKey: n
11
+ }), u = e.getCount(l);
12
+ return u == null ? null : s == null ? /* @__PURE__ */ i(r, { children: u }) : /* @__PURE__ */ i(r, { children: s(u) });
13
+ }, c = ({ fallback: t, ...a }) => /* @__PURE__ */ i(e, {
14
+ fallback: () => /* @__PURE__ */ i(r, { children: t }),
15
+ children: /* @__PURE__ */ i(n, {
16
+ fallback: t,
17
+ children: /* @__PURE__ */ i(s, { ...a })
18
+ })
19
+ }), l = ({ entity: e, where: n }) => {
11
20
  let r = t([e]);
12
21
  if (r.status !== "loaded") return null;
13
22
  let a = r.modules[e]?.config;
14
23
  return a == null ? null : /* @__PURE__ */ i(s, {
15
- config: a,
24
+ count: a.list.count,
16
25
  where: n
17
26
  });
18
- }, l = ({ entity: t, where: r }) => /* @__PURE__ */ i(e, {
27
+ }, u = ({ entity: t, where: r }) => /* @__PURE__ */ i(e, {
19
28
  fallback: () => null,
20
29
  children: /* @__PURE__ */ i(n, {
21
30
  fallback: null,
22
- children: /* @__PURE__ */ i(c, {
31
+ children: /* @__PURE__ */ i(l, {
23
32
  entity: t,
24
33
  where: r
25
34
  })
26
35
  })
27
36
  });
28
37
  //#endregion
29
- export { l as BackofficeLazyEntityCount, l as default };
38
+ export { s as BackofficeEntityCountValue, u as BackofficeLazyEntityCount, u as default, c as BackofficeLazyEntityCountLabel };
30
39
 
31
40
  //# sourceMappingURL=BackofficeLazyEntityCount.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeLazyEntityCount.js","names":[],"sources":["../../../../../src/components/backoffice/refs/BackofficeLazyEntityCount.tsx"],"sourcesContent":["import { Suspense, type JSX } from 'react';\nimport { useLazyLoadQuery } from 'react-relay';\nimport type { OperationType } from 'relay-runtime';\n\nimport type { BackofficeRuntimeResolvedListFacetConfig } from '@plumile/backoffice-core/types.js';\n\nimport { useBackofficeListEntitiesLoader } from '../../../provider/useBackofficeEntityLoader.js';\nimport { BackofficeErrorBoundary } from '../errors/BackofficeErrorBoundary.js';\n\nconst COUNT_FETCH_POLICY = 'store-or-network' as const;\n\nexport type BackofficeLazyEntityCountProps<\n Where extends Record<string, unknown> = Record<string, unknown>,\n> = {\n entity: string;\n where: Where | null;\n};\n\nconst BackofficeEntityCountValue = ({\n config,\n where,\n}: {\n config: BackofficeRuntimeResolvedListFacetConfig;\n where: Record<string, unknown> | null;\n}): JSX.Element | null => {\n const { count } = config.list;\n const variables = count.buildVariables({ where });\n const data = useLazyLoadQuery<OperationType>(count.query, variables, {\n fetchPolicy: COUNT_FETCH_POLICY,\n });\n const value = count.getCount(data);\n if (value == null) {\n return null;\n }\n return <>{value}</>;\n};\n\nconst BackofficeLazyEntityCountBody = ({\n entity,\n where,\n}: BackofficeLazyEntityCountProps): JSX.Element | null => {\n const relatedEntitiesState = useBackofficeListEntitiesLoader([entity]);\n if (relatedEntitiesState.status !== 'loaded') {\n return null;\n }\n\n const config = relatedEntitiesState.modules[entity]?.config;\n if (config == null) {\n return null;\n }\n\n return <BackofficeEntityCountValue config={config} where={where} />;\n};\n\nexport const BackofficeLazyEntityCount = ({\n entity,\n where,\n}: BackofficeLazyEntityCountProps): JSX.Element | null => {\n return (\n <BackofficeErrorBoundary\n fallback={() => {\n return null;\n }}\n >\n <Suspense fallback={null}>\n <BackofficeLazyEntityCountBody entity={entity} where={where} />\n </Suspense>\n </BackofficeErrorBoundary>\n );\n};\n\nexport default BackofficeLazyEntityCount;\n"],"mappings":";;;;;;AASA,IAAM,IAAqB,oBASrB,KAA8B,EAClC,WACA,eAIwB;CACxB,IAAM,EAAE,aAAU,EAAO,MACnB,IAAY,EAAM,eAAe,EAAE,SAAM,CAAC,GAC1C,IAAO,EAAgC,EAAM,OAAO,GAAW,EACnE,aAAa,EACf,CAAC,GACK,IAAQ,EAAM,SAAS,CAAI;CAIjC,OAHI,KAAS,OACJ,OAEF,kBAAA,GAAA,EAAA,UAAG,EAAQ,CAAA;AACpB,GAEM,KAAiC,EACrC,WACA,eACwD;CACxD,IAAM,IAAuB,EAAgC,CAAC,CAAM,CAAC;CACrE,IAAI,EAAqB,WAAW,UAClC,OAAO;CAGT,IAAM,IAAS,EAAqB,QAAQ,IAAS;CAKrD,OAJI,KAAU,OACL,OAGF,kBAAC,GAAD;EAAoC;EAAe;CAAQ,CAAA;AACpE,GAEa,KAA6B,EACxC,WACA,eAGE,kBAAC,GAAD;CACE,gBACS;WAGT,kBAAC,GAAD;EAAU,UAAU;YAClB,kBAAC,GAAD;GAAuC;GAAe;EAAQ,CAAA;CACtD,CAAA;AACa,CAAA"}
1
+ {"version":3,"file":"BackofficeLazyEntityCount.js","names":[],"sources":["../../../../../src/components/backoffice/refs/BackofficeLazyEntityCount.tsx"],"sourcesContent":["import { Suspense, type JSX, type ReactNode } from 'react';\nimport { useLazyLoadQuery } from 'react-relay';\nimport type { OperationType } from 'relay-runtime';\n\nimport type { BackofficeRuntimeEntityCountConfig } from '@plumile/backoffice-core/types.js';\n\nimport { useBackofficeListEntitiesLoader } from '../../../provider/useBackofficeEntityLoader.js';\nimport { BackofficeErrorBoundary } from '../errors/BackofficeErrorBoundary.js';\n\nconst COUNT_FETCH_POLICY = 'store-or-network' as const;\n\nexport type BackofficeLazyEntityCountProps<\n Where extends Record<string, unknown> = Record<string, unknown>,\n> = {\n entity: string;\n where: Where | null;\n};\n\nexport type BackofficeEntityCountValueProps<\n Where extends Record<string, unknown> = Record<string, unknown>,\n> = {\n count: BackofficeRuntimeEntityCountConfig<Where>;\n where: Where | null;\n fetchKey?: string | number;\n children?: (value: number) => ReactNode;\n};\n\nexport type BackofficeLazyEntityCountLabelProps<\n Where extends Record<string, unknown> = Record<string, unknown>,\n> = BackofficeEntityCountValueProps<Where> & {\n fallback: ReactNode;\n};\n\nexport const BackofficeEntityCountValue = <\n Where extends Record<string, unknown> = Record<string, unknown>,\n>({\n count,\n where,\n fetchKey,\n children,\n}: BackofficeEntityCountValueProps<Where>): JSX.Element | null => {\n const variables = count.buildVariables({ where });\n const data = useLazyLoadQuery<OperationType>(count.query, variables, {\n fetchPolicy: COUNT_FETCH_POLICY,\n fetchKey,\n });\n const value = count.getCount(data);\n if (value == null) {\n return null;\n }\n if (children == null) {\n return <>{value}</>;\n }\n return <>{children(value)}</>;\n};\n\nexport const BackofficeLazyEntityCountLabel = <\n Where extends Record<string, unknown> = Record<string, unknown>,\n>({\n fallback,\n ...props\n}: BackofficeLazyEntityCountLabelProps<Where>): JSX.Element => {\n return (\n <BackofficeErrorBoundary\n fallback={() => {\n return <>{fallback}</>;\n }}\n >\n <Suspense fallback={fallback}>\n <BackofficeEntityCountValue {...props} />\n </Suspense>\n </BackofficeErrorBoundary>\n );\n};\n\nconst BackofficeLazyEntityCountBody = ({\n entity,\n where,\n}: BackofficeLazyEntityCountProps): JSX.Element | null => {\n const relatedEntitiesState = useBackofficeListEntitiesLoader([entity]);\n if (relatedEntitiesState.status !== 'loaded') {\n return null;\n }\n\n const config = relatedEntitiesState.modules[entity]?.config;\n if (config == null) {\n return null;\n }\n\n return <BackofficeEntityCountValue count={config.list.count} where={where} />;\n};\n\nexport const BackofficeLazyEntityCount = ({\n entity,\n where,\n}: BackofficeLazyEntityCountProps): JSX.Element | null => {\n return (\n <BackofficeErrorBoundary\n fallback={() => {\n return null;\n }}\n >\n <Suspense fallback={null}>\n <BackofficeLazyEntityCountBody entity={entity} where={where} />\n </Suspense>\n </BackofficeErrorBoundary>\n );\n};\n\nexport default BackofficeLazyEntityCount;\n"],"mappings":";;;;;;AASA,IAAM,IAAqB,oBAwBd,KAEX,EACA,UACA,UACA,aACA,kBACgE;CAChE,IAAM,IAAY,EAAM,eAAe,EAAE,SAAM,CAAC,GAC1C,IAAO,EAAgC,EAAM,OAAO,GAAW;EACnE,aAAa;EACb;CACF,CAAC,GACK,IAAQ,EAAM,SAAS,CAAI;CAOjC,OANI,KAAS,OACJ,OAEL,KAAY,OACP,kBAAA,GAAA,EAAA,UAAG,EAAQ,CAAA,IAEb,kBAAA,GAAA,EAAA,UAAG,EAAS,CAAK,EAAI,CAAA;AAC9B,GAEa,KAEX,EACA,aACA,GAAG,QAGD,kBAAC,GAAD;CACE,gBACS,kBAAA,GAAA,EAAA,UAAG,EAAW,CAAA;WAGvB,kBAAC,GAAD;EAAoB;YAClB,kBAAC,GAAD,EAA4B,GAAI,EAAQ,CAAA;CAChC,CAAA;AACa,CAAA,GAIvB,KAAiC,EACrC,WACA,eACwD;CACxD,IAAM,IAAuB,EAAgC,CAAC,CAAM,CAAC;CACrE,IAAI,EAAqB,WAAW,UAClC,OAAO;CAGT,IAAM,IAAS,EAAqB,QAAQ,IAAS;CAKrD,OAJI,KAAU,OACL,OAGF,kBAAC,GAAD;EAA4B,OAAO,EAAO,KAAK;EAAc;CAAQ,CAAA;AAC9E,GAEa,KAA6B,EACxC,WACA,eAGE,kBAAC,GAAD;CACE,gBACS;WAGT,kBAAC,GAAD;EAAU,UAAU;YAClB,kBAAC,GAAD;GAAuC;GAAe;EAAQ,CAAA;CACtD,CAAA;AACa,CAAA"}