@plumile/backoffice-react 0.1.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/lib/esm/auth/login/AuthPanel.js +28 -0
- package/lib/esm/auth/login/AuthPanel.js.map +1 -0
- package/lib/esm/auth/login/EmailCapturePanel.js +52 -0
- package/lib/esm/auth/login/EmailCapturePanel.js.map +1 -0
- package/lib/esm/auth/login/LoginFlow.js +130 -0
- package/lib/esm/auth/login/LoginFlow.js.map +1 -0
- package/lib/esm/auth/login/MethodChooser.js +51 -0
- package/lib/esm/auth/login/MethodChooser.js.map +1 -0
- package/lib/esm/auth/login/MfaChallengeForm.js +83 -0
- package/lib/esm/auth/login/MfaChallengeForm.js.map +1 -0
- package/lib/esm/auth/login/OidcButtons.js +29 -0
- package/lib/esm/auth/login/OidcButtons.js.map +1 -0
- package/lib/esm/auth/login/PasskeyLoginForm.js +84 -0
- package/lib/esm/auth/login/PasskeyLoginForm.js.map +1 -0
- package/lib/esm/auth/login/PasswordLoginPanel.js +37 -0
- package/lib/esm/auth/login/PasswordLoginPanel.js.map +1 -0
- package/lib/esm/auth/login/loginPage.css.js +8 -0
- package/lib/esm/auth/login/loginPage.css.js.map +1 -0
- package/lib/esm/auth/login/synchronizeAuthStatusQuery.js +9 -0
- package/lib/esm/auth/login/synchronizeAuthStatusQuery.js.map +1 -0
- package/lib/esm/auth/pages/AcceptInvitationScreen.js +120 -0
- package/lib/esm/auth/pages/AcceptInvitationScreen.js.map +1 -0
- package/lib/esm/auth/pages/PasswordResetCompleteScreen.js +105 -0
- package/lib/esm/auth/pages/PasswordResetCompleteScreen.js.map +1 -0
- package/lib/esm/auth/pages/PasswordResetRequestScreen.js +88 -0
- package/lib/esm/auth/pages/PasswordResetRequestScreen.js.map +1 -0
- package/lib/esm/auth/pages/VerifyEmailScreen.js +65 -0
- package/lib/esm/auth/pages/VerifyEmailScreen.js.map +1 -0
- package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js +525 -0
- package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js.map +1 -0
- package/lib/esm/components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js +11 -0
- package/lib/esm/components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js.map +1 -0
- package/lib/esm/components/backoffice/actions/backofficeEntityActionFormDialog.css.js +8 -0
- package/lib/esm/components/backoffice/actions/backofficeEntityActionFormDialog.css.js.map +1 -0
- package/lib/esm/components/backoffice/actions/toastViewAction.js +27 -0
- package/lib/esm/components/backoffice/actions/toastViewAction.js.map +1 -0
- package/lib/esm/components/backoffice/columns/buildDataTableColumns.js +60 -0
- package/lib/esm/components/backoffice/columns/buildDataTableColumns.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailBadgeRow.js +22 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailBadgeRow.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailErrorList.js +41 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailErrorList.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailField.js +31 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailField.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.css.js +8 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.css.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.js +24 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailLayout.js +20 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailLayout.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailPayload.js +18 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailPayload.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailRelationLink.js +49 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailRelationLink.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailRelationList.js +11 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailRelationList.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js +115 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailSection.js +33 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailSection.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailTaggedValue.js +18 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailTaggedValue.js.map +1 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailBadgeRow.css.js +8 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailBadgeRow.css.js.map +1 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailErrorList.css.js +8 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailErrorList.css.js.map +1 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailField.css.js +15 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailField.css.js.map +1 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailLayout.css.js +8 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailLayout.css.js.map +1 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailRelationLink.css.js +8 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailRelationLink.css.js.map +1 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailRelationList.css.js +8 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailRelationList.css.js.map +1 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailSection.css.js +8 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailSection.css.js.map +1 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailTaggedValue.css.js +8 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailTaggedValue.css.js.map +1 -0
- package/lib/esm/components/backoffice/detail/detailPayloadUtils.js +17 -0
- package/lib/esm/components/backoffice/detail/detailPayloadUtils.js.map +1 -0
- package/lib/esm/components/backoffice/errors/BackofficeErrorBoundary.js +21 -0
- package/lib/esm/components/backoffice/errors/BackofficeErrorBoundary.js.map +1 -0
- package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js +43 -0
- package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js.map +1 -0
- package/lib/esm/components/backoffice/filters/EntityFilterValue.js +46 -0
- package/lib/esm/components/backoffice/filters/EntityFilterValue.js.map +1 -0
- package/lib/esm/components/backoffice/filters/EntityIdFilterField.js +51 -0
- package/lib/esm/components/backoffice/filters/EntityIdFilterField.js.map +1 -0
- package/lib/esm/components/backoffice/filters/backofficeFilterAction.css.js +8 -0
- package/lib/esm/components/backoffice/filters/backofficeFilterAction.css.js.map +1 -0
- package/lib/esm/components/backoffice/filters/entityIdFilterField.css.js +8 -0
- package/lib/esm/components/backoffice/filters/entityIdFilterField.css.js.map +1 -0
- package/lib/esm/components/backoffice/layout/backofficeSidebarActions.css.js +8 -0
- package/lib/esm/components/backoffice/layout/backofficeSidebarActions.css.js.map +1 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js +10 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js.map +1 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js +38 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js.map +1 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarPortal.js +12 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarPortal.js.map +1 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarPortalContext.js +11 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarPortalContext.js.map +1 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/assertValidBreadcrumb.js +16 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/assertValidBreadcrumb.js.map +1 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.js +8 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.js.map +1 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/buildBreadcrumbs.js +48 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/buildBreadcrumbs.js.map +1 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/types.js +0 -0
- package/lib/esm/components/backoffice/layout/buildSidebarSections.js +183 -0
- package/lib/esm/components/backoffice/layout/buildSidebarSections.js.map +1 -0
- package/lib/esm/components/backoffice/layout/mapViewerToSidebarProfileView.js +18 -0
- package/lib/esm/components/backoffice/layout/mapViewerToSidebarProfileView.js.map +1 -0
- package/lib/esm/components/backoffice/layout/sidebarUtils.js +44 -0
- package/lib/esm/components/backoffice/layout/sidebarUtils.js.map +1 -0
- package/lib/esm/components/backoffice/list/RowFlagsCell.css.js +7 -0
- package/lib/esm/components/backoffice/list/RowFlagsCell.css.js.map +1 -0
- package/lib/esm/components/backoffice/list/RowFlagsCell.js +37 -0
- package/lib/esm/components/backoffice/list/RowFlagsCell.js.map +1 -0
- package/lib/esm/components/backoffice/overview/BackofficeOverviewLayout.js +31 -0
- package/lib/esm/components/backoffice/overview/BackofficeOverviewLayout.js.map +1 -0
- package/lib/esm/components/backoffice/overview/backofficeOverviewLayout.css.js +8 -0
- package/lib/esm/components/backoffice/overview/backofficeOverviewLayout.css.js.map +1 -0
- package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js +107 -0
- package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js.map +1 -0
- package/lib/esm/components/backoffice/pickers/entityIdPickerDialog.css.js +8 -0
- package/lib/esm/components/backoffice/pickers/entityIdPickerDialog.css.js.map +1 -0
- package/lib/esm/components/backoffice/pickers/shared/EntityPickerList.js +24 -0
- package/lib/esm/components/backoffice/pickers/shared/EntityPickerList.js.map +1 -0
- package/lib/esm/components/backoffice/pickers/shared/EntityPickerRowBase.js +23 -0
- package/lib/esm/components/backoffice/pickers/shared/EntityPickerRowBase.js.map +1 -0
- package/lib/esm/components/backoffice/pickers/shared/EntityPickerShell.js +24 -0
- package/lib/esm/components/backoffice/pickers/shared/EntityPickerShell.js.map +1 -0
- package/lib/esm/components/backoffice/pickers/types.js +0 -0
- package/lib/esm/components/backoffice/refs/BackofficeEntityIdRef.js +35 -0
- package/lib/esm/components/backoffice/refs/BackofficeEntityIdRef.js.map +1 -0
- package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js +54 -0
- package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js.map +1 -0
- package/lib/esm/components/backoffice/refs/backofficeEntityIdRef.css.js +8 -0
- package/lib/esm/components/backoffice/refs/backofficeEntityIdRef.css.js.map +1 -0
- package/lib/esm/components/backoffice/refs/backofficeRelatedCountLink.css.js +8 -0
- package/lib/esm/components/backoffice/refs/backofficeRelatedCountLink.css.js.map +1 -0
- package/lib/esm/components/backoffice/routing/BackofficeContentBoundary.js +24 -0
- package/lib/esm/components/backoffice/routing/BackofficeContentBoundary.js.map +1 -0
- package/lib/esm/components/backoffice/routing/BackofficeContentError.js +39 -0
- package/lib/esm/components/backoffice/routing/BackofficeContentError.js.map +1 -0
- package/lib/esm/components/backoffice/routing/BackofficeContentFallback.js +47 -0
- package/lib/esm/components/backoffice/routing/BackofficeContentFallback.js.map +1 -0
- package/lib/esm/components/backoffice/routing/BackofficeRouteFallback.js +22 -0
- package/lib/esm/components/backoffice/routing/BackofficeRouteFallback.js.map +1 -0
- package/lib/esm/components/backoffice/routing/BackofficeRoutePendingBar.js +12 -0
- package/lib/esm/components/backoffice/routing/BackofficeRoutePendingBar.js.map +1 -0
- package/lib/esm/components/backoffice/routing/backofficeContentBoundary.css.js +8 -0
- package/lib/esm/components/backoffice/routing/backofficeContentBoundary.css.js.map +1 -0
- package/lib/esm/components/backoffice/routing/backofficeContentError.css.js +8 -0
- package/lib/esm/components/backoffice/routing/backofficeContentError.css.js.map +1 -0
- package/lib/esm/components/backoffice/routing/backofficeContentFallback.css.js +8 -0
- package/lib/esm/components/backoffice/routing/backofficeContentFallback.css.js.map +1 -0
- package/lib/esm/components/backoffice/routing/backofficeRouteFallback.css.js +8 -0
- package/lib/esm/components/backoffice/routing/backofficeRouteFallback.css.js.map +1 -0
- package/lib/esm/components/backoffice/routing/backofficeRoutePendingBar.css.js +8 -0
- package/lib/esm/components/backoffice/routing/backofficeRoutePendingBar.css.js.map +1 -0
- package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.js +11 -0
- package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.js.map +1 -0
- package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js +446 -0
- package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js.map +1 -0
- package/lib/esm/components/backoffice/scaffolds/BackofficeListFilterContext.js +40 -0
- package/lib/esm/components/backoffice/scaffolds/BackofficeListFilterContext.js.map +1 -0
- package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js +25 -0
- package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js.map +1 -0
- package/lib/esm/components/backoffice/scaffolds/backofficeEntityListScaffold.css.js +8 -0
- package/lib/esm/components/backoffice/scaffolds/backofficeEntityListScaffold.css.js.map +1 -0
- package/lib/esm/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.js +8 -0
- package/lib/esm/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.js.map +1 -0
- package/lib/esm/components/backoffice/shared/BackofficeInlineFilterRow.js +12 -0
- package/lib/esm/components/backoffice/shared/BackofficeInlineFilterRow.js.map +1 -0
- package/lib/esm/components/backoffice/shared/backofficeInlineFilterRow.css.js +8 -0
- package/lib/esm/components/backoffice/shared/backofficeInlineFilterRow.css.js.map +1 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsDocPanel.js +40 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsDocPanel.js.map +1 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsErrorFallback.js +48 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsErrorFallback.js.map +1 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsJsonForm.js +58 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsJsonForm.js.map +1 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsPageLayout.js +81 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsPageLayout.js.map +1 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsParamsContext.js +16 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsParamsContext.js.map +1 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsProjectPicker.js +56 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsProjectPicker.js.map +1 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsQueryBoundary.js +20 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsQueryBoundary.js.map +1 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsScopePicker.js +56 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsScopePicker.js.map +1 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsDocPanel.css.js +8 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsDocPanel.css.js.map +1 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsForm.css.js +8 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsForm.css.js.map +1 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsJsonForm.css.js +8 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsJsonForm.css.js.map +1 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsPageLayout.css.js +8 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsPageLayout.css.js.map +1 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsProjectPicker.css.js +8 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsProjectPicker.css.js.map +1 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsScopePicker.css.js +8 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsScopePicker.css.js.map +1 -0
- package/lib/esm/filters/filterHelpers.js +36 -0
- package/lib/esm/filters/filterHelpers.js.map +1 -0
- package/lib/esm/hooks/useAuth.js +439 -0
- package/lib/esm/hooks/useAuth.js.map +1 -0
- package/lib/esm/hooks/useBackofficeAuth.js +89 -0
- package/lib/esm/hooks/useBackofficeAuth.js.map +1 -0
- package/lib/esm/hooks/useBackofficeListRefetch.js +40 -0
- package/lib/esm/hooks/useBackofficeListRefetch.js.map +1 -0
- package/lib/esm/hooks/useBackofficeListUrlState.js +37 -0
- package/lib/esm/hooks/useBackofficeListUrlState.js.map +1 -0
- package/lib/esm/hooks/useBackofficeLoadMore.js +18 -0
- package/lib/esm/hooks/useBackofficeLoadMore.js.map +1 -0
- package/lib/esm/hooks/useBackofficeSessionAuth.js +28 -0
- package/lib/esm/hooks/useBackofficeSessionAuth.js.map +1 -0
- package/lib/esm/hooks/useBackofficeSidebarPins.js +70 -0
- package/lib/esm/hooks/useBackofficeSidebarPins.js.map +1 -0
- package/lib/esm/hooks/useBackofficeToolsUrlParams.js +15 -0
- package/lib/esm/hooks/useBackofficeToolsUrlParams.js.map +1 -0
- package/lib/esm/hooks/useSidebarGroupCollapse.js +35 -0
- package/lib/esm/hooks/useSidebarGroupCollapse.js.map +1 -0
- package/lib/esm/i18n/createI18nInstance.js +62 -0
- package/lib/esm/i18n/createI18nInstance.js.map +1 -0
- package/lib/esm/i18n/locales/en/backofficeReact.js +249 -0
- package/lib/esm/i18n/locales/en/backofficeReact.js.map +1 -0
- package/lib/esm/i18n/locales/en/shared.js +207 -0
- package/lib/esm/i18n/locales/en/shared.js.map +1 -0
- package/lib/esm/i18n/locales/fr/backofficeReact.js +251 -0
- package/lib/esm/i18n/locales/fr/backofficeReact.js.map +1 -0
- package/lib/esm/i18n/locales/fr/shared.js +207 -0
- package/lib/esm/i18n/locales/fr/shared.js.map +1 -0
- package/lib/esm/i18n/mergeResourceLanguages.js +19 -0
- package/lib/esm/i18n/mergeResourceLanguages.js.map +1 -0
- package/lib/esm/i18n/resources.js +19 -0
- package/lib/esm/i18n/resources.js.map +1 -0
- package/lib/esm/i18n/useBackofficeFormats.js +23 -0
- package/lib/esm/i18n/useBackofficeFormats.js.map +1 -0
- package/lib/esm/i18n/useBackofficeReactTranslation.js +9 -0
- package/lib/esm/i18n/useBackofficeReactTranslation.js.map +1 -0
- package/lib/esm/i18n/useSharedTranslation.js +9 -0
- package/lib/esm/i18n/useSharedTranslation.js.map +1 -0
- package/lib/esm/index.js +2 -0
- package/lib/esm/modules/sharedSchemaTypes.js +0 -0
- package/lib/esm/modules/webauthn.js +33 -0
- package/lib/esm/modules/webauthn.js.map +1 -0
- package/lib/esm/pages/BackofficeAcceptInvitationPage.js +24 -0
- package/lib/esm/pages/BackofficeAcceptInvitationPage.js.map +1 -0
- package/lib/esm/pages/BackofficeDashboardPage.js +198 -0
- package/lib/esm/pages/BackofficeDashboardPage.js.map +1 -0
- package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js +18 -0
- package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js.map +1 -0
- package/lib/esm/pages/BackofficeEntityDetailPage.js +843 -0
- package/lib/esm/pages/BackofficeEntityDetailPage.js.map +1 -0
- package/lib/esm/pages/BackofficeEntityDetailUnknownPageRedirect.js +17 -0
- package/lib/esm/pages/BackofficeEntityDetailUnknownPageRedirect.js.map +1 -0
- package/lib/esm/pages/BackofficeEntityListPage.js +363 -0
- package/lib/esm/pages/BackofficeEntityListPage.js.map +1 -0
- package/lib/esm/pages/BackofficeLayoutPage.js +141 -0
- package/lib/esm/pages/BackofficeLayoutPage.js.map +1 -0
- package/lib/esm/pages/BackofficeLoginPage.js +46 -0
- package/lib/esm/pages/BackofficeLoginPage.js.map +1 -0
- package/lib/esm/pages/BackofficePasswordResetCompletePage.js +59 -0
- package/lib/esm/pages/BackofficePasswordResetCompletePage.js.map +1 -0
- package/lib/esm/pages/BackofficePasswordResetRequestPage.js +54 -0
- package/lib/esm/pages/BackofficePasswordResetRequestPage.js.map +1 -0
- package/lib/esm/pages/BackofficeToolsOperationPage.js +465 -0
- package/lib/esm/pages/BackofficeToolsOperationPage.js.map +1 -0
- package/lib/esm/pages/BackofficeVerifyEmailPage.js +59 -0
- package/lib/esm/pages/BackofficeVerifyEmailPage.js.map +1 -0
- package/lib/esm/pages/backofficeDashboardPage.css.js +8 -0
- package/lib/esm/pages/backofficeDashboardPage.css.js.map +1 -0
- package/lib/esm/pages/backofficeEntityDetailPage.css.js +8 -0
- package/lib/esm/pages/backofficeEntityDetailPage.css.js.map +1 -0
- package/lib/esm/pages/backofficeEntityListPage.css.js +8 -0
- package/lib/esm/pages/backofficeEntityListPage.css.js.map +1 -0
- package/lib/esm/pages/detail/BackofficeEntityDetailLayoutContext.js +11 -0
- package/lib/esm/pages/detail/BackofficeEntityDetailLayoutContext.js.map +1 -0
- package/lib/esm/pages/detail/buildTabsItems.js +10 -0
- package/lib/esm/pages/detail/buildTabsItems.js.map +1 -0
- package/lib/esm/pages/detail/pageResolution.js +28 -0
- package/lib/esm/pages/detail/pageResolution.js.map +1 -0
- package/lib/esm/provider/BackofficeConfigContext.js +12 -0
- package/lib/esm/provider/BackofficeConfigContext.js.map +1 -0
- package/lib/esm/provider/BackofficeProvider.js +142 -0
- package/lib/esm/provider/BackofficeProvider.js.map +1 -0
- package/lib/esm/provider/entityRegistry.js +91 -0
- package/lib/esm/provider/entityRegistry.js.map +1 -0
- package/lib/esm/provider/lazyValue.js +14 -0
- package/lib/esm/provider/lazyValue.js.map +1 -0
- package/lib/esm/provider/types.js +0 -0
- package/lib/esm/provider/useBackofficeEntityLoader.js +137 -0
- package/lib/esm/provider/useBackofficeEntityLoader.js.map +1 -0
- package/lib/esm/provider/useBackofficeLazyValue.js +39 -0
- package/lib/esm/provider/useBackofficeLazyValue.js.map +1 -0
- package/lib/esm/relay/RelayProvider.js +12 -0
- package/lib/esm/relay/RelayProvider.js.map +1 -0
- package/lib/esm/relay/createInlineDataReader.js +2 -0
- package/lib/esm/relay/createInlineReader.js +7 -0
- package/lib/esm/relay/createInlineReader.js.map +1 -0
- package/lib/esm/relay/envHelpers.js +46 -0
- package/lib/esm/relay/envHelpers.js.map +1 -0
- package/lib/esm/relay/environment.js +221 -0
- package/lib/esm/relay/environment.js.map +1 -0
- package/lib/esm/relay/identityView.js +6 -0
- package/lib/esm/relay/identityView.js.map +1 -0
- package/lib/esm/relay/mutationResult.js +47 -0
- package/lib/esm/relay/mutationResult.js.map +1 -0
- package/lib/esm/relay/useRelayEnvironment.js +2 -0
- package/lib/esm/router/backofficeAuthPaths.js +13 -0
- package/lib/esm/router/backofficeAuthPaths.js.map +1 -0
- package/lib/esm/router/createBackofficeRoutes.js +273 -0
- package/lib/esm/router/createBackofficeRoutes.js.map +1 -0
- package/lib/esm/style.css +2 -0
- package/lib/esm/style.js +1 -0
- package/lib/types/auth/login/AuthPanel.d.ts +10 -0
- package/lib/types/auth/login/AuthPanel.d.ts.map +1 -0
- package/lib/types/auth/login/EmailCapturePanel.d.ts +12 -0
- package/lib/types/auth/login/EmailCapturePanel.d.ts.map +1 -0
- package/lib/types/auth/login/LoginFlow.d.ts +11 -0
- package/lib/types/auth/login/LoginFlow.d.ts.map +1 -0
- package/lib/types/auth/login/MethodChooser.d.ts +12 -0
- package/lib/types/auth/login/MethodChooser.d.ts.map +1 -0
- package/lib/types/auth/login/MfaChallengeForm.d.ts +10 -0
- package/lib/types/auth/login/MfaChallengeForm.d.ts.map +1 -0
- package/lib/types/auth/login/OidcButtons.d.ts +8 -0
- package/lib/types/auth/login/OidcButtons.d.ts.map +1 -0
- package/lib/types/auth/login/PasskeyLoginForm.d.ts +12 -0
- package/lib/types/auth/login/PasskeyLoginForm.d.ts.map +1 -0
- package/lib/types/auth/login/PasswordLoginPanel.d.ts +13 -0
- package/lib/types/auth/login/PasswordLoginPanel.d.ts.map +1 -0
- package/lib/types/auth/login/loginPage.css.d.ts +14 -0
- package/lib/types/auth/login/loginPage.css.d.ts.map +1 -0
- package/lib/types/auth/login/synchronizeAuthStatusQuery.d.ts +3 -0
- package/lib/types/auth/login/synchronizeAuthStatusQuery.d.ts.map +1 -0
- package/lib/types/auth/pages/AcceptInvitationScreen.d.ts +11 -0
- package/lib/types/auth/pages/AcceptInvitationScreen.d.ts.map +1 -0
- package/lib/types/auth/pages/PasswordResetCompleteScreen.d.ts +12 -0
- package/lib/types/auth/pages/PasswordResetCompleteScreen.d.ts.map +1 -0
- package/lib/types/auth/pages/PasswordResetRequestScreen.d.ts +10 -0
- package/lib/types/auth/pages/PasswordResetRequestScreen.d.ts.map +1 -0
- package/lib/types/auth/pages/VerifyEmailScreen.d.ts +11 -0
- package/lib/types/auth/pages/VerifyEmailScreen.d.ts.map +1 -0
- package/lib/types/components/backoffice/actions/BackofficeEntityActionFormDialog.d.ts +12 -0
- package/lib/types/components/backoffice/actions/BackofficeEntityActionFormDialog.d.ts.map +1 -0
- package/lib/types/components/backoffice/actions/LazyBackofficeEntityActionFormDialog.d.ts +5 -0
- package/lib/types/components/backoffice/actions/LazyBackofficeEntityActionFormDialog.d.ts.map +1 -0
- package/lib/types/components/backoffice/actions/backofficeEntityActionFormDialog.css.d.ts +7 -0
- package/lib/types/components/backoffice/actions/backofficeEntityActionFormDialog.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/actions/toastViewAction.d.ts +17 -0
- package/lib/types/components/backoffice/actions/toastViewAction.d.ts.map +1 -0
- package/lib/types/components/backoffice/columns/buildDataTableColumns.d.ts +13 -0
- package/lib/types/components/backoffice/columns/buildDataTableColumns.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailBadgeRow.d.ts +8 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailBadgeRow.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailErrorList.d.ts +14 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailErrorList.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailField.d.ts +13 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailField.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailFlagTag.css.d.ts +4 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailFlagTag.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailFlagTag.d.ts +10 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailFlagTag.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailLayout.d.ts +8 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailLayout.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailPayload.d.ts +10 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailPayload.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailRelationLink.d.ts +13 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailRelationLink.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailRelationList.d.ts +7 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailRelationList.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailRelationListBlock.d.ts +11 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailRelationListBlock.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailSection.d.ts +11 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailSection.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailTaggedValue.d.ts +12 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailTaggedValue.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/backofficeDetailBadgeRow.css.d.ts +2 -0
- package/lib/types/components/backoffice/detail/backofficeDetailBadgeRow.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/backofficeDetailErrorList.css.d.ts +8 -0
- package/lib/types/components/backoffice/detail/backofficeDetailErrorList.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/backofficeDetailField.css.d.ts +13 -0
- package/lib/types/components/backoffice/detail/backofficeDetailField.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/backofficeDetailLayout.css.d.ts +5 -0
- package/lib/types/components/backoffice/detail/backofficeDetailLayout.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/backofficeDetailRelationLink.css.d.ts +4 -0
- package/lib/types/components/backoffice/detail/backofficeDetailRelationLink.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/backofficeDetailRelationList.css.d.ts +2 -0
- package/lib/types/components/backoffice/detail/backofficeDetailRelationList.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/backofficeDetailSection.css.d.ts +6 -0
- package/lib/types/components/backoffice/detail/backofficeDetailSection.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/backofficeDetailTaggedValue.css.d.ts +3 -0
- package/lib/types/components/backoffice/detail/backofficeDetailTaggedValue.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/detailPayloadUtils.d.ts +3 -0
- package/lib/types/components/backoffice/detail/detailPayloadUtils.d.ts.map +1 -0
- package/lib/types/components/backoffice/errors/BackofficeErrorBoundary.d.ts +19 -0
- package/lib/types/components/backoffice/errors/BackofficeErrorBoundary.d.ts.map +1 -0
- package/lib/types/components/backoffice/filters/BackofficeFilterAction.d.ts +12 -0
- package/lib/types/components/backoffice/filters/BackofficeFilterAction.d.ts.map +1 -0
- package/lib/types/components/backoffice/filters/EntityFilterValue.d.ts +14 -0
- package/lib/types/components/backoffice/filters/EntityFilterValue.d.ts.map +1 -0
- package/lib/types/components/backoffice/filters/EntityIdFilterField.d.ts +12 -0
- package/lib/types/components/backoffice/filters/EntityIdFilterField.d.ts.map +1 -0
- package/lib/types/components/backoffice/filters/backofficeFilterAction.css.d.ts +3 -0
- package/lib/types/components/backoffice/filters/backofficeFilterAction.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/filters/entityIdFilterField.css.d.ts +6 -0
- package/lib/types/components/backoffice/filters/entityIdFilterField.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/backofficeSidebarActions.css.d.ts +2 -0
- package/lib/types/components/backoffice/layout/backofficeSidebarActions.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.d.ts +9 -0
- package/lib/types/components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.d.ts +8 -0
- package/lib/types/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/breadcrumb/BackofficeTopbarPortal.d.ts +7 -0
- package/lib/types/components/backoffice/layout/breadcrumb/BackofficeTopbarPortal.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/breadcrumb/BackofficeTopbarPortalContext.d.ts +6 -0
- package/lib/types/components/backoffice/layout/breadcrumb/BackofficeTopbarPortalContext.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/breadcrumb/assertValidBreadcrumb.d.ts +3 -0
- package/lib/types/components/backoffice/layout/breadcrumb/assertValidBreadcrumb.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.d.ts +7 -0
- package/lib/types/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/breadcrumb/buildBreadcrumbs.d.ts +21 -0
- package/lib/types/components/backoffice/layout/breadcrumb/buildBreadcrumbs.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/breadcrumb/types.d.ts +9 -0
- package/lib/types/components/backoffice/layout/breadcrumb/types.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/buildSidebarSections.d.ts +22 -0
- package/lib/types/components/backoffice/layout/buildSidebarSections.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/mapViewerToSidebarProfileView.d.ts +15 -0
- package/lib/types/components/backoffice/layout/mapViewerToSidebarProfileView.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/sidebarUtils.d.ts +16 -0
- package/lib/types/components/backoffice/layout/sidebarUtils.d.ts.map +1 -0
- package/lib/types/components/backoffice/list/RowFlagsCell.css.d.ts +4 -0
- package/lib/types/components/backoffice/list/RowFlagsCell.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/list/RowFlagsCell.d.ts +10 -0
- package/lib/types/components/backoffice/list/RowFlagsCell.d.ts.map +1 -0
- package/lib/types/components/backoffice/overview/BackofficeOverviewLayout.d.ts +10 -0
- package/lib/types/components/backoffice/overview/BackofficeOverviewLayout.d.ts.map +1 -0
- package/lib/types/components/backoffice/overview/backofficeOverviewLayout.css.d.ts +6 -0
- package/lib/types/components/backoffice/overview/backofficeOverviewLayout.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.d.ts +14 -0
- package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.d.ts.map +1 -0
- package/lib/types/components/backoffice/pickers/entityIdPickerDialog.css.d.ts +8 -0
- package/lib/types/components/backoffice/pickers/entityIdPickerDialog.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/pickers/shared/EntityPickerList.d.ts +10 -0
- package/lib/types/components/backoffice/pickers/shared/EntityPickerList.d.ts.map +1 -0
- package/lib/types/components/backoffice/pickers/shared/EntityPickerRowBase.d.ts +8 -0
- package/lib/types/components/backoffice/pickers/shared/EntityPickerRowBase.d.ts.map +1 -0
- package/lib/types/components/backoffice/pickers/shared/EntityPickerShell.d.ts +11 -0
- package/lib/types/components/backoffice/pickers/shared/EntityPickerShell.d.ts.map +1 -0
- package/lib/types/components/backoffice/pickers/types.d.ts +14 -0
- package/lib/types/components/backoffice/pickers/types.d.ts.map +1 -0
- package/lib/types/components/backoffice/refs/BackofficeEntityIdRef.d.ts +13 -0
- package/lib/types/components/backoffice/refs/BackofficeEntityIdRef.d.ts.map +1 -0
- package/lib/types/components/backoffice/refs/BackofficeRelatedCountLink.d.ts +9 -0
- package/lib/types/components/backoffice/refs/BackofficeRelatedCountLink.d.ts.map +1 -0
- package/lib/types/components/backoffice/refs/backofficeEntityIdRef.css.d.ts +2 -0
- package/lib/types/components/backoffice/refs/backofficeEntityIdRef.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/refs/backofficeRelatedCountLink.css.d.ts +2 -0
- package/lib/types/components/backoffice/refs/backofficeRelatedCountLink.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/BackofficeContentBoundary.d.ts +7 -0
- package/lib/types/components/backoffice/routing/BackofficeContentBoundary.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/BackofficeContentError.d.ts +8 -0
- package/lib/types/components/backoffice/routing/BackofficeContentError.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/BackofficeContentFallback.d.ts +4 -0
- package/lib/types/components/backoffice/routing/BackofficeContentFallback.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/BackofficeRouteFallback.d.ts +4 -0
- package/lib/types/components/backoffice/routing/BackofficeRouteFallback.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/BackofficeRoutePendingBar.d.ts +4 -0
- package/lib/types/components/backoffice/routing/BackofficeRoutePendingBar.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/backofficeContentBoundary.css.d.ts +2 -0
- package/lib/types/components/backoffice/routing/backofficeContentBoundary.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/backofficeContentError.css.d.ts +3 -0
- package/lib/types/components/backoffice/routing/backofficeContentError.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/backofficeContentFallback.css.d.ts +5 -0
- package/lib/types/components/backoffice/routing/backofficeContentFallback.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/backofficeRouteFallback.css.d.ts +3 -0
- package/lib/types/components/backoffice/routing/backofficeRouteFallback.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/backofficeRoutePendingBar.css.d.ts +3 -0
- package/lib/types/components/backoffice/routing/backofficeRoutePendingBar.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.d.ts +13 -0
- package/lib/types/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.d.ts.map +1 -0
- package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts +30 -0
- package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts.map +1 -0
- package/lib/types/components/backoffice/scaffolds/BackofficeListFilterContext.d.ts +23 -0
- package/lib/types/components/backoffice/scaffolds/BackofficeListFilterContext.d.ts.map +1 -0
- package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.d.ts +11 -0
- package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.d.ts.map +1 -0
- package/lib/types/components/backoffice/scaffolds/backofficeEntityListScaffold.css.d.ts +5 -0
- package/lib/types/components/backoffice/scaffolds/backofficeEntityListScaffold.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.d.ts +3 -0
- package/lib/types/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/shared/BackofficeInlineFilterRow.d.ts +8 -0
- package/lib/types/components/backoffice/shared/BackofficeInlineFilterRow.d.ts.map +1 -0
- package/lib/types/components/backoffice/shared/backofficeInlineFilterRow.css.d.ts +2 -0
- package/lib/types/components/backoffice/shared/backofficeInlineFilterRow.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsDocPanel.d.ts +11 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsDocPanel.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsErrorFallback.d.ts +8 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsErrorFallback.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsJsonForm.d.ts +15 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsJsonForm.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsPageLayout.d.ts +13 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsPageLayout.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsParamsContext.d.ts +14 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsParamsContext.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsProjectPicker.d.ts +8 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsProjectPicker.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsQueryBoundary.d.ts +7 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsQueryBoundary.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsScopePicker.d.ts +8 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsScopePicker.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/backofficeToolsDocPanel.css.d.ts +8 -0
- package/lib/types/components/backoffice/tools/backofficeToolsDocPanel.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/backofficeToolsForm.css.d.ts +6 -0
- package/lib/types/components/backoffice/tools/backofficeToolsForm.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/backofficeToolsJsonForm.css.d.ts +4 -0
- package/lib/types/components/backoffice/tools/backofficeToolsJsonForm.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/backofficeToolsPageLayout.css.d.ts +13 -0
- package/lib/types/components/backoffice/tools/backofficeToolsPageLayout.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/backofficeToolsProjectPicker.css.d.ts +4 -0
- package/lib/types/components/backoffice/tools/backofficeToolsProjectPicker.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/backofficeToolsScopePicker.css.d.ts +4 -0
- package/lib/types/components/backoffice/tools/backofficeToolsScopePicker.css.d.ts.map +1 -0
- package/lib/types/filters/filterHelpers.d.ts +5 -0
- package/lib/types/filters/filterHelpers.d.ts.map +1 -0
- package/lib/types/hooks/useAuth.d.ts +170 -0
- package/lib/types/hooks/useAuth.d.ts.map +1 -0
- package/lib/types/hooks/useBackofficeAuth.d.ts +3 -0
- package/lib/types/hooks/useBackofficeAuth.d.ts.map +1 -0
- package/lib/types/hooks/useBackofficeListRefetch.d.ts +17 -0
- package/lib/types/hooks/useBackofficeListRefetch.d.ts.map +1 -0
- package/lib/types/hooks/useBackofficeListUrlState.d.ts +8 -0
- package/lib/types/hooks/useBackofficeListUrlState.d.ts.map +1 -0
- package/lib/types/hooks/useBackofficeLoadMore.d.ts +9 -0
- package/lib/types/hooks/useBackofficeLoadMore.d.ts.map +1 -0
- package/lib/types/hooks/useBackofficeSessionAuth.d.ts +7 -0
- package/lib/types/hooks/useBackofficeSessionAuth.d.ts.map +1 -0
- package/lib/types/hooks/useBackofficeSidebarPins.d.ts +15 -0
- package/lib/types/hooks/useBackofficeSidebarPins.d.ts.map +1 -0
- package/lib/types/hooks/useBackofficeToolsUrlParams.d.ts +8 -0
- package/lib/types/hooks/useBackofficeToolsUrlParams.d.ts.map +1 -0
- package/lib/types/hooks/useSidebarGroupCollapse.d.ts +11 -0
- package/lib/types/hooks/useSidebarGroupCollapse.d.ts.map +1 -0
- package/lib/types/i18n/createI18nInstance.d.ts +17 -0
- package/lib/types/i18n/createI18nInstance.d.ts.map +1 -0
- package/lib/types/i18n/mergeResourceLanguages.d.ts +3 -0
- package/lib/types/i18n/mergeResourceLanguages.d.ts.map +1 -0
- package/lib/types/i18n/resources.d.ts +1010 -0
- package/lib/types/i18n/resources.d.ts.map +1 -0
- package/lib/types/i18n/useBackofficeFormats.d.ts +7 -0
- package/lib/types/i18n/useBackofficeFormats.d.ts.map +1 -0
- package/lib/types/i18n/useBackofficeReactTranslation.d.ts +3 -0
- package/lib/types/i18n/useBackofficeReactTranslation.d.ts.map +1 -0
- package/lib/types/i18n/useSharedTranslation.d.ts +3 -0
- package/lib/types/i18n/useSharedTranslation.d.ts.map +1 -0
- package/lib/types/index.d.ts +3 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/modules/sharedSchemaTypes.d.ts +7 -0
- package/lib/types/modules/sharedSchemaTypes.d.ts.map +1 -0
- package/lib/types/modules/webauthn.d.ts +6 -0
- package/lib/types/modules/webauthn.d.ts.map +1 -0
- package/lib/types/pages/BackofficeAcceptInvitationPage.d.ts +4 -0
- package/lib/types/pages/BackofficeAcceptInvitationPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficeDashboardPage.d.ts +4 -0
- package/lib/types/pages/BackofficeDashboardPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficeEntityDetailLayoutPage.d.ts +11 -0
- package/lib/types/pages/BackofficeEntityDetailLayoutPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficeEntityDetailPage.d.ts +18 -0
- package/lib/types/pages/BackofficeEntityDetailPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficeEntityDetailUnknownPageRedirect.d.ts +13 -0
- package/lib/types/pages/BackofficeEntityDetailUnknownPageRedirect.d.ts.map +1 -0
- package/lib/types/pages/BackofficeEntityListPage.d.ts +10 -0
- package/lib/types/pages/BackofficeEntityListPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficeLayoutPage.d.ts +17 -0
- package/lib/types/pages/BackofficeLayoutPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficeLoginPage.d.ts +11 -0
- package/lib/types/pages/BackofficeLoginPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficePasswordResetCompletePage.d.ts +4 -0
- package/lib/types/pages/BackofficePasswordResetCompletePage.d.ts.map +1 -0
- package/lib/types/pages/BackofficePasswordResetRequestPage.d.ts +4 -0
- package/lib/types/pages/BackofficePasswordResetRequestPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficeToolsOperationPage.d.ts +9 -0
- package/lib/types/pages/BackofficeToolsOperationPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficeVerifyEmailPage.d.ts +4 -0
- package/lib/types/pages/BackofficeVerifyEmailPage.d.ts.map +1 -0
- package/lib/types/pages/backofficeDashboardPage.css.d.ts +5 -0
- package/lib/types/pages/backofficeDashboardPage.css.d.ts.map +1 -0
- package/lib/types/pages/backofficeEntityDetailPage.css.d.ts +5 -0
- package/lib/types/pages/backofficeEntityDetailPage.css.d.ts.map +1 -0
- package/lib/types/pages/backofficeEntityListPage.css.d.ts +4 -0
- package/lib/types/pages/backofficeEntityListPage.css.d.ts.map +1 -0
- package/lib/types/pages/detail/BackofficeEntityDetailLayoutContext.d.ts +6 -0
- package/lib/types/pages/detail/BackofficeEntityDetailLayoutContext.d.ts.map +1 -0
- package/lib/types/pages/detail/buildTabsItems.d.ts +12 -0
- package/lib/types/pages/detail/buildTabsItems.d.ts.map +1 -0
- package/lib/types/pages/detail/pageResolution.d.ts +20 -0
- package/lib/types/pages/detail/pageResolution.d.ts.map +1 -0
- package/lib/types/provider/BackofficeConfigContext.d.ts +18 -0
- package/lib/types/provider/BackofficeConfigContext.d.ts.map +1 -0
- package/lib/types/provider/BackofficeProvider.d.ts +7 -0
- package/lib/types/provider/BackofficeProvider.d.ts.map +1 -0
- package/lib/types/provider/entityRegistry.d.ts +28 -0
- package/lib/types/provider/entityRegistry.d.ts.map +1 -0
- package/lib/types/provider/lazyValue.d.ts +7 -0
- package/lib/types/provider/lazyValue.d.ts.map +1 -0
- package/lib/types/provider/types.d.ts +101 -0
- package/lib/types/provider/types.d.ts.map +1 -0
- package/lib/types/provider/useBackofficeEntityLoader.d.ts +39 -0
- package/lib/types/provider/useBackofficeEntityLoader.d.ts.map +1 -0
- package/lib/types/provider/useBackofficeLazyValue.d.ts +13 -0
- package/lib/types/provider/useBackofficeLazyValue.d.ts.map +1 -0
- package/lib/types/relay/RelayProvider.d.ts +7 -0
- package/lib/types/relay/RelayProvider.d.ts.map +1 -0
- package/lib/types/relay/createInlineDataReader.d.ts +2 -0
- package/lib/types/relay/createInlineDataReader.d.ts.map +1 -0
- package/lib/types/relay/createInlineReader.d.ts +4 -0
- package/lib/types/relay/createInlineReader.d.ts.map +1 -0
- package/lib/types/relay/envHelpers.d.ts +16 -0
- package/lib/types/relay/envHelpers.d.ts.map +1 -0
- package/lib/types/relay/environment.d.ts +12 -0
- package/lib/types/relay/environment.d.ts.map +1 -0
- package/lib/types/relay/identityView.d.ts +2 -0
- package/lib/types/relay/identityView.d.ts.map +1 -0
- package/lib/types/relay/mutationResult.d.ts +51 -0
- package/lib/types/relay/mutationResult.d.ts.map +1 -0
- package/lib/types/relay/useRelayEnvironment.d.ts +2 -0
- package/lib/types/relay/useRelayEnvironment.d.ts.map +1 -0
- package/lib/types/router/backofficeAuthPaths.d.ts +3 -0
- package/lib/types/router/backofficeAuthPaths.d.ts.map +1 -0
- package/lib/types/router/createBackofficeRoutes.d.ts +32 -0
- package/lib/types/router/createBackofficeRoutes.d.ts.map +1 -0
- package/lib/types/style.d.ts +2 -0
- package/lib/types/style.d.ts.map +1 -0
- package/package.json +138 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BackofficeEntityDetailPage.js","names":[],"sources":["../../../src/pages/BackofficeEntityDetailPage.tsx"],"sourcesContent":["/* eslint-disable no-ternary */\nimport { type JSX, type ReactNode, useContext, useMemo, useState } from 'react';\nimport type { TFunction } from 'i18next';\nimport { useTranslation } from 'react-i18next';\nimport {\n commitMutation,\n type PreloadedQuery,\n useFragment,\n usePreloadedQuery,\n} from 'react-relay';\nimport type { OperationType } from 'relay-runtime';\nimport {\n type MutationPayloadBase,\n resolveMutationOutcome,\n} from '../relay/mutationResult.js';\nimport { setWhereValue } from '@plumile/backoffice-core/filters/where.js';\nimport {\n buildBackofficeFallbackListHref,\n buildBackofficeListHref,\n buildBackofficeListLink,\n} from '@plumile/backoffice-core/state/buildListHref.js';\n\nimport { BACKOFFICE_DATE_TIME_OPTIONS } from '@plumile/backoffice-core/constants.js';\nimport type {\n BackofficeBadgeTone,\n BackofficeDetailBlockSpec,\n BackofficeDetailFieldSpec,\n BackofficeDetailHeaderConfig,\n BackofficeDetailHeaderMetaSpec,\n BackofficeDetailHeaderStatusSpec,\n BackofficeFlagVariant,\n BackofficeEntityActionSpec,\n BackofficeEntityFormMutationActionSpec,\n BackofficeEntityMutationActionSpec,\n BackofficeEntityRouteActionSpec,\n BackofficeInlineValueSpec,\n BackofficeResolvedDetailLayoutFacetConfigBase,\n BackofficeResolvedDetailPageFacetConfig,\n BackofficeResolvedDetailPageFacetConfigBase,\n BackofficeValueLabel,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\nimport { Tag } from '@plumile/ui-backoffice/backoffice/atoms/tag/Tag.js';\nimport type { EntityHeaderItem } from '@plumile/ui-backoffice/backoffice/organisms/entity_header/EntityHeader.js';\nimport { DetailPageTemplate } from '@plumile/ui-backoffice/backoffice/templates/detail_page_template/DetailPageTemplate.js';\nimport { LazyBackofficeJsonViewer } from '@plumile/ui-backoffice/backoffice/molecules/backoffice_json_viewer/LazyBackofficeJsonViewer.js';\nimport {\n BackofficeTabs,\n type BackofficeTabItem,\n} from '@plumile/ui-backoffice/backoffice/molecules/backoffice_tabs/BackofficeTabs.js';\nimport {\n BackofficeKeyValueList,\n type BackofficeRelationsMenuItem,\n BackofficeRelationsMenu,\n BackofficePageHeader,\n} from '@plumile/ui-backoffice';\nimport {\n Button,\n DataTable,\n FormattedDate,\n LinkButton,\n useToast,\n} from '@plumile/ui';\nimport { HighlightCode } from '@plumile/ui/atomic/molecules/highlight/HighlightCode.js';\nimport { HttpRedirect, Link, RoutingContext } from '@plumile/router';\n\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';\n\nimport { buildDataTableColumns } from '../components/backoffice/columns/buildDataTableColumns.js';\nimport { BackofficeEntityDetailScaffold } from '../components/backoffice/scaffolds/BackofficeEntityDetailScaffold.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 { BackofficeDetailPayload } from '../components/backoffice/detail/BackofficeDetailPayload.js';\nimport { BackofficeDetailErrorList } from '../components/backoffice/detail/BackofficeDetailErrorList.js';\nimport { BackofficeDetailRelationListBlock } from '../components/backoffice/detail/BackofficeDetailRelationListBlock.js';\nimport { BackofficeDetailSection } from '../components/backoffice/detail/BackofficeDetailSection.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 type { BackofficeDetailFieldProps } from '../components/backoffice/detail/BackofficeDetailField.js';\nimport { useBackofficeFormats } from '../i18n/useBackofficeFormats.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport { useRelayEnvironment } from '../relay/useRelayEnvironment.js';\nimport { useBackofficeEntityDetailLayoutContext } from './detail/BackofficeEntityDetailLayoutContext.js';\nimport { buildTabsItems } from './detail/buildTabsItems.js';\nimport { resolveVisibleDetailPages } from './detail/pageResolution.js';\nimport { BackofficeRightPageLayout } from '../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js';\nimport { buildEntityDetailBreadcrumb } from '../components/backoffice/layout/breadcrumb/buildBreadcrumbs.js';\n\nexport type BackofficeEntityDetailPageProps = {\n config: BackofficeResolvedDetailLayoutFacetConfigBase;\n prepared: {\n id: string;\n detailId?: string;\n pageConfig: BackofficeResolvedDetailPageFacetConfigBase;\n pageQuery: PreloadedQuery<OperationType>;\n pageId: string;\n pagePath: string;\n };\n};\n\nconst resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value != null && !Array.isArray(value);\n};\n\nconst assertNever = (value: never): never => {\n throw new Error(`Unexpected value: ${String(value)}`);\n};\n\ntype FlagTagSpec = {\n tone: 'neutral' | 'info' | 'success' | 'warning' | 'danger';\n label: string;\n icon?: JSX.Element;\n};\n\nconst resolveFlagTag = (\n variant: BackofficeFlagVariant,\n value: boolean,\n t: TFunction,\n): FlagTagSpec => {\n const iconSize = 14;\n\n switch (variant) {\n case 'yesNo': {\n if (value) {\n return {\n tone: 'success',\n label: t('common.boolean.yes'),\n };\n }\n return {\n tone: 'neutral',\n label: t('common.boolean.no'),\n };\n }\n case 'capability': {\n if (value) {\n return {\n tone: 'success',\n label: t('flags.capability.allowed'),\n icon: (\n <ShieldLockSvg\n width={iconSize}\n height={iconSize}\n aria-hidden=\"true\"\n />\n ),\n };\n }\n return {\n tone: 'neutral',\n label: t('flags.capability.denied'),\n icon: (\n <ShieldOffSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n ),\n };\n }\n case 'enabled': {\n if (value) {\n return {\n tone: 'success',\n label: t('flags.enabled.enabled'),\n icon: (\n <SettingsCheckSvg\n width={iconSize}\n height={iconSize}\n aria-hidden=\"true\"\n />\n ),\n };\n }\n return {\n tone: 'neutral',\n label: t('flags.enabled.disabled'),\n icon: (\n <SettingsXSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n ),\n };\n }\n case 'failure': {\n if (value) {\n return {\n tone: 'danger',\n label: t('flags.failure.failed'),\n icon: (\n <XBadgeSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n ),\n };\n }\n return {\n tone: 'success',\n label: t('flags.failure.ok'),\n icon: (\n <ChatCheckSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n ),\n };\n }\n case 'encrypted': {\n if (value) {\n return {\n tone: 'info',\n label: t('flags.encrypted.encrypted'),\n icon: (\n <KeySvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n ),\n };\n }\n return {\n tone: 'neutral',\n label: t('flags.encrypted.notEncrypted'),\n icon: (\n <KeyOffSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n ),\n };\n }\n case 'locked': {\n if (value) {\n return {\n tone: 'warning',\n label: t('flags.locked.locked'),\n icon: (\n <LockSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n ),\n };\n }\n return {\n tone: 'success',\n label: t('flags.locked.unlocked'),\n icon: (\n <LockOpenSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n ),\n };\n }\n case 'default': {\n if (value) {\n return {\n tone: 'info',\n label: t('flags.default.default'),\n };\n }\n return {\n tone: 'neutral',\n label: t('flags.default.notDefault'),\n };\n }\n case 'agentManaged': {\n if (value) {\n return {\n tone: 'info',\n label: t('flags.agentManaged.agentManaged'),\n icon: (\n <RobotCheckSvg\n width={iconSize}\n height={iconSize}\n aria-hidden=\"true\"\n />\n ),\n };\n }\n return {\n tone: 'neutral',\n label: t('flags.agentManaged.userManaged'),\n icon: (\n <RobotXSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n ),\n };\n }\n case 'deployedProduction': {\n if (value) {\n return {\n tone: 'success',\n label: t('flags.deployedProduction.deployed'),\n icon: (\n <RocketSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n ),\n };\n }\n return {\n tone: 'neutral',\n label: t('flags.deployedProduction.notDeployed'),\n icon: (\n <RocketOffSvg width={iconSize} height={iconSize} aria-hidden=\"true\" />\n ),\n };\n }\n case 'forced': {\n if (value) {\n return {\n tone: 'warning',\n label: t('flags.forced.forced'),\n };\n }\n return {\n tone: 'neutral',\n label: t('flags.forced.normal'),\n };\n }\n default:\n return assertNever(variant);\n }\n};\n\nconst extractMutationPayload = (\n response: unknown,\n): MutationPayloadBase | null => {\n if (!isPlainObject(response)) {\n return null;\n }\n\n for (const value of Object.values(response)) {\n if (isPlainObject(value) && ('status' in value || 'result' in value)) {\n return value as MutationPayloadBase;\n }\n }\n\n return null;\n};\n\nconst isRouteAction = <Node,>(\n action: BackofficeEntityActionSpec<Node>,\n): action is BackofficeEntityRouteActionSpec<Node> => {\n return action.kind === 'route';\n};\n\nconst isMutationAction = <Node,>(\n action: BackofficeEntityActionSpec<Node>,\n): action is BackofficeEntityMutationActionSpec<Node> => {\n return action.kind === 'mutation';\n};\n\nconst isFormMutationAction = <Node,>(\n action: BackofficeEntityActionSpec<Node>,\n): action is BackofficeEntityFormMutationActionSpec<Node> => {\n return action.kind === 'formMutation';\n};\n\nconst resolveValueLabel = (\n value: BackofficeValueLabel | null | undefined,\n tApp: TFunction,\n): string | number | null => {\n if (typeof value === 'function') {\n return value(tApp);\n }\n if (value == null) {\n return null;\n }\n return value;\n};\n\nconst resolveRelationValue = (value: string | null): string | null => {\n if (value == null) {\n return null;\n }\n const trimmed = value.trim();\n if (trimmed === '') {\n return null;\n }\n return trimmed;\n};\n\nconst isEmptyText = (value: string | number | null | undefined): boolean => {\n if (value == null) {\n return true;\n }\n if (typeof value === 'string') {\n return value.trim() === '';\n }\n return false;\n};\n\nconst resolveBadgeTone = <Node,>(\n tone: BackofficeBadgeTone | ((node: Node) => BackofficeBadgeTone) | undefined,\n node: Node,\n): BackofficeBadgeTone | undefined => {\n if (typeof tone === 'function') {\n return tone(node);\n }\n return tone;\n};\n\nconst resolveInlineValue = (\n value: BackofficeInlineValueSpec,\n options: {\n tApp: TFunction;\n t: TFunction;\n resolveEntityHref?: (entityId: string, refId: string) => string | null;\n },\n): ReactNode => {\n const { tApp, t, resolveEntityHref } = options;\n const fallback = t('common.notAvailable');\n\n if (value.type === 'text') {\n const resolved = resolveValueLabel(value.value, tApp);\n return isEmptyText(resolved) ? fallback : resolved;\n }\n\n if (value.type === 'entityRef') {\n const { id } = value;\n if (id == null || id.trim() === '') {\n return fallback;\n }\n const resolvedLabel = resolveValueLabel(value.label, tApp);\n const label =\n resolvedLabel != null && String(resolvedLabel).trim() !== ''\n ? resolvedLabel\n : null;\n if (label == null) {\n return fallback;\n }\n const href = resolveEntityHref?.(value.entity, id) ?? null;\n if (href != null) {\n return <Link to={href}>{label}</Link>;\n }\n return label;\n }\n\n const { href } = value;\n if (href == null || href.trim() === '') {\n return fallback;\n }\n const label = resolveValueLabel(value.label, tApp);\n if (isEmptyText(label)) {\n return fallback;\n }\n return <Link to={href}>{label}</Link>;\n};\n\nconst buildFieldItems = <Node,>(\n fields: readonly BackofficeDetailFieldSpec<Node>[],\n node: Node,\n options: {\n tApp: TFunction;\n t: TFunction;\n resolveEntityHref?: (entityId: string, refId: string) => string | null;\n formatNumber: (value: number | null | undefined) => string;\n formatCurrency: (value: number | null | undefined) => string;\n formatPercent: (value: number | null | undefined) => string;\n relationEntityListRoutes: Record<string, string>;\n resolveRelationItem: (args: {\n id: string;\n label: string;\n count: number | null;\n entityId: string;\n filterId?: string;\n listRoute: string;\n path?: readonly string[];\n value: string;\n where: Record<string, unknown>;\n whereKey: string;\n }) => BackofficeRelationsMenuItem;\n },\n): {\n items: BackofficeDetailFieldProps[];\n relationItems: BackofficeRelationsMenuItem[];\n customNodes: ReactNode[];\n} => {\n const {\n tApp,\n t,\n resolveEntityHref,\n formatNumber,\n formatCurrency,\n formatPercent,\n relationEntityListRoutes,\n resolveRelationItem,\n } = options;\n const items: BackofficeDetailFieldProps[] = [];\n const relationItems: BackofficeRelationsMenuItem[] = [];\n const customNodes: ReactNode[] = [];\n const fallback = t('common.notAvailable');\n\n fields.forEach((field, index) => {\n const id = `${field.type}-${index}`;\n\n switch (field.type) {\n case 'text': {\n const value = resolveValueLabel(field.value(node), tApp);\n items.push({\n id,\n label: resolveLabel(field.label, tApp),\n size: field.size,\n value,\n copyValue: field.copyValue?.(node) ?? undefined,\n fullWidth: field.fullWidth,\n });\n break;\n }\n case 'badge': {\n const value = resolveValueLabel(field.value(node), tApp);\n const label = value != null ? String(value) : '';\n const tone = resolveBadgeTone(field.tone, node);\n const badgeNode =\n label.trim() !== '' ? <Tag tone={tone}>{label}</Tag> : null;\n items.push({\n id,\n label: resolveLabel(field.label, tApp),\n size: field.size,\n value: badgeNode,\n });\n break;\n }\n case 'badgeRow': {\n const badgeItems = field.items(node).map((item) => {\n const resolvedLabel = resolveValueLabel(item.label, tApp);\n const label = resolvedLabel == null ? '' : String(resolvedLabel);\n return { ...item, label };\n });\n const value =\n badgeItems.length > 0 ? (\n <BackofficeDetailBadgeRow items={badgeItems} />\n ) : null;\n items.push({\n id,\n label: resolveLabel(field.label, tApp),\n size: field.size,\n value,\n fullWidth: field.fullWidth,\n });\n break;\n }\n case 'dateTime': {\n const value = field.value(node);\n items.push({\n id,\n label: resolveLabel(field.label, tApp),\n size: field.size,\n value: (\n <FormattedDate\n value={value}\n options={BACKOFFICE_DATE_TIME_OPTIONS}\n fallback={t('common.notAvailable')}\n />\n ),\n });\n break;\n }\n case 'number': {\n const value = field.value(node);\n let formatted: string | null = null;\n if (value != null) {\n if (field.format === 'currency') {\n formatted = formatCurrency(value);\n } else if (field.format === 'percent') {\n formatted = formatPercent(value);\n } else {\n formatted = formatNumber(value);\n }\n }\n items.push({\n id,\n label: resolveLabel(field.label, tApp),\n size: field.size,\n value: formatted,\n });\n break;\n }\n case 'flag': {\n const value = field.value(node);\n let resolved: ReactNode | null = null;\n if (value != null) {\n const tag = resolveFlagTag(field.variant, value, t);\n resolved = (\n <BackofficeDetailFlagTag\n tone={tag.tone}\n icon={tag.icon}\n label={tag.label}\n />\n );\n }\n items.push({\n id,\n label: resolveLabel(field.label, tApp),\n size: field.size,\n value: resolved,\n });\n break;\n }\n case 'entityRef': {\n const idValue = field.id(node);\n let value: ReactNode | null = null;\n if (idValue != null && idValue.trim() !== '') {\n const labelValue = field.value?.(node);\n const label =\n labelValue != null && labelValue.trim() !== '' ? labelValue : null;\n const href = resolveEntityHref?.(field.entity, idValue) ?? null;\n if (label != null) {\n if (href != null) {\n value = <Link to={href}>{label}</Link>;\n } else {\n value = label;\n }\n }\n }\n items.push({\n id,\n label: resolveLabel(field.label, tApp),\n size: field.size,\n value: value ?? fallback,\n });\n break;\n }\n case 'link': {\n const href = field.href(node);\n const labelValue = field.value(node);\n const value =\n href != null && href.trim() !== '' && !isEmptyText(labelValue) ? (\n <Link to={href}>{labelValue}</Link>\n ) : null;\n items.push({\n id,\n label: resolveLabel(field.label, tApp),\n size: field.size,\n value,\n });\n break;\n }\n case 'taggedValue': {\n const tag = field.tag(node);\n const inlineValue = field.value(node);\n const valueNode = resolveInlineValue(inlineValue, {\n tApp,\n t,\n resolveEntityHref,\n });\n const resolvedTag =\n tag == null\n ? null\n : {\n ...tag,\n label: (() => {\n const labelValue = resolveValueLabel(tag.label, tApp);\n return labelValue == null ? '' : String(labelValue);\n })(),\n };\n const value =\n resolvedTag != null || valueNode != null ? (\n <BackofficeDetailTaggedValue tag={resolvedTag} value={valueNode} />\n ) : null;\n items.push({\n id,\n label: resolveLabel(field.label, tApp),\n size: field.size,\n value,\n fullWidth: field.fullWidth,\n });\n break;\n }\n case 'relation': {\n const value = resolveRelationValue(field.value(node));\n if (value == null) {\n break;\n }\n const listRoute = relationEntityListRoutes[field.entity];\n if (listRoute == null) {\n break;\n }\n const labelBase = resolveLabel(field.label, tApp);\n const count = field.count?.(node) ?? null;\n const where = setWhereValue<Record<string, unknown>>(\n null,\n field.whereKey as never,\n value,\n field.path,\n );\n if (where == null) {\n break;\n }\n relationItems.push(\n resolveRelationItem({\n id,\n label: labelBase,\n count,\n entityId: field.entity,\n filterId: field.filterId,\n listRoute,\n path: field.path,\n value,\n where,\n whereKey: field.whereKey,\n }),\n );\n break;\n }\n case 'custom': {\n const custom = field.render(node) as ReactNode;\n if (custom == null) {\n break;\n }\n if (field.label != null) {\n items.push({\n id,\n label: resolveLabel(field.label, tApp),\n size: field.size,\n value: custom,\n fullWidth: field.fullWidth,\n });\n break;\n }\n customNodes.push(<div key={id}>{custom}</div>);\n break;\n }\n default:\n break;\n }\n });\n\n return { items, relationItems, customNodes };\n};\n\nconst resolveHeaderMeta = <Node,>(\n meta: BackofficeDetailHeaderMetaSpec<Node>,\n node: Node,\n options: {\n tApp: TFunction;\n t: TFunction;\n resolveEntityHref?: (entityId: string, refId: string) => string | null;\n },\n): ReactNode => {\n const { tApp, t, resolveEntityHref } = options;\n const fallback = t('common.notAvailable');\n\n if (meta.type === 'dateTime') {\n const value = meta.value(node);\n return (\n <FormattedDate\n value={value}\n options={BACKOFFICE_DATE_TIME_OPTIONS}\n fallback={fallback}\n />\n );\n }\n\n if (meta.type === 'entityRef') {\n const idValue = meta.id(node);\n if (idValue == null || idValue.trim() === '') {\n return fallback;\n }\n const labelValue = resolveValueLabel(meta.value?.(node), tApp);\n const label =\n labelValue != null && String(labelValue).trim() !== ''\n ? labelValue\n : null;\n if (label == null) {\n return fallback;\n }\n const href = resolveEntityHref?.(meta.entity, idValue) ?? null;\n if (href != null) {\n return <Link to={href}>{label}</Link>;\n }\n return label;\n }\n\n if (meta.type === 'link') {\n const href = meta.href(node);\n const labelValue = resolveValueLabel(meta.value(node), tApp);\n if (href == null || href.trim() === '' || isEmptyText(labelValue)) {\n return fallback;\n }\n return <Link to={href}>{labelValue}</Link>;\n }\n\n const value = resolveValueLabel(meta.value(node), tApp);\n return isEmptyText(value) ? fallback : value;\n};\n\nconst resolveHeaderStatus = <Node,>(\n status: BackofficeDetailHeaderStatusSpec<Node>,\n node: Node,\n tApp: TFunction,\n): ReactNode | undefined => {\n if (status.type === 'badgeRow') {\n const items = status.items(node).map((item) => {\n const resolvedLabel = resolveValueLabel(item.label, tApp);\n const label = resolvedLabel == null ? '' : String(resolvedLabel);\n return { ...item, label };\n });\n if (items.length === 0) {\n return undefined;\n }\n return <BackofficeDetailBadgeRow items={items} />;\n }\n\n const value = resolveValueLabel(status.value(node), tApp);\n const label = value == null ? '' : String(value);\n if (label.trim() === '') {\n return undefined;\n }\n const tone = resolveBadgeTone(status.tone, node);\n return <Tag tone={tone}>{label}</Tag>;\n};\n\nconst resolveHeaderItems = <Node,>(\n header: BackofficeDetailHeaderConfig<Node>,\n node: Node,\n options: {\n tApp: TFunction;\n t: TFunction;\n resolveEntityHref?: (entityId: string, refId: string) => string | null;\n },\n): {\n title: string;\n subtitle?: ReactNode;\n badges?: ReactNode;\n status?: ReactNode;\n items?: readonly EntityHeaderItem[];\n} => {\n const { tApp, t, resolveEntityHref } = options;\n const resolvedTitle =\n header.titleValue?.(node, tApp) ?? resolveLabel(header.title, tApp);\n const title =\n resolvedTitle.trim() === ''\n ? resolveLabel(header.title, tApp)\n : resolvedTitle;\n\n let subtitleNode: ReactNode | undefined;\n if (header.subtitleItems != null && header.subtitleItems.length > 0) {\n const separator = header.subtitleSeparator ?? ' / ';\n const parts: ReactNode[] = [];\n const { subtitleItems } = header;\n subtitleItems.forEach((item, index) => {\n const valueSpec = item.value(node);\n parts.push(\n <span key={item.id}>\n {resolveInlineValue(valueSpec, {\n tApp,\n t,\n resolveEntityHref,\n })}\n </span>,\n );\n if (index < subtitleItems.length - 1) {\n parts.push(<span key={`${item.id}-sep`}>{separator}</span>);\n }\n });\n subtitleNode = <span>{parts}</span>;\n } else {\n const subtitleValue =\n header.subtitleValue?.(node, tApp) ??\n (header.subtitle != null ? resolveLabel(header.subtitle, tApp) : null);\n subtitleNode =\n subtitleValue != null && subtitleValue.trim() !== ''\n ? subtitleValue\n : undefined;\n }\n\n const badgeNodes: ReactNode[] = [];\n if (header.badges != null) {\n header.badges.forEach((badge, index) => {\n const label = resolveLabel(badge.label, tApp);\n const resolvedValue = resolveValueLabel(badge.value(node), tApp);\n const value = resolvedValue == null ? '' : String(resolvedValue);\n if (value.trim() === '') {\n return;\n }\n const tone = resolveBadgeTone(badge.tone, node);\n badgeNodes.push(\n <Tag key={`${label}-${index}`} tone={tone}>\n {`${label}: ${value}`}\n </Tag>,\n );\n });\n }\n\n let statusNode: ReactNode | undefined;\n if (header.status != null) {\n statusNode = resolveHeaderStatus(header.status, node, tApp);\n }\n\n const items: EntityHeaderItem[] | undefined = header.meta?.map(\n (meta, index) => {\n const label = resolveLabel(meta.label, tApp);\n const valueNode = resolveHeaderMeta(meta, node, {\n tApp,\n t,\n resolveEntityHref,\n });\n return {\n id: `${label}-${index}`,\n label,\n value: valueNode,\n };\n },\n );\n\n return {\n title,\n subtitle: subtitleNode,\n badges: badgeNodes.length > 0 ? <>{badgeNodes}</> : undefined,\n status: statusNode,\n items,\n };\n};\n\nconst renderBlocks = <Node,>(\n blocks: readonly BackofficeDetailBlockSpec<Node>[] | undefined,\n node: Node,\n options: {\n tApp: TFunction;\n t: TFunction;\n resolveEntityHref: (entityId: string, refId: string) => string | null;\n keyPrefix?: string;\n },\n): ReactNode[] => {\n const { tApp, t, resolveEntityHref } = options;\n if (blocks == null || blocks.length === 0) {\n return [];\n }\n\n return blocks.map((block, index) => {\n const key =\n options.keyPrefix != null\n ? `${options.keyPrefix}-${block.kind}-${index}`\n : `${block.kind}-${index}`;\n\n if (block.kind === 'custom') {\n const custom = block.render(node) as ReactNode;\n if (custom == null) {\n return null;\n }\n if (block.label != null) {\n const customTitle = resolveLabel(block.label, tApp);\n return (\n <BackofficeDetailSection key={key} title={customTitle}>\n {custom}\n </BackofficeDetailSection>\n );\n }\n return <div key={key}>{custom}</div>;\n }\n\n const title = resolveLabel(block.label, tApp);\n const description =\n block.description != null\n ? resolveLabel(block.description, tApp)\n : undefined;\n\n if (block.kind === 'relationList') {\n const value = block.value(node);\n return (\n <BackofficeDetailRelationListBlock\n key={key}\n title={title}\n target={block.target}\n whereKey={block.whereKey}\n value={value}\n path={block.path}\n />\n );\n }\n\n if (block.kind === 'table') {\n const rows = block.rows(node);\n const columns = buildDataTableColumns(block.columns, {\n tApp,\n t,\n resolveEntityHref,\n });\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 (typeof maybeId === 'string' && maybeId.trim() !== '') {\n return maybeId;\n }\n }\n return String(rowIndex);\n }}\n />\n </BackofficeDetailSection>\n );\n }\n\n if (block.kind === 'json') {\n const value = block.value(node);\n return (\n <BackofficeDetailSection\n key={key}\n title={title}\n description={description}\n >\n <LazyBackofficeJsonViewer value={value} title={title} />\n </BackofficeDetailSection>\n );\n }\n\n if (block.kind === 'code') {\n const value = block.value(node);\n return (\n <BackofficeDetailSection\n key={key}\n title={title}\n description={description}\n >\n <HighlightCode\n badgeLabel={t('tools.output')}\n copyCode={value}\n fallbackCodeText={value}\n />\n </BackofficeDetailSection>\n );\n }\n\n if (block.kind === 'payload') {\n const value = block.value(node);\n return (\n <BackofficeDetailPayload\n key={key}\n title={title}\n description={description}\n content={value}\n format={block.format}\n />\n );\n }\n\n if (block.kind === 'errorList') {\n const items = block.errors(node);\n return (\n <BackofficeDetailErrorList\n key={key}\n title={title}\n description={description}\n items={items}\n />\n );\n }\n\n const items = block.items.map((item, itemIndex) => {\n const label = resolveLabel(item.label, tApp);\n const resolvedValue = resolveValueLabel(item.value(node), tApp);\n return {\n id: `${label}-${itemIndex}`,\n label,\n value: resolvedValue ?? t('common.notAvailable'),\n };\n });\n\n return (\n <BackofficeDetailSection\n key={key}\n title={title}\n description={description}\n >\n <BackofficeKeyValueList items={items} />\n </BackofficeDetailSection>\n );\n });\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, formatPercent } =\n useBackofficeFormats();\n const { entities, entityRegistry } = useBackofficeConfig();\n const { layoutView } = useBackofficeEntityDetailLayoutContext();\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 resolvedPages = resolveVisibleDetailPages({\n mainPage: config.pages.mainPage,\n subPages: config.pages.subPages,\n activePagePath: prepared.pagePath,\n node: layoutView as never,\n });\n const activePage = resolvedPages.activePage ?? config.pages.mainPage;\n const pages =\n resolvedPages.pages.length > 0\n ? resolvedPages.pages\n : [config.pages.mainPage];\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\n const pageQueryData = usePreloadedQuery(page.query, prepared.pageQuery);\n const pageNodeRef = page.resolveNode(pageQueryData as never, {\n id: prepared.id,\n detailId: prepared.detailId,\n });\n if (pageNodeRef == null) {\n throw new HttpRedirect(config.routes.list);\n }\n const resolvedNode = useFragment(page.fragment, pageNodeRef as never);\n const relationEntityListRoutes = useMemo(() => {\n return Object.fromEntries(\n page.content\n .flatMap((block) => {\n if (block.kind !== 'section') {\n return [];\n }\n\n return block.fields.flatMap((field) => {\n if (field.type !== 'relation') {\n return [];\n }\n return [field.entity];\n });\n })\n .flatMap((entityId) => {\n const entityManifest = entities[entityId];\n if (entityManifest?.hasList !== true) {\n return [];\n }\n return [[entityId, entityManifest.routes.list]];\n }),\n ) as Record<string, string>;\n }, [entities, page.content]);\n\n return (\n <BackofficeEntityDetailScaffold\n node={resolvedNode as { __typename: string } | null | undefined}\n render={(node) => {\n const view = page.toView(node);\n const tabsItems = buildTabsItems({\n pages,\n id: prepared.id,\n tApp,\n detailPageHref: config.routes.detailPage,\n });\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 resolveRelationItem = ({\n id,\n label,\n count,\n entityId,\n filterId,\n listRoute,\n path,\n value,\n where,\n whereKey,\n }: {\n id: string;\n label: string;\n count: number | null;\n entityId: string;\n filterId?: string;\n listRoute: string;\n path?: readonly string[];\n value: string;\n where: Record<string, unknown>;\n whereKey: string;\n }): BackofficeRelationsMenuItem => {\n const loadedEntity = entityRegistry.getLoadedListEntity(entityId);\n return {\n id,\n label,\n count,\n href:\n loadedEntity == null\n ? buildBackofficeFallbackListHref(listRoute, where, [\n {\n id:\n filterId ??\n (path == null\n ? whereKey\n : `${whereKey}.${path.join('.')}`),\n value,\n },\n ])\n : buildBackofficeListHref(loadedEntity.config, { where }),\n onClick: async (event) => {\n if (\n routing == null ||\n event.defaultPrevented ||\n event.button !== 0 ||\n event.metaKey ||\n event.altKey ||\n event.ctrlKey ||\n event.shiftKey\n ) {\n return;\n }\n\n event.preventDefault();\n\n const listEntity = await entityRegistry.loadListEntity(entityId);\n const next = buildBackofficeListLink(listEntity.config, {\n where,\n });\n\n routing.history.push({\n pathname: next.pathname,\n search: next.search === '' ? '' : `?${next.search}`,\n hash: '',\n });\n },\n };\n };\n\n const header = resolveHeaderItems(config.header, layoutView, {\n tApp,\n t,\n resolveEntityHref,\n });\n const breadcrumb = buildEntityDetailBreadcrumb({\n config,\n tApp,\n entityId: prepared.id,\n layoutView,\n pageLabel: activePage.label(tApp),\n });\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 >\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 const relationMenuItems: BackofficeRelationsMenuItem[] = [];\n\n content.forEach((item, index) => {\n const placement = item.placement ?? 'primary';\n const targetNodes =\n placement === 'secondary' ? secondaryNodes : primaryNodes;\n\n if (item.kind === 'section') {\n const sectionLabel = resolveLabel(item.title, tApp);\n const description =\n item.description != null\n ? resolveLabel(item.description, tApp)\n : undefined;\n const { items, relationItems, customNodes } = buildFieldItems(\n item.fields,\n view,\n {\n tApp,\n t,\n resolveEntityHref,\n formatNumber,\n formatCurrency,\n formatPercent,\n relationEntityListRoutes,\n resolveRelationItem,\n },\n );\n relationItems.forEach((relation) => {\n if (\n !relationMenuItems.some((entry) => {\n return entry.id === relation.id;\n })\n ) {\n relationMenuItems.push(relation);\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 });\n const blockNode = rendered[0];\n if (blockNode != null) {\n targetNodes.push(blockNode);\n }\n });\n\n const relationsMenuNode =\n relationMenuItems.length > 0 ? (\n <BackofficeRelationsMenu\n label={t('relations.menu.label')}\n items={relationMenuItems}\n />\n ) : null;\n\n const headerActions =\n headerActionButtons.length > 0 || relationsMenuNode != null ? (\n <div className={pageStyles.headerActions}>\n {headerActionButtons}\n {relationsMenuNode}\n </div>\n ) : undefined;\n\n const headerMetaNode =\n header.status != null || header.badges != null ? (\n <div className={pageStyles.headerMeta}>\n {header.status}\n {header.badges}\n </div>\n ) : undefined;\n\n const headerItemsNode =\n header.items != null && header.items.length > 0 ? (\n <div className={pageStyles.headerMetaList}>\n <BackofficeKeyValueList items={header.items} />\n </div>\n ) : null;\n\n const hasAside = secondaryNodes.length > 0;\n let tabsNode: JSX.Element | null = null;\n if (pages.length > 1) {\n tabsNode = (\n <BackofficeTabs\n items={tabsItems as BackofficeTabItem[]}\n activeId={activePage.id}\n onChange={() => {}}\n />\n );\n }\n const headerNode = (\n <div className={pageStyles.headerBlock}>\n <BackofficePageHeader\n title={header.title}\n subtitle={header.subtitle}\n actions={headerActions}\n meta={headerMetaNode}\n />\n {headerItemsNode}\n </div>\n );\n\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <DetailPageTemplate\n headerNode={headerNode}\n tabsNode={tabsNode}\n sidePanel={hasAside ? <>{secondaryNodes}</> : undefined}\n sidePanelVariant=\"plain\"\n >\n <>{primaryNodes}</>\n </DetailPageTemplate>\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 </BackofficeRightPageLayout>\n );\n }}\n />\n );\n};\n\nexport const BackofficeEntityDetailPage = ({\n config,\n prepared,\n}: BackofficeEntityDetailPageProps): JSX.Element => {\n const { layoutView } = useBackofficeEntityDetailLayoutContext();\n\n const resolvedPages = resolveVisibleDetailPages({\n mainPage: config.pages.mainPage,\n subPages: config.pages.subPages,\n activePagePath: prepared.pagePath,\n node: layoutView as never,\n });\n\n if (!resolvedPages.hasVisiblePages || resolvedPages.activePage == null) {\n throw new HttpRedirect(config.routes.list);\n }\n\n if (resolvedPages.activePage.id !== prepared.pageId) {\n throw new HttpRedirect(\n config.routes.detailPage(prepared.id, resolvedPages.activePage.id),\n );\n }\n\n return (\n <BackofficeEntityDetailPageContent\n config={prepared.pageConfig}\n prepared={prepared}\n />\n );\n};\n\nexport default BackofficeEntityDetailPage;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useBackofficeEntityDetailLayoutContext as e } from "./detail/BackofficeEntityDetailLayoutContext.js";
|
|
2
|
+
import { resolveVisibleDetailPages as t } from "./detail/pageResolution.js";
|
|
3
|
+
import { HttpRedirect as n } from "@plumile/router";
|
|
4
|
+
//#region src/pages/BackofficeEntityDetailUnknownPageRedirect.tsx
|
|
5
|
+
var r = ({ config: r, prepared: i }) => {
|
|
6
|
+
let { layoutView: a } = e(), o = t({
|
|
7
|
+
mainPage: r.pages.mainPage,
|
|
8
|
+
subPages: r.pages.subPages,
|
|
9
|
+
activePagePath: i.pagePath,
|
|
10
|
+
node: a
|
|
11
|
+
});
|
|
12
|
+
throw !o.hasVisiblePages || o.activePage == null ? new n(r.routes.list) : new n(r.routes.detailPage(i.id, o.activePage.id));
|
|
13
|
+
};
|
|
14
|
+
//#endregion
|
|
15
|
+
export { r as BackofficeEntityDetailUnknownPageRedirect, r as default };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=BackofficeEntityDetailUnknownPageRedirect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BackofficeEntityDetailUnknownPageRedirect.js","names":[],"sources":["../../../src/pages/BackofficeEntityDetailUnknownPageRedirect.tsx"],"sourcesContent":["import { type JSX } from 'react';\nimport { HttpRedirect } from '@plumile/router';\n\nimport type {\n BackofficeEntityManifestItem,\n BackofficeResolvedDetailLayoutFacetConfig,\n} from '@plumile/backoffice-core/types.js';\n\nimport { useBackofficeEntityDetailLayoutContext } from './detail/BackofficeEntityDetailLayoutContext.js';\nimport { resolveVisibleDetailPages } from './detail/pageResolution.js';\n\nexport type BackofficeEntityDetailUnknownPageRedirectProps = {\n entityManifest: BackofficeEntityManifestItem;\n config: BackofficeResolvedDetailLayoutFacetConfig;\n prepared: {\n id: string;\n pagePath: string;\n };\n};\n\nexport const BackofficeEntityDetailUnknownPageRedirect = ({\n config,\n prepared,\n}: BackofficeEntityDetailUnknownPageRedirectProps): JSX.Element => {\n const { layoutView } = useBackofficeEntityDetailLayoutContext();\n\n const resolvedPages = resolveVisibleDetailPages({\n mainPage: config.pages.mainPage,\n subPages: config.pages.subPages,\n activePagePath: prepared.pagePath,\n node: layoutView as never,\n });\n\n if (!resolvedPages.hasVisiblePages || resolvedPages.activePage == null) {\n throw new HttpRedirect(config.routes.list);\n }\n\n throw new HttpRedirect(\n config.routes.detailPage(prepared.id, resolvedPages.activePage.id),\n );\n};\n\nexport default BackofficeEntityDetailUnknownPageRedirect;\n"],"mappings":";;;;AAoBA,IAAa,KAA6C,EACxD,WACA,kBACiE;CACjE,IAAM,EAAE,kBAAe,GAAwC,EAEzD,IAAgB,EAA0B;EAC9C,UAAU,EAAO,MAAM;EACvB,UAAU,EAAO,MAAM;EACvB,gBAAgB,EAAS;EACzB,MAAM;EACP,CAAC;AAMF,OAJI,CAAC,EAAc,mBAAmB,EAAc,cAAc,OAC1D,IAAI,EAAa,EAAO,OAAO,KAAK,GAGtC,IAAI,EACR,EAAO,OAAO,WAAW,EAAS,IAAI,EAAc,WAAW,GAAG,CACnE"}
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
import { useBackofficeReactTranslation as e } from "../i18n/useBackofficeReactTranslation.js";
|
|
2
|
+
import { useBackofficeConfig as t } from "../provider/BackofficeConfigContext.js";
|
|
3
|
+
import { LazyBackofficeEntityActionFormDialog as n } from "../components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js";
|
|
4
|
+
import { buildDataTableColumns as r } from "../components/backoffice/columns/buildDataTableColumns.js";
|
|
5
|
+
import { useBackofficeLoadMore as i } from "../hooks/useBackofficeLoadMore.js";
|
|
6
|
+
import { useBackofficeListRefetch as a } from "../hooks/useBackofficeListRefetch.js";
|
|
7
|
+
import { BackofficeEntityListScaffold as o } from "../components/backoffice/scaffolds/BackofficeEntityListScaffold.js";
|
|
8
|
+
import { BackofficeRightPageLayout as s } from "../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js";
|
|
9
|
+
import { buildEntityListBreadcrumb as c } from "../components/backoffice/layout/breadcrumb/buildBreadcrumbs.js";
|
|
10
|
+
import { rowFlagsColumnCell as l } from "../components/backoffice/list/RowFlagsCell.css.js";
|
|
11
|
+
import { RowFlagsCell as u } from "../components/backoffice/list/RowFlagsCell.js";
|
|
12
|
+
import { useBackofficeListUrlState as d } from "../hooks/useBackofficeListUrlState.js";
|
|
13
|
+
import { actionTrigger as f, actionsColumnCell as p, headerActions as m } from "./backofficeEntityListPage.css.js";
|
|
14
|
+
import { Fragment as h, jsx as g, jsxs as ee } from "react/jsx-runtime";
|
|
15
|
+
import { useTranslation as te } from "react-i18next";
|
|
16
|
+
import { Button as ne, LinkButton as _ } from "@plumile/ui";
|
|
17
|
+
import { useCallback as v, useEffect as y, useMemo as b, useRef as x, useState as S } from "react";
|
|
18
|
+
import { fetchQuery as C } from "relay-runtime";
|
|
19
|
+
import { useFragment as re, usePaginationFragment as w, usePreloadedQuery as ie, useRelayEnvironment as T } from "react-relay";
|
|
20
|
+
import { BACKOFFICE_LIST_DEFAULTS as ae, BACKOFFICE_LIST_REFETCH_POLICY as E } from "@plumile/backoffice-core/constants.js";
|
|
21
|
+
import { stableListVariablesKey as D } from "@plumile/backoffice-core/state/stableKey.js";
|
|
22
|
+
import { TableCell as O } from "@plumile/ui/components/data-table/TableCell.js";
|
|
23
|
+
import { EyeSvg as k } from "@plumile/ui/icons/EyeSvg.js";
|
|
24
|
+
//#region src/pages/BackofficeEntityListPage.tsx
|
|
25
|
+
var oe = (e) => e.list.kind === "records", A = "store-or-network", j = (e, t) => e(t), M = 24, N = 6, P = 4, F = 32, I = 8, L = 12, R = 4, z = (e) => e <= 0 ? 0 : P * 2 + M * e + N * Math.max(0, e - 1), B = (e) => e <= 0 ? 0 : R + L * 2 + F * e + I * Math.max(0, e - 1), V = {
|
|
26
|
+
xs: "minmax(56px, 76px)",
|
|
27
|
+
s: "minmax(88px, 120px)",
|
|
28
|
+
m: "minmax(120px, 168px)",
|
|
29
|
+
l: "minmax(160px, 220px)",
|
|
30
|
+
xl: "minmax(220px, 300px)",
|
|
31
|
+
fluid: "minmax(0, 1fr)"
|
|
32
|
+
}, H = (e, t) => "size" in e && typeof e.size == "string" ? V[e.size] : t, se = (e, t, n, r) => {
|
|
33
|
+
let i = t != null && t.length > 0, a = e;
|
|
34
|
+
if (i) {
|
|
35
|
+
let n = [{
|
|
36
|
+
id: "__rowFlags",
|
|
37
|
+
header: "",
|
|
38
|
+
className: l,
|
|
39
|
+
cell: (e) => /* @__PURE__ */ g(u, {
|
|
40
|
+
row: e,
|
|
41
|
+
flags: t,
|
|
42
|
+
tApp: r
|
|
43
|
+
})
|
|
44
|
+
}, ...e], i = n.some((e) => e.isPrimary === !0);
|
|
45
|
+
a = n, i || (a = n.map((e, t) => t === 1 ? {
|
|
46
|
+
...e,
|
|
47
|
+
isPrimary: !0
|
|
48
|
+
} : e));
|
|
49
|
+
}
|
|
50
|
+
let o = 0;
|
|
51
|
+
i && (o = t.length);
|
|
52
|
+
let s = z(o), c = B(n), d = 0;
|
|
53
|
+
i && (d = 1);
|
|
54
|
+
let f = a.length - d - 1, p = a.slice(d, d + Math.max(0, f)).map((e) => H(e, "1fr")).join(" "), m = "";
|
|
55
|
+
return m = i ? `${s}px ${p} ${c}px` : `${p} ${c}px`, {
|
|
56
|
+
columns: a,
|
|
57
|
+
gridTemplateColumns: m
|
|
58
|
+
};
|
|
59
|
+
}, ce = (e) => e.kind === "route", U = (e) => e.kind === "formMutation", le = (e, t) => e ?? (t === 0 ? "primary" : "secondary"), W = (e) => {
|
|
60
|
+
if (typeof e != "object" || !e || !("id" in e)) return null;
|
|
61
|
+
let t = e.id;
|
|
62
|
+
if (typeof t != "string") return null;
|
|
63
|
+
let n = t.trim();
|
|
64
|
+
return n === "" ? null : n;
|
|
65
|
+
}, ue = (e) => {
|
|
66
|
+
let { ariaLabel: t, fallback: n, resolveDetailHref: r } = e;
|
|
67
|
+
return {
|
|
68
|
+
id: "actions",
|
|
69
|
+
header: "",
|
|
70
|
+
className: p,
|
|
71
|
+
cell: (e) => {
|
|
72
|
+
let i = W(e);
|
|
73
|
+
if (i == null) return n;
|
|
74
|
+
let a = r(i);
|
|
75
|
+
return a == null ? n : /* @__PURE__ */ g(O.Actions, { children: /* @__PURE__ */ g("span", {
|
|
76
|
+
className: f,
|
|
77
|
+
title: t,
|
|
78
|
+
children: /* @__PURE__ */ g(_, {
|
|
79
|
+
to: a,
|
|
80
|
+
variant: "icon",
|
|
81
|
+
size: "small",
|
|
82
|
+
"aria-label": t,
|
|
83
|
+
children: /* @__PURE__ */ g(k, {
|
|
84
|
+
width: 16,
|
|
85
|
+
height: 16
|
|
86
|
+
})
|
|
87
|
+
})
|
|
88
|
+
}) });
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
}, de = ({ config: a, prepared: s }) => {
|
|
92
|
+
let { t: c } = te(), { t: l } = e(), { entities: u } = t(), [f, p] = S(null), w = T();
|
|
93
|
+
if (!oe(a)) return null;
|
|
94
|
+
let E = a.list, O = a.listDefaults ?? E.defaultState ?? {
|
|
95
|
+
where: null,
|
|
96
|
+
sort: null
|
|
97
|
+
}, k = ie(E.query, s.query), M = re(E.fragment, k), N = b(() => E.getRows(M).map((e) => E.toRow(e)), [M, E]), P = b(() => E.getNextCursor?.(k) ?? null, [E, k]), [F, I] = S(N), [L, R] = S(P), [z, B] = S(!1), [V, H] = S(!1);
|
|
98
|
+
y(() => {
|
|
99
|
+
I(N), R(P);
|
|
100
|
+
}, [P, N]);
|
|
101
|
+
let { columns: W, gridTemplateColumns: de } = b(() => {
|
|
102
|
+
let e = r(E.columns, {
|
|
103
|
+
tApp: c,
|
|
104
|
+
t: l,
|
|
105
|
+
resolveEntityHref: (e, t) => {
|
|
106
|
+
let n = u[e];
|
|
107
|
+
return n == null ? null : n.routes.detail(t);
|
|
108
|
+
}
|
|
109
|
+
}), t = ue({
|
|
110
|
+
ariaLabel: l("actions.view"),
|
|
111
|
+
fallback: l("common.notAvailable"),
|
|
112
|
+
resolveDetailHref: (e) => a.routes.detail(e)
|
|
113
|
+
});
|
|
114
|
+
return se([...e, t], E.rowFlags, 1, c);
|
|
115
|
+
}, [
|
|
116
|
+
a.routes,
|
|
117
|
+
E.columns,
|
|
118
|
+
E.rowFlags,
|
|
119
|
+
u,
|
|
120
|
+
l,
|
|
121
|
+
c
|
|
122
|
+
]), G = v((e) => E.getRowId(e), [E]), { state: K, pushState: q } = d(a), J = K.sort ?? O.sort, { pageSize: Y } = ae, X = v((e) => E.buildVariables == null ? e : E.buildVariables(e), [E]), Z = x(0), fe = x(D({
|
|
123
|
+
where: O.where,
|
|
124
|
+
sort: O.sort,
|
|
125
|
+
count: Y
|
|
126
|
+
})), Q = v(async (e) => {
|
|
127
|
+
let t = Z.current + 1;
|
|
128
|
+
Z.current = t, e.mode === "append" ? B(!0) : H(!0);
|
|
129
|
+
try {
|
|
130
|
+
let n = X({
|
|
131
|
+
where: e.where,
|
|
132
|
+
sort: e.sort,
|
|
133
|
+
count: e.count,
|
|
134
|
+
cursor: e.cursor
|
|
135
|
+
}), r = await C(w, E.query, n, { fetchPolicy: A }).toPromise();
|
|
136
|
+
if (r == null || Z.current !== t) return;
|
|
137
|
+
let i = E.getRows(r).map((e) => E.toRow(e));
|
|
138
|
+
I((t) => e.mode === "append" ? [...t, ...i] : i), R(E.getNextCursor?.(r) ?? null);
|
|
139
|
+
} finally {
|
|
140
|
+
e.mode === "append" ? B(!1) : H(!1);
|
|
141
|
+
}
|
|
142
|
+
}, [
|
|
143
|
+
X,
|
|
144
|
+
w,
|
|
145
|
+
E
|
|
146
|
+
]);
|
|
147
|
+
y(() => {
|
|
148
|
+
let e = D({
|
|
149
|
+
where: K.where,
|
|
150
|
+
sort: J,
|
|
151
|
+
count: Y
|
|
152
|
+
});
|
|
153
|
+
fe.current !== e && (fe.current = e, Q({
|
|
154
|
+
where: K.where,
|
|
155
|
+
sort: J,
|
|
156
|
+
count: Y,
|
|
157
|
+
cursor: null,
|
|
158
|
+
mode: "reset"
|
|
159
|
+
}).catch(() => {}));
|
|
160
|
+
}, [
|
|
161
|
+
Y,
|
|
162
|
+
J,
|
|
163
|
+
Q,
|
|
164
|
+
K.where
|
|
165
|
+
]);
|
|
166
|
+
let pe = v(() => {
|
|
167
|
+
V || Q({
|
|
168
|
+
where: K.where,
|
|
169
|
+
sort: J,
|
|
170
|
+
count: Y,
|
|
171
|
+
cursor: null,
|
|
172
|
+
mode: "reset"
|
|
173
|
+
}).catch(() => {});
|
|
174
|
+
}, [
|
|
175
|
+
V,
|
|
176
|
+
Y,
|
|
177
|
+
J,
|
|
178
|
+
Q,
|
|
179
|
+
K.where
|
|
180
|
+
]), me = i({
|
|
181
|
+
hasNext: L != null,
|
|
182
|
+
isLoadingNext: z,
|
|
183
|
+
loadNext: (e) => {
|
|
184
|
+
L != null && Q({
|
|
185
|
+
where: K.where,
|
|
186
|
+
sort: J,
|
|
187
|
+
count: e,
|
|
188
|
+
cursor: L,
|
|
189
|
+
mode: "append"
|
|
190
|
+
}).catch(() => {});
|
|
191
|
+
},
|
|
192
|
+
count: Y
|
|
193
|
+
}), he = b(() => a.listActions ?? [], [a.listActions]), ge = b(() => he.filter((e) => e.isVisible == null ? !0 : e.isVisible(null)), [he]), _e = b(() => {
|
|
194
|
+
if (ge.length !== 0) return /* @__PURE__ */ g("div", {
|
|
195
|
+
className: m,
|
|
196
|
+
children: ge.map((e, t) => {
|
|
197
|
+
let { variant: n } = e, r = j(e.label, c), i = r;
|
|
198
|
+
e.ariaLabel != null && (i = j(e.ariaLabel, c));
|
|
199
|
+
let a = le(n, t), o = e.size ?? "small", s = e.isDisabled?.(null) === !0;
|
|
200
|
+
return ce(e) ? /* @__PURE__ */ g(_, {
|
|
201
|
+
to: e.to(null),
|
|
202
|
+
variant: a,
|
|
203
|
+
size: o,
|
|
204
|
+
isDisabled: s,
|
|
205
|
+
"aria-label": i,
|
|
206
|
+
children: r
|
|
207
|
+
}, e.id) : U(e) ? /* @__PURE__ */ g(ne, {
|
|
208
|
+
type: "button",
|
|
209
|
+
variant: a,
|
|
210
|
+
size: o,
|
|
211
|
+
disabled: s,
|
|
212
|
+
onClick: () => {
|
|
213
|
+
p(e.id);
|
|
214
|
+
},
|
|
215
|
+
"aria-label": i,
|
|
216
|
+
children: r
|
|
217
|
+
}, e.id) : null;
|
|
218
|
+
})
|
|
219
|
+
});
|
|
220
|
+
}, [c, ge]), $ = he.find((e) => e.id === f);
|
|
221
|
+
return /* @__PURE__ */ ee(h, { children: [/* @__PURE__ */ g(o, {
|
|
222
|
+
config: a,
|
|
223
|
+
state: K,
|
|
224
|
+
pushState: q,
|
|
225
|
+
headerActions: _e,
|
|
226
|
+
rows: F,
|
|
227
|
+
columns: W,
|
|
228
|
+
gridTemplateColumns: de,
|
|
229
|
+
getRowId: G,
|
|
230
|
+
hasNextPage: L != null,
|
|
231
|
+
isLoadingMore: z,
|
|
232
|
+
onLoadMore: me,
|
|
233
|
+
onRefresh: pe,
|
|
234
|
+
totalCount: null
|
|
235
|
+
}), $ != null && U($) && /* @__PURE__ */ g(n, {
|
|
236
|
+
isOpen: !0,
|
|
237
|
+
action: $,
|
|
238
|
+
node: null,
|
|
239
|
+
onClose: () => {
|
|
240
|
+
p(null);
|
|
241
|
+
},
|
|
242
|
+
onSuccess: pe
|
|
243
|
+
})] });
|
|
244
|
+
}, G = ({ entityManifest: l, config: u, prepared: f }) => {
|
|
245
|
+
let { t: p } = te(), h = c(u, p);
|
|
246
|
+
if (oe(u)) return /* @__PURE__ */ g(s, {
|
|
247
|
+
breadcrumb: h,
|
|
248
|
+
children: /* @__PURE__ */ g(de, {
|
|
249
|
+
entityManifest: l,
|
|
250
|
+
config: u,
|
|
251
|
+
prepared: f
|
|
252
|
+
})
|
|
253
|
+
});
|
|
254
|
+
let y = u.list;
|
|
255
|
+
if (y.kind === "records") return null;
|
|
256
|
+
let { t: x } = e(), { entities: C } = t(), [re, T] = S(null), D = ie(y.query, f.query), { data: O, loadNext: k, hasNext: A, isLoadingNext: M, refetch: N } = w(y.fragment, D), P = y.getConnection(O), F = b(() => P.edges.map((e) => y.toRow(e.node)), [P.edges, y]), { columns: I, gridTemplateColumns: L } = b(() => {
|
|
257
|
+
let e = r(y.columns, {
|
|
258
|
+
tApp: p,
|
|
259
|
+
t: x,
|
|
260
|
+
resolveEntityHref: (e, t) => {
|
|
261
|
+
let n = C[e];
|
|
262
|
+
return n == null ? null : n.routes.detail(t);
|
|
263
|
+
}
|
|
264
|
+
}), t = ue({
|
|
265
|
+
ariaLabel: x("actions.view"),
|
|
266
|
+
fallback: x("common.notAvailable"),
|
|
267
|
+
resolveDetailHref: (e) => u.routes.detail(e)
|
|
268
|
+
});
|
|
269
|
+
return se([...e, t], y.rowFlags, 1, p);
|
|
270
|
+
}, [
|
|
271
|
+
u.routes,
|
|
272
|
+
y.columns,
|
|
273
|
+
y.rowFlags,
|
|
274
|
+
C,
|
|
275
|
+
x,
|
|
276
|
+
p
|
|
277
|
+
]), R = v((e) => y.getRowId(e), [y]), { state: z, pushState: B } = d(u), V = u.listDefaults ?? y.defaultState ?? {
|
|
278
|
+
where: null,
|
|
279
|
+
sort: null
|
|
280
|
+
}, H = z.sort ?? V.sort, { pageSize: W } = ae, { onRefresh: G } = a({
|
|
281
|
+
refetch: N,
|
|
282
|
+
variables: b(() => ({
|
|
283
|
+
where: z.where,
|
|
284
|
+
sort: H,
|
|
285
|
+
count: W,
|
|
286
|
+
cursor: null
|
|
287
|
+
}), [
|
|
288
|
+
W,
|
|
289
|
+
H,
|
|
290
|
+
z.where
|
|
291
|
+
]),
|
|
292
|
+
defaults: {
|
|
293
|
+
where: V.where,
|
|
294
|
+
sort: V.sort,
|
|
295
|
+
count: W,
|
|
296
|
+
cursor: null
|
|
297
|
+
},
|
|
298
|
+
fetchPolicy: E,
|
|
299
|
+
buildVariables: y.buildVariables
|
|
300
|
+
}), K = i({
|
|
301
|
+
hasNext: A,
|
|
302
|
+
isLoadingNext: M,
|
|
303
|
+
loadNext: k,
|
|
304
|
+
count: W
|
|
305
|
+
}), q = b(() => u.listActions ?? [], [u.listActions]), J = b(() => q.filter((e) => e.isVisible == null ? !0 : e.isVisible(null)), [q]), Y = b(() => {
|
|
306
|
+
if (J.length !== 0) return /* @__PURE__ */ g("div", {
|
|
307
|
+
className: m,
|
|
308
|
+
children: J.map((e, t) => {
|
|
309
|
+
let { variant: n } = e, r = j(e.label, p), i = r;
|
|
310
|
+
e.ariaLabel != null && (i = j(e.ariaLabel, p));
|
|
311
|
+
let a = le(n, t), o = e.size ?? "small", s = e.isDisabled?.(null) === !0;
|
|
312
|
+
return ce(e) ? /* @__PURE__ */ g(_, {
|
|
313
|
+
to: e.to(null),
|
|
314
|
+
variant: a,
|
|
315
|
+
size: o,
|
|
316
|
+
isDisabled: s,
|
|
317
|
+
"aria-label": i,
|
|
318
|
+
children: r
|
|
319
|
+
}, e.id) : U(e) ? /* @__PURE__ */ g(ne, {
|
|
320
|
+
type: "button",
|
|
321
|
+
variant: a,
|
|
322
|
+
size: o,
|
|
323
|
+
disabled: s,
|
|
324
|
+
onClick: () => {
|
|
325
|
+
T(e.id);
|
|
326
|
+
},
|
|
327
|
+
"aria-label": i,
|
|
328
|
+
children: r
|
|
329
|
+
}, e.id) : null;
|
|
330
|
+
})
|
|
331
|
+
});
|
|
332
|
+
}, [p, J]), X = q.find((e) => e.id === re);
|
|
333
|
+
return /* @__PURE__ */ ee(s, {
|
|
334
|
+
breadcrumb: h,
|
|
335
|
+
children: [/* @__PURE__ */ g(o, {
|
|
336
|
+
config: u,
|
|
337
|
+
state: z,
|
|
338
|
+
pushState: B,
|
|
339
|
+
headerActions: Y,
|
|
340
|
+
rows: F,
|
|
341
|
+
columns: I,
|
|
342
|
+
gridTemplateColumns: L,
|
|
343
|
+
getRowId: R,
|
|
344
|
+
hasNextPage: A,
|
|
345
|
+
isLoadingMore: M,
|
|
346
|
+
onLoadMore: K,
|
|
347
|
+
onRefresh: G,
|
|
348
|
+
totalCount: P.totalCount ?? null
|
|
349
|
+
}), X != null && U(X) && /* @__PURE__ */ g(n, {
|
|
350
|
+
isOpen: !0,
|
|
351
|
+
action: X,
|
|
352
|
+
node: null,
|
|
353
|
+
onClose: () => {
|
|
354
|
+
T(null);
|
|
355
|
+
},
|
|
356
|
+
onSuccess: G
|
|
357
|
+
})]
|
|
358
|
+
});
|
|
359
|
+
};
|
|
360
|
+
//#endregion
|
|
361
|
+
export { G as BackofficeEntityListPage, G as default };
|
|
362
|
+
|
|
363
|
+
//# sourceMappingURL=BackofficeEntityListPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BackofficeEntityListPage.js","names":[],"sources":["../../../src/pages/BackofficeEntityListPage.tsx"],"sourcesContent":["/* eslint-disable react-hooks/rules-of-hooks */\nimport {\n type ComponentProps,\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 BackofficeEntityFormMutationActionSpec,\n BackofficeEntityRouteActionSpec,\n BackofficeListActionSpec,\n BackofficePreparedListRoute,\n BackofficeRecordListConfig,\n BackofficeResolvedListFacetConfig,\n BackofficeRowFlagSpec,\n I18nLabel,\n} from '@plumile/backoffice-core/types.js';\nimport {\n Button,\n LinkButton,\n type DataTableColumn,\n type GetRowId,\n} from '@plumile/ui';\nimport { TableCell } from '@plumile/ui/components/data-table/TableCell.js';\nimport { BackofficeEntityListScaffold } from '../components/backoffice/scaffolds/BackofficeEntityListScaffold.js';\nimport { LazyBackofficeEntityActionFormDialog } from '../components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js';\nimport {\n buildDataTableColumns,\n type BackofficeSizedDataTableColumn,\n} 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 { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport * as pageStyles from './backofficeEntityListPage.css.js';\nimport { rowFlagsColumnCell } from '../components/backoffice/list/RowFlagsCell.css.js';\nimport { EyeSvg } from '@plumile/ui/icons/EyeSvg.js';\nimport { BackofficeRightPageLayout } from '../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js';\nimport { buildEntityListBreadcrumb } from '../components/backoffice/layout/breadcrumb/buildBreadcrumbs.js';\n\nexport type BackofficeEntityListPageProps = {\n entityManifest: BackofficeEntityManifestItem;\n config: BackofficeResolvedListFacetConfig;\n prepared: BackofficePreparedListRoute;\n};\n\ntype RecordListConfig = BackofficeResolvedListFacetConfig & {\n list: BackofficeRecordListConfig<\n Record<string, unknown>,\n string,\n unknown,\n unknown,\n unknown,\n unknown,\n Record<string, unknown>\n >;\n};\n\nconst isRecordListConfig = (\n config: BackofficeResolvedListFacetConfig,\n): config is RecordListConfig => {\n return config.list.kind === 'records';\n};\n\ntype RecordFetchMode = 'append' | 'reset';\ntype ButtonVariant = ComponentProps<typeof Button>['variant'];\n\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 resolveLabel = (label: I18nLabel, tApp: TFunction): string => {\n return label(tApp);\n};\n\nconst ROW_FLAGS_SLOT_PX = 24;\nconst ROW_FLAGS_GAP_PX = 6;\nconst ROW_FLAGS_PADDING_X_PX = 4;\n\n// Match the actual icon button footprint (32px) plus dense table cell padding.\nconst ACTIONS_SLOT_PX = 32;\nconst ACTIONS_GAP_PX = 8;\nconst ACTIONS_PADDING_X_PX = 12;\nconst ACTIONS_SAFETY_PX = 4;\n\nconst computeRowFlagsColumnWidthPx = (flagCount: number): number => {\n if (flagCount <= 0) {\n return 0;\n }\n return (\n ROW_FLAGS_PADDING_X_PX * 2 +\n ROW_FLAGS_SLOT_PX * flagCount +\n ROW_FLAGS_GAP_PX * Math.max(0, flagCount - 1)\n );\n};\n\nconst computeActionsColumnWidthPx = (actionCount: number): number => {\n if (actionCount <= 0) {\n return 0;\n }\n return (\n ACTIONS_SAFETY_PX +\n ACTIONS_PADDING_X_PX * 2 +\n ACTIONS_SLOT_PX * actionCount +\n ACTIONS_GAP_PX * Math.max(0, actionCount - 1)\n );\n};\n\nconst listColumnTrackBySize: Record<\n BackofficeSizedDataTableColumn<unknown>['size'],\n string\n> = {\n xs: 'minmax(56px, 76px)',\n s: 'minmax(88px, 120px)',\n m: 'minmax(120px, 168px)',\n l: 'minmax(160px, 220px)',\n xl: 'minmax(220px, 300px)',\n // \"fluid\" columns share the available remainder equally.\n fluid: 'minmax(0, 1fr)',\n};\n\nconst resolveTrackBySize = (\n column: DataTableColumn<unknown>,\n fallback: string,\n): string => {\n if ('size' in column && typeof column.size === 'string') {\n return listColumnTrackBySize[\n column.size as BackofficeSizedDataTableColumn<unknown>['size']\n ];\n }\n return fallback;\n};\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 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 isRouteAction = (\n action: BackofficeListActionSpec,\n): action is BackofficeEntityRouteActionSpec<null> => {\n return action.kind === 'route';\n};\n\nconst isFormMutationAction = (\n action: BackofficeListActionSpec,\n): action is BackofficeEntityFormMutationActionSpec<null> => {\n return action.kind === 'formMutation';\n};\n\nconst resolveActionVariant = (\n actionVariant: ButtonVariant | undefined,\n index: number,\n): Exclude<ButtonVariant, undefined> => {\n if (actionVariant != null) {\n return actionVariant;\n }\n if (index === 0) {\n return 'primary';\n }\n return 'secondary';\n};\n\nconst resolveRowId = (row: unknown): string | null => {\n if (row == null || typeof row !== 'object') {\n return null;\n }\n if (!('id' in row)) {\n return null;\n }\n const value = (row as { id?: unknown }).id;\n if (typeof value !== 'string') {\n return null;\n }\n const trimmed = value.trim();\n if (trimmed === '') {\n return null;\n }\n return trimmed;\n};\n\nconst buildActionsColumn = (options: {\n ariaLabel: string;\n fallback: string;\n resolveDetailHref: (id: string) => string | null;\n}): DataTableColumn<unknown> => {\n const { ariaLabel, fallback, resolveDetailHref } = options;\n\n return {\n id: 'actions',\n header: '',\n className: pageStyles.actionsColumnCell,\n cell: (row) => {\n const id = resolveRowId(row);\n if (id == null) {\n return fallback;\n }\n const href = resolveDetailHref(id);\n if (href == null) {\n return fallback;\n }\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};\n\nconst BackofficeEntityRecordListPage = ({\n config,\n prepared,\n}: BackofficeEntityListPageProps): JSX.Element | null => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { entities } = useBackofficeConfig();\n const [activeFormActionId, setActiveFormActionId] = useState<string | null>(\n null,\n );\n const environment = useRelayEnvironment();\n\n if (!isRecordListConfig(config)) {\n return null;\n }\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 as never) ?? null;\n }, [listConfig, queryData]);\n\n const [rows, setRows] = useState(initialRows);\n const [nextCursor, setNextCursor] = useState<string | null>(initialCursor);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [isRefreshing, setIsRefreshing] = 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 resolveEntityHref: (entityId, refId) => {\n const entityManifest = entities[entityId];\n if (entityManifest == null) {\n return null;\n }\n return entityManifest.routes.detail(refId);\n },\n });\n const actionsColumn = buildActionsColumn({\n ariaLabel: t('actions.view'),\n fallback: t('common.notAvailable'),\n resolveDetailHref: (id) => {\n return config.routes.detail(id);\n },\n });\n const allColumns = [...baseColumns, actionsColumn];\n return applyListEdgeColumns(allColumns, listConfig.rowFlags, 1, tApp);\n }, [\n config.routes,\n listConfig.columns,\n listConfig.rowFlags,\n entities,\n t,\n tApp,\n ]);\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 if (listConfig.buildVariables != null) {\n return listConfig.buildVariables(input as never);\n }\n return 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\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 as never) ?? null;\n setNextCursor(cursor);\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 }, [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 }, [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 },\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 <>\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 onLoadMore={handleLoadMore}\n onRefresh={handleRefresh}\n 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={handleRefresh}\n />\n )}\n </>\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 const listConfig = config.list;\n if (listConfig.kind === 'records') {\n return null;\n }\n\n const { t } = useBackofficeReactTranslation();\n const { entities } = useBackofficeConfig();\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 resolveEntityHref: (entityId, refId) => {\n const entityManifest = entities[entityId];\n if (entityManifest == null) {\n return null;\n }\n return entityManifest.routes.detail(refId);\n },\n });\n const actionsColumn = buildActionsColumn({\n ariaLabel: t('actions.view'),\n fallback: t('common.notAvailable'),\n resolveDetailHref: (id) => {\n return config.routes.detail(id);\n },\n });\n const allColumns = [...baseColumns, actionsColumn];\n return applyListEdgeColumns(allColumns, listConfig.rowFlags, 1, tApp);\n }, [\n config.routes,\n listConfig.columns,\n listConfig.rowFlags,\n entities,\n t,\n tApp,\n ]);\n\n const getRowId = useCallback<GetRowId<unknown>>(\n (row) => {\n return listConfig.getRowId(row as never);\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 { onRefresh } = useBackofficeListRefetch({\n refetch: refetch as never,\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 buildVariables: listConfig.buildVariables,\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 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 default BackofficeEntityListPage;\n"],"mappings":"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"}
|