@plumile/backoffice-react 0.1.108 → 0.1.112

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 (319) hide show
  1. package/lib/esm/auth/AuthRefreshNotice.js +2 -2
  2. package/lib/esm/auth/AuthRefreshNotice.js.map +1 -1
  3. package/lib/esm/auth/authRefreshNotice.css.js +1 -0
  4. package/lib/esm/auth/authRefreshNotice.css.js.map +1 -1
  5. package/lib/esm/auth/login/EmailCapturePanel.js +12 -9
  6. package/lib/esm/auth/login/EmailCapturePanel.js.map +1 -1
  7. package/lib/esm/auth/login/LoginFlow.js +10 -10
  8. package/lib/esm/auth/login/LoginFlow.js.map +1 -1
  9. package/lib/esm/auth/login/MethodChooser.js +14 -12
  10. package/lib/esm/auth/login/MethodChooser.js.map +1 -1
  11. package/lib/esm/auth/login/MfaChallengeForm.js +13 -10
  12. package/lib/esm/auth/login/MfaChallengeForm.js.map +1 -1
  13. package/lib/esm/auth/login/OidcButtons.js +4 -4
  14. package/lib/esm/auth/login/OidcButtons.js.map +1 -1
  15. package/lib/esm/auth/login/PasskeyLoginForm.js +13 -10
  16. package/lib/esm/auth/login/PasskeyLoginForm.js.map +1 -1
  17. package/lib/esm/auth/login/PasswordLoginPanel.js +8 -8
  18. package/lib/esm/auth/login/PasswordLoginPanel.js.map +1 -1
  19. package/lib/esm/auth/login/loginPage.css.js.map +1 -1
  20. package/lib/esm/auth/pages/AcceptInvitationScreen.js +18 -14
  21. package/lib/esm/auth/pages/AcceptInvitationScreen.js.map +1 -1
  22. package/lib/esm/auth/pages/PasswordResetCompleteScreen.js +16 -12
  23. package/lib/esm/auth/pages/PasswordResetCompleteScreen.js.map +1 -1
  24. package/lib/esm/auth/pages/PasswordResetRequestScreen.js +15 -11
  25. package/lib/esm/auth/pages/PasswordResetRequestScreen.js.map +1 -1
  26. package/lib/esm/auth/pages/VerifyEmailScreen.js +13 -11
  27. package/lib/esm/auth/pages/VerifyEmailScreen.js.map +1 -1
  28. package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js +66 -54
  29. package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js.map +1 -1
  30. package/lib/esm/components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js +8 -8
  31. package/lib/esm/components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js.map +1 -1
  32. package/lib/esm/components/backoffice/actions/backofficeEntityActionFormDialog.css.js.map +1 -1
  33. package/lib/esm/components/backoffice/actions/toastViewAction.js.map +1 -1
  34. package/lib/esm/components/backoffice/columns/buildDataTableColumns.js +13 -12
  35. package/lib/esm/components/backoffice/columns/buildDataTableColumns.js.map +1 -1
  36. package/lib/esm/components/backoffice/detail/BackofficeCopyButton.js +3 -3
  37. package/lib/esm/components/backoffice/detail/BackofficeCopyButton.js.map +1 -1
  38. package/lib/esm/components/backoffice/detail/BackofficeDetailBadgeRow.js +8 -8
  39. package/lib/esm/components/backoffice/detail/BackofficeDetailBadgeRow.js.map +1 -1
  40. package/lib/esm/components/backoffice/detail/BackofficeDetailErrorList.js +12 -11
  41. package/lib/esm/components/backoffice/detail/BackofficeDetailErrorList.js.map +1 -1
  42. package/lib/esm/components/backoffice/detail/BackofficeDetailField.js +8 -7
  43. package/lib/esm/components/backoffice/detail/BackofficeDetailField.js.map +1 -1
  44. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.css.js.map +1 -1
  45. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.js +6 -6
  46. package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.js.map +1 -1
  47. package/lib/esm/components/backoffice/detail/BackofficeDetailHeader.js +3 -3
  48. package/lib/esm/components/backoffice/detail/BackofficeDetailHeader.js.map +1 -1
  49. package/lib/esm/components/backoffice/detail/BackofficeDetailPage.js +3 -3
  50. package/lib/esm/components/backoffice/detail/BackofficeDetailPage.js.map +1 -1
  51. package/lib/esm/components/backoffice/detail/BackofficeDetailPayload.js +4 -4
  52. package/lib/esm/components/backoffice/detail/BackofficeDetailPayload.js.map +1 -1
  53. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationLink.js +1 -1
  54. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationLink.js.map +1 -1
  55. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js +30 -29
  56. package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js.map +1 -1
  57. package/lib/esm/components/backoffice/detail/BackofficeDetailTable.js +3 -3
  58. package/lib/esm/components/backoffice/detail/BackofficeDetailTable.js.map +1 -1
  59. package/lib/esm/components/backoffice/detail/BackofficeDetailTaggedValue.js +5 -5
  60. package/lib/esm/components/backoffice/detail/BackofficeDetailTaggedValue.js.map +1 -1
  61. package/lib/esm/components/backoffice/detail/BackofficeEntitySummaryHeader.js +21 -19
  62. package/lib/esm/components/backoffice/detail/BackofficeEntitySummaryHeader.js.map +1 -1
  63. package/lib/esm/components/backoffice/detail/BackofficeKpiStrip.js +9 -6
  64. package/lib/esm/components/backoffice/detail/BackofficeKpiStrip.js.map +1 -1
  65. package/lib/esm/components/backoffice/detail/BackofficeLifecycleTimelineSection.js +7 -7
  66. package/lib/esm/components/backoffice/detail/BackofficeLifecycleTimelineSection.js.map +1 -1
  67. package/lib/esm/components/backoffice/detail/BackofficePayloadInspectorSection.js +8 -8
  68. package/lib/esm/components/backoffice/detail/BackofficePayloadInspectorSection.js.map +1 -1
  69. package/lib/esm/components/backoffice/detail/BackofficeReferenceValue.js +5 -5
  70. package/lib/esm/components/backoffice/detail/BackofficeReferenceValue.js.map +1 -1
  71. package/lib/esm/components/backoffice/detail/BackofficeRelationsSummaryGrid.js +1 -1
  72. package/lib/esm/components/backoffice/detail/BackofficeRelationsSummaryGrid.js.map +1 -1
  73. package/lib/esm/components/backoffice/detail/BackofficeStatusMetaBadge.js +4 -4
  74. package/lib/esm/components/backoffice/detail/BackofficeStatusMetaBadge.js.map +1 -1
  75. package/lib/esm/components/backoffice/detail/BackofficeUsageCostBreakdown.js +1 -1
  76. package/lib/esm/components/backoffice/detail/BackofficeUsageCostBreakdown.js.map +1 -1
  77. package/lib/esm/components/backoffice/detail/backofficeAuditMetadataPanel.css.js.map +1 -1
  78. package/lib/esm/components/backoffice/detail/backofficeDetailBadgeRow.css.js.map +1 -1
  79. package/lib/esm/components/backoffice/detail/backofficeDetailErrorList.css.js.map +1 -1
  80. package/lib/esm/components/backoffice/detail/backofficeDetailField.css.js.map +1 -1
  81. package/lib/esm/components/backoffice/detail/backofficeDetailLayout.css.js.map +1 -1
  82. package/lib/esm/components/backoffice/detail/backofficeDetailRelationLink.css.js.map +1 -1
  83. package/lib/esm/components/backoffice/detail/backofficeDetailRelationList.css.js.map +1 -1
  84. package/lib/esm/components/backoffice/detail/backofficeDetailSection.css.js.map +1 -1
  85. package/lib/esm/components/backoffice/detail/backofficeDetailTaggedValue.css.js.map +1 -1
  86. package/lib/esm/components/backoffice/detail/backofficeEntitySummaryHeader.css.js.map +1 -1
  87. package/lib/esm/components/backoffice/detail/backofficeKpiStrip.css.js.map +1 -1
  88. package/lib/esm/components/backoffice/detail/backofficeLifecycleTimelineSection.css.js.map +1 -1
  89. package/lib/esm/components/backoffice/detail/backofficePayloadInspectorSection.css.js.map +1 -1
  90. package/lib/esm/components/backoffice/detail/backofficeReferenceValue.css.js.map +1 -1
  91. package/lib/esm/components/backoffice/detail/backofficeRelationsSummaryGrid.css.js.map +1 -1
  92. package/lib/esm/components/backoffice/detail/backofficeScopeStack.css.js.map +1 -1
  93. package/lib/esm/components/backoffice/detail/backofficeStatusMetaBadge.css.js.map +1 -1
  94. package/lib/esm/components/backoffice/detail/backofficeUsageCostBreakdown.css.js.map +1 -1
  95. package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js +12 -12
  96. package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js.map +1 -1
  97. package/lib/esm/components/backoffice/filters/DeferredFilterSearchInput.js +11 -9
  98. package/lib/esm/components/backoffice/filters/DeferredFilterSearchInput.js.map +1 -1
  99. package/lib/esm/components/backoffice/filters/EntityFilterValue.js +16 -8
  100. package/lib/esm/components/backoffice/filters/EntityFilterValue.js.map +1 -1
  101. package/lib/esm/components/backoffice/filters/EntityIdFilterField.js +86 -53
  102. package/lib/esm/components/backoffice/filters/EntityIdFilterField.js.map +1 -1
  103. package/lib/esm/components/backoffice/filters/backofficeFilterAction.css.js.map +1 -1
  104. package/lib/esm/components/backoffice/filters/deferredFilterSearchInput.css.js.map +1 -1
  105. package/lib/esm/components/backoffice/filters/entityIdFilterField.css.js +2 -2
  106. package/lib/esm/components/backoffice/filters/entityIdFilterField.css.js.map +1 -1
  107. package/lib/esm/components/backoffice/hub/BackofficeHubTemplate.js +25 -23
  108. package/lib/esm/components/backoffice/hub/BackofficeHubTemplate.js.map +1 -1
  109. package/lib/esm/components/backoffice/hub/backofficeHubTemplate.css.js.map +1 -1
  110. package/lib/esm/components/backoffice/layout/backofficeSidebarActions.css.js.map +1 -1
  111. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js +14 -14
  112. package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js.map +1 -1
  113. package/lib/esm/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.js.map +1 -1
  114. package/lib/esm/components/backoffice/layout/buildSidebarSections.js +42 -37
  115. package/lib/esm/components/backoffice/layout/buildSidebarSections.js.map +1 -1
  116. package/lib/esm/components/backoffice/layout/mapViewerToSidebarProfileView.js.map +1 -1
  117. package/lib/esm/components/backoffice/links/BackofficeInlineLink.js +1 -1
  118. package/lib/esm/components/backoffice/links/BackofficeInlineLink.js.map +1 -1
  119. package/lib/esm/components/backoffice/links/BackofficeLink.js +1 -1
  120. package/lib/esm/components/backoffice/links/BackofficeLink.js.map +1 -1
  121. package/lib/esm/components/backoffice/links/backofficeLink.css.js.map +1 -1
  122. package/lib/esm/components/backoffice/lists/BackofficeListToolbar.js +1 -1
  123. package/lib/esm/components/backoffice/lists/BackofficeListToolbar.js.map +1 -1
  124. package/lib/esm/components/backoffice/lists/backofficeListToolbar.css.js.map +1 -1
  125. package/lib/esm/components/backoffice/overview/BackofficeOverviewLayout.js +1 -1
  126. package/lib/esm/components/backoffice/overview/BackofficeOverviewLayout.js.map +1 -1
  127. package/lib/esm/components/backoffice/overview/backofficeOverviewLayout.css.js.map +1 -1
  128. package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js +31 -27
  129. package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js.map +1 -1
  130. package/lib/esm/components/backoffice/pickers/entityIdPickerDialog.css.js +2 -2
  131. package/lib/esm/components/backoffice/pickers/entityIdPickerDialog.css.js.map +1 -1
  132. package/lib/esm/components/backoffice/pickers/shared/EntityPickerList.js +26 -20
  133. package/lib/esm/components/backoffice/pickers/shared/EntityPickerList.js.map +1 -1
  134. package/lib/esm/components/backoffice/pickers/shared/EntityPickerShell.js +4 -4
  135. package/lib/esm/components/backoffice/pickers/shared/EntityPickerShell.js.map +1 -1
  136. package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js +1 -1
  137. package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js.map +1 -1
  138. package/lib/esm/components/backoffice/refs/backofficeEntityIdRef.css.js.map +1 -1
  139. package/lib/esm/components/backoffice/refs/backofficeRelatedCountLink.css.js.map +1 -1
  140. package/lib/esm/components/backoffice/routing/BackofficeContentError.js +6 -5
  141. package/lib/esm/components/backoffice/routing/BackofficeContentError.js.map +1 -1
  142. package/lib/esm/components/backoffice/routing/BackofficeContentFallback.js +10 -10
  143. package/lib/esm/components/backoffice/routing/BackofficeContentFallback.js.map +1 -1
  144. package/lib/esm/components/backoffice/routing/BackofficeRouteFallback.js +10 -10
  145. package/lib/esm/components/backoffice/routing/BackofficeRouteFallback.js.map +1 -1
  146. package/lib/esm/components/backoffice/routing/backofficeContentBoundary.css.js.map +1 -1
  147. package/lib/esm/components/backoffice/routing/backofficeContentError.css.js.map +1 -1
  148. package/lib/esm/components/backoffice/routing/backofficeContentFallback.css.js.map +1 -1
  149. package/lib/esm/components/backoffice/routing/backofficeRouteFallback.css.js.map +1 -1
  150. package/lib/esm/components/backoffice/routing/backofficeRoutePendingBar.css.js.map +1 -1
  151. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.js +3 -3
  152. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.js.map +1 -1
  153. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js +198 -181
  154. package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js.map +1 -1
  155. package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js +6 -5
  156. package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js.map +1 -1
  157. package/lib/esm/components/backoffice/scaffolds/backofficeEntityListScaffold.css.js.map +1 -1
  158. package/lib/esm/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.js.map +1 -1
  159. package/lib/esm/components/backoffice/shared/BackofficeFilterableCell.js +10 -9
  160. package/lib/esm/components/backoffice/shared/BackofficeFilterableCell.js.map +1 -1
  161. package/lib/esm/components/backoffice/shared/BackofficeInlineFilterRow.js +1 -1
  162. package/lib/esm/components/backoffice/shared/BackofficeInlineFilterRow.js.map +1 -1
  163. package/lib/esm/components/backoffice/shared/backofficeFilterableCell.css.js.map +1 -1
  164. package/lib/esm/components/backoffice/shared/backofficeInlineFilterRow.css.js.map +1 -1
  165. package/lib/esm/components/backoffice/tools/BackofficeToolsDocPanel.js +11 -9
  166. package/lib/esm/components/backoffice/tools/BackofficeToolsDocPanel.js.map +1 -1
  167. package/lib/esm/components/backoffice/tools/BackofficeToolsErrorFallback.js +7 -7
  168. package/lib/esm/components/backoffice/tools/BackofficeToolsErrorFallback.js.map +1 -1
  169. package/lib/esm/components/backoffice/tools/BackofficeToolsJsonForm.js +17 -12
  170. package/lib/esm/components/backoffice/tools/BackofficeToolsJsonForm.js.map +1 -1
  171. package/lib/esm/components/backoffice/tools/BackofficeToolsQueryBoundary.js +10 -10
  172. package/lib/esm/components/backoffice/tools/BackofficeToolsQueryBoundary.js.map +1 -1
  173. package/lib/esm/components/backoffice/tools/backofficeToolsDocPanel.css.js.map +1 -1
  174. package/lib/esm/components/backoffice/tools/backofficeToolsForm.css.js.map +1 -1
  175. package/lib/esm/components/backoffice/tools/backofficeToolsJsonForm.css.js.map +1 -1
  176. package/lib/esm/hooks/useBackofficeListUrlState.js +2 -1
  177. package/lib/esm/hooks/useBackofficeListUrlState.js.map +1 -1
  178. package/lib/esm/pages/BackofficeAcceptInvitationPage.js +1 -1
  179. package/lib/esm/pages/BackofficeAcceptInvitationPage.js.map +1 -1
  180. package/lib/esm/pages/BackofficeDashboardPage.js +72 -68
  181. package/lib/esm/pages/BackofficeDashboardPage.js.map +1 -1
  182. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js +1 -1
  183. package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js.map +1 -1
  184. package/lib/esm/pages/BackofficeEntityDetailPage.js +207 -184
  185. package/lib/esm/pages/BackofficeEntityDetailPage.js.map +1 -1
  186. package/lib/esm/pages/BackofficeEntityDetailUnknownPageRedirect.js +1 -1
  187. package/lib/esm/pages/BackofficeEntityDetailUnknownPageRedirect.js.map +1 -1
  188. package/lib/esm/pages/BackofficeEntityListPage.helpers.js.map +1 -1
  189. package/lib/esm/pages/BackofficeEntityListPage.js +143 -139
  190. package/lib/esm/pages/BackofficeEntityListPage.js.map +1 -1
  191. package/lib/esm/pages/BackofficeHubPage.js +10 -9
  192. package/lib/esm/pages/BackofficeHubPage.js.map +1 -1
  193. package/lib/esm/pages/BackofficeLayoutPage.js +44 -39
  194. package/lib/esm/pages/BackofficeLayoutPage.js.map +1 -1
  195. package/lib/esm/pages/BackofficeLoginPage.js +1 -1
  196. package/lib/esm/pages/BackofficeLoginPage.js.map +1 -1
  197. package/lib/esm/pages/BackofficePasswordResetCompletePage.js +1 -1
  198. package/lib/esm/pages/BackofficePasswordResetCompletePage.js.map +1 -1
  199. package/lib/esm/pages/BackofficeVerifyEmailPage.js +1 -1
  200. package/lib/esm/pages/BackofficeVerifyEmailPage.js.map +1 -1
  201. package/lib/esm/pages/backofficeDashboardPage.css.js.map +1 -1
  202. package/lib/esm/pages/backofficeEntityDetailPage.css.js.map +1 -1
  203. package/lib/esm/pages/backofficeEntityListPage.css.js.map +1 -1
  204. package/lib/esm/pages/dashboard/DashboardMetricGroup.js +10 -9
  205. package/lib/esm/pages/dashboard/DashboardMetricGroup.js.map +1 -1
  206. package/lib/esm/pages/dashboard/DashboardPanel.js +3 -3
  207. package/lib/esm/pages/dashboard/DashboardPanel.js.map +1 -1
  208. package/lib/esm/pages/dashboard/DashboardQuickActions.js +2 -2
  209. package/lib/esm/pages/dashboard/DashboardQuickActions.js.map +1 -1
  210. package/lib/esm/pages/dashboard/DashboardStatusList.js +1 -1
  211. package/lib/esm/pages/dashboard/DashboardStatusList.js.map +1 -1
  212. package/lib/esm/pages/dashboard/dashboardMetricGroup.css.js.map +1 -1
  213. package/lib/esm/pages/dashboard/dashboardPanel.css.js.map +1 -1
  214. package/lib/esm/pages/dashboard/dashboardQuickActions.css.js.map +1 -1
  215. package/lib/esm/pages/dashboard/dashboardStatusList.css.js.map +1 -1
  216. package/lib/esm/pages/detail/buildTabsItems.js.map +1 -1
  217. package/lib/esm/provider/BackofficeProvider.js +22 -20
  218. package/lib/esm/provider/BackofficeProvider.js.map +1 -1
  219. package/lib/esm/router/createBackofficeRoutes.js +33 -30
  220. package/lib/esm/router/createBackofficeRoutes.js.map +1 -1
  221. package/lib/esm/storybook/relay/RelayStory.css.js.map +1 -1
  222. package/lib/esm/style.css +1 -1
  223. package/lib/types/auth/AuthFlows.stories.d.ts +19 -0
  224. package/lib/types/auth/AuthFlows.stories.d.ts.map +1 -0
  225. package/lib/types/auth/AuthRefreshNotice.d.ts +1 -1
  226. package/lib/types/auth/AuthRefreshNotice.d.ts.map +1 -1
  227. package/lib/types/auth/authRefreshNotice.css.d.ts.map +1 -1
  228. package/lib/types/auth/login/EmailCapturePanel.d.ts.map +1 -1
  229. package/lib/types/auth/login/MethodChooser.d.ts.map +1 -1
  230. package/lib/types/auth/login/MfaChallengeForm.d.ts.map +1 -1
  231. package/lib/types/auth/login/PasskeyLoginForm.d.ts.map +1 -1
  232. package/lib/types/auth/login/PasswordLoginPanel.d.ts +1 -1
  233. package/lib/types/auth/login/PasswordLoginPanel.d.ts.map +1 -1
  234. package/lib/types/auth/login/loginPage.css.d.ts.map +1 -1
  235. package/lib/types/auth/pages/AcceptInvitationScreen.d.ts.map +1 -1
  236. package/lib/types/auth/pages/PasswordResetCompleteScreen.d.ts.map +1 -1
  237. package/lib/types/auth/pages/PasswordResetRequestScreen.d.ts.map +1 -1
  238. package/lib/types/auth/pages/VerifyEmailScreen.d.ts.map +1 -1
  239. package/lib/types/components/backoffice/actions/BackofficeEntityActionFormDialog.d.ts.map +1 -1
  240. package/lib/types/components/backoffice/actions/toastViewAction.d.ts +1 -1
  241. package/lib/types/components/backoffice/actions/toastViewAction.d.ts.map +1 -1
  242. package/lib/types/components/backoffice/columns/buildDataTableColumns.d.ts +1 -1
  243. package/lib/types/components/backoffice/columns/buildDataTableColumns.d.ts.map +1 -1
  244. package/lib/types/components/backoffice/detail/BackofficeCopyButton.d.ts +1 -1
  245. package/lib/types/components/backoffice/detail/BackofficeCopyButton.d.ts.map +1 -1
  246. package/lib/types/components/backoffice/detail/BackofficeDetailErrorList.d.ts.map +1 -1
  247. package/lib/types/components/backoffice/detail/BackofficeDetailField.d.ts.map +1 -1
  248. package/lib/types/components/backoffice/detail/BackofficeDetailFlagTag.d.ts +1 -1
  249. package/lib/types/components/backoffice/detail/BackofficeDetailFlagTag.d.ts.map +1 -1
  250. package/lib/types/components/backoffice/detail/BackofficeDetailPrimitives.stories.d.ts +17 -0
  251. package/lib/types/components/backoffice/detail/BackofficeDetailPrimitives.stories.d.ts.map +1 -0
  252. package/lib/types/components/backoffice/detail/BackofficeDetailRelationListBlock.d.ts.map +1 -1
  253. package/lib/types/components/backoffice/detail/BackofficeDetailTable.d.ts +1 -1
  254. package/lib/types/components/backoffice/detail/BackofficeDetailTable.d.ts.map +1 -1
  255. package/lib/types/components/backoffice/detail/BackofficeEntitySummaryHeader.d.ts.map +1 -1
  256. package/lib/types/components/backoffice/detail/BackofficeKpiStrip.d.ts.map +1 -1
  257. package/lib/types/components/backoffice/detail/backofficeDetailRelationLink.css.d.ts.map +1 -1
  258. package/lib/types/components/backoffice/filters/DeferredFilterSearchInput.d.ts.map +1 -1
  259. package/lib/types/components/backoffice/filters/EntityFilterValue.d.ts +5 -1
  260. package/lib/types/components/backoffice/filters/EntityFilterValue.d.ts.map +1 -1
  261. package/lib/types/components/backoffice/filters/EntityIdFilterField.d.ts +1 -0
  262. package/lib/types/components/backoffice/filters/EntityIdFilterField.d.ts.map +1 -1
  263. package/lib/types/components/backoffice/filters/backofficeFilterAction.css.d.ts.map +1 -1
  264. package/lib/types/components/backoffice/filters/entityIdFilterField.css.d.ts +5 -2
  265. package/lib/types/components/backoffice/filters/entityIdFilterField.css.d.ts.map +1 -1
  266. package/lib/types/components/backoffice/hub/BackofficeHubTemplate.d.ts.map +1 -1
  267. package/lib/types/components/backoffice/hub/BackofficeHubTemplate.stories.d.ts +48 -0
  268. package/lib/types/components/backoffice/hub/BackofficeHubTemplate.stories.d.ts.map +1 -0
  269. package/lib/types/components/backoffice/hub/backofficeHubTemplate.css.d.ts.map +1 -1
  270. package/lib/types/components/backoffice/layout/backofficeSidebarActions.css.d.ts.map +1 -1
  271. package/lib/types/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.d.ts.map +1 -1
  272. package/lib/types/components/backoffice/layout/buildSidebarSections.d.ts +1 -1
  273. package/lib/types/components/backoffice/layout/buildSidebarSections.d.ts.map +1 -1
  274. package/lib/types/components/backoffice/layout/mapViewerToSidebarProfileView.d.ts +1 -1
  275. package/lib/types/components/backoffice/layout/mapViewerToSidebarProfileView.d.ts.map +1 -1
  276. package/lib/types/components/backoffice/lists/BackofficeListToolbar.stories.d.ts +13 -0
  277. package/lib/types/components/backoffice/lists/BackofficeListToolbar.stories.d.ts.map +1 -0
  278. package/lib/types/components/backoffice/overview/BackofficeOverviewLayout.stories.d.ts.map +1 -1
  279. package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.d.ts.map +1 -1
  280. package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.stories.d.ts +11 -0
  281. package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.stories.d.ts.map +1 -0
  282. package/lib/types/components/backoffice/pickers/entityIdPickerDialog.css.d.ts +2 -0
  283. package/lib/types/components/backoffice/pickers/entityIdPickerDialog.css.d.ts.map +1 -1
  284. package/lib/types/components/backoffice/pickers/shared/EntityPickerList.d.ts.map +1 -1
  285. package/lib/types/components/backoffice/refs/backofficeRelatedCountLink.css.d.ts.map +1 -1
  286. package/lib/types/components/backoffice/routing/BackofficeContentError.d.ts.map +1 -1
  287. package/lib/types/components/backoffice/routing/backofficeRoutePendingBar.css.d.ts.map +1 -1
  288. package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts +1 -1
  289. package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts.map +1 -1
  290. package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.d.ts +1 -1
  291. package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.d.ts.map +1 -1
  292. package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.stories.d.ts.map +1 -1
  293. package/lib/types/components/backoffice/shared/BackofficeFilterableCell.d.ts.map +1 -1
  294. package/lib/types/components/backoffice/shared/backofficeFilterableCell.css.d.ts.map +1 -1
  295. package/lib/types/components/backoffice/tools/BackofficeTools.stories.d.ts +17 -0
  296. package/lib/types/components/backoffice/tools/BackofficeTools.stories.d.ts.map +1 -0
  297. package/lib/types/components/backoffice/tools/BackofficeToolsDocPanel.d.ts.map +1 -1
  298. package/lib/types/components/backoffice/tools/BackofficeToolsJsonForm.d.ts.map +1 -1
  299. package/lib/types/components/backoffice/tools/backofficeToolsDocPanel.css.d.ts.map +1 -1
  300. package/lib/types/hooks/useBackofficeListUrlState.d.ts.map +1 -1
  301. package/lib/types/pages/BackofficeEntityDetailPage.d.ts.map +1 -1
  302. package/lib/types/pages/BackofficeEntityListPage.helpers.d.ts +2 -1
  303. package/lib/types/pages/BackofficeEntityListPage.helpers.d.ts.map +1 -1
  304. package/lib/types/pages/BackofficeHubPage.d.ts.map +1 -1
  305. package/lib/types/pages/BackofficeLayoutPage.d.ts.map +1 -1
  306. package/lib/types/pages/backofficeEntityDetailPage.css.d.ts.map +1 -1
  307. package/lib/types/pages/dashboard/DashboardMetricGroup.d.ts.map +1 -1
  308. package/lib/types/pages/dashboard/dashboardMetricGroup.css.d.ts.map +1 -1
  309. package/lib/types/pages/dashboard/dashboardPanel.css.d.ts.map +1 -1
  310. package/lib/types/pages/dashboard/dashboardQuickActions.css.d.ts.map +1 -1
  311. package/lib/types/pages/dashboard/dashboardStatusList.css.d.ts.map +1 -1
  312. package/lib/types/pages/detail/buildTabsItems.d.ts +1 -1
  313. package/lib/types/pages/detail/buildTabsItems.d.ts.map +1 -1
  314. package/lib/types/provider/BackofficeProvider.d.ts.map +1 -1
  315. package/lib/types/provider/types.d.ts +2 -1
  316. package/lib/types/provider/types.d.ts.map +1 -1
  317. package/lib/types/router/createBackofficeRoutes.d.ts +2 -1
  318. package/lib/types/router/createBackofficeRoutes.d.ts.map +1 -1
  319. package/package.json +14 -10
@@ -12,15 +12,19 @@ import { useBackofficeListUrlState as u } from "../hooks/useBackofficeListUrlSta
12
12
  import { buildActionsColumn as d, computeActionsColumnWidthPx as f, computeRowFlagsColumnWidthPx as p, isConnectionListConfig as m, isFormMutationAction as h, isRecordListConfig as g, isRouteAction as ee, resolveActionVariant as te, resolveLabel as _, resolveTrackBySize as v } from "./BackofficeEntityListPage.helpers.js";
13
13
  import { actionTrigger as ne, actionsColumnCell as re, headerActions as ie } from "./backofficeEntityListPage.css.js";
14
14
  import { useCallback as y, useEffect as b, useMemo as x, useRef as S, useState as C } from "react";
15
- import { Button as w, EyeSvg as ae, InlineBanner as oe, LinkButton as T, TableCell as se } from "@plumile/ui";
16
- import { Fragment as E, jsx as D, jsxs as ce } from "react/jsx-runtime";
17
- import { useTranslation as O } from "react-i18next";
18
- import { fetchQuery as k } from "relay-runtime";
19
- import { useFragment as le, usePaginationFragment as A, usePreloadedQuery as ue, useRelayEnvironment as j } from "react-relay";
20
- import { BACKOFFICE_LIST_DEFAULTS as de, BACKOFFICE_LIST_REFETCH_POLICY as M } from "@plumile/backoffice-core/constants.js";
21
- import { stableListVariablesKey as N } from "@plumile/backoffice-core/state/stableKey.js";
15
+ import { Fragment as ae, jsx as w, jsxs as oe } from "react/jsx-runtime";
16
+ import { useTranslation as T } from "react-i18next";
17
+ import { Button as E } from "@plumile/ui/atomic/atoms/button/Button.js";
18
+ import { fetchQuery as D } from "relay-runtime";
19
+ import { useFragment as O, usePaginationFragment as k, usePreloadedQuery as se, useRelayEnvironment as ce } from "react-relay";
20
+ import { InlineBanner as A } from "@plumile/ui/backoffice/molecules/inline_banner/InlineBanner.js";
21
+ import { BACKOFFICE_LIST_DEFAULTS as le, BACKOFFICE_LIST_REFETCH_POLICY as j } from "@plumile/backoffice-core/constants.js";
22
+ import { stableListVariablesKey as ue } from "@plumile/backoffice-core/state/stableKey.js";
23
+ import { LinkButton as M } from "@plumile/ui/atomic/atoms/button/LinkButton.js";
24
+ import { TableCell as de } from "@plumile/ui/components/data-table/TableCell.js";
25
+ import { EyeSvg as fe } from "@plumile/ui/icons/EyeSvg.js";
22
26
  //#region src/pages/BackofficeEntityListPage.tsx
23
- var fe = "store-or-network", pe = (e, t, n, r) => {
27
+ var pe = "store-or-network", me = (e, t, n, r) => {
24
28
  let i = t != null && t.length > 0, a = e;
25
29
  if (i) {
26
30
  let n = [{
@@ -28,7 +32,7 @@ var fe = "store-or-network", pe = (e, t, n, r) => {
28
32
  header: "",
29
33
  className: c,
30
34
  mobileRole: "badge",
31
- cell: (e) => /* @__PURE__ */ D(l, {
35
+ cell: (e) => /* @__PURE__ */ w(l, {
32
36
  row: e,
33
37
  flags: t,
34
38
  tApp: r
@@ -48,15 +52,15 @@ var fe = "store-or-network", pe = (e, t, n, r) => {
48
52
  columns: a,
49
53
  gridTemplateColumns: g
50
54
  };
51
- }, P = ({ config: i, prepared: o }) => {
52
- let { t: s } = O(), { t: c } = e(), [l, f] = C(null), p = j(), m = i.list, g = i.listDefaults ?? m.defaultState ?? {
55
+ }, N = ({ config: i, prepared: o }) => {
56
+ let { t: s } = T(), { t: c } = e(), [l, f] = C(null), p = ce(), m = i.list, g = i.listDefaults ?? m.defaultState ?? {
53
57
  where: null,
54
58
  sort: null
55
- }, v = ue(m.query, o.query), A = le(m.fragment, v), M = x(() => m.getRows(A).map((e) => m.toRow(e)), [A, m]), P = x(() => m.getNextCursor?.(v) ?? null, [m, v]), [F, I] = C(M), [L, R] = C(P), [z, B] = C(!1), [V, H] = C(!1), [me, U] = C(!1);
59
+ }, v = se(m.query, o.query), k = O(m.fragment, v), j = x(() => m.getRows(k).map((e) => m.toRow(e)), [k, m]), N = x(() => m.getNextCursor?.(v) ?? null, [m, v]), [P, F] = C(j), [I, L] = C(N), [R, z] = C(!1), [B, V] = C(!1), [he, H] = C(!1);
56
60
  b(() => {
57
- I(M), R(P);
58
- }, [P, M]);
59
- let { columns: W, gridTemplateColumns: he } = x(() => {
61
+ F(j), L(N);
62
+ }, [N, j]);
63
+ let { columns: U, gridTemplateColumns: ge } = x(() => {
60
64
  let e = n(m.columns, {
61
65
  tApp: s,
62
66
  t: c
@@ -65,122 +69,122 @@ var fe = "store-or-network", pe = (e, t, n, r) => {
65
69
  fallback: c("common.notAvailable"),
66
70
  className: re,
67
71
  resolveDetailHref: (e) => i.routes.detail(e),
68
- renderAction: ({ href: e, ariaLabel: t }) => /* @__PURE__ */ D(se.Actions, { children: /* @__PURE__ */ D("span", {
72
+ renderAction: ({ href: e, ariaLabel: t }) => /* @__PURE__ */ w(de.Actions, { children: /* @__PURE__ */ w("span", {
69
73
  className: ne,
70
74
  title: t,
71
- children: /* @__PURE__ */ D(T, {
75
+ children: /* @__PURE__ */ w(M, {
72
76
  to: e,
73
77
  variant: "icon",
74
78
  size: "small",
75
79
  "aria-label": t,
76
- children: /* @__PURE__ */ D(ae, {
80
+ children: /* @__PURE__ */ w(fe, {
77
81
  width: 16,
78
82
  height: 16
79
83
  })
80
84
  })
81
85
  }) })
82
86
  });
83
- return pe([...e, t], m.rowFlags, 1, s);
87
+ return me([...e, t], m.rowFlags, 1, s);
84
88
  }, [
85
89
  i.routes,
86
90
  m.columns,
87
91
  m.rowFlags,
88
92
  c,
89
93
  s
90
- ]), G = y((e) => m.getRowId(e), [m]), { state: K, pushState: ge } = u(i), q = K.sort ?? g.sort, { pageSize: J } = de, _e = y((e) => m.buildQueryVariables(e), [m]), Y = S(0), ve = S(N({
94
+ ]), W = y((e) => m.getRowId(e), [m]), { state: G, pushState: _e } = u(i), K = G.sort ?? g.sort, { pageSize: q } = le, ve = y((e) => m.buildQueryVariables(e), [m]), J = S(0), ye = S(ue({
91
95
  where: g.where,
92
96
  sort: g.sort,
93
- count: J
94
- })), X = y(async (e) => {
95
- let t = Y.current + 1;
96
- Y.current = t, e.mode === "append" ? B(!0) : H(!0), U(!1);
97
+ count: q
98
+ })), Y = y(async (e) => {
99
+ let t = J.current + 1;
100
+ J.current = t, e.mode === "append" ? z(!0) : V(!0), H(!1);
97
101
  try {
98
- let n = _e({
102
+ let n = ve({
99
103
  where: e.where,
100
104
  sort: e.sort,
101
105
  count: e.count,
102
106
  cursor: e.cursor
103
- }), r = await k(p, m.query, n, { fetchPolicy: fe }).toPromise();
104
- if (r == null || Y.current !== t) return;
107
+ }), r = await D(p, m.query, n, { fetchPolicy: pe }).toPromise();
108
+ if (r == null || J.current !== t) return;
105
109
  let i = m.getRows(r).map((e) => m.toRow(e));
106
- I((t) => e.mode === "append" ? [...t, ...i] : i), R(m.getNextCursor?.(r) ?? null);
110
+ F((t) => e.mode === "append" ? [...t, ...i] : i), L(m.getNextCursor?.(r) ?? null);
107
111
  } catch {
108
- Y.current === t && U(!0);
112
+ J.current === t && H(!0);
109
113
  } finally {
110
- e.mode === "append" ? B(!1) : H(!1);
114
+ e.mode === "append" ? z(!1) : V(!1);
111
115
  }
112
116
  }, [
113
- _e,
117
+ ve,
114
118
  p,
115
119
  m
116
120
  ]);
117
121
  b(() => {
118
- let e = N({
119
- where: K.where,
120
- sort: q,
121
- count: J
122
+ let e = ue({
123
+ where: G.where,
124
+ sort: K,
125
+ count: q
122
126
  });
123
- ve.current !== e && (ve.current = e, X({
124
- where: K.where,
125
- sort: q,
126
- count: J,
127
+ ye.current !== e && (ye.current = e, Y({
128
+ where: G.where,
129
+ sort: K,
130
+ count: q,
127
131
  cursor: null,
128
132
  mode: "reset"
129
133
  }).catch(() => {
130
- U(!0);
134
+ H(!0);
131
135
  }));
132
136
  }, [
133
- J,
134
137
  q,
135
- X,
136
- K.where
138
+ K,
139
+ Y,
140
+ G.where
137
141
  ]);
138
- let Z = y(() => {
139
- V || X({
140
- where: K.where,
141
- sort: q,
142
- count: J,
142
+ let X = y(() => {
143
+ B || Y({
144
+ where: G.where,
145
+ sort: K,
146
+ count: q,
143
147
  cursor: null,
144
148
  mode: "reset"
145
149
  }).catch(() => {
146
- U(!0);
150
+ H(!0);
147
151
  });
148
152
  }, [
149
- V,
150
- J,
153
+ B,
151
154
  q,
152
- X,
153
- K.where
154
- ]), ye = r({
155
- hasNext: L != null,
156
- isLoadingNext: z,
155
+ K,
156
+ Y,
157
+ G.where
158
+ ]), be = r({
159
+ hasNext: I != null,
160
+ isLoadingNext: R,
157
161
  loadNext: (e) => {
158
- L != null && X({
159
- where: K.where,
160
- sort: q,
162
+ I != null && Y({
163
+ where: G.where,
164
+ sort: K,
161
165
  count: e,
162
- cursor: L,
166
+ cursor: I,
163
167
  mode: "append"
164
168
  }).catch(() => {
165
- U(!0);
169
+ H(!0);
166
170
  });
167
171
  },
168
- count: J
169
- }), Q = x(() => i.listActions ?? [], [i.listActions]), be = x(() => Q.filter((e) => e.isVisible == null ? !0 : e.isVisible(null)), [Q]), xe = x(() => {
170
- if (be.length !== 0) return /* @__PURE__ */ D("div", {
172
+ count: q
173
+ }), Z = x(() => i.listActions ?? [], [i.listActions]), Q = x(() => Z.filter((e) => e.isVisible == null ? !0 : e.isVisible(null)), [Z]), xe = x(() => {
174
+ if (Q.length !== 0) return /* @__PURE__ */ w("div", {
171
175
  className: ie,
172
- children: be.map((e, t) => {
176
+ children: Q.map((e, t) => {
173
177
  let { variant: n } = e, r = _(e.label, s), i = r;
174
178
  e.ariaLabel != null && (i = _(e.ariaLabel, s));
175
179
  let a = te(n, t), o = e.size ?? "small", c = e.isDisabled?.(null) === !0;
176
- return ee(e) ? /* @__PURE__ */ D(T, {
180
+ return ee(e) ? /* @__PURE__ */ w(M, {
177
181
  to: e.to(null),
178
182
  variant: a,
179
183
  size: o,
180
184
  isDisabled: c,
181
185
  "aria-label": i,
182
186
  children: r
183
- }, e.id) : h(e) ? /* @__PURE__ */ D(w, {
187
+ }, e.id) : h(e) ? /* @__PURE__ */ w(E, {
184
188
  type: "button",
185
189
  variant: a,
186
190
  size: o,
@@ -193,48 +197,48 @@ var fe = "store-or-network", pe = (e, t, n, r) => {
193
197
  }, e.id) : null;
194
198
  })
195
199
  });
196
- }, [s, be]), $ = Q.find((e) => e.id === l), Se = null;
197
- return me && (Se = /* @__PURE__ */ D(oe, {
200
+ }, [s, Q]), $ = Z.find((e) => e.id === l), Se = null;
201
+ return he && (Se = /* @__PURE__ */ w(A, {
198
202
  tone: "danger",
199
203
  title: c("list.errors.title"),
200
- actions: /* @__PURE__ */ D(w, {
204
+ actions: /* @__PURE__ */ w(E, {
201
205
  type: "button",
202
206
  variant: "secondary",
203
207
  size: "small",
204
- onClick: Z,
208
+ onClick: X,
205
209
  children: c("list.actions.retry")
206
210
  }),
207
211
  onDismiss: () => {
208
- U(!1);
212
+ H(!1);
209
213
  },
210
214
  children: c("list.errors.fetchFailed")
211
- })), /* @__PURE__ */ ce(E, { children: [/* @__PURE__ */ D(a, {
215
+ })), /* @__PURE__ */ oe(ae, { children: [/* @__PURE__ */ w(a, {
212
216
  config: i,
213
- state: K,
214
- pushState: ge,
217
+ state: G,
218
+ pushState: _e,
215
219
  headerActions: xe,
216
- rows: F,
217
- columns: W,
218
- gridTemplateColumns: he,
219
- getRowId: G,
220
- hasNextPage: L != null,
221
- isLoadingMore: z,
222
- isRefreshing: V,
223
- onLoadMore: ye,
224
- onRefresh: Z,
220
+ rows: P,
221
+ columns: U,
222
+ gridTemplateColumns: ge,
223
+ getRowId: W,
224
+ hasNextPage: I != null,
225
+ isLoadingMore: R,
226
+ isRefreshing: B,
227
+ onLoadMore: be,
228
+ onRefresh: X,
225
229
  totalCount: null,
226
230
  statusBanner: Se
227
- }), $ != null && h($) && /* @__PURE__ */ D(t, {
231
+ }), $ != null && h($) && /* @__PURE__ */ w(t, {
228
232
  isOpen: !0,
229
233
  action: $,
230
234
  node: null,
231
235
  onClose: () => {
232
236
  f(null);
233
237
  },
234
- onSuccess: Z
238
+ onSuccess: X
235
239
  })] });
236
- }, F = ({ config: s, prepared: c, breadcrumb: l }) => {
237
- let f = s.list, { t: p } = O(), { t: m } = e(), [g, v] = C(null), b = ue(f.query, c.query), { data: S, loadNext: oe, hasNext: E, isLoadingNext: k, refetch: le } = A(f.fragment, b), j = f.getConnection(S), N = x(() => j.edges.map((e) => f.toRow(e.node)), [j.edges, f]), { columns: fe, gridTemplateColumns: P } = x(() => {
240
+ }, P = ({ config: s, prepared: c, breadcrumb: l }) => {
241
+ let f = s.list, { t: p } = T(), { t: m } = e(), [g, v] = C(null), b = se(f.query, c.query), { data: S, loadNext: ae, hasNext: D, isLoadingNext: O, refetch: ce } = k(f.fragment, b), A = f.getConnection(S), ue = x(() => A.edges.map((e) => f.toRow(e.node)), [A.edges, f]), { columns: pe, gridTemplateColumns: N } = x(() => {
238
242
  let e = n(f.columns, {
239
243
  tApp: p,
240
244
  t: m
@@ -243,71 +247,71 @@ var fe = "store-or-network", pe = (e, t, n, r) => {
243
247
  fallback: m("common.notAvailable"),
244
248
  className: re,
245
249
  resolveDetailHref: (e) => s.routes.detail(e),
246
- renderAction: ({ href: e, ariaLabel: t }) => /* @__PURE__ */ D(se.Actions, { children: /* @__PURE__ */ D("span", {
250
+ renderAction: ({ href: e, ariaLabel: t }) => /* @__PURE__ */ w(de.Actions, { children: /* @__PURE__ */ w("span", {
247
251
  className: ne,
248
252
  title: t,
249
- children: /* @__PURE__ */ D(T, {
253
+ children: /* @__PURE__ */ w(M, {
250
254
  to: e,
251
255
  variant: "icon",
252
256
  size: "small",
253
257
  "aria-label": t,
254
- children: /* @__PURE__ */ D(ae, {
258
+ children: /* @__PURE__ */ w(fe, {
255
259
  width: 16,
256
260
  height: 16
257
261
  })
258
262
  })
259
263
  }) })
260
264
  });
261
- return pe([...e, t], f.rowFlags, 1, p);
265
+ return me([...e, t], f.rowFlags, 1, p);
262
266
  }, [
263
267
  s.routes,
264
268
  f.columns,
265
269
  f.rowFlags,
266
270
  m,
267
271
  p
268
- ]), F = y((e) => f.getRowId(e), [f]), { state: I, pushState: L } = u(s), R = s.listDefaults ?? f.defaultState ?? {
272
+ ]), P = y((e) => f.getRowId(e), [f]), { state: F, pushState: I } = u(s), L = s.listDefaults ?? f.defaultState ?? {
269
273
  where: null,
270
274
  sort: null
271
- }, z = I.sort ?? R.sort, { pageSize: B } = de, { isRefreshing: V, onRefresh: H } = i({
272
- refetch: le,
275
+ }, R = F.sort ?? L.sort, { pageSize: z } = le, { isRefreshing: B, onRefresh: V } = i({
276
+ refetch: ce,
273
277
  variables: x(() => ({
274
- where: I.where,
275
- sort: z,
276
- count: B,
278
+ where: F.where,
279
+ sort: R,
280
+ count: z,
277
281
  cursor: null
278
282
  }), [
279
- B,
280
283
  z,
281
- I.where
284
+ R,
285
+ F.where
282
286
  ]),
283
287
  defaults: {
284
- where: R.where,
285
- sort: R.sort,
286
- count: B,
288
+ where: L.where,
289
+ sort: L.sort,
290
+ count: z,
287
291
  cursor: null
288
292
  },
289
- fetchPolicy: M,
293
+ fetchPolicy: j,
290
294
  buildQueryVariables: f.buildQueryVariables
291
- }), me = r({
292
- hasNext: E,
293
- isLoadingNext: k,
294
- loadNext: oe,
295
- count: B
296
- }), U = x(() => s.listActions ?? [], [s.listActions]), W = x(() => U.filter((e) => e.isVisible == null ? !0 : e.isVisible(null)), [U]), he = x(() => {
297
- if (W.length !== 0) return /* @__PURE__ */ D("div", {
295
+ }), he = r({
296
+ hasNext: D,
297
+ isLoadingNext: O,
298
+ loadNext: ae,
299
+ count: z
300
+ }), H = x(() => s.listActions ?? [], [s.listActions]), U = x(() => H.filter((e) => e.isVisible == null ? !0 : e.isVisible(null)), [H]), ge = x(() => {
301
+ if (U.length !== 0) return /* @__PURE__ */ w("div", {
298
302
  className: ie,
299
- children: W.map((e, t) => {
303
+ children: U.map((e, t) => {
300
304
  let { variant: n } = e, r = _(e.label, p), i = r;
301
305
  e.ariaLabel != null && (i = _(e.ariaLabel, p));
302
306
  let a = te(n, t), o = e.size ?? "small", s = e.isDisabled?.(null) === !0;
303
- return ee(e) ? /* @__PURE__ */ D(T, {
307
+ return ee(e) ? /* @__PURE__ */ w(M, {
304
308
  to: e.to(null),
305
309
  variant: a,
306
310
  size: o,
307
311
  isDisabled: s,
308
312
  "aria-label": i,
309
313
  children: r
310
- }, e.id) : h(e) ? /* @__PURE__ */ D(w, {
314
+ }, e.id) : h(e) ? /* @__PURE__ */ w(E, {
311
315
  type: "button",
312
316
  variant: a,
313
317
  size: o,
@@ -320,44 +324,44 @@ var fe = "store-or-network", pe = (e, t, n, r) => {
320
324
  }, e.id) : null;
321
325
  })
322
326
  });
323
- }, [p, W]), G = U.find((e) => e.id === g);
324
- return /* @__PURE__ */ ce(o, {
327
+ }, [p, U]), W = H.find((e) => e.id === g);
328
+ return /* @__PURE__ */ oe(o, {
325
329
  breadcrumb: l,
326
- children: [/* @__PURE__ */ D(a, {
330
+ children: [/* @__PURE__ */ w(a, {
327
331
  config: s,
328
- state: I,
329
- pushState: L,
330
- headerActions: he,
331
- rows: N,
332
- columns: fe,
333
- gridTemplateColumns: P,
334
- getRowId: F,
335
- hasNextPage: E,
336
- isLoadingMore: k,
337
- isRefreshing: V,
338
- onLoadMore: me,
339
- onRefresh: H,
340
- totalCount: j.totalCount ?? null
341
- }), G != null && h(G) && /* @__PURE__ */ D(t, {
332
+ state: F,
333
+ pushState: I,
334
+ headerActions: ge,
335
+ rows: ue,
336
+ columns: pe,
337
+ gridTemplateColumns: N,
338
+ getRowId: P,
339
+ hasNextPage: D,
340
+ isLoadingMore: O,
341
+ isRefreshing: B,
342
+ onLoadMore: he,
343
+ onRefresh: V,
344
+ totalCount: A.totalCount ?? null
345
+ }), W != null && h(W) && /* @__PURE__ */ w(t, {
342
346
  isOpen: !0,
343
- action: G,
347
+ action: W,
344
348
  node: null,
345
349
  onClose: () => {
346
350
  v(null);
347
351
  },
348
- onSuccess: H
352
+ onSuccess: V
349
353
  })]
350
354
  });
351
- }, I = ({ entityManifest: e, config: t, prepared: n }) => {
352
- let { t: r } = O(), i = s(t, r);
353
- return g(t) ? /* @__PURE__ */ D(o, {
355
+ }, F = ({ entityManifest: e, config: t, prepared: n }) => {
356
+ let { t: r } = T(), i = s(t, r);
357
+ return g(t) ? /* @__PURE__ */ w(o, {
354
358
  breadcrumb: i,
355
- children: /* @__PURE__ */ D(P, {
359
+ children: /* @__PURE__ */ w(N, {
356
360
  entityManifest: e,
357
361
  config: t,
358
362
  prepared: n
359
363
  })
360
- }) : m(t) ? /* @__PURE__ */ D(F, {
364
+ }) : m(t) ? /* @__PURE__ */ w(P, {
361
365
  entityManifest: e,
362
366
  config: t,
363
367
  prepared: n,
@@ -365,6 +369,6 @@ var fe = "store-or-network", pe = (e, t, n, r) => {
365
369
  }) : null;
366
370
  };
367
371
  //#endregion
368
- export { I as BackofficeEntityListPage, I as default };
372
+ export { F as BackofficeEntityListPage, F as default };
369
373
 
370
374
  //# sourceMappingURL=BackofficeEntityListPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeEntityListPage.js","names":[],"sources":["../../../src/pages/BackofficeEntityListPage.tsx"],"sourcesContent":["import {\n type JSX,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { TFunction } from 'i18next';\nimport { useTranslation } from 'react-i18next';\nimport {\n useFragment,\n usePaginationFragment,\n usePreloadedQuery,\n useRelayEnvironment,\n} from 'react-relay';\nimport { fetchQuery } from 'relay-runtime';\nimport {\n BACKOFFICE_LIST_DEFAULTS,\n BACKOFFICE_LIST_REFETCH_POLICY,\n} from '@plumile/backoffice-core/constants.js';\nimport { stableListVariablesKey } from '@plumile/backoffice-core/state/stableKey.js';\nimport type {\n BackofficeEntityManifestItem,\n BackofficePreparedListRoute,\n BackofficeRuntimeResolvedListFacetConfig,\n BackofficeRowFlagSpec,\n} from '@plumile/backoffice-core/types.js';\nimport {\n Button,\n EyeSvg,\n InlineBanner,\n LinkButton,\n TableCell,\n type DataTableColumn,\n type GetRowId,\n} from '@plumile/ui';\nimport { BackofficeEntityListScaffold } from '../components/backoffice/scaffolds/BackofficeEntityListScaffold.js';\nimport { LazyBackofficeEntityActionFormDialog } from '../components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js';\nimport { buildDataTableColumns } from '../components/backoffice/columns/buildDataTableColumns.js';\nimport { RowFlagsCell } from '../components/backoffice/list/RowFlagsCell.js';\nimport { useBackofficeListUrlState } from '../hooks/useBackofficeListUrlState.js';\nimport { useBackofficeLoadMore } from '../hooks/useBackofficeLoadMore.js';\nimport { useBackofficeListRefetch } from '../hooks/useBackofficeListRefetch.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport * as pageStyles from './backofficeEntityListPage.css.js';\nimport { rowFlagsColumnCell } from '../components/backoffice/list/RowFlagsCell.css.js';\nimport { BackofficeRightPageLayout } from '../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js';\nimport { buildEntityListBreadcrumb } from '../components/backoffice/layout/breadcrumb/buildBreadcrumbs.js';\nimport {\n buildActionsColumn,\n computeActionsColumnWidthPx,\n computeRowFlagsColumnWidthPx,\n isFormMutationAction,\n isConnectionListConfig,\n isRecordListConfig,\n isRouteAction,\n resolveLabel,\n resolveActionVariant,\n resolveTrackBySize,\n type ConnectionListConfig,\n type RecordListConfig,\n} from './BackofficeEntityListPage.helpers.js';\n\nexport type BackofficeEntityListPageProps = {\n entityManifest: BackofficeEntityManifestItem;\n config: BackofficeRuntimeResolvedListFacetConfig;\n prepared: BackofficePreparedListRoute;\n};\n\ntype RecordFetchMode = 'append' | 'reset';\ntype RecordFetchInput = {\n where: Record<string, unknown> | null;\n sort: string | null;\n count: number;\n cursor: string | null;\n mode: RecordFetchMode;\n};\n\nconst RECORD_FETCH_POLICY = 'store-or-network' as const;\n\nconst applyListEdgeColumns = <Row,>(\n inputColumns: readonly DataTableColumn<Row>[],\n rowFlags: readonly BackofficeRowFlagSpec<Row>[] | undefined,\n actionCount: number,\n tApp: TFunction,\n): {\n columns: readonly DataTableColumn<Row>[];\n gridTemplateColumns?: string;\n} => {\n const hasFlags = rowFlags != null && rowFlags.length > 0;\n\n let columns = inputColumns;\n if (hasFlags) {\n const flagsColumn: DataTableColumn<Row> = {\n id: '__rowFlags',\n header: '',\n className: rowFlagsColumnCell,\n mobileRole: 'badge',\n cell: (row) => {\n return <RowFlagsCell row={row} flags={rowFlags} tApp={tApp} />;\n },\n };\n\n // Ensure we never pick the flags column as \"primary\".\n const withFlags = [flagsColumn, ...inputColumns];\n const hasPrimary = withFlags.some((col) => {\n return col.isPrimary === true;\n });\n\n columns = withFlags;\n if (!hasPrimary) {\n columns = withFlags.map((col, index) => {\n if (index === 1) {\n return { ...col, isPrimary: true };\n }\n return col;\n });\n }\n }\n\n let flagCount = 0;\n if (hasFlags) {\n flagCount = rowFlags.length;\n }\n const flagsWidthPx = computeRowFlagsColumnWidthPx(flagCount);\n const actionsWidthPx = computeActionsColumnWidthPx(actionCount);\n\n // We always include the right-side \"actions\" column in list pages.\n let leftColumnCount = 0;\n if (hasFlags) {\n leftColumnCount = 1;\n }\n const middleCount = columns.length - leftColumnCount - 1;\n\n const middleTracks = columns\n .slice(leftColumnCount, leftColumnCount + Math.max(0, middleCount))\n .map((column) => {\n return resolveTrackBySize(column as DataTableColumn<unknown>, '1fr');\n })\n .join(' ');\n\n let gridTemplateColumns = '';\n if (hasFlags) {\n gridTemplateColumns = `${flagsWidthPx}px ${middleTracks} ${actionsWidthPx}px`;\n } else {\n gridTemplateColumns = `${middleTracks} ${actionsWidthPx}px`;\n }\n\n return { columns, gridTemplateColumns };\n};\n\nconst BackofficeEntityRecordListPage = ({\n config,\n prepared,\n}: Omit<BackofficeEntityListPageProps, 'config'> & {\n config: RecordListConfig;\n}): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const [activeFormActionId, setActiveFormActionId] = useState<string | null>(\n null,\n );\n const environment = useRelayEnvironment();\n\n const listConfig = config.list;\n const listDefaults = config.listDefaults ??\n listConfig.defaultState ?? { where: null, sort: null };\n const queryData = usePreloadedQuery(listConfig.query, prepared.query);\n const fragmentData = useFragment(listConfig.fragment, queryData as never);\n\n const initialRows = useMemo(() => {\n return listConfig.getRows(fragmentData).map((row) => {\n return listConfig.toRow(row);\n });\n }, [fragmentData, listConfig]);\n\n const initialCursor = useMemo(() => {\n return listConfig.getNextCursor?.(queryData) ?? null;\n }, [listConfig, queryData]);\n\n const [rows, setRows] = useState(initialRows);\n const [nextCursor, setNextCursor] = useState(initialCursor);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [isRefreshing, setIsRefreshing] = useState(false);\n const [fetchError, setFetchError] = useState(false);\n\n useEffect(() => {\n setRows(initialRows);\n setNextCursor(initialCursor);\n }, [initialCursor, initialRows]);\n\n const { columns, gridTemplateColumns } = useMemo((): {\n columns: readonly DataTableColumn<unknown>[];\n gridTemplateColumns?: string;\n } => {\n const baseColumns = buildDataTableColumns(listConfig.columns, {\n tApp,\n t,\n });\n const actionsColumn = buildActionsColumn({\n ariaLabel: t('actions.view'),\n fallback: t('common.notAvailable'),\n className: pageStyles.actionsColumnCell,\n resolveDetailHref: (id) => {\n return config.routes.detail(id);\n },\n renderAction: ({ href, ariaLabel }) => {\n return (\n <TableCell.Actions>\n <span className={pageStyles.actionTrigger} title={ariaLabel}>\n <LinkButton\n to={href}\n variant=\"icon\"\n size=\"small\"\n aria-label={ariaLabel}\n >\n <EyeSvg width={16} height={16} />\n </LinkButton>\n </span>\n </TableCell.Actions>\n );\n },\n });\n const allColumns = [...baseColumns, actionsColumn];\n return applyListEdgeColumns(allColumns, listConfig.rowFlags, 1, tApp);\n }, [config.routes, listConfig.columns, listConfig.rowFlags, t, tApp]);\n\n const getRowId = useCallback<GetRowId<unknown>>(\n (row) => {\n return listConfig.getRowId(row);\n },\n [listConfig],\n );\n\n const { state, pushState } = useBackofficeListUrlState(config);\n const resolvedSort = state.sort ?? listDefaults.sort;\n const { pageSize } = BACKOFFICE_LIST_DEFAULTS;\n\n const buildVariables = useCallback(\n (input: {\n where: Record<string, unknown> | null;\n sort: string | null;\n count: number;\n cursor: string | null;\n }) => {\n return listConfig.buildQueryVariables(input);\n },\n [listConfig],\n );\n\n const requestIdRef = useRef(0);\n const lastRefetchKeyRef = useRef(\n stableListVariablesKey({\n where: listDefaults.where,\n sort: listDefaults.sort,\n count: pageSize,\n }),\n );\n\n const runFetch = useCallback(\n async (input: RecordFetchInput) => {\n const requestId = requestIdRef.current + 1;\n requestIdRef.current = requestId;\n\n if (input.mode === 'append') {\n setIsLoadingMore(true);\n } else {\n setIsRefreshing(true);\n }\n setFetchError(false);\n\n try {\n const variables = buildVariables({\n where: input.where,\n sort: input.sort,\n count: input.count,\n cursor: input.cursor,\n });\n\n const response = await fetchQuery(\n environment,\n listConfig.query,\n variables as never,\n { fetchPolicy: RECORD_FETCH_POLICY },\n ).toPromise();\n\n if (response == null || requestIdRef.current !== requestId) {\n return;\n }\n\n const nextRows = listConfig.getRows(response as never).map((row) => {\n return listConfig.toRow(row);\n });\n setRows((prev) => {\n if (input.mode === 'append') {\n return [...prev, ...nextRows];\n }\n return nextRows;\n });\n const cursor = listConfig.getNextCursor?.(response) ?? null;\n setNextCursor(cursor);\n } catch {\n if (requestIdRef.current === requestId) {\n setFetchError(true);\n }\n } finally {\n if (input.mode === 'append') {\n setIsLoadingMore(false);\n } else {\n setIsRefreshing(false);\n }\n }\n },\n [buildVariables, environment, listConfig],\n );\n\n useEffect(() => {\n const key = stableListVariablesKey({\n where: state.where,\n sort: resolvedSort,\n count: pageSize,\n });\n if (lastRefetchKeyRef.current === key) {\n return;\n }\n lastRefetchKeyRef.current = key;\n runFetch({\n where: state.where,\n sort: resolvedSort,\n count: pageSize,\n cursor: null,\n mode: 'reset',\n }).catch(() => {\n setFetchError(true);\n });\n }, [pageSize, resolvedSort, runFetch, state.where]);\n\n const handleRefresh = useCallback(() => {\n if (isRefreshing) {\n return;\n }\n runFetch({\n where: state.where,\n sort: resolvedSort,\n count: pageSize,\n cursor: null,\n mode: 'reset',\n }).catch(() => {\n setFetchError(true);\n });\n }, [isRefreshing, pageSize, resolvedSort, runFetch, state.where]);\n\n const handleLoadMore = useBackofficeLoadMore({\n hasNext: nextCursor != null,\n isLoadingNext: isLoadingMore,\n loadNext: (count) => {\n if (nextCursor == null) {\n return;\n }\n runFetch({\n where: state.where,\n sort: resolvedSort,\n count,\n cursor: nextCursor,\n mode: 'append',\n }).catch(() => {\n setFetchError(true);\n });\n },\n count: pageSize,\n });\n\n const listActions = useMemo(() => {\n return config.listActions ?? [];\n }, [config.listActions]);\n const visibleActions = useMemo(() => {\n return listActions.filter((action) => {\n if (action.isVisible == null) {\n return true;\n }\n return action.isVisible(null);\n });\n }, [listActions]);\n\n const headerActions = useMemo(() => {\n if (visibleActions.length === 0) {\n return undefined;\n }\n return (\n <div className={pageStyles.headerActions}>\n {visibleActions.map((action, index) => {\n const { variant: actionVariant } = action;\n const label = resolveLabel(action.label, tApp);\n let ariaLabel = label;\n if (action.ariaLabel != null) {\n ariaLabel = resolveLabel(action.ariaLabel, tApp);\n }\n const variant = resolveActionVariant(actionVariant, index);\n const size = action.size ?? 'small';\n const isDisabled = action.isDisabled?.(null) === true;\n\n if (isRouteAction(action)) {\n const href = action.to(null);\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 >\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 disabled={isDisabled}\n onClick={() => {\n setActiveFormActionId(action.id);\n }}\n aria-label={ariaLabel}\n >\n {label}\n </Button>\n );\n }\n\n return null;\n })}\n </div>\n );\n }, [tApp, visibleActions]);\n\n const activeFormAction = listActions.find((action) => {\n return action.id === activeFormActionId;\n });\n\n let statusBanner: JSX.Element | null = null;\n if (fetchError) {\n statusBanner = (\n <InlineBanner\n tone=\"danger\"\n title={t('list.errors.title')}\n actions={\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"small\"\n onClick={handleRefresh}\n >\n {t('list.actions.retry')}\n </Button>\n }\n onDismiss={() => {\n setFetchError(false);\n }}\n >\n {t('list.errors.fetchFailed')}\n </InlineBanner>\n );\n }\n\n return (\n <>\n <BackofficeEntityListScaffold\n config={config}\n state={state}\n pushState={pushState}\n headerActions={headerActions}\n rows={rows}\n columns={columns}\n gridTemplateColumns={gridTemplateColumns}\n getRowId={getRowId}\n hasNextPage={nextCursor != null}\n isLoadingMore={isLoadingMore}\n isRefreshing={isRefreshing}\n onLoadMore={handleLoadMore}\n onRefresh={handleRefresh}\n totalCount={null}\n statusBanner={statusBanner}\n />\n {activeFormAction != null && isFormMutationAction(activeFormAction) && (\n <LazyBackofficeEntityActionFormDialog\n isOpen\n action={activeFormAction}\n node={null}\n onClose={() => {\n setActiveFormActionId(null);\n }}\n onSuccess={handleRefresh}\n />\n )}\n </>\n );\n};\n\nconst BackofficeEntityConnectionListPage = ({\n config,\n prepared,\n breadcrumb,\n}: Omit<BackofficeEntityListPageProps, 'config'> & {\n config: ConnectionListConfig;\n breadcrumb: ReturnType<typeof buildEntityListBreadcrumb>;\n}): JSX.Element | null => {\n const listConfig = config.list;\n\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const [activeFormActionId, setActiveFormActionId] = useState<string | null>(\n null,\n );\n\n const queryData = usePreloadedQuery(listConfig.query, prepared.query);\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\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, gridTemplateColumns } = useMemo((): {\n columns: readonly DataTableColumn<unknown>[];\n gridTemplateColumns?: string;\n } => {\n const baseColumns = buildDataTableColumns(listConfig.columns, {\n tApp,\n t,\n });\n const actionsColumn = buildActionsColumn({\n ariaLabel: t('actions.view'),\n fallback: t('common.notAvailable'),\n className: pageStyles.actionsColumnCell,\n resolveDetailHref: (id) => {\n return config.routes.detail(id);\n },\n renderAction: ({ href, ariaLabel }) => {\n return (\n <TableCell.Actions>\n <span className={pageStyles.actionTrigger} title={ariaLabel}>\n <LinkButton\n to={href}\n variant=\"icon\"\n size=\"small\"\n aria-label={ariaLabel}\n >\n <EyeSvg width={16} height={16} />\n </LinkButton>\n </span>\n </TableCell.Actions>\n );\n },\n });\n const allColumns = [...baseColumns, actionsColumn];\n return applyListEdgeColumns(allColumns, listConfig.rowFlags, 1, tApp);\n }, [config.routes, listConfig.columns, listConfig.rowFlags, t, tApp]);\n\n const getRowId = useCallback<GetRowId<unknown>>(\n (row) => {\n return listConfig.getRowId(row);\n },\n [listConfig],\n );\n\n const { state, pushState } = useBackofficeListUrlState(config);\n const listDefaults = config.listDefaults ??\n listConfig.defaultState ?? { where: null, sort: null };\n const resolvedSort = state.sort ?? listDefaults.sort;\n const { pageSize } = BACKOFFICE_LIST_DEFAULTS;\n\n const baseVariables = useMemo(() => {\n return {\n where: state.where,\n sort: resolvedSort,\n count: pageSize,\n cursor: null,\n };\n }, [pageSize, resolvedSort, state.where]);\n\n const { isRefreshing, onRefresh } = useBackofficeListRefetch({\n refetch,\n variables: baseVariables,\n defaults: {\n where: listDefaults.where,\n sort: listDefaults.sort,\n count: pageSize,\n cursor: null,\n },\n fetchPolicy: BACKOFFICE_LIST_REFETCH_POLICY,\n buildQueryVariables: listConfig.buildQueryVariables,\n });\n\n const handleLoadMore = useBackofficeLoadMore({\n hasNext,\n isLoadingNext,\n loadNext,\n count: pageSize,\n });\n\n const listActions = useMemo(() => {\n return config.listActions ?? [];\n }, [config.listActions]);\n const visibleActions = useMemo(() => {\n return listActions.filter((action) => {\n if (action.isVisible == null) {\n return true;\n }\n return action.isVisible(null);\n });\n }, [listActions]);\n\n const headerActions = useMemo(() => {\n if (visibleActions.length === 0) {\n return undefined;\n }\n return (\n <div className={pageStyles.headerActions}>\n {visibleActions.map((action, index) => {\n const { variant: actionVariant } = action;\n const label = resolveLabel(action.label, tApp);\n let ariaLabel = label;\n if (action.ariaLabel != null) {\n ariaLabel = resolveLabel(action.ariaLabel, tApp);\n }\n const variant = resolveActionVariant(actionVariant, index);\n const size = action.size ?? 'small';\n const isDisabled = action.isDisabled?.(null) === true;\n\n if (isRouteAction(action)) {\n const href = action.to(null);\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 >\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 disabled={isDisabled}\n onClick={() => {\n setActiveFormActionId(action.id);\n }}\n aria-label={ariaLabel}\n >\n {label}\n </Button>\n );\n }\n\n return null;\n })}\n </div>\n );\n }, [tApp, visibleActions]);\n\n const activeFormAction = listActions.find((action) => {\n return action.id === activeFormActionId;\n });\n\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <BackofficeEntityListScaffold\n config={config}\n state={state}\n pushState={pushState}\n headerActions={headerActions}\n rows={rows}\n columns={columns}\n gridTemplateColumns={gridTemplateColumns}\n getRowId={getRowId}\n hasNextPage={hasNext}\n isLoadingMore={isLoadingNext}\n isRefreshing={isRefreshing}\n onLoadMore={handleLoadMore}\n onRefresh={onRefresh}\n totalCount={connection.totalCount ?? null}\n />\n {activeFormAction != null && isFormMutationAction(activeFormAction) && (\n <LazyBackofficeEntityActionFormDialog\n isOpen\n action={activeFormAction}\n node={null}\n onClose={() => {\n setActiveFormActionId(null);\n }}\n onSuccess={onRefresh}\n />\n )}\n </BackofficeRightPageLayout>\n );\n};\n\nexport const BackofficeEntityListPage = ({\n entityManifest,\n config,\n prepared,\n}: BackofficeEntityListPageProps): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const breadcrumb = buildEntityListBreadcrumb(config, tApp);\n\n if (isRecordListConfig(config)) {\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <BackofficeEntityRecordListPage\n entityManifest={entityManifest}\n config={config}\n prepared={prepared}\n />\n </BackofficeRightPageLayout>\n );\n }\n if (!isConnectionListConfig(config)) {\n return null;\n }\n return (\n <BackofficeEntityConnectionListPage\n entityManifest={entityManifest}\n config={config}\n prepared={prepared}\n breadcrumb={breadcrumb}\n />\n );\n};\n\nexport default BackofficeEntityListPage;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BackofficeEntityListPage.js","names":[],"sources":["../../../src/pages/BackofficeEntityListPage.tsx"],"sourcesContent":["import {\n type JSX,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { TFunction } from 'i18next';\nimport { useTranslation } from 'react-i18next';\nimport {\n useFragment,\n usePaginationFragment,\n usePreloadedQuery,\n useRelayEnvironment,\n} from 'react-relay';\nimport { fetchQuery } from 'relay-runtime';\nimport {\n BACKOFFICE_LIST_DEFAULTS,\n BACKOFFICE_LIST_REFETCH_POLICY,\n} from '@plumile/backoffice-core/constants.js';\nimport { stableListVariablesKey } from '@plumile/backoffice-core/state/stableKey.js';\nimport type {\n BackofficeEntityManifestItem,\n BackofficePreparedListRoute,\n BackofficeRuntimeResolvedListFacetConfig,\n BackofficeRowFlagSpec,\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 { InlineBanner } from '@plumile/ui/backoffice/molecules/inline_banner/InlineBanner.js';\nimport {\n type DataTableColumn,\n type GetRowId,\n} from '@plumile/ui/components/data-table/DataTable.js';\nimport { TableCell } from '@plumile/ui/components/data-table/TableCell.js';\nimport { EyeSvg } from '@plumile/ui/icons/EyeSvg.js';\nimport { BackofficeEntityListScaffold } from '../components/backoffice/scaffolds/BackofficeEntityListScaffold.js';\nimport { LazyBackofficeEntityActionFormDialog } from '../components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js';\nimport { buildDataTableColumns } from '../components/backoffice/columns/buildDataTableColumns.js';\nimport { RowFlagsCell } from '../components/backoffice/list/RowFlagsCell.js';\nimport { useBackofficeListUrlState } from '../hooks/useBackofficeListUrlState.js';\nimport { useBackofficeLoadMore } from '../hooks/useBackofficeLoadMore.js';\nimport { useBackofficeListRefetch } from '../hooks/useBackofficeListRefetch.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport * as pageStyles from './backofficeEntityListPage.css.js';\nimport { rowFlagsColumnCell } from '../components/backoffice/list/RowFlagsCell.css.js';\nimport { BackofficeRightPageLayout } from '../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js';\nimport { buildEntityListBreadcrumb } from '../components/backoffice/layout/breadcrumb/buildBreadcrumbs.js';\nimport {\n buildActionsColumn,\n computeActionsColumnWidthPx,\n computeRowFlagsColumnWidthPx,\n isFormMutationAction,\n isConnectionListConfig,\n isRecordListConfig,\n isRouteAction,\n resolveLabel,\n resolveActionVariant,\n resolveTrackBySize,\n type ConnectionListConfig,\n type RecordListConfig,\n} from './BackofficeEntityListPage.helpers.js';\n\nexport type BackofficeEntityListPageProps = {\n entityManifest: BackofficeEntityManifestItem;\n config: BackofficeRuntimeResolvedListFacetConfig;\n prepared: BackofficePreparedListRoute;\n};\n\ntype RecordFetchMode = 'append' | 'reset';\ntype RecordFetchInput = {\n where: Record<string, unknown> | null;\n sort: string | null;\n count: number;\n cursor: string | null;\n mode: RecordFetchMode;\n};\n\nconst RECORD_FETCH_POLICY = 'store-or-network' as const;\n\nconst applyListEdgeColumns = <Row,>(\n inputColumns: readonly DataTableColumn<Row>[],\n rowFlags: readonly BackofficeRowFlagSpec<Row>[] | undefined,\n actionCount: number,\n tApp: TFunction,\n): {\n columns: readonly DataTableColumn<Row>[];\n gridTemplateColumns?: string;\n} => {\n const hasFlags = rowFlags != null && rowFlags.length > 0;\n\n let columns = inputColumns;\n if (hasFlags) {\n const flagsColumn: DataTableColumn<Row> = {\n id: '__rowFlags',\n header: '',\n className: rowFlagsColumnCell,\n mobileRole: 'badge',\n cell: (row) => {\n return <RowFlagsCell row={row} flags={rowFlags} tApp={tApp} />;\n },\n };\n\n // Ensure we never pick the flags column as \"primary\".\n const withFlags = [flagsColumn, ...inputColumns];\n const hasPrimary = withFlags.some((col) => {\n return col.isPrimary === true;\n });\n\n columns = withFlags;\n if (!hasPrimary) {\n columns = withFlags.map((col, index) => {\n if (index === 1) {\n return { ...col, isPrimary: true };\n }\n return col;\n });\n }\n }\n\n let flagCount = 0;\n if (hasFlags) {\n flagCount = rowFlags.length;\n }\n const flagsWidthPx = computeRowFlagsColumnWidthPx(flagCount);\n const actionsWidthPx = computeActionsColumnWidthPx(actionCount);\n\n // We always include the right-side \"actions\" column in list pages.\n let leftColumnCount = 0;\n if (hasFlags) {\n leftColumnCount = 1;\n }\n const middleCount = columns.length - leftColumnCount - 1;\n\n const middleTracks = columns\n .slice(leftColumnCount, leftColumnCount + Math.max(0, middleCount))\n .map((column) => {\n return resolveTrackBySize(column as DataTableColumn<unknown>, '1fr');\n })\n .join(' ');\n\n let gridTemplateColumns = '';\n if (hasFlags) {\n gridTemplateColumns = `${flagsWidthPx}px ${middleTracks} ${actionsWidthPx}px`;\n } else {\n gridTemplateColumns = `${middleTracks} ${actionsWidthPx}px`;\n }\n\n return { columns, gridTemplateColumns };\n};\n\nconst BackofficeEntityRecordListPage = ({\n config,\n prepared,\n}: Omit<BackofficeEntityListPageProps, 'config'> & {\n config: RecordListConfig;\n}): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const [activeFormActionId, setActiveFormActionId] = useState<string | null>(\n null,\n );\n const environment = useRelayEnvironment();\n\n const listConfig = config.list;\n const listDefaults = config.listDefaults ??\n listConfig.defaultState ?? { where: null, sort: null };\n const queryData = usePreloadedQuery(listConfig.query, prepared.query);\n const fragmentData = useFragment(listConfig.fragment, queryData as never);\n\n const initialRows = useMemo(() => {\n return listConfig.getRows(fragmentData).map((row) => {\n return listConfig.toRow(row);\n });\n }, [fragmentData, listConfig]);\n\n const initialCursor = useMemo(() => {\n return listConfig.getNextCursor?.(queryData) ?? null;\n }, [listConfig, queryData]);\n\n const [rows, setRows] = useState(initialRows);\n const [nextCursor, setNextCursor] = useState(initialCursor);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [isRefreshing, setIsRefreshing] = useState(false);\n const [fetchError, setFetchError] = useState(false);\n\n useEffect(() => {\n setRows(initialRows);\n setNextCursor(initialCursor);\n }, [initialCursor, initialRows]);\n\n const { columns, gridTemplateColumns } = useMemo((): {\n columns: readonly DataTableColumn<unknown>[];\n gridTemplateColumns?: string;\n } => {\n const baseColumns = buildDataTableColumns(listConfig.columns, {\n tApp,\n t,\n });\n const actionsColumn = buildActionsColumn({\n ariaLabel: t('actions.view'),\n fallback: t('common.notAvailable'),\n className: pageStyles.actionsColumnCell,\n resolveDetailHref: (id) => {\n return config.routes.detail(id);\n },\n renderAction: ({ href, ariaLabel }) => {\n return (\n <TableCell.Actions>\n <span className={pageStyles.actionTrigger} title={ariaLabel}>\n <LinkButton\n to={href}\n variant=\"icon\"\n size=\"small\"\n aria-label={ariaLabel}\n >\n <EyeSvg width={16} height={16} />\n </LinkButton>\n </span>\n </TableCell.Actions>\n );\n },\n });\n const allColumns = [...baseColumns, actionsColumn];\n return applyListEdgeColumns(allColumns, listConfig.rowFlags, 1, tApp);\n }, [config.routes, listConfig.columns, listConfig.rowFlags, t, tApp]);\n\n const getRowId = useCallback<GetRowId<unknown>>(\n (row) => {\n return listConfig.getRowId(row);\n },\n [listConfig],\n );\n\n const { state, pushState } = useBackofficeListUrlState(config);\n const resolvedSort = state.sort ?? listDefaults.sort;\n const { pageSize } = BACKOFFICE_LIST_DEFAULTS;\n\n const buildVariables = useCallback(\n (input: {\n where: Record<string, unknown> | null;\n sort: string | null;\n count: number;\n cursor: string | null;\n }) => {\n return listConfig.buildQueryVariables(input);\n },\n [listConfig],\n );\n\n const requestIdRef = useRef(0);\n const lastRefetchKeyRef = useRef(\n stableListVariablesKey({\n where: listDefaults.where,\n sort: listDefaults.sort,\n count: pageSize,\n }),\n );\n\n const runFetch = useCallback(\n async (input: RecordFetchInput) => {\n const requestId = requestIdRef.current + 1;\n requestIdRef.current = requestId;\n\n if (input.mode === 'append') {\n setIsLoadingMore(true);\n } else {\n setIsRefreshing(true);\n }\n setFetchError(false);\n\n try {\n const variables = buildVariables({\n where: input.where,\n sort: input.sort,\n count: input.count,\n cursor: input.cursor,\n });\n\n const response = await fetchQuery(\n environment,\n listConfig.query,\n variables as never,\n { fetchPolicy: RECORD_FETCH_POLICY },\n ).toPromise();\n\n if (response == null || requestIdRef.current !== requestId) {\n return;\n }\n\n const nextRows = listConfig.getRows(response as never).map((row) => {\n return listConfig.toRow(row);\n });\n setRows((prev) => {\n if (input.mode === 'append') {\n return [...prev, ...nextRows];\n }\n return nextRows;\n });\n const cursor = listConfig.getNextCursor?.(response) ?? null;\n setNextCursor(cursor);\n } catch {\n if (requestIdRef.current === requestId) {\n setFetchError(true);\n }\n } finally {\n if (input.mode === 'append') {\n setIsLoadingMore(false);\n } else {\n setIsRefreshing(false);\n }\n }\n },\n [buildVariables, environment, listConfig],\n );\n\n useEffect(() => {\n const key = stableListVariablesKey({\n where: state.where,\n sort: resolvedSort,\n count: pageSize,\n });\n if (lastRefetchKeyRef.current === key) {\n return;\n }\n lastRefetchKeyRef.current = key;\n runFetch({\n where: state.where,\n sort: resolvedSort,\n count: pageSize,\n cursor: null,\n mode: 'reset',\n }).catch(() => {\n setFetchError(true);\n });\n }, [pageSize, resolvedSort, runFetch, state.where]);\n\n const handleRefresh = useCallback(() => {\n if (isRefreshing) {\n return;\n }\n runFetch({\n where: state.where,\n sort: resolvedSort,\n count: pageSize,\n cursor: null,\n mode: 'reset',\n }).catch(() => {\n setFetchError(true);\n });\n }, [isRefreshing, pageSize, resolvedSort, runFetch, state.where]);\n\n const handleLoadMore = useBackofficeLoadMore({\n hasNext: nextCursor != null,\n isLoadingNext: isLoadingMore,\n loadNext: (count) => {\n if (nextCursor == null) {\n return;\n }\n runFetch({\n where: state.where,\n sort: resolvedSort,\n count,\n cursor: nextCursor,\n mode: 'append',\n }).catch(() => {\n setFetchError(true);\n });\n },\n count: pageSize,\n });\n\n const listActions = useMemo(() => {\n return config.listActions ?? [];\n }, [config.listActions]);\n const visibleActions = useMemo(() => {\n return listActions.filter((action) => {\n if (action.isVisible == null) {\n return true;\n }\n return action.isVisible(null);\n });\n }, [listActions]);\n\n const headerActions = useMemo(() => {\n if (visibleActions.length === 0) {\n return undefined;\n }\n return (\n <div className={pageStyles.headerActions}>\n {visibleActions.map((action, index) => {\n const { variant: actionVariant } = action;\n const label = resolveLabel(action.label, tApp);\n let ariaLabel = label;\n if (action.ariaLabel != null) {\n ariaLabel = resolveLabel(action.ariaLabel, tApp);\n }\n const variant = resolveActionVariant(actionVariant, index);\n const size = action.size ?? 'small';\n const isDisabled = action.isDisabled?.(null) === true;\n\n if (isRouteAction(action)) {\n const href = action.to(null);\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 >\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 disabled={isDisabled}\n onClick={() => {\n setActiveFormActionId(action.id);\n }}\n aria-label={ariaLabel}\n >\n {label}\n </Button>\n );\n }\n\n return null;\n })}\n </div>\n );\n }, [tApp, visibleActions]);\n\n const activeFormAction = listActions.find((action) => {\n return action.id === activeFormActionId;\n });\n\n let statusBanner: JSX.Element | null = null;\n if (fetchError) {\n statusBanner = (\n <InlineBanner\n tone=\"danger\"\n title={t('list.errors.title')}\n actions={\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"small\"\n onClick={handleRefresh}\n >\n {t('list.actions.retry')}\n </Button>\n }\n onDismiss={() => {\n setFetchError(false);\n }}\n >\n {t('list.errors.fetchFailed')}\n </InlineBanner>\n );\n }\n\n return (\n <>\n <BackofficeEntityListScaffold\n config={config}\n state={state}\n pushState={pushState}\n headerActions={headerActions}\n rows={rows}\n columns={columns}\n gridTemplateColumns={gridTemplateColumns}\n getRowId={getRowId}\n hasNextPage={nextCursor != null}\n isLoadingMore={isLoadingMore}\n isRefreshing={isRefreshing}\n onLoadMore={handleLoadMore}\n onRefresh={handleRefresh}\n totalCount={null}\n statusBanner={statusBanner}\n />\n {activeFormAction != null && isFormMutationAction(activeFormAction) && (\n <LazyBackofficeEntityActionFormDialog\n isOpen\n action={activeFormAction}\n node={null}\n onClose={() => {\n setActiveFormActionId(null);\n }}\n onSuccess={handleRefresh}\n />\n )}\n </>\n );\n};\n\nconst BackofficeEntityConnectionListPage = ({\n config,\n prepared,\n breadcrumb,\n}: Omit<BackofficeEntityListPageProps, 'config'> & {\n config: ConnectionListConfig;\n breadcrumb: ReturnType<typeof buildEntityListBreadcrumb>;\n}): JSX.Element | null => {\n const listConfig = config.list;\n\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const [activeFormActionId, setActiveFormActionId] = useState<string | null>(\n null,\n );\n\n const queryData = usePreloadedQuery(listConfig.query, prepared.query);\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\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, gridTemplateColumns } = useMemo((): {\n columns: readonly DataTableColumn<unknown>[];\n gridTemplateColumns?: string;\n } => {\n const baseColumns = buildDataTableColumns(listConfig.columns, {\n tApp,\n t,\n });\n const actionsColumn = buildActionsColumn({\n ariaLabel: t('actions.view'),\n fallback: t('common.notAvailable'),\n className: pageStyles.actionsColumnCell,\n resolveDetailHref: (id) => {\n return config.routes.detail(id);\n },\n renderAction: ({ href, ariaLabel }) => {\n return (\n <TableCell.Actions>\n <span className={pageStyles.actionTrigger} title={ariaLabel}>\n <LinkButton\n to={href}\n variant=\"icon\"\n size=\"small\"\n aria-label={ariaLabel}\n >\n <EyeSvg width={16} height={16} />\n </LinkButton>\n </span>\n </TableCell.Actions>\n );\n },\n });\n const allColumns = [...baseColumns, actionsColumn];\n return applyListEdgeColumns(allColumns, listConfig.rowFlags, 1, tApp);\n }, [config.routes, listConfig.columns, listConfig.rowFlags, t, tApp]);\n\n const getRowId = useCallback<GetRowId<unknown>>(\n (row) => {\n return listConfig.getRowId(row);\n },\n [listConfig],\n );\n\n const { state, pushState } = useBackofficeListUrlState(config);\n const listDefaults = config.listDefaults ??\n listConfig.defaultState ?? { where: null, sort: null };\n const resolvedSort = state.sort ?? listDefaults.sort;\n const { pageSize } = BACKOFFICE_LIST_DEFAULTS;\n\n const baseVariables = useMemo(() => {\n return {\n where: state.where,\n sort: resolvedSort,\n count: pageSize,\n cursor: null,\n };\n }, [pageSize, resolvedSort, state.where]);\n\n const { isRefreshing, onRefresh } = useBackofficeListRefetch({\n refetch,\n variables: baseVariables,\n defaults: {\n where: listDefaults.where,\n sort: listDefaults.sort,\n count: pageSize,\n cursor: null,\n },\n fetchPolicy: BACKOFFICE_LIST_REFETCH_POLICY,\n buildQueryVariables: listConfig.buildQueryVariables,\n });\n\n const handleLoadMore = useBackofficeLoadMore({\n hasNext,\n isLoadingNext,\n loadNext,\n count: pageSize,\n });\n\n const listActions = useMemo(() => {\n return config.listActions ?? [];\n }, [config.listActions]);\n const visibleActions = useMemo(() => {\n return listActions.filter((action) => {\n if (action.isVisible == null) {\n return true;\n }\n return action.isVisible(null);\n });\n }, [listActions]);\n\n const headerActions = useMemo(() => {\n if (visibleActions.length === 0) {\n return undefined;\n }\n return (\n <div className={pageStyles.headerActions}>\n {visibleActions.map((action, index) => {\n const { variant: actionVariant } = action;\n const label = resolveLabel(action.label, tApp);\n let ariaLabel = label;\n if (action.ariaLabel != null) {\n ariaLabel = resolveLabel(action.ariaLabel, tApp);\n }\n const variant = resolveActionVariant(actionVariant, index);\n const size = action.size ?? 'small';\n const isDisabled = action.isDisabled?.(null) === true;\n\n if (isRouteAction(action)) {\n const href = action.to(null);\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 >\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 disabled={isDisabled}\n onClick={() => {\n setActiveFormActionId(action.id);\n }}\n aria-label={ariaLabel}\n >\n {label}\n </Button>\n );\n }\n\n return null;\n })}\n </div>\n );\n }, [tApp, visibleActions]);\n\n const activeFormAction = listActions.find((action) => {\n return action.id === activeFormActionId;\n });\n\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <BackofficeEntityListScaffold\n config={config}\n state={state}\n pushState={pushState}\n headerActions={headerActions}\n rows={rows}\n columns={columns}\n gridTemplateColumns={gridTemplateColumns}\n getRowId={getRowId}\n hasNextPage={hasNext}\n isLoadingMore={isLoadingNext}\n isRefreshing={isRefreshing}\n onLoadMore={handleLoadMore}\n onRefresh={onRefresh}\n totalCount={connection.totalCount ?? null}\n />\n {activeFormAction != null && isFormMutationAction(activeFormAction) && (\n <LazyBackofficeEntityActionFormDialog\n isOpen\n action={activeFormAction}\n node={null}\n onClose={() => {\n setActiveFormActionId(null);\n }}\n onSuccess={onRefresh}\n />\n )}\n </BackofficeRightPageLayout>\n );\n};\n\nexport const BackofficeEntityListPage = ({\n entityManifest,\n config,\n prepared,\n}: BackofficeEntityListPageProps): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const breadcrumb = buildEntityListBreadcrumb(config, tApp);\n\n if (isRecordListConfig(config)) {\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <BackofficeEntityRecordListPage\n entityManifest={entityManifest}\n config={config}\n prepared={prepared}\n />\n </BackofficeRightPageLayout>\n );\n }\n if (!isConnectionListConfig(config)) {\n return null;\n }\n return (\n <BackofficeEntityConnectionListPage\n entityManifest={entityManifest}\n config={config}\n prepared={prepared}\n breadcrumb={breadcrumb}\n />\n );\n};\n\nexport default BackofficeEntityListPage;\n"],"mappings":"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"}