@plumile/backoffice-react 0.1.201 → 0.1.206

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 (192) hide show
  1. package/README.md +11 -4
  2. package/lib/esm/auth/login/LoginFlow.js.map +1 -1
  3. package/lib/esm/auth/pages/AcceptInvitationScreen.js.map +1 -1
  4. package/lib/esm/auth/pages/PasswordResetCompleteScreen.js.map +1 -1
  5. package/lib/esm/auth/pages/PasswordResetRequestScreen.js.map +1 -1
  6. package/lib/esm/components/backoffice/detail/BackofficeEntitySummaryHeader.js +28 -28
  7. package/lib/esm/components/backoffice/detail/BackofficeEntitySummaryHeader.js.map +1 -1
  8. package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js +123 -70
  9. package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js.map +1 -1
  10. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js +206 -204
  11. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js.map +1 -1
  12. package/lib/esm/hooks/useAuth.js +56 -56
  13. package/lib/esm/hooks/useAuth.js.map +1 -1
  14. package/lib/esm/hooks/useConditionalSubscription.js +18 -18
  15. package/lib/esm/hooks/useConditionalSubscription.js.map +1 -1
  16. package/lib/esm/hooks/useInfiniteConnection.js +40 -38
  17. package/lib/esm/hooks/useInfiniteConnection.js.map +1 -1
  18. package/lib/esm/i18n/locales/en/backofficeReact.js +1 -0
  19. package/lib/esm/i18n/locales/en/backofficeReact.js.map +1 -1
  20. package/lib/esm/i18n/locales/fr/backofficeReact.js +1 -0
  21. package/lib/esm/i18n/locales/fr/backofficeReact.js.map +1 -1
  22. package/lib/esm/index.js +56 -64
  23. package/lib/esm/pages/BackofficeEntityDetailPage.js +97 -97
  24. package/lib/esm/pages/BackofficeEntityDetailPage.js.map +1 -1
  25. package/lib/esm/pages/BackofficeEntityListDataPage.js +39 -31
  26. package/lib/esm/pages/BackofficeEntityListDataPage.js.map +1 -1
  27. package/lib/esm/pages/BackofficeEntityListPage.js +2 -0
  28. package/lib/esm/pages/BackofficeEntityListPage.js.map +1 -1
  29. package/lib/esm/pages/BackofficeLayoutPage.js +19 -19
  30. package/lib/esm/pages/BackofficeLayoutPage.js.map +1 -1
  31. package/lib/esm/provider/BackofficeProvider.js +33 -33
  32. package/lib/esm/router/createBackofficeRoutes.js +26 -28
  33. package/lib/esm/router/createBackofficeRoutes.js.map +1 -1
  34. package/lib/esm/storybook/relay/RelayStory.js +32 -32
  35. package/lib/esm/storybook/relay/RelayStory.js.map +1 -1
  36. package/lib/esm/storybook/relay/mockResolvers.js.map +1 -1
  37. package/lib/esm/style.css +1 -1
  38. package/lib/types/components/backoffice/detail/BackofficeEntitySummaryHeader.d.ts +1 -1
  39. package/lib/types/components/backoffice/detail/BackofficeEntitySummaryHeader.d.ts.map +1 -1
  40. package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.d.ts.map +1 -1
  41. package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts +2 -0
  42. package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts.map +1 -1
  43. package/lib/types/hooks/useAuth.d.ts.map +1 -1
  44. package/lib/types/hooks/useConditionalSubscription.d.ts.map +1 -1
  45. package/lib/types/hooks/useInfiniteConnection.d.ts +3 -2
  46. package/lib/types/hooks/useInfiniteConnection.d.ts.map +1 -1
  47. package/lib/types/i18n/locales/en/backofficeReact.d.ts +5 -0
  48. package/lib/types/i18n/locales/fr/backofficeReact.d.ts +5 -0
  49. package/lib/types/i18n/resources.d.ts +2 -0
  50. package/lib/types/i18n/resources.d.ts.map +1 -1
  51. package/lib/types/index.d.ts +1 -9
  52. package/lib/types/index.d.ts.map +1 -1
  53. package/lib/types/pages/BackofficeEntityListDataPage.d.ts.map +1 -1
  54. package/lib/types/pages/BackofficeEntityListPage.d.ts.map +1 -1
  55. package/lib/types/pages/BackofficeLayoutPage.d.ts.map +1 -1
  56. package/lib/types/router/createBackofficeRoutes.d.ts +3 -3
  57. package/lib/types/router/createBackofficeRoutes.d.ts.map +1 -1
  58. package/lib/types/storybook/relay/RelayStory.d.ts +1 -1
  59. package/lib/types/storybook/relay/RelayStory.d.ts.map +1 -1
  60. package/lib/types/storybook/relay/mockResolvers.d.ts +9 -1
  61. package/lib/types/storybook/relay/mockResolvers.d.ts.map +1 -1
  62. package/package.json +12 -15
  63. package/lib/esm/_virtual/_rolldown/runtime.js +0 -7
  64. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.js +0 -13
  65. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.js.map +0 -1
  66. package/lib/esm/components/backoffice/detail/BackofficeDetailTaggedValue.js +0 -12
  67. package/lib/esm/components/backoffice/detail/BackofficeDetailTaggedValue.js.map +0 -1
  68. package/lib/esm/components/backoffice/detail/BackofficeEnumLabel.js +0 -16
  69. package/lib/esm/components/backoffice/detail/BackofficeEnumLabel.js.map +0 -1
  70. package/lib/esm/components/backoffice/detail/BackofficeReferenceValue.js +0 -17
  71. package/lib/esm/components/backoffice/detail/BackofficeReferenceValue.js.map +0 -1
  72. package/lib/esm/components/backoffice/detail/BackofficeStatusGroup.js +0 -8
  73. package/lib/esm/components/backoffice/detail/BackofficeStatusGroup.js.map +0 -1
  74. package/lib/esm/components/backoffice/detail/BackofficeStatusMetaBadge.js +0 -16
  75. package/lib/esm/components/backoffice/detail/BackofficeStatusMetaBadge.js.map +0 -1
  76. package/lib/esm/components/backoffice/detail/backofficeDetailRelationLink.css.js +0 -6
  77. package/lib/esm/components/backoffice/detail/backofficeDetailRelationLink.css.js.map +0 -1
  78. package/lib/esm/components/backoffice/refs/backofficeEntityIdRef.css.js +0 -6
  79. package/lib/esm/components/backoffice/refs/backofficeEntityIdRef.css.js.map +0 -1
  80. package/lib/esm/components/backoffice/routing/BackofficeRoutePendingBar.js +0 -12
  81. package/lib/esm/components/backoffice/routing/BackofficeRoutePendingBar.js.map +0 -1
  82. package/lib/esm/components/backoffice/routing/backofficeRoutePendingBar.css.js +0 -7
  83. package/lib/esm/components/backoffice/routing/backofficeRoutePendingBar.css.js.map +0 -1
  84. package/lib/esm/hooks/useBackofficeLoadMore.js +0 -18
  85. package/lib/esm/hooks/useBackofficeLoadMore.js.map +0 -1
  86. package/lib/esm/modules/base64.js +0 -21
  87. package/lib/esm/modules/base64.js.map +0 -1
  88. package/lib/esm/node_modules/@babel/runtime/helpers/arrayLikeToArray.js +0 -15
  89. package/lib/esm/node_modules/@babel/runtime/helpers/arrayLikeToArray.js.map +0 -1
  90. package/lib/esm/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js +0 -15
  91. package/lib/esm/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js.map +0 -1
  92. package/lib/esm/node_modules/@babel/runtime/helpers/defineProperty.js +0 -20
  93. package/lib/esm/node_modules/@babel/runtime/helpers/defineProperty.js.map +0 -1
  94. package/lib/esm/node_modules/@babel/runtime/helpers/interopRequireDefault.js +0 -13
  95. package/lib/esm/node_modules/@babel/runtime/helpers/interopRequireDefault.js.map +0 -1
  96. package/lib/esm/node_modules/@babel/runtime/helpers/iterableToArray.js +0 -13
  97. package/lib/esm/node_modules/@babel/runtime/helpers/iterableToArray.js.map +0 -1
  98. package/lib/esm/node_modules/@babel/runtime/helpers/nonIterableSpread.js +0 -13
  99. package/lib/esm/node_modules/@babel/runtime/helpers/nonIterableSpread.js.map +0 -1
  100. package/lib/esm/node_modules/@babel/runtime/helpers/objectSpread2.js +0 -33
  101. package/lib/esm/node_modules/@babel/runtime/helpers/objectSpread2.js.map +0 -1
  102. package/lib/esm/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js +0 -19
  103. package/lib/esm/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js.map +0 -1
  104. package/lib/esm/node_modules/@babel/runtime/helpers/toConsumableArray.js +0 -18
  105. package/lib/esm/node_modules/@babel/runtime/helpers/toConsumableArray.js.map +0 -1
  106. package/lib/esm/node_modules/@babel/runtime/helpers/toPrimitive.js +0 -22
  107. package/lib/esm/node_modules/@babel/runtime/helpers/toPrimitive.js.map +0 -1
  108. package/lib/esm/node_modules/@babel/runtime/helpers/toPropertyKey.js +0 -17
  109. package/lib/esm/node_modules/@babel/runtime/helpers/toPropertyKey.js.map +0 -1
  110. package/lib/esm/node_modules/@babel/runtime/helpers/typeof.js +0 -18
  111. package/lib/esm/node_modules/@babel/runtime/helpers/typeof.js.map +0 -1
  112. package/lib/esm/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js +0 -19
  113. package/lib/esm/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js.map +0 -1
  114. package/lib/esm/node_modules/fbjs/lib/areEqual.js +0 -42
  115. package/lib/esm/node_modules/fbjs/lib/areEqual.js.map +0 -1
  116. package/lib/esm/node_modules/invariant/browser.js +0 -30
  117. package/lib/esm/node_modules/invariant/browser.js.map +0 -1
  118. package/lib/esm/node_modules/relay-test-utils/index.js +0 -11
  119. package/lib/esm/node_modules/relay-test-utils/index.js.map +0 -1
  120. package/lib/esm/node_modules/relay-test-utils/lib/RelayMockPayloadGenerator.js +0 -288
  121. package/lib/esm/node_modules/relay-test-utils/lib/RelayMockPayloadGenerator.js.map +0 -1
  122. package/lib/esm/node_modules/relay-test-utils/lib/RelayModernMockEnvironment.js +0 -183
  123. package/lib/esm/node_modules/relay-test-utils/lib/RelayModernMockEnvironment.js.map +0 -1
  124. package/lib/esm/node_modules/relay-test-utils/lib/RelayResolverTestUtils.js +0 -19
  125. package/lib/esm/node_modules/relay-test-utils/lib/RelayResolverTestUtils.js.map +0 -1
  126. package/lib/esm/node_modules/relay-test-utils/lib/index.js +0 -21
  127. package/lib/esm/node_modules/relay-test-utils/lib/index.js.map +0 -1
  128. package/lib/esm/node_modules/relay-test-utils/lib/unwrapContainer.js +0 -16
  129. package/lib/esm/node_modules/relay-test-utils/lib/unwrapContainer.js.map +0 -1
  130. package/lib/esm/relay/RelayProvider.js +0 -2
  131. package/lib/esm/relay/envHelpers.js +0 -63
  132. package/lib/esm/relay/envHelpers.js.map +0 -1
  133. package/lib/esm/relay/environment.js +0 -2
  134. package/lib/esm/relay/shortAccessTokenEnvironment.js +0 -2
  135. package/lib/esm/relay/useRelayOperationActivity.js +0 -2
  136. package/lib/esm/storybook/relay/relay-test-utils.d.js +0 -0
  137. package/lib/types/auth/AuthFlows.stories.d.ts +0 -19
  138. package/lib/types/auth/AuthFlows.stories.d.ts.map +0 -1
  139. package/lib/types/components/backoffice/billing/BackofficeBillingUsageChart.stories.d.ts +0 -41
  140. package/lib/types/components/backoffice/billing/BackofficeBillingUsageChart.stories.d.ts.map +0 -1
  141. package/lib/types/components/backoffice/detail/BackofficeDetailFlagTag.d.ts +0 -11
  142. package/lib/types/components/backoffice/detail/BackofficeDetailFlagTag.d.ts.map +0 -1
  143. package/lib/types/components/backoffice/detail/BackofficeDetailPrimitives.stories.d.ts +0 -17
  144. package/lib/types/components/backoffice/detail/BackofficeDetailPrimitives.stories.d.ts.map +0 -1
  145. package/lib/types/components/backoffice/detail/BackofficeDetailTaggedValue.d.ts +0 -13
  146. package/lib/types/components/backoffice/detail/BackofficeDetailTaggedValue.d.ts.map +0 -1
  147. package/lib/types/components/backoffice/detail/BackofficeEnumLabel.d.ts +0 -9
  148. package/lib/types/components/backoffice/detail/BackofficeEnumLabel.d.ts.map +0 -1
  149. package/lib/types/components/backoffice/detail/BackofficeReferenceValue.d.ts +0 -10
  150. package/lib/types/components/backoffice/detail/BackofficeReferenceValue.d.ts.map +0 -1
  151. package/lib/types/components/backoffice/detail/BackofficeStatusGroup.d.ts +0 -8
  152. package/lib/types/components/backoffice/detail/BackofficeStatusGroup.d.ts.map +0 -1
  153. package/lib/types/components/backoffice/detail/BackofficeStatusMetaBadge.d.ts +0 -11
  154. package/lib/types/components/backoffice/detail/BackofficeStatusMetaBadge.d.ts.map +0 -1
  155. package/lib/types/components/backoffice/detail/backofficeDetailRelationLink.css.d.ts +0 -6
  156. package/lib/types/components/backoffice/detail/backofficeDetailRelationLink.css.d.ts.map +0 -1
  157. package/lib/types/components/backoffice/errors/BackofficeErrorBoundary.stories.d.ts +0 -12
  158. package/lib/types/components/backoffice/errors/BackofficeErrorBoundary.stories.d.ts.map +0 -1
  159. package/lib/types/components/backoffice/filters/EntityIdFilterField.stories.d.ts +0 -12
  160. package/lib/types/components/backoffice/filters/EntityIdFilterField.stories.d.ts.map +0 -1
  161. package/lib/types/components/backoffice/hub/BackofficeHubTemplate.stories.d.ts +0 -49
  162. package/lib/types/components/backoffice/hub/BackofficeHubTemplate.stories.d.ts.map +0 -1
  163. package/lib/types/components/backoffice/overview/BackofficeOverviewLayout.stories.d.ts +0 -11
  164. package/lib/types/components/backoffice/overview/BackofficeOverviewLayout.stories.d.ts.map +0 -1
  165. package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.stories.d.ts +0 -12
  166. package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.stories.d.ts.map +0 -1
  167. package/lib/types/components/backoffice/refs/backofficeEntityIdRef.css.d.ts +0 -2
  168. package/lib/types/components/backoffice/refs/backofficeEntityIdRef.css.d.ts.map +0 -1
  169. package/lib/types/components/backoffice/routing/BackofficeRoutePendingBar.d.ts +0 -4
  170. package/lib/types/components/backoffice/routing/BackofficeRoutePendingBar.d.ts.map +0 -1
  171. package/lib/types/components/backoffice/routing/backofficeRoutePendingBar.css.d.ts +0 -3
  172. package/lib/types/components/backoffice/routing/backofficeRoutePendingBar.css.d.ts.map +0 -1
  173. package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.stories.d.ts +0 -11
  174. package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.stories.d.ts.map +0 -1
  175. package/lib/types/components/backoffice/tools/BackofficeTools.stories.d.ts +0 -17
  176. package/lib/types/components/backoffice/tools/BackofficeTools.stories.d.ts.map +0 -1
  177. package/lib/types/hooks/useBackofficeLoadMore.d.ts +0 -9
  178. package/lib/types/hooks/useBackofficeLoadMore.d.ts.map +0 -1
  179. package/lib/types/modules/base64.d.ts +0 -3
  180. package/lib/types/modules/base64.d.ts.map +0 -1
  181. package/lib/types/pages/BackofficeDashboardPage.stories.d.ts +0 -9
  182. package/lib/types/pages/BackofficeDashboardPage.stories.d.ts.map +0 -1
  183. package/lib/types/relay/RelayProvider.d.ts +0 -2
  184. package/lib/types/relay/RelayProvider.d.ts.map +0 -1
  185. package/lib/types/relay/envHelpers.d.ts +0 -25
  186. package/lib/types/relay/envHelpers.d.ts.map +0 -1
  187. package/lib/types/relay/environment.d.ts +0 -2
  188. package/lib/types/relay/environment.d.ts.map +0 -1
  189. package/lib/types/relay/shortAccessTokenEnvironment.d.ts +0 -5
  190. package/lib/types/relay/shortAccessTokenEnvironment.d.ts.map +0 -1
  191. package/lib/types/relay/useRelayOperationActivity.d.ts +0 -2
  192. package/lib/types/relay/useRelayOperationActivity.d.ts.map +0 -1
@@ -6,35 +6,33 @@ import { resolveToastSpec as i, resolveToastViewActions as a } from "../componen
6
6
  import { LazyBackofficeEntityActionFormDialog as o } from "../components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js";
7
7
  import { buildDataTableColumns as s } from "../components/backoffice/columns/buildDataTableColumns.js";
8
8
  import { BackofficeDetailBadgeRow as c } from "../components/backoffice/detail/BackofficeDetailBadgeRow.js";
9
- import { BackofficeDetailFlagTag as l } from "../components/backoffice/detail/BackofficeDetailFlagTag.js";
10
- import { BackofficeDetailTaggedValue as u } from "../components/backoffice/detail/BackofficeDetailTaggedValue.js";
11
- import { BackofficeLifecycleTimelineSection as d } from "../components/backoffice/detail/BackofficeLifecycleTimelineSection.js";
12
- import { BackofficeRelationsSummaryGrid as ee } from "../components/backoffice/detail/BackofficeRelationsSummaryGrid.js";
13
- import { layout as te, primary as ne, secondary as re, stacked as ie } from "../components/backoffice/detail/backofficeDetailLayout.css.js";
9
+ import { BackofficeLifecycleTimelineSection as l } from "../components/backoffice/detail/BackofficeLifecycleTimelineSection.js";
10
+ import { BackofficeRelationsSummaryGrid as u } from "../components/backoffice/detail/BackofficeRelationsSummaryGrid.js";
11
+ import { layout as ee, primary as te, secondary as ne, stacked as d } from "../components/backoffice/detail/backofficeDetailLayout.css.js";
14
12
  import { BackofficeEntityDetailScaffold as f } from "../components/backoffice/scaffolds/BackofficeEntityDetailScaffold.js";
15
13
  import { useBackofficeEntityDetailNotFoundState as p } from "../components/backoffice/scaffolds/BackofficeEntityDetailNotFound.js";
16
14
  import { useBackofficeFormats as m } from "../i18n/useBackofficeFormats.js";
17
15
  import { useRelayEnvironment as h } from "../relay/useRelayEnvironment.js";
18
- import { headerActionGroup as ae, headerActions as oe } from "./backofficeEntityDetailPage.css.js";
19
- import { extractMutationPayload as se, isFormMutationAction as g, isMutationAction as ce, isRouteAction as le, resolveLabel as _ } from "./BackofficeEntityDetailPage.helpers.js";
20
- import { buildFieldItems as ue, renderBlocks as de } from "./BackofficeEntityDetailPage.view-helpers.js";
16
+ import { headerActionGroup as re, headerActions as ie } from "./backofficeEntityDetailPage.css.js";
17
+ import { extractMutationPayload as ae, isFormMutationAction as g, isMutationAction as oe, isRouteAction as se, resolveLabel as _ } from "./BackofficeEntityDetailPage.helpers.js";
18
+ import { buildFieldItems as ce, renderBlocks as le } from "./BackofficeEntityDetailPage.view-helpers.js";
21
19
  import { useContext as v, useState as y } from "react";
22
- import { Fragment as fe, jsx as b, jsxs as x } from "react/jsx-runtime";
23
- import { useTranslation as S } from "react-i18next";
24
- import { Button as C } from "@plumile/ui/atomic/atoms/button/Button.js";
25
- import { commitMutation as pe, usePreloadedQuery as w } from "react-relay";
26
- import { useToast as me } from "@plumile/ui/atomic/molecules/toast/ToastProvider.js";
27
- import he from "@plumile/router/routing/RoutingContext.js";
28
- import { FormattedDate as T } from "@plumile/ui/atomic/atoms/formatted-date/FormattedDate.js";
29
- import { BACKOFFICE_DATE_TIME_OPTIONS as E } from "@plumile/backoffice-core/constants.js";
30
- import D from "@plumile/router/routing/Link.js";
31
- import { Tag as O } from "@plumile/ui/backoffice/atoms/tag/Tag.js";
32
- import { BackofficeDetailSection as k } from "@plumile/ui/backoffice/molecules/backoffice_detail_section/BackofficeDetailSection.js";
33
- import { BackofficePayloadViewer as ge } from "@plumile/ui/backoffice/molecules/backoffice_payload_viewer/BackofficePayloadViewer.js";
34
- import { AuditTimeline as _e } from "@plumile/ui/backoffice/organisms/audit_timeline/AuditTimeline.js";
35
- import { MetricCard as ve } from "@plumile/ui/components/dashboard/metric_card/MetricCard.js";
36
- import { MetricTileGroup as ye } from "@plumile/ui/components/dashboard/metric_tile_group/MetricTileGroup.js";
37
- import { LinkButton as A } from "@plumile/ui/atomic/atoms/button/LinkButton.js";
20
+ import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
21
+ import { useTranslation as C } from "react-i18next";
22
+ import { Button as w } from "@plumile/ui/atomic/atoms/button/Button.js";
23
+ import { commitMutation as ue, usePreloadedQuery as T } from "react-relay";
24
+ import { useToast as de } from "@plumile/ui/atomic/molecules/toast/ToastProvider.js";
25
+ import fe from "@plumile/router/routing/RoutingContext.js";
26
+ import { FormattedDate as E } from "@plumile/ui/atomic/atoms/formatted-date/FormattedDate.js";
27
+ import { BACKOFFICE_DATE_TIME_OPTIONS as D } from "@plumile/backoffice-core/constants.js";
28
+ import O from "@plumile/router/routing/Link.js";
29
+ import { Tag as k } from "@plumile/ui/backoffice/atoms/tag/Tag.js";
30
+ import { BackofficeDetailSection as A } from "@plumile/ui/backoffice/molecules/backoffice_detail_section/BackofficeDetailSection.js";
31
+ import { BackofficePayloadViewer as pe } from "@plumile/ui/backoffice/molecules/backoffice_payload_viewer/BackofficePayloadViewer.js";
32
+ import { AuditTimeline as me } from "@plumile/ui/backoffice/organisms/audit_timeline/AuditTimeline.js";
33
+ import { MetricCard as he } from "@plumile/ui/components/dashboard/metric_card/MetricCard.js";
34
+ import { MetricTileGroup as ge } from "@plumile/ui/components/dashboard/metric_tile_group/MetricTileGroup.js";
35
+ import { LinkButton as _e } from "@plumile/ui/atomic/atoms/button/LinkButton.js";
38
36
  import { DataTable as j } from "@plumile/ui/components/data-table/DataTable.js";
39
37
  import { BackofficeKeyValueList as M } from "@plumile/ui/backoffice/molecules/backoffice_key_value_list/BackofficeKeyValueList.js";
40
38
  import { BackofficeScopeStack as N } from "@plumile/ui/backoffice/molecules/backoffice_scope_stack/BackofficeScopeStack.js";
@@ -52,75 +50,77 @@ import { SettingsXSvg as W } from "@plumile/ui/icons/SettingsXSvg.js";
52
50
  import { ShieldLockSvg as G } from "@plumile/ui/icons/ShieldLockSvg.js";
53
51
  import { ShieldOffSvg as K } from "@plumile/ui/icons/ShieldOffSvg.js";
54
52
  import { XBadgeSvg as q } from "@plumile/ui/icons/XBadgeSvg.js";
53
+ import { BackofficeDetailFlagTag as ve } from "@plumile/ui/backoffice/molecules/backoffice_detail_flag_tag/BackofficeDetailFlagTag.js";
54
+ import { BackofficeDetailTaggedValue as ye } from "@plumile/ui/backoffice/molecules/backoffice_detail_tagged_value/BackofficeDetailTaggedValue.js";
55
55
  //#region src/pages/BackofficeEntityDetailPage.tsx
56
56
  var be = (e) => typeof e != "object" || !e ? !1 : typeof Reflect.get(e, "__typename") == "string", xe = (e) => {
57
57
  switch (e) {
58
- case "shield-lock": return /* @__PURE__ */ b(G, {
58
+ case "shield-lock": return /* @__PURE__ */ x(G, {
59
59
  width: 14,
60
60
  height: 14,
61
61
  "aria-hidden": "true"
62
62
  });
63
- case "shield-off": return /* @__PURE__ */ b(K, {
63
+ case "shield-off": return /* @__PURE__ */ x(K, {
64
64
  width: 14,
65
65
  height: 14,
66
66
  "aria-hidden": "true"
67
67
  });
68
- case "settings-check": return /* @__PURE__ */ b(U, {
68
+ case "settings-check": return /* @__PURE__ */ x(U, {
69
69
  width: 14,
70
70
  height: 14,
71
71
  "aria-hidden": "true"
72
72
  });
73
- case "settings-x": return /* @__PURE__ */ b(W, {
73
+ case "settings-x": return /* @__PURE__ */ x(W, {
74
74
  width: 14,
75
75
  height: 14,
76
76
  "aria-hidden": "true"
77
77
  });
78
- case "x-badge": return /* @__PURE__ */ b(q, {
78
+ case "x-badge": return /* @__PURE__ */ x(q, {
79
79
  width: 14,
80
80
  height: 14,
81
81
  "aria-hidden": "true"
82
82
  });
83
- case "chat-check": return /* @__PURE__ */ b(P, {
83
+ case "chat-check": return /* @__PURE__ */ x(P, {
84
84
  width: 14,
85
85
  height: 14,
86
86
  "aria-hidden": "true"
87
87
  });
88
- case "key": return /* @__PURE__ */ b(I, {
88
+ case "key": return /* @__PURE__ */ x(I, {
89
89
  width: 14,
90
90
  height: 14,
91
91
  "aria-hidden": "true"
92
92
  });
93
- case "key-off": return /* @__PURE__ */ b(F, {
93
+ case "key-off": return /* @__PURE__ */ x(F, {
94
94
  width: 14,
95
95
  height: 14,
96
96
  "aria-hidden": "true"
97
97
  });
98
- case "lock": return /* @__PURE__ */ b(R, {
98
+ case "lock": return /* @__PURE__ */ x(R, {
99
99
  width: 14,
100
100
  height: 14,
101
101
  "aria-hidden": "true"
102
102
  });
103
- case "lock-open": return /* @__PURE__ */ b(L, {
103
+ case "lock-open": return /* @__PURE__ */ x(L, {
104
104
  width: 14,
105
105
  height: 14,
106
106
  "aria-hidden": "true"
107
107
  });
108
- case "robot-check": return /* @__PURE__ */ b(z, {
108
+ case "robot-check": return /* @__PURE__ */ x(z, {
109
109
  width: 14,
110
110
  height: 14,
111
111
  "aria-hidden": "true"
112
112
  });
113
- case "robot-x": return /* @__PURE__ */ b(B, {
113
+ case "robot-x": return /* @__PURE__ */ x(B, {
114
114
  width: 14,
115
115
  height: 14,
116
116
  "aria-hidden": "true"
117
117
  });
118
- case "rocket": return /* @__PURE__ */ b(H, {
118
+ case "rocket": return /* @__PURE__ */ x(H, {
119
119
  width: 14,
120
120
  height: 14,
121
121
  "aria-hidden": "true"
122
122
  });
123
- case "rocket-off": return /* @__PURE__ */ b(V, {
123
+ case "rocket-off": return /* @__PURE__ */ x(V, {
124
124
  width: 14,
125
125
  height: 14,
126
126
  "aria-hidden": "true"
@@ -132,16 +132,16 @@ var be = (e) => typeof e != "object" || !e ? !1 : typeof Reflect.get(e, "__typen
132
132
  let t = e.fields?.map((e) => e.presentation?.group) ?? [];
133
133
  return t.length > 0 && t.every((e) => e === "scope" || e === "status") || e.placement === "side" || e.placement === "secondary" ? "secondary" : "primary";
134
134
  }, J = ({ config: P, prepared: F }) => {
135
- let { t: I } = S(), { t: L } = e(), { formatNumber: R, formatCurrency: z, formatCurrencyTitle: B, formatPercent: V } = m(), { entities: H } = n(), U = v(he), W = h(), G = me(), [K, q] = y({}), [J, Y] = y(null), X = (e, t) => {
135
+ let { t: I } = C(), { t: L } = e(), { formatNumber: R, formatCurrency: z, formatCurrencyTitle: B, formatPercent: V } = m(), { entities: H } = n(), U = v(fe), W = h(), G = de(), [K, q] = y({}), [J, Y] = y(null), X = (e, t) => {
136
136
  q((n) => n[e] === t ? n : {
137
137
  ...n,
138
138
  [e]: t
139
139
  });
140
- }, { page: Z } = P, Ce = p({ listHref: P.routes.list }), we = w(Z.query, F.pageQuery), Q = Z.resolveNode(we, {
140
+ }, { page: Z } = P, Ce = p({ listHref: P.routes.list }), we = T(Z.query, F.pageQuery), Q = Z.resolveNode(we, {
141
141
  id: F.id,
142
142
  detailId: F.detailId
143
143
  }), $ = r(Z.fragment, Q), Te = be($) ? $ : null;
144
- return /* @__PURE__ */ b(f, {
144
+ return /* @__PURE__ */ x(f, {
145
145
  node: Te,
146
146
  notFound: Ce,
147
147
  render: (e) => {
@@ -153,9 +153,9 @@ var be = (e) => typeof e != "object" || !e ? !1 : typeof Reflect.get(e, "__typen
153
153
  let e = f.filter((e) => e.isVisible == null || e.isVisible(n));
154
154
  e.length > 0 && (p = e.map((e) => {
155
155
  let r = _(e.label, I), o = e.ariaLabel == null ? r : _(e.ariaLabel, I), s = e.variant ?? "secondary", c = e.size ?? "small", l = K[e.id] ?? !1, u = l || e.isDisabled?.(n) === !0;
156
- if (le(e)) {
156
+ if (se(e)) {
157
157
  let t = e.to(n);
158
- return /* @__PURE__ */ b(A, {
158
+ return /* @__PURE__ */ x(_e, {
159
159
  to: t,
160
160
  variant: s,
161
161
  size: c,
@@ -165,7 +165,7 @@ var be = (e) => typeof e != "object" || !e ? !1 : typeof Reflect.get(e, "__typen
165
165
  children: r
166
166
  }, e.id);
167
167
  }
168
- return g(e) ? /* @__PURE__ */ b(C, {
168
+ return g(e) ? /* @__PURE__ */ x(w, {
169
169
  type: "button",
170
170
  variant: s,
171
171
  size: c,
@@ -176,7 +176,7 @@ var be = (e) => typeof e != "object" || !e ? !1 : typeof Reflect.get(e, "__typen
176
176
  },
177
177
  "aria-label": o,
178
178
  children: r
179
- }, e.id) : ce(e) ? /* @__PURE__ */ b(C, {
179
+ }, e.id) : oe(e) ? /* @__PURE__ */ x(w, {
180
180
  type: "button",
181
181
  variant: s,
182
182
  size: c,
@@ -185,7 +185,7 @@ var be = (e) => typeof e != "object" || !e ? !1 : typeof Reflect.get(e, "__typen
185
185
  onClick: () => {
186
186
  if (l) return;
187
187
  let r = e.getVariables(n);
188
- X(e.id, !0), pe(W, {
188
+ X(e.id, !0), ue(W, {
189
189
  mutation: e.mutation,
190
190
  variables: r,
191
191
  updater: (t) => {
@@ -193,7 +193,7 @@ var be = (e) => typeof e != "object" || !e ? !1 : typeof Reflect.get(e, "__typen
193
193
  },
194
194
  onCompleted: (r) => {
195
195
  X(e.id, !1);
196
- let o = se(r);
196
+ let o = ae(r);
197
197
  if (o != null) {
198
198
  let r = L("actions.form.errors.invalidPayload");
199
199
  e.toasts?.error?.message == null ? e.toasts?.error?.title != null && (r = _(e.toasts.error.title, I)) : r = _(e.toasts.error.message, I);
@@ -250,7 +250,7 @@ var be = (e) => typeof e != "object" || !e ? !1 : typeof Reflect.get(e, "__typen
250
250
  h.forEach((e, t) => {
251
251
  let i = Se(e) === "secondary" ? y : v;
252
252
  if (e.kind === "fieldSet") {
253
- let a = _(e.title, I), o = e.description == null ? void 0 : _(e.description, I), { items: s, customNodes: d } = ue(e.fields, n, {
253
+ let a = _(e.title, I), o = e.description == null ? void 0 : _(e.description, I), { items: s, customNodes: l } = ce(e.fields, n, {
254
254
  tApp: I,
255
255
  t: L,
256
256
  resolveEntityHref: r,
@@ -258,67 +258,67 @@ var be = (e) => typeof e != "object" || !e ? !1 : typeof Reflect.get(e, "__typen
258
258
  formatCurrency: z,
259
259
  formatCurrencyTitle: B,
260
260
  formatPercent: V,
261
- renderTag: (e, t) => /* @__PURE__ */ b(O, {
261
+ renderTag: (e, t) => /* @__PURE__ */ x(k, {
262
262
  tone: e,
263
263
  children: t
264
264
  }),
265
- renderBadgeRow: (e) => /* @__PURE__ */ b(c, { items: e }),
266
- renderDate: (e, t) => /* @__PURE__ */ b(T, {
265
+ renderBadgeRow: (e) => /* @__PURE__ */ x(c, { items: e }),
266
+ renderDate: (e, t) => /* @__PURE__ */ x(E, {
267
267
  value: e,
268
- options: E,
268
+ options: D,
269
269
  fallback: t
270
270
  }),
271
- renderFlagTag: (e) => /* @__PURE__ */ b(l, {
271
+ renderFlagTag: (e) => /* @__PURE__ */ x(ve, {
272
272
  tone: e.tone,
273
273
  icon: e.iconName == null ? void 0 : xe(e.iconName),
274
274
  label: e.label
275
275
  }),
276
- renderLink: (e, t) => /* @__PURE__ */ b(D, {
276
+ renderLink: (e, t) => /* @__PURE__ */ x(O, {
277
277
  to: e,
278
278
  preloadOnHover: "code-and-data",
279
279
  children: t
280
280
  }),
281
- renderTaggedValue: (e, t) => /* @__PURE__ */ b(u, {
281
+ renderTaggedValue: (e, t) => /* @__PURE__ */ x(ye, {
282
282
  tag: e,
283
283
  value: t
284
284
  }),
285
- wrapCustomNode: (e, t) => /* @__PURE__ */ b("div", { children: t }, e)
285
+ wrapCustomNode: (e, t) => /* @__PURE__ */ x("div", { children: t }, e)
286
286
  });
287
- if (!(s.length > 0 || d.length > 0)) return;
288
- i.push(/* @__PURE__ */ b(k, {
287
+ if (!(s.length > 0 || l.length > 0)) return;
288
+ i.push(/* @__PURE__ */ x(A, {
289
289
  title: a,
290
290
  description: o,
291
291
  items: s.length > 0 ? s : void 0,
292
- children: d
292
+ children: l
293
293
  }, `${a}-${t}`));
294
294
  return;
295
295
  }
296
- let a = de([e], n, {
296
+ let a = le([e], n, {
297
297
  tApp: I,
298
298
  t: L,
299
299
  resolveEntityHref: r,
300
300
  keyPrefix: String(t),
301
- renderLink: (e, t) => /* @__PURE__ */ b(D, {
301
+ renderLink: (e, t) => /* @__PURE__ */ x(O, {
302
302
  to: e,
303
303
  preloadOnHover: "code-and-data",
304
304
  children: t
305
305
  }),
306
- renderDate: (e, t) => /* @__PURE__ */ b(T, {
306
+ renderDate: (e, t) => /* @__PURE__ */ x(E, {
307
307
  value: e,
308
- options: E,
308
+ options: D,
309
309
  fallback: t
310
310
  }),
311
- renderTag: (e, t) => /* @__PURE__ */ b(O, {
311
+ renderTag: (e, t) => /* @__PURE__ */ x(k, {
312
312
  tone: e,
313
313
  children: t
314
314
  }),
315
- renderMetricGroup: ({ key: e, title: t, description: n, density: r, items: i }) => /* @__PURE__ */ b(k, {
315
+ renderMetricGroup: ({ key: e, title: t, description: n, density: r, items: i }) => /* @__PURE__ */ x(A, {
316
316
  title: t,
317
317
  description: n,
318
- children: i.length > 0 && /* @__PURE__ */ b(ye, {
318
+ children: i.length > 0 && /* @__PURE__ */ x(ge, {
319
319
  density: r ?? "comfortable",
320
320
  minColumn: "180",
321
- children: i.map((e) => /* @__PURE__ */ b(ve, {
321
+ children: i.map((e) => /* @__PURE__ */ x(he, {
322
322
  label: e.label,
323
323
  value: e.value,
324
324
  hint: e.hint,
@@ -330,37 +330,37 @@ var be = (e) => typeof e != "object" || !e ? !1 : typeof Reflect.get(e, "__typen
330
330
  }, e.id))
331
331
  })
332
332
  }, e),
333
- renderTimeline: ({ key: e, title: t, description: n, events: r }) => /* @__PURE__ */ b(d, {
333
+ renderTimeline: ({ key: e, title: t, description: n, events: r }) => /* @__PURE__ */ x(l, {
334
334
  title: t,
335
335
  description: n,
336
336
  events: r
337
337
  }, e),
338
- renderAuditTimeline: ({ key: e, title: t, description: n, events: r }) => /* @__PURE__ */ b(k, {
338
+ renderAuditTimeline: ({ key: e, title: t, description: n, events: r }) => /* @__PURE__ */ x(A, {
339
339
  title: t,
340
340
  description: n,
341
- children: /* @__PURE__ */ b(_e, { events: r })
341
+ children: /* @__PURE__ */ x(me, { events: r })
342
342
  }, e),
343
- renderRelations: ({ key: e, title: t, items: n }) => /* @__PURE__ */ b(ee, {
343
+ renderRelations: ({ key: e, title: t, items: n }) => /* @__PURE__ */ x(u, {
344
344
  title: t,
345
345
  items: n
346
346
  }, e),
347
- renderContextStack: ({ key: e, title: t, items: n }) => /* @__PURE__ */ b(N, {
347
+ renderContextStack: ({ key: e, title: t, items: n }) => /* @__PURE__ */ x(N, {
348
348
  title: t,
349
349
  items: n
350
350
  }, e),
351
- renderCustomSection: (e, t, n) => /* @__PURE__ */ b(k, {
351
+ renderCustomSection: (e, t, n) => /* @__PURE__ */ x(A, {
352
352
  title: t,
353
353
  children: n
354
354
  }, e),
355
- wrapCustomNode: (e, t) => /* @__PURE__ */ b("div", { children: t }, e),
355
+ wrapCustomNode: (e, t) => /* @__PURE__ */ x("div", { children: t }, e),
356
356
  resolveTableColumns: (e) => s(e, {
357
357
  tApp: I,
358
358
  t: L
359
359
  }),
360
- renderTable: ({ key: e, title: t, description: n, columns: r, rows: i }) => /* @__PURE__ */ b(k, {
360
+ renderTable: ({ key: e, title: t, description: n, columns: r, rows: i }) => /* @__PURE__ */ x(A, {
361
361
  title: t,
362
362
  description: n,
363
- children: /* @__PURE__ */ b(j, {
363
+ children: /* @__PURE__ */ x(j, {
364
364
  columns: r,
365
365
  rows: i,
366
366
  getRowId: (e, t) => {
@@ -372,46 +372,46 @@ var be = (e) => typeof e != "object" || !e ? !1 : typeof Reflect.get(e, "__typen
372
372
  }
373
373
  })
374
374
  }, e),
375
- renderPayload: ({ key: e, title: t, description: n, content: r, format: i }) => /* @__PURE__ */ b(k, {
375
+ renderPayload: ({ key: e, title: t, description: n, content: r, format: i }) => /* @__PURE__ */ x(A, {
376
376
  title: t,
377
377
  description: n,
378
- children: /* @__PURE__ */ b(ge, {
378
+ children: /* @__PURE__ */ x(pe, {
379
379
  content: r,
380
380
  format: i,
381
381
  emptyState: L("common.notAvailable")
382
382
  })
383
383
  }, e),
384
- renderKeyValueListSection: ({ key: e, title: t, description: n, items: r }) => /* @__PURE__ */ b(k, {
384
+ renderKeyValueListSection: ({ key: e, title: t, description: n, items: r }) => /* @__PURE__ */ x(A, {
385
385
  title: t,
386
386
  description: n,
387
- children: /* @__PURE__ */ b(M, { items: r })
387
+ children: /* @__PURE__ */ x(M, { items: r })
388
388
  }, e)
389
389
  })[0];
390
390
  a != null && i.push(a);
391
391
  });
392
- let S = p.length > 0 ? /* @__PURE__ */ b("div", {
393
- className: oe,
394
- children: /* @__PURE__ */ b("div", {
395
- className: ae,
392
+ let C = p.length > 0 ? /* @__PURE__ */ x("div", {
393
+ className: ie,
394
+ children: /* @__PURE__ */ x("div", {
395
+ className: re,
396
396
  children: p
397
397
  })
398
- }) : null, w = y.length > 0 ? /* @__PURE__ */ x("div", {
399
- className: te,
400
- children: [/* @__PURE__ */ b("div", {
401
- className: ne,
398
+ }) : null, T = y.length > 0 ? /* @__PURE__ */ S("div", {
399
+ className: ee,
400
+ children: [/* @__PURE__ */ x("div", {
401
+ className: te,
402
402
  children: v
403
- }), /* @__PURE__ */ b("aside", {
404
- className: re,
403
+ }), /* @__PURE__ */ x("aside", {
404
+ className: ne,
405
405
  children: y
406
406
  })]
407
- }) : /* @__PURE__ */ b("div", {
408
- className: ie,
407
+ }) : /* @__PURE__ */ x("div", {
408
+ className: d,
409
409
  children: v
410
410
  });
411
- return /* @__PURE__ */ x(fe, { children: [
412
- S,
413
- w,
414
- m != null && g(m) && /* @__PURE__ */ b(o, {
411
+ return /* @__PURE__ */ S(b, { children: [
412
+ C,
413
+ T,
414
+ m != null && g(m) && /* @__PURE__ */ x(o, {
415
415
  isOpen: !0,
416
416
  action: m,
417
417
  node: n,
@@ -422,7 +422,7 @@ var be = (e) => typeof e != "object" || !e ? !1 : typeof Reflect.get(e, "__typen
422
422
  ] });
423
423
  }
424
424
  });
425
- }, Y = ({ prepared: e }) => /* @__PURE__ */ b(J, {
425
+ }, Y = ({ prepared: e }) => /* @__PURE__ */ x(J, {
426
426
  config: e.pageConfig,
427
427
  prepared: e
428
428
  });
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeEntityDetailPage.js","names":[],"sources":["../../../src/pages/BackofficeEntityDetailPage.tsx"],"sourcesContent":["/* eslint-disable no-ternary */\nimport { type JSX, type ReactNode, useContext, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n commitMutation,\n type PreloadedQuery,\n usePreloadedQuery,\n} from 'react-relay';\nimport type { OperationType } from 'relay-runtime';\nimport { resolveMutationOutcome } from '../relay/mutationResult.js';\n\nimport { BACKOFFICE_DATE_TIME_OPTIONS } from '@plumile/backoffice-core/constants.js';\nimport type {\n BackofficePreparedDetailPageDataRoute,\n BackofficeResolvedDetailPageFacetConfig,\n} from '@plumile/backoffice-core/types.js';\nimport { Button } from '@plumile/ui/atomic/atoms/button/Button.js';\nimport { LinkButton } from '@plumile/ui/atomic/atoms/button/LinkButton.js';\nimport { FormattedDate } from '@plumile/ui/atomic/atoms/formatted-date/FormattedDate.js';\nimport { useToast } from '@plumile/ui/atomic/molecules/toast/ToastProvider.js';\nimport { Tag } from '@plumile/ui/backoffice/atoms/tag/Tag.js';\nimport { BackofficeDetailSection } from '@plumile/ui/backoffice/molecules/backoffice_detail_section/BackofficeDetailSection.js';\nimport { BackofficeKeyValueList } from '@plumile/ui/backoffice/molecules/backoffice_key_value_list/BackofficeKeyValueList.js';\nimport { BackofficePayloadViewer } from '@plumile/ui/backoffice/molecules/backoffice_payload_viewer/BackofficePayloadViewer.js';\nimport { BackofficeScopeStack } from '@plumile/ui/backoffice/molecules/backoffice_scope_stack/BackofficeScopeStack.js';\nimport { AuditTimeline } from '@plumile/ui/backoffice/organisms/audit_timeline/AuditTimeline.js';\nimport { MetricCard } from '@plumile/ui/components/dashboard/metric_card/MetricCard.js';\nimport { MetricTileGroup } from '@plumile/ui/components/dashboard/metric_tile_group/MetricTileGroup.js';\nimport { DataTable } from '@plumile/ui/components/data-table/DataTable.js';\nimport { ChatCheckSvg } from '@plumile/ui/icons/ChatCheckSvg.js';\nimport { KeyOffSvg } from '@plumile/ui/icons/KeyOffSvg.js';\nimport { KeySvg } from '@plumile/ui/icons/KeySvg.js';\nimport { LockOpenSvg } from '@plumile/ui/icons/LockOpenSvg.js';\nimport { LockSvg } from '@plumile/ui/icons/LockSvg.js';\nimport { RobotCheckSvg } from '@plumile/ui/icons/RobotCheckSvg.js';\nimport { RobotXSvg } from '@plumile/ui/icons/RobotXSvg.js';\nimport { RocketOffSvg } from '@plumile/ui/icons/RocketOffSvg.js';\nimport { RocketSvg } from '@plumile/ui/icons/RocketSvg.js';\nimport { SettingsCheckSvg } from '@plumile/ui/icons/SettingsCheckSvg.js';\nimport { SettingsXSvg } from '@plumile/ui/icons/SettingsXSvg.js';\nimport { ShieldLockSvg } from '@plumile/ui/icons/ShieldLockSvg.js';\nimport { ShieldOffSvg } from '@plumile/ui/icons/ShieldOffSvg.js';\nimport { XBadgeSvg } from '@plumile/ui/icons/XBadgeSvg.js';\nimport Link from '@plumile/router/routing/Link.js';\nimport RoutingContext from '@plumile/router/routing/RoutingContext.js';\n\nimport { buildDataTableColumns } from '../components/backoffice/columns/buildDataTableColumns.js';\nimport { BackofficeEntityDetailScaffold } from '../components/backoffice/scaffolds/BackofficeEntityDetailScaffold.js';\nimport { useBackofficeEntityDetailNotFoundState } from '../components/backoffice/scaffolds/BackofficeEntityDetailNotFound.js';\nimport { BackofficeDetailBadgeRow } from '../components/backoffice/detail/BackofficeDetailBadgeRow.js';\nimport { BackofficeDetailFlagTag } from '../components/backoffice/detail/BackofficeDetailFlagTag.js';\nimport { BackofficeDetailTaggedValue } from '../components/backoffice/detail/BackofficeDetailTaggedValue.js';\nimport { BackofficeLifecycleTimelineSection } from '../components/backoffice/detail/BackofficeLifecycleTimelineSection.js';\nimport { BackofficeRelationsSummaryGrid } from '../components/backoffice/detail/BackofficeRelationsSummaryGrid.js';\nimport * as detailLayoutStyles from '../components/backoffice/detail/backofficeDetailLayout.css.js';\nimport { LazyBackofficeEntityActionFormDialog } from '../components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js';\nimport {\n resolveToastSpec,\n resolveToastViewActions,\n} from '../components/backoffice/actions/toastViewAction.js';\nimport * as pageStyles from './backofficeEntityDetailPage.css.js';\nimport { useBackofficeFormats } from '../i18n/useBackofficeFormats.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport { useBackofficeRuntimeFragment } from '../relay/typedRelayHooks.js';\nimport { useRelayEnvironment } from '../relay/useRelayEnvironment.js';\nimport {\n extractMutationPayload,\n isFormMutationAction,\n isMutationAction,\n isRouteAction,\n resolveLabel,\n} from './BackofficeEntityDetailPage.helpers.js';\nimport {\n buildFieldItems,\n renderBlocks,\n type FlagIconName,\n} from './BackofficeEntityDetailPage.view-helpers.js';\n\nexport type BackofficeEntityDetailPageProps = {\n prepared: BackofficePreparedDetailPageDataRoute;\n};\n\nconst isBackofficeRelayNode = (\n value: unknown,\n): value is { readonly __typename: string } => {\n if (value == null || typeof value !== 'object') {\n return false;\n }\n const typename = Reflect.get(value, '__typename');\n return typeof typename === 'string';\n};\n\nconst renderFlagIcon = (iconName: FlagIconName): JSX.Element => {\n const iconSize = 14;\n switch (iconName) {\n case 'shield-lock':\n return (\n <ShieldLockSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'shield-off':\n return (\n <ShieldOffSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'settings-check':\n return (\n <SettingsCheckSvg\n width={iconSize}\n height={iconSize}\n aria-hidden=\"true\"\n />\n );\n case 'settings-x':\n return (\n <SettingsXSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'x-badge':\n return (\n <XBadgeSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'chat-check':\n return (\n <ChatCheckSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'key':\n return <KeySvg width={iconSize} height={iconSize} aria-hidden=\"true\" />;\n case 'key-off':\n return (\n <KeyOffSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'lock':\n return <LockSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />;\n case 'lock-open':\n return (\n <LockOpenSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'robot-check':\n return (\n <RobotCheckSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'robot-x':\n return (\n <RobotXSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'rocket':\n return (\n <RocketSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'rocket-off':\n return (\n <RocketOffSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n default:\n throw new Error(`Unsupported flag icon: ${String(iconName)}`);\n }\n};\n\nconst resolveDetailPlacement = (item: {\n placement?: 'primary' | 'secondary' | 'main' | 'side' | 'fullWidth';\n presentation?: {\n group?: string;\n desktop?: 'primary' | 'secondary' | 'fullWidth';\n };\n kind?: string;\n fields?: readonly {\n presentation?: {\n group?: string;\n desktop?: 'primary' | 'secondary' | 'fullWidth';\n };\n }[];\n}): 'primary' | 'secondary' => {\n if (item.presentation?.desktop === 'secondary') {\n return 'secondary';\n }\n if (\n item.presentation?.group === 'scope' ||\n item.presentation?.group === 'status'\n ) {\n return 'secondary';\n }\n const fieldGroups =\n item.fields?.map((field) => {\n return field.presentation?.group;\n }) ?? [];\n if (\n fieldGroups.length > 0 &&\n fieldGroups.every((group) => {\n return group === 'scope' || group === 'status';\n })\n ) {\n return 'secondary';\n }\n if (item.placement === 'side') {\n return 'secondary';\n }\n if (item.placement === 'secondary') {\n return 'secondary';\n }\n return 'primary';\n};\n\nconst BackofficeEntityDetailPageContent = ({\n config,\n prepared,\n}: {\n config: BackofficeResolvedDetailPageFacetConfig;\n prepared: {\n pageQuery: PreloadedQuery<OperationType>;\n id: string;\n detailId?: string;\n pageId: string;\n pagePath: string;\n };\n}): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { formatNumber, formatCurrency, formatCurrencyTitle, formatPercent } =\n useBackofficeFormats();\n const { entities } = useBackofficeConfig();\n const routing = useContext(RoutingContext);\n const environment = useRelayEnvironment();\n const toast = useToast();\n const [actionState, setActionState] = useState<Record<string, boolean>>({});\n const [activeFormActionId, setActiveFormActionId] = useState<string | null>(\n null,\n );\n const setActionLoading = (actionId: string, isLoading: boolean) => {\n setActionState((prev) => {\n if (prev[actionId] === isLoading) {\n return prev;\n }\n return { ...prev, [actionId]: isLoading };\n });\n };\n\n const { page } = config;\n const notFound = useBackofficeEntityDetailNotFoundState({\n listHref: config.routes.list,\n });\n\n const pageQueryData = usePreloadedQuery(page.query, prepared.pageQuery);\n const pageNodeRef = page.resolveNode(pageQueryData, {\n id: prepared.id,\n detailId: prepared.detailId,\n });\n const fragmentNode = useBackofficeRuntimeFragment(page.fragment, pageNodeRef);\n const resolvedNode = isBackofficeRelayNode(fragmentNode)\n ? fragmentNode\n : null;\n return (\n <BackofficeEntityDetailScaffold\n node={resolvedNode}\n notFound={notFound}\n render={(node) => {\n const view = page.toView(node);\n const resolveEntityHref = (entityId: string, refId: string) => {\n const entityConfig = entities[entityId];\n if (entityConfig == null) {\n return null;\n }\n return entityConfig.routes.detail(refId);\n };\n const actions = page.actions ?? [];\n let headerActionButtons: ReactNode[] = [];\n if (actions.length > 0) {\n const visibleActions = actions.filter((action) => {\n if (action.isVisible == null) {\n return true;\n }\n return action.isVisible(view);\n });\n\n if (visibleActions.length > 0) {\n headerActionButtons = visibleActions.map((action) => {\n const label = resolveLabel(action.label, tApp);\n const ariaLabel =\n action.ariaLabel != null\n ? resolveLabel(action.ariaLabel, tApp)\n : label;\n const variant = action.variant ?? 'secondary';\n const size = action.size ?? 'small';\n const isLoading = actionState[action.id] ?? false;\n const isDisabled =\n isLoading || action.isDisabled?.(view) === true;\n\n if (isRouteAction(action)) {\n const href = action.to(view);\n return (\n <LinkButton\n key={action.id}\n to={href}\n variant={variant}\n size={size}\n isDisabled={isDisabled}\n aria-label={ariaLabel}\n preloadOnHover=\"code-and-data\"\n >\n {label}\n </LinkButton>\n );\n }\n\n if (isFormMutationAction(action)) {\n return (\n <Button\n key={action.id}\n type=\"button\"\n variant={variant}\n size={size}\n isLoading={false}\n disabled={isDisabled}\n onClick={() => {\n setActiveFormActionId(action.id);\n }}\n aria-label={ariaLabel}\n >\n {label}\n </Button>\n );\n }\n\n if (isMutationAction(action)) {\n const handleClick = () => {\n if (isLoading) {\n return;\n }\n const variables = action.getVariables(view);\n setActionLoading(action.id, true);\n commitMutation(environment, {\n mutation: action.mutation,\n variables,\n updater: (store) => {\n action.updater?.(store, view);\n },\n onCompleted: (response) => {\n setActionLoading(action.id, false);\n const mutationPayload = extractMutationPayload(response);\n if (mutationPayload != null) {\n let defaultErrorMessage = t(\n 'actions.form.errors.invalidPayload',\n );\n if (action.toasts?.error?.message != null) {\n defaultErrorMessage = resolveLabel(\n action.toasts.error.message,\n tApp,\n );\n } else if (action.toasts?.error?.title != null) {\n defaultErrorMessage = resolveLabel(\n action.toasts.error.title,\n tApp,\n );\n }\n\n const outcome = resolveMutationOutcome(\n mutationPayload,\n {\n defaultErrorMessage,\n mapReason: (reason) => {\n const mapped = action.mapErrorReason?.(\n reason,\n view,\n );\n if (mapped == null) {\n return null;\n }\n if (typeof mapped === 'function') {\n return resolveLabel(mapped, tApp);\n }\n return String(mapped);\n },\n },\n );\n if (!outcome.ok) {\n const error = new Error(outcome.message);\n action.onError?.(error, view);\n if (action.toasts?.error != null) {\n const toastSpec = resolveToastSpec(\n action.toasts.error,\n tApp,\n );\n toast.error(toastSpec.title, toastSpec.message);\n }\n return;\n }\n }\n\n action.onCompleted?.(response, view);\n if (action.toasts?.success != null) {\n const toastSpec = resolveToastSpec(\n action.toasts.success,\n tApp,\n );\n const toastActions = resolveToastViewActions({\n toast: action.toasts.success,\n response,\n node: view,\n tApp,\n entities,\n defaultLabel: t('actions.view'),\n navigateTo: (to) => {\n routing?.history.push({ pathname: to });\n },\n });\n toast.push({\n kind: 'info',\n title: toastSpec.title,\n message: toastSpec.message,\n actions: toastActions,\n });\n }\n },\n onError: (error) => {\n setActionLoading(action.id, false);\n action.onError?.(error, view);\n if (action.toasts?.error != null) {\n const toastSpec = resolveToastSpec(\n action.toasts.error,\n tApp,\n );\n toast.error(toastSpec.title, toastSpec.message);\n }\n },\n });\n };\n\n return (\n <Button\n key={action.id}\n type=\"button\"\n variant={variant}\n size={size}\n isLoading={isLoading}\n disabled={isDisabled}\n onClick={handleClick}\n aria-label={ariaLabel}\n >\n {label}\n </Button>\n );\n }\n\n return null;\n });\n }\n }\n\n const activeFormAction = actions.find((action) => {\n return action.id === activeFormActionId;\n });\n\n const { content } = page;\n\n const primaryNodes: ReactNode[] = [];\n const secondaryNodes: ReactNode[] = [];\n content.forEach((item, index) => {\n const placement = resolveDetailPlacement(item);\n const targetNodes =\n placement === 'secondary' ? secondaryNodes : primaryNodes;\n\n if (item.kind === 'fieldSet') {\n const sectionLabel = resolveLabel(item.title, tApp);\n const description =\n item.description != null\n ? resolveLabel(item.description, tApp)\n : undefined;\n const { items, customNodes } = buildFieldItems(item.fields, view, {\n tApp,\n t,\n resolveEntityHref,\n formatNumber,\n formatCurrency,\n formatCurrencyTitle,\n formatPercent,\n renderTag: (tone, label) => {\n return <Tag tone={tone}>{label}</Tag>;\n },\n renderBadgeRow: (items) => {\n return <BackofficeDetailBadgeRow items={items} />;\n },\n renderDate: (value, fallback) => {\n return (\n <FormattedDate\n value={value}\n options={BACKOFFICE_DATE_TIME_OPTIONS}\n fallback={fallback}\n />\n );\n },\n renderFlagTag: (tag) => {\n return (\n <BackofficeDetailFlagTag\n tone={tag.tone}\n icon={\n tag.iconName != null\n ? renderFlagIcon(tag.iconName)\n : undefined\n }\n label={tag.label}\n />\n );\n },\n renderLink: (href, label) => {\n return (\n <Link to={href} preloadOnHover=\"code-and-data\">\n {label}\n </Link>\n );\n },\n renderTaggedValue: (tag, value) => {\n return <BackofficeDetailTaggedValue tag={tag} value={value} />;\n },\n wrapCustomNode: (id, custom) => {\n return <div key={id}>{custom}</div>;\n },\n });\n\n const hasContent = items.length > 0 || customNodes.length > 0;\n\n if (!hasContent) {\n return;\n }\n\n targetNodes.push(\n <BackofficeDetailSection\n key={`${sectionLabel}-${index}`}\n title={sectionLabel}\n description={description}\n items={items.length > 0 ? items : undefined}\n >\n {customNodes}\n </BackofficeDetailSection>,\n );\n return;\n }\n\n const rendered = renderBlocks([item], view, {\n tApp,\n t,\n resolveEntityHref,\n keyPrefix: String(index),\n renderLink: (href, label) => {\n return (\n <Link to={href} preloadOnHover=\"code-and-data\">\n {label}\n </Link>\n );\n },\n renderDate: (value, fallback) => {\n return (\n <FormattedDate\n value={value}\n options={BACKOFFICE_DATE_TIME_OPTIONS}\n fallback={fallback}\n />\n );\n },\n renderTag: (tone, label) => {\n return <Tag tone={tone}>{label}</Tag>;\n },\n renderMetricGroup: ({\n key,\n title,\n description,\n density,\n items,\n }) => {\n return (\n <BackofficeDetailSection\n key={key}\n title={title}\n description={description}\n >\n {items.length > 0 && (\n <MetricTileGroup\n density={density ?? 'comfortable'}\n minColumn=\"180\"\n >\n {items.map((metric) => {\n return (\n <MetricCard\n key={metric.id}\n label={metric.label}\n value={metric.value}\n hint={metric.hint}\n tone={metric.tone ?? 'neutral'}\n density={density ?? 'comfortable'}\n copyValue={metric.copyValue}\n copyLabel={t('common.actions.copy')}\n copiedLabel={t('common.actions.copied')}\n />\n );\n })}\n </MetricTileGroup>\n )}\n </BackofficeDetailSection>\n );\n },\n renderTimeline: ({ key, title, description, events }) => {\n return (\n <BackofficeLifecycleTimelineSection\n key={key}\n title={title}\n description={description}\n events={events}\n />\n );\n },\n renderAuditTimeline: ({ key, title, description, events }) => {\n return (\n <BackofficeDetailSection\n key={key}\n title={title}\n description={description}\n >\n <AuditTimeline events={events} />\n </BackofficeDetailSection>\n );\n },\n renderRelations: ({ key, title, items }) => {\n return (\n <BackofficeRelationsSummaryGrid\n key={key}\n title={title}\n items={items}\n />\n );\n },\n renderContextStack: ({ key, title, items }) => {\n return (\n <BackofficeScopeStack key={key} title={title} items={items} />\n );\n },\n renderCustomSection: (key, title, child) => {\n return (\n <BackofficeDetailSection key={key} title={title}>\n {child}\n </BackofficeDetailSection>\n );\n },\n wrapCustomNode: (key, custom) => {\n return <div key={key}>{custom}</div>;\n },\n resolveTableColumns: (columns) => {\n return buildDataTableColumns(columns, {\n tApp,\n t,\n });\n },\n renderTable: ({ key, title, description, columns, rows }) => {\n return (\n <BackofficeDetailSection\n key={key}\n title={title}\n description={description}\n >\n <DataTable\n columns={columns}\n rows={rows}\n getRowId={(row, rowIndex) => {\n if (row != null && typeof row === 'object') {\n const record = row as Record<string, unknown>;\n const maybeId = record.id;\n if (\n typeof maybeId === 'string' &&\n maybeId.trim() !== ''\n ) {\n return maybeId;\n }\n }\n return String(rowIndex);\n }}\n />\n </BackofficeDetailSection>\n );\n },\n renderPayload: ({ key, title, description, content, format }) => {\n return (\n <BackofficeDetailSection\n key={key}\n title={title}\n description={description}\n >\n <BackofficePayloadViewer\n content={content}\n format={format}\n emptyState={t('common.notAvailable')}\n />\n </BackofficeDetailSection>\n );\n },\n renderKeyValueListSection: ({ key, title, description, items }) => {\n return (\n <BackofficeDetailSection\n key={key}\n title={title}\n description={description}\n >\n <BackofficeKeyValueList items={items} />\n </BackofficeDetailSection>\n );\n },\n });\n const blockNode = rendered[0];\n if (blockNode != null) {\n targetNodes.push(blockNode);\n }\n });\n\n const tabActionsNode =\n headerActionButtons.length > 0 ? (\n <div className={pageStyles.headerActions}>\n <div className={pageStyles.headerActionGroup}>\n {headerActionButtons}\n </div>\n </div>\n ) : null;\n\n const hasAside = secondaryNodes.length > 0;\n const contentNode = hasAside ? (\n <div className={detailLayoutStyles.layout}>\n <div className={detailLayoutStyles.primary}>{primaryNodes}</div>\n <aside className={detailLayoutStyles.secondary}>\n {secondaryNodes}\n </aside>\n </div>\n ) : (\n <div className={detailLayoutStyles.stacked}>{primaryNodes}</div>\n );\n\n return (\n <>\n {tabActionsNode}\n {contentNode}\n {activeFormAction != null &&\n isFormMutationAction(activeFormAction) && (\n <LazyBackofficeEntityActionFormDialog\n isOpen\n action={activeFormAction}\n node={view}\n onClose={() => {\n setActiveFormActionId(null);\n }}\n />\n )}\n </>\n );\n }}\n />\n );\n};\n\nexport const BackofficeEntityDetailPage = ({\n prepared,\n}: BackofficeEntityDetailPageProps): JSX.Element => {\n return (\n <BackofficeEntityDetailPageContent\n config={prepared.pageConfig}\n prepared={prepared}\n />\n );\n};\n\nexport default BackofficeEntityDetailPage;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BackofficeEntityDetailPage.js","names":[],"sources":["../../../src/pages/BackofficeEntityDetailPage.tsx"],"sourcesContent":["/* eslint-disable no-ternary */\nimport { type JSX, type ReactNode, useContext, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n commitMutation,\n type PreloadedQuery,\n usePreloadedQuery,\n} from 'react-relay';\nimport type { OperationType } from 'relay-runtime';\nimport { resolveMutationOutcome } from '../relay/mutationResult.js';\n\nimport { BACKOFFICE_DATE_TIME_OPTIONS } from '@plumile/backoffice-core/constants.js';\nimport type {\n BackofficePreparedDetailPageDataRoute,\n BackofficeResolvedDetailPageFacetConfig,\n} from '@plumile/backoffice-core/types.js';\nimport { Button } from '@plumile/ui/atomic/atoms/button/Button.js';\nimport { LinkButton } from '@plumile/ui/atomic/atoms/button/LinkButton.js';\nimport { FormattedDate } from '@plumile/ui/atomic/atoms/formatted-date/FormattedDate.js';\nimport { useToast } from '@plumile/ui/atomic/molecules/toast/ToastProvider.js';\nimport { Tag } from '@plumile/ui/backoffice/atoms/tag/Tag.js';\nimport { BackofficeDetailSection } from '@plumile/ui/backoffice/molecules/backoffice_detail_section/BackofficeDetailSection.js';\nimport { BackofficeKeyValueList } from '@plumile/ui/backoffice/molecules/backoffice_key_value_list/BackofficeKeyValueList.js';\nimport { BackofficePayloadViewer } from '@plumile/ui/backoffice/molecules/backoffice_payload_viewer/BackofficePayloadViewer.js';\nimport { BackofficeScopeStack } from '@plumile/ui/backoffice/molecules/backoffice_scope_stack/BackofficeScopeStack.js';\nimport { AuditTimeline } from '@plumile/ui/backoffice/organisms/audit_timeline/AuditTimeline.js';\nimport { MetricCard } from '@plumile/ui/components/dashboard/metric_card/MetricCard.js';\nimport { MetricTileGroup } from '@plumile/ui/components/dashboard/metric_tile_group/MetricTileGroup.js';\nimport { DataTable } from '@plumile/ui/components/data-table/DataTable.js';\nimport { ChatCheckSvg } from '@plumile/ui/icons/ChatCheckSvg.js';\nimport { KeyOffSvg } from '@plumile/ui/icons/KeyOffSvg.js';\nimport { KeySvg } from '@plumile/ui/icons/KeySvg.js';\nimport { LockOpenSvg } from '@plumile/ui/icons/LockOpenSvg.js';\nimport { LockSvg } from '@plumile/ui/icons/LockSvg.js';\nimport { RobotCheckSvg } from '@plumile/ui/icons/RobotCheckSvg.js';\nimport { RobotXSvg } from '@plumile/ui/icons/RobotXSvg.js';\nimport { RocketOffSvg } from '@plumile/ui/icons/RocketOffSvg.js';\nimport { RocketSvg } from '@plumile/ui/icons/RocketSvg.js';\nimport { SettingsCheckSvg } from '@plumile/ui/icons/SettingsCheckSvg.js';\nimport { SettingsXSvg } from '@plumile/ui/icons/SettingsXSvg.js';\nimport { ShieldLockSvg } from '@plumile/ui/icons/ShieldLockSvg.js';\nimport { ShieldOffSvg } from '@plumile/ui/icons/ShieldOffSvg.js';\nimport { XBadgeSvg } from '@plumile/ui/icons/XBadgeSvg.js';\nimport Link from '@plumile/router/routing/Link.js';\nimport RoutingContext from '@plumile/router/routing/RoutingContext.js';\n\nimport { buildDataTableColumns } from '../components/backoffice/columns/buildDataTableColumns.js';\nimport { BackofficeEntityDetailScaffold } from '../components/backoffice/scaffolds/BackofficeEntityDetailScaffold.js';\nimport { useBackofficeEntityDetailNotFoundState } from '../components/backoffice/scaffolds/BackofficeEntityDetailNotFound.js';\nimport { BackofficeDetailBadgeRow } from '../components/backoffice/detail/BackofficeDetailBadgeRow.js';\nimport { BackofficeDetailFlagTag } from '@plumile/ui/backoffice/molecules/backoffice_detail_flag_tag/BackofficeDetailFlagTag.js';\nimport { BackofficeDetailTaggedValue } from '@plumile/ui/backoffice/molecules/backoffice_detail_tagged_value/BackofficeDetailTaggedValue.js';\nimport { BackofficeLifecycleTimelineSection } from '../components/backoffice/detail/BackofficeLifecycleTimelineSection.js';\nimport { BackofficeRelationsSummaryGrid } from '../components/backoffice/detail/BackofficeRelationsSummaryGrid.js';\nimport * as detailLayoutStyles from '../components/backoffice/detail/backofficeDetailLayout.css.js';\nimport { LazyBackofficeEntityActionFormDialog } from '../components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js';\nimport {\n resolveToastSpec,\n resolveToastViewActions,\n} from '../components/backoffice/actions/toastViewAction.js';\nimport * as pageStyles from './backofficeEntityDetailPage.css.js';\nimport { useBackofficeFormats } from '../i18n/useBackofficeFormats.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport { useBackofficeRuntimeFragment } from '../relay/typedRelayHooks.js';\nimport { useRelayEnvironment } from '../relay/useRelayEnvironment.js';\nimport {\n extractMutationPayload,\n isFormMutationAction,\n isMutationAction,\n isRouteAction,\n resolveLabel,\n} from './BackofficeEntityDetailPage.helpers.js';\nimport {\n buildFieldItems,\n renderBlocks,\n type FlagIconName,\n} from './BackofficeEntityDetailPage.view-helpers.js';\n\nexport type BackofficeEntityDetailPageProps = {\n prepared: BackofficePreparedDetailPageDataRoute;\n};\n\nconst isBackofficeRelayNode = (\n value: unknown,\n): value is { readonly __typename: string } => {\n if (value == null || typeof value !== 'object') {\n return false;\n }\n const typename = Reflect.get(value, '__typename');\n return typeof typename === 'string';\n};\n\nconst renderFlagIcon = (iconName: FlagIconName): JSX.Element => {\n const iconSize = 14;\n switch (iconName) {\n case 'shield-lock':\n return (\n <ShieldLockSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'shield-off':\n return (\n <ShieldOffSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'settings-check':\n return (\n <SettingsCheckSvg\n width={iconSize}\n height={iconSize}\n aria-hidden=\"true\"\n />\n );\n case 'settings-x':\n return (\n <SettingsXSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'x-badge':\n return (\n <XBadgeSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'chat-check':\n return (\n <ChatCheckSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'key':\n return <KeySvg width={iconSize} height={iconSize} aria-hidden=\"true\" />;\n case 'key-off':\n return (\n <KeyOffSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'lock':\n return <LockSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />;\n case 'lock-open':\n return (\n <LockOpenSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'robot-check':\n return (\n <RobotCheckSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'robot-x':\n return (\n <RobotXSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'rocket':\n return (\n <RocketSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n case 'rocket-off':\n return (\n <RocketOffSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n );\n default:\n throw new Error(`Unsupported flag icon: ${String(iconName)}`);\n }\n};\n\nconst resolveDetailPlacement = (item: {\n placement?: 'primary' | 'secondary' | 'main' | 'side' | 'fullWidth';\n presentation?: {\n group?: string;\n desktop?: 'primary' | 'secondary' | 'fullWidth';\n };\n kind?: string;\n fields?: readonly {\n presentation?: {\n group?: string;\n desktop?: 'primary' | 'secondary' | 'fullWidth';\n };\n }[];\n}): 'primary' | 'secondary' => {\n if (item.presentation?.desktop === 'secondary') {\n return 'secondary';\n }\n if (\n item.presentation?.group === 'scope' ||\n item.presentation?.group === 'status'\n ) {\n return 'secondary';\n }\n const fieldGroups =\n item.fields?.map((field) => {\n return field.presentation?.group;\n }) ?? [];\n if (\n fieldGroups.length > 0 &&\n fieldGroups.every((group) => {\n return group === 'scope' || group === 'status';\n })\n ) {\n return 'secondary';\n }\n if (item.placement === 'side') {\n return 'secondary';\n }\n if (item.placement === 'secondary') {\n return 'secondary';\n }\n return 'primary';\n};\n\nconst BackofficeEntityDetailPageContent = ({\n config,\n prepared,\n}: {\n config: BackofficeResolvedDetailPageFacetConfig;\n prepared: {\n pageQuery: PreloadedQuery<OperationType>;\n id: string;\n detailId?: string;\n pageId: string;\n pagePath: string;\n };\n}): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { formatNumber, formatCurrency, formatCurrencyTitle, formatPercent } =\n useBackofficeFormats();\n const { entities } = useBackofficeConfig();\n const routing = useContext(RoutingContext);\n const environment = useRelayEnvironment();\n const toast = useToast();\n const [actionState, setActionState] = useState<Record<string, boolean>>({});\n const [activeFormActionId, setActiveFormActionId] = useState<string | null>(\n null,\n );\n const setActionLoading = (actionId: string, isLoading: boolean) => {\n setActionState((prev) => {\n if (prev[actionId] === isLoading) {\n return prev;\n }\n return { ...prev, [actionId]: isLoading };\n });\n };\n\n const { page } = config;\n const notFound = useBackofficeEntityDetailNotFoundState({\n listHref: config.routes.list,\n });\n\n const pageQueryData = usePreloadedQuery(page.query, prepared.pageQuery);\n const pageNodeRef = page.resolveNode(pageQueryData, {\n id: prepared.id,\n detailId: prepared.detailId,\n });\n const fragmentNode = useBackofficeRuntimeFragment(page.fragment, pageNodeRef);\n const resolvedNode = isBackofficeRelayNode(fragmentNode)\n ? fragmentNode\n : null;\n return (\n <BackofficeEntityDetailScaffold\n node={resolvedNode}\n notFound={notFound}\n render={(node) => {\n const view = page.toView(node);\n const resolveEntityHref = (entityId: string, refId: string) => {\n const entityConfig = entities[entityId];\n if (entityConfig == null) {\n return null;\n }\n return entityConfig.routes.detail(refId);\n };\n const actions = page.actions ?? [];\n let headerActionButtons: ReactNode[] = [];\n if (actions.length > 0) {\n const visibleActions = actions.filter((action) => {\n if (action.isVisible == null) {\n return true;\n }\n return action.isVisible(view);\n });\n\n if (visibleActions.length > 0) {\n headerActionButtons = visibleActions.map((action) => {\n const label = resolveLabel(action.label, tApp);\n const ariaLabel =\n action.ariaLabel != null\n ? resolveLabel(action.ariaLabel, tApp)\n : label;\n const variant = action.variant ?? 'secondary';\n const size = action.size ?? 'small';\n const isLoading = actionState[action.id] ?? false;\n const isDisabled =\n isLoading || action.isDisabled?.(view) === true;\n\n if (isRouteAction(action)) {\n const href = action.to(view);\n return (\n <LinkButton\n key={action.id}\n to={href}\n variant={variant}\n size={size}\n isDisabled={isDisabled}\n aria-label={ariaLabel}\n preloadOnHover=\"code-and-data\"\n >\n {label}\n </LinkButton>\n );\n }\n\n if (isFormMutationAction(action)) {\n return (\n <Button\n key={action.id}\n type=\"button\"\n variant={variant}\n size={size}\n isLoading={false}\n disabled={isDisabled}\n onClick={() => {\n setActiveFormActionId(action.id);\n }}\n aria-label={ariaLabel}\n >\n {label}\n </Button>\n );\n }\n\n if (isMutationAction(action)) {\n const handleClick = () => {\n if (isLoading) {\n return;\n }\n const variables = action.getVariables(view);\n setActionLoading(action.id, true);\n commitMutation(environment, {\n mutation: action.mutation,\n variables,\n updater: (store) => {\n action.updater?.(store, view);\n },\n onCompleted: (response) => {\n setActionLoading(action.id, false);\n const mutationPayload = extractMutationPayload(response);\n if (mutationPayload != null) {\n let defaultErrorMessage = t(\n 'actions.form.errors.invalidPayload',\n );\n if (action.toasts?.error?.message != null) {\n defaultErrorMessage = resolveLabel(\n action.toasts.error.message,\n tApp,\n );\n } else if (action.toasts?.error?.title != null) {\n defaultErrorMessage = resolveLabel(\n action.toasts.error.title,\n tApp,\n );\n }\n\n const outcome = resolveMutationOutcome(\n mutationPayload,\n {\n defaultErrorMessage,\n mapReason: (reason) => {\n const mapped = action.mapErrorReason?.(\n reason,\n view,\n );\n if (mapped == null) {\n return null;\n }\n if (typeof mapped === 'function') {\n return resolveLabel(mapped, tApp);\n }\n return String(mapped);\n },\n },\n );\n if (!outcome.ok) {\n const error = new Error(outcome.message);\n action.onError?.(error, view);\n if (action.toasts?.error != null) {\n const toastSpec = resolveToastSpec(\n action.toasts.error,\n tApp,\n );\n toast.error(toastSpec.title, toastSpec.message);\n }\n return;\n }\n }\n\n action.onCompleted?.(response, view);\n if (action.toasts?.success != null) {\n const toastSpec = resolveToastSpec(\n action.toasts.success,\n tApp,\n );\n const toastActions = resolveToastViewActions({\n toast: action.toasts.success,\n response,\n node: view,\n tApp,\n entities,\n defaultLabel: t('actions.view'),\n navigateTo: (to) => {\n routing?.history.push({ pathname: to });\n },\n });\n toast.push({\n kind: 'info',\n title: toastSpec.title,\n message: toastSpec.message,\n actions: toastActions,\n });\n }\n },\n onError: (error) => {\n setActionLoading(action.id, false);\n action.onError?.(error, view);\n if (action.toasts?.error != null) {\n const toastSpec = resolveToastSpec(\n action.toasts.error,\n tApp,\n );\n toast.error(toastSpec.title, toastSpec.message);\n }\n },\n });\n };\n\n return (\n <Button\n key={action.id}\n type=\"button\"\n variant={variant}\n size={size}\n isLoading={isLoading}\n disabled={isDisabled}\n onClick={handleClick}\n aria-label={ariaLabel}\n >\n {label}\n </Button>\n );\n }\n\n return null;\n });\n }\n }\n\n const activeFormAction = actions.find((action) => {\n return action.id === activeFormActionId;\n });\n\n const { content } = page;\n\n const primaryNodes: ReactNode[] = [];\n const secondaryNodes: ReactNode[] = [];\n content.forEach((item, index) => {\n const placement = resolveDetailPlacement(item);\n const targetNodes =\n placement === 'secondary' ? secondaryNodes : primaryNodes;\n\n if (item.kind === 'fieldSet') {\n const sectionLabel = resolveLabel(item.title, tApp);\n const description =\n item.description != null\n ? resolveLabel(item.description, tApp)\n : undefined;\n const { items, customNodes } = buildFieldItems(item.fields, view, {\n tApp,\n t,\n resolveEntityHref,\n formatNumber,\n formatCurrency,\n formatCurrencyTitle,\n formatPercent,\n renderTag: (tone, label) => {\n return <Tag tone={tone}>{label}</Tag>;\n },\n renderBadgeRow: (items) => {\n return <BackofficeDetailBadgeRow items={items} />;\n },\n renderDate: (value, fallback) => {\n return (\n <FormattedDate\n value={value}\n options={BACKOFFICE_DATE_TIME_OPTIONS}\n fallback={fallback}\n />\n );\n },\n renderFlagTag: (tag) => {\n return (\n <BackofficeDetailFlagTag\n tone={tag.tone}\n icon={\n tag.iconName != null\n ? renderFlagIcon(tag.iconName)\n : undefined\n }\n label={tag.label}\n />\n );\n },\n renderLink: (href, label) => {\n return (\n <Link to={href} preloadOnHover=\"code-and-data\">\n {label}\n </Link>\n );\n },\n renderTaggedValue: (tag, value) => {\n return <BackofficeDetailTaggedValue tag={tag} value={value} />;\n },\n wrapCustomNode: (id, custom) => {\n return <div key={id}>{custom}</div>;\n },\n });\n\n const hasContent = items.length > 0 || customNodes.length > 0;\n\n if (!hasContent) {\n return;\n }\n\n targetNodes.push(\n <BackofficeDetailSection\n key={`${sectionLabel}-${index}`}\n title={sectionLabel}\n description={description}\n items={items.length > 0 ? items : undefined}\n >\n {customNodes}\n </BackofficeDetailSection>,\n );\n return;\n }\n\n const rendered = renderBlocks([item], view, {\n tApp,\n t,\n resolveEntityHref,\n keyPrefix: String(index),\n renderLink: (href, label) => {\n return (\n <Link to={href} preloadOnHover=\"code-and-data\">\n {label}\n </Link>\n );\n },\n renderDate: (value, fallback) => {\n return (\n <FormattedDate\n value={value}\n options={BACKOFFICE_DATE_TIME_OPTIONS}\n fallback={fallback}\n />\n );\n },\n renderTag: (tone, label) => {\n return <Tag tone={tone}>{label}</Tag>;\n },\n renderMetricGroup: ({\n key,\n title,\n description,\n density,\n items,\n }) => {\n return (\n <BackofficeDetailSection\n key={key}\n title={title}\n description={description}\n >\n {items.length > 0 && (\n <MetricTileGroup\n density={density ?? 'comfortable'}\n minColumn=\"180\"\n >\n {items.map((metric) => {\n return (\n <MetricCard\n key={metric.id}\n label={metric.label}\n value={metric.value}\n hint={metric.hint}\n tone={metric.tone ?? 'neutral'}\n density={density ?? 'comfortable'}\n copyValue={metric.copyValue}\n copyLabel={t('common.actions.copy')}\n copiedLabel={t('common.actions.copied')}\n />\n );\n })}\n </MetricTileGroup>\n )}\n </BackofficeDetailSection>\n );\n },\n renderTimeline: ({ key, title, description, events }) => {\n return (\n <BackofficeLifecycleTimelineSection\n key={key}\n title={title}\n description={description}\n events={events}\n />\n );\n },\n renderAuditTimeline: ({ key, title, description, events }) => {\n return (\n <BackofficeDetailSection\n key={key}\n title={title}\n description={description}\n >\n <AuditTimeline events={events} />\n </BackofficeDetailSection>\n );\n },\n renderRelations: ({ key, title, items }) => {\n return (\n <BackofficeRelationsSummaryGrid\n key={key}\n title={title}\n items={items}\n />\n );\n },\n renderContextStack: ({ key, title, items }) => {\n return (\n <BackofficeScopeStack key={key} title={title} items={items} />\n );\n },\n renderCustomSection: (key, title, child) => {\n return (\n <BackofficeDetailSection key={key} title={title}>\n {child}\n </BackofficeDetailSection>\n );\n },\n wrapCustomNode: (key, custom) => {\n return <div key={key}>{custom}</div>;\n },\n resolveTableColumns: (columns) => {\n return buildDataTableColumns(columns, {\n tApp,\n t,\n });\n },\n renderTable: ({ key, title, description, columns, rows }) => {\n return (\n <BackofficeDetailSection\n key={key}\n title={title}\n description={description}\n >\n <DataTable\n columns={columns}\n rows={rows}\n getRowId={(row, rowIndex) => {\n if (row != null && typeof row === 'object') {\n const record = row as Record<string, unknown>;\n const maybeId = record.id;\n if (\n typeof maybeId === 'string' &&\n maybeId.trim() !== ''\n ) {\n return maybeId;\n }\n }\n return String(rowIndex);\n }}\n />\n </BackofficeDetailSection>\n );\n },\n renderPayload: ({ key, title, description, content, format }) => {\n return (\n <BackofficeDetailSection\n key={key}\n title={title}\n description={description}\n >\n <BackofficePayloadViewer\n content={content}\n format={format}\n emptyState={t('common.notAvailable')}\n />\n </BackofficeDetailSection>\n );\n },\n renderKeyValueListSection: ({ key, title, description, items }) => {\n return (\n <BackofficeDetailSection\n key={key}\n title={title}\n description={description}\n >\n <BackofficeKeyValueList items={items} />\n </BackofficeDetailSection>\n );\n },\n });\n const blockNode = rendered[0];\n if (blockNode != null) {\n targetNodes.push(blockNode);\n }\n });\n\n const tabActionsNode =\n headerActionButtons.length > 0 ? (\n <div className={pageStyles.headerActions}>\n <div className={pageStyles.headerActionGroup}>\n {headerActionButtons}\n </div>\n </div>\n ) : null;\n\n const hasAside = secondaryNodes.length > 0;\n const contentNode = hasAside ? (\n <div className={detailLayoutStyles.layout}>\n <div className={detailLayoutStyles.primary}>{primaryNodes}</div>\n <aside className={detailLayoutStyles.secondary}>\n {secondaryNodes}\n </aside>\n </div>\n ) : (\n <div className={detailLayoutStyles.stacked}>{primaryNodes}</div>\n );\n\n return (\n <>\n {tabActionsNode}\n {contentNode}\n {activeFormAction != null &&\n isFormMutationAction(activeFormAction) && (\n <LazyBackofficeEntityActionFormDialog\n isOpen\n action={activeFormAction}\n node={view}\n onClose={() => {\n setActiveFormActionId(null);\n }}\n />\n )}\n </>\n );\n }}\n />\n );\n};\n\nexport const BackofficeEntityDetailPage = ({\n prepared,\n}: BackofficeEntityDetailPageProps): JSX.Element => {\n return (\n <BackofficeEntityDetailPageContent\n config={prepared.pageConfig}\n prepared={prepared}\n />\n );\n};\n\nexport default BackofficeEntityDetailPage;\n"],"mappings":"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"}