@strato-admin/core 0.1.1 → 0.3.0
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/dist/index.d.ts +3 -2
- package/dist/index.js +3 -3
- package/dist/ra-core/src/auth/AuthContext.d.ts +2 -0
- package/dist/ra-core/src/auth/AuthContext.js +3 -0
- package/dist/ra-core/src/auth/Authenticated.d.ts +40 -0
- package/dist/ra-core/src/auth/Authenticated.js +39 -0
- package/dist/ra-core/src/auth/CanAccess.d.ts +20 -0
- package/dist/ra-core/src/auth/CanAccess.js +31 -0
- package/dist/ra-core/src/auth/LogoutOnMount.d.ts +8 -0
- package/dist/ra-core/src/auth/LogoutOnMount.js +16 -0
- package/dist/ra-core/src/auth/WithPermissions.d.ts +19 -0
- package/dist/ra-core/src/auth/WithPermissions.js +66 -0
- package/dist/ra-core/src/auth/addRefreshAuthToAuthProvider.d.ts +22 -0
- package/dist/ra-core/src/auth/addRefreshAuthToAuthProvider.js +41 -0
- package/dist/ra-core/src/auth/addRefreshAuthToDataProvider.d.ts +21 -0
- package/dist/ra-core/src/auth/addRefreshAuthToDataProvider.js +30 -0
- package/dist/ra-core/src/auth/convertLegacyAuthProvider.d.ts +12 -0
- package/dist/ra-core/src/auth/convertLegacyAuthProvider.js +19 -0
- package/dist/ra-core/src/auth/index.d.ts +27 -0
- package/dist/ra-core/src/auth/index.js +34 -0
- package/dist/ra-core/src/auth/types.d.ts +7 -0
- package/dist/ra-core/src/auth/types.js +5 -0
- package/dist/ra-core/src/auth/useAuthProvider.d.ts +10 -0
- package/dist/ra-core/src/auth/useAuthProvider.js +11 -0
- package/dist/ra-core/src/auth/useAuthState.d.ts +48 -0
- package/dist/ra-core/src/auth/useAuthState.js +171 -0
- package/dist/ra-core/src/auth/useAuthenticated.d.ts +36 -0
- package/dist/ra-core/src/auth/useAuthenticated.js +34 -0
- package/dist/ra-core/src/auth/useCanAccess.d.ts +56 -0
- package/dist/ra-core/src/auth/useCanAccess.js +108 -0
- package/dist/ra-core/src/auth/useCanAccessCallback.d.ts +39 -0
- package/dist/ra-core/src/auth/useCanAccessCallback.js +45 -0
- package/dist/ra-core/src/auth/useCanAccessResources.d.ts +67 -0
- package/dist/ra-core/src/auth/useCanAccessResources.js +92 -0
- package/dist/ra-core/src/auth/useCheckAuth.d.ts +48 -0
- package/dist/ra-core/src/auth/useCheckAuth.js +76 -0
- package/dist/ra-core/src/auth/useGetIdentity.d.ts +41 -0
- package/dist/ra-core/src/auth/useGetIdentity.js +86 -0
- package/dist/ra-core/src/auth/useGetPermissions.d.ts +41 -0
- package/dist/ra-core/src/auth/useGetPermissions.js +47 -0
- package/dist/ra-core/src/auth/useHandleAuthCallback.d.ts +20 -0
- package/dist/ra-core/src/auth/useHandleAuthCallback.js +83 -0
- package/dist/ra-core/src/auth/useIsAuthPending.d.ts +13 -0
- package/dist/ra-core/src/auth/useIsAuthPending.js +30 -0
- package/dist/ra-core/src/auth/useLogin.d.ts +34 -0
- package/dist/ra-core/src/auth/useLogin.js +78 -0
- package/dist/ra-core/src/auth/useLogout.d.ts +31 -0
- package/dist/ra-core/src/auth/useLogout.js +117 -0
- package/dist/ra-core/src/auth/useLogoutIfAccessDenied.d.ts +42 -0
- package/dist/ra-core/src/auth/useLogoutIfAccessDenied.js +111 -0
- package/dist/ra-core/src/auth/usePermissions.d.ts +41 -0
- package/dist/ra-core/src/auth/usePermissions.js +123 -0
- package/dist/ra-core/src/auth/useRequireAccess.d.ts +140 -0
- package/dist/ra-core/src/auth/useRequireAccess.js +56 -0
- package/dist/ra-core/src/controller/button/index.d.ts +7 -0
- package/dist/ra-core/src/controller/button/index.js +7 -0
- package/dist/ra-core/src/controller/button/useBulkDeleteController.d.ts +14 -0
- package/dist/ra-core/src/controller/button/useBulkDeleteController.js +66 -0
- package/dist/ra-core/src/controller/button/useBulkUpdateController.d.ts +16 -0
- package/dist/ra-core/src/controller/button/useBulkUpdateController.js +70 -0
- package/dist/ra-core/src/controller/button/useDeleteController.d.ts +64 -0
- package/dist/ra-core/src/controller/button/useDeleteController.js +119 -0
- package/dist/ra-core/src/controller/button/useDeleteWithConfirmController.d.ts +69 -0
- package/dist/ra-core/src/controller/button/useDeleteWithConfirmController.js +139 -0
- package/dist/ra-core/src/controller/button/useDeleteWithUndoController.d.ts +46 -0
- package/dist/ra-core/src/controller/button/useDeleteWithUndoController.js +52 -0
- package/dist/ra-core/src/controller/button/useUpdateController.d.ts +68 -0
- package/dist/ra-core/src/controller/button/useUpdateController.js +113 -0
- package/dist/ra-core/src/controller/checkMinimumRequiredProps.d.ts +4 -0
- package/dist/ra-core/src/controller/checkMinimumRequiredProps.js +21 -0
- package/dist/ra-core/src/controller/create/CreateBase.d.ts +46 -0
- package/dist/ra-core/src/controller/create/CreateBase.js +55 -0
- package/dist/ra-core/src/controller/create/CreateContext.d.ts +20 -0
- package/dist/ra-core/src/controller/create/CreateContext.js +21 -0
- package/dist/ra-core/src/controller/create/CreateContextProvider.d.ts +29 -0
- package/dist/ra-core/src/controller/create/CreateContextProvider.js +31 -0
- package/dist/ra-core/src/controller/create/CreateController.d.ts +19 -0
- package/dist/ra-core/src/controller/create/CreateController.js +18 -0
- package/dist/ra-core/src/controller/create/index.d.ts +6 -0
- package/dist/ra-core/src/controller/create/index.js +6 -0
- package/dist/ra-core/src/controller/create/useCreateContext.d.ts +12 -0
- package/dist/ra-core/src/controller/create/useCreateContext.js +18 -0
- package/dist/ra-core/src/controller/create/useCreateController.d.ts +50 -0
- package/dist/ra-core/src/controller/create/useCreateController.js +149 -0
- package/dist/ra-core/src/controller/edit/EditBase.d.ts +41 -0
- package/dist/ra-core/src/controller/edit/EditBase.js +72 -0
- package/dist/ra-core/src/controller/edit/EditContext.d.ts +20 -0
- package/dist/ra-core/src/controller/edit/EditContext.js +21 -0
- package/dist/ra-core/src/controller/edit/EditContextProvider.d.ts +29 -0
- package/dist/ra-core/src/controller/edit/EditContextProvider.js +28 -0
- package/dist/ra-core/src/controller/edit/EditController.d.ts +19 -0
- package/dist/ra-core/src/controller/edit/EditController.js +18 -0
- package/dist/ra-core/src/controller/edit/index.d.ts +6 -0
- package/dist/ra-core/src/controller/edit/index.js +6 -0
- package/dist/ra-core/src/controller/edit/useEditContext.d.ts +12 -0
- package/dist/ra-core/src/controller/edit/useEditContext.js +18 -0
- package/dist/ra-core/src/controller/edit/useEditController.d.ts +72 -0
- package/dist/ra-core/src/controller/edit/useEditController.js +206 -0
- package/dist/ra-core/src/controller/field/ReferenceArrayFieldBase.d.ts +77 -0
- package/dist/ra-core/src/controller/field/ReferenceArrayFieldBase.js +119 -0
- package/dist/ra-core/src/controller/field/ReferenceFieldBase.d.ts +51 -0
- package/dist/ra-core/src/controller/field/ReferenceFieldBase.js +71 -0
- package/dist/ra-core/src/controller/field/ReferenceFieldContext.d.ts +4 -0
- package/dist/ra-core/src/controller/field/ReferenceFieldContext.js +10 -0
- package/dist/ra-core/src/controller/field/ReferenceManyCountBase.d.ts +20 -0
- package/dist/ra-core/src/controller/field/ReferenceManyCountBase.js +35 -0
- package/dist/ra-core/src/controller/field/ReferenceManyFieldBase.d.ts +59 -0
- package/dist/ra-core/src/controller/field/ReferenceManyFieldBase.js +108 -0
- package/dist/ra-core/src/controller/field/ReferenceOneFieldBase.d.ts +26 -0
- package/dist/ra-core/src/controller/field/ReferenceOneFieldBase.js +64 -0
- package/dist/ra-core/src/controller/field/index.d.ts +12 -0
- package/dist/ra-core/src/controller/field/index.js +12 -0
- package/dist/ra-core/src/controller/field/sanitizeFieldRestProps.d.ts +1 -0
- package/dist/ra-core/src/controller/field/sanitizeFieldRestProps.js +1 -0
- package/dist/ra-core/src/controller/field/types.d.ts +28 -0
- package/dist/ra-core/src/controller/field/types.js +1 -0
- package/dist/ra-core/src/controller/field/useReferenceArrayFieldController.d.ts +39 -0
- package/dist/ra-core/src/controller/field/useReferenceArrayFieldController.js +82 -0
- package/dist/ra-core/src/controller/field/useReferenceFieldController.d.ts +14 -0
- package/dist/ra-core/src/controller/field/useReferenceFieldController.js +31 -0
- package/dist/ra-core/src/controller/field/useReferenceManyFieldController.d.ts +49 -0
- package/dist/ra-core/src/controller/field/useReferenceManyFieldController.js +264 -0
- package/dist/ra-core/src/controller/field/useReferenceOneFieldController.d.ts +41 -0
- package/dist/ra-core/src/controller/field/useReferenceOneFieldController.js +67 -0
- package/dist/ra-core/src/controller/index.d.ts +17 -0
- package/dist/ra-core/src/controller/index.js +16 -0
- package/dist/ra-core/src/controller/input/ArrayInputBase.d.ts +46 -0
- package/dist/ra-core/src/controller/input/ArrayInputBase.js +130 -0
- package/dist/ra-core/src/controller/input/ArrayInputContext.d.ts +9 -0
- package/dist/ra-core/src/controller/input/ArrayInputContext.js +8 -0
- package/dist/ra-core/src/controller/input/ReferenceArrayInputBase.d.ts +78 -0
- package/dist/ra-core/src/controller/input/ReferenceArrayInputBase.js +97 -0
- package/dist/ra-core/src/controller/input/ReferenceInputBase.d.ts +65 -0
- package/dist/ra-core/src/controller/input/ReferenceInputBase.js +75 -0
- package/dist/ra-core/src/controller/input/SimpleFormIteratorBase.d.ts +17 -0
- package/dist/ra-core/src/controller/input/SimpleFormIteratorBase.js +55 -0
- package/dist/ra-core/src/controller/input/SimpleFormIteratorContext.d.ts +15 -0
- package/dist/ra-core/src/controller/input/SimpleFormIteratorContext.js +8 -0
- package/dist/ra-core/src/controller/input/SimpleFormIteratorItemBase.d.ts +12 -0
- package/dist/ra-core/src/controller/input/SimpleFormIteratorItemBase.js +53 -0
- package/dist/ra-core/src/controller/input/SimpleFormIteratorItemContext.d.ts +13 -0
- package/dist/ra-core/src/controller/input/SimpleFormIteratorItemContext.js +8 -0
- package/dist/ra-core/src/controller/input/index.d.ts +17 -0
- package/dist/ra-core/src/controller/input/index.js +17 -0
- package/dist/ra-core/src/controller/input/referenceDataStatus.d.ts +32 -0
- package/dist/ra-core/src/controller/input/referenceDataStatus.js +74 -0
- package/dist/ra-core/src/controller/input/sanitizeInputRestProps.d.ts +1 -0
- package/dist/ra-core/src/controller/input/sanitizeInputRestProps.js +1 -0
- package/dist/ra-core/src/controller/input/types.d.ts +3 -0
- package/dist/ra-core/src/controller/input/types.js +1 -0
- package/dist/ra-core/src/controller/input/useArrayInput.d.ts +8 -0
- package/dist/ra-core/src/controller/input/useArrayInput.js +29 -0
- package/dist/ra-core/src/controller/input/useGetArrayInputNewItemDefaults.d.ts +3 -0
- package/dist/ra-core/src/controller/input/useGetArrayInputNewItemDefaults.js +37 -0
- package/dist/ra-core/src/controller/input/useReferenceArrayInputController.d.ts +48 -0
- package/dist/ra-core/src/controller/input/useReferenceArrayInputController.js +137 -0
- package/dist/ra-core/src/controller/input/useReferenceInputController.d.ts +54 -0
- package/dist/ra-core/src/controller/input/useReferenceInputController.js +208 -0
- package/dist/ra-core/src/controller/input/useReferenceParams.d.ts +106 -0
- package/dist/ra-core/src/controller/input/useReferenceParams.js +226 -0
- package/dist/ra-core/src/controller/input/useSimpleFormIterator.d.ts +7 -0
- package/dist/ra-core/src/controller/input/useSimpleFormIterator.js +15 -0
- package/dist/ra-core/src/controller/input/useSimpleFormIteratorItem.d.ts +7 -0
- package/dist/ra-core/src/controller/input/useSimpleFormIteratorItem.js +15 -0
- package/dist/ra-core/src/controller/input/useSupportCreateSuggestion.d.ts +54 -0
- package/dist/ra-core/src/controller/input/useSupportCreateSuggestion.js +90 -0
- package/dist/ra-core/src/controller/list/FilterContext.d.ts +6 -0
- package/dist/ra-core/src/controller/list/FilterContext.js +5 -0
- package/dist/ra-core/src/controller/list/InfiniteListBase.d.ts +47 -0
- package/dist/ra-core/src/controller/list/InfiniteListBase.js +103 -0
- package/dist/ra-core/src/controller/list/InfinitePaginationContext.d.ts +25 -0
- package/dist/ra-core/src/controller/list/InfinitePaginationContext.js +32 -0
- package/dist/ra-core/src/controller/list/ListBase.d.ts +48 -0
- package/dist/ra-core/src/controller/list/ListBase.js +98 -0
- package/dist/ra-core/src/controller/list/ListContext.d.ts +54 -0
- package/dist/ra-core/src/controller/list/ListContext.js +55 -0
- package/dist/ra-core/src/controller/list/ListContextProvider.d.ts +33 -0
- package/dist/ra-core/src/controller/list/ListContextProvider.js +33 -0
- package/dist/ra-core/src/controller/list/ListController.d.ts +19 -0
- package/dist/ra-core/src/controller/list/ListController.js +18 -0
- package/dist/ra-core/src/controller/list/ListFilterContext.d.ts +39 -0
- package/dist/ra-core/src/controller/list/ListFilterContext.js +55 -0
- package/dist/ra-core/src/controller/list/ListPaginationContext.d.ts +43 -0
- package/dist/ra-core/src/controller/list/ListPaginationContext.js +67 -0
- package/dist/ra-core/src/controller/list/ListSortContext.d.ts +36 -0
- package/dist/ra-core/src/controller/list/ListSortContext.js +39 -0
- package/dist/ra-core/src/controller/list/RecordsIterator.d.ts +16 -0
- package/dist/ra-core/src/controller/list/RecordsIterator.js +22 -0
- package/dist/ra-core/src/controller/list/WithListContext.d.ts +32 -0
- package/dist/ra-core/src/controller/list/WithListContext.js +42 -0
- package/dist/ra-core/src/controller/list/index.d.ts +30 -0
- package/dist/ra-core/src/controller/list/index.js +30 -0
- package/dist/ra-core/src/controller/list/queryReducer.d.ts +45 -0
- package/dist/ra-core/src/controller/list/queryReducer.js +85 -0
- package/dist/ra-core/src/controller/list/useExpanded.d.ts +31 -0
- package/dist/ra-core/src/controller/list/useExpanded.js +70 -0
- package/dist/ra-core/src/controller/list/useFilterContext.d.ts +2 -0
- package/dist/ra-core/src/controller/list/useFilterContext.js +5 -0
- package/dist/ra-core/src/controller/list/useInfiniteListController.d.ts +44 -0
- package/dist/ra-core/src/controller/list/useInfiniteListController.js +175 -0
- package/dist/ra-core/src/controller/list/useInfinitePaginationContext.d.ts +16 -0
- package/dist/ra-core/src/controller/list/useInfinitePaginationContext.js +17 -0
- package/dist/ra-core/src/controller/list/useList.d.ts +55 -0
- package/dist/ra-core/src/controller/list/useList.js +223 -0
- package/dist/ra-core/src/controller/list/useListContext.d.ts +59 -0
- package/dist/ra-core/src/controller/list/useListContext.js +65 -0
- package/dist/ra-core/src/controller/list/useListContextWithProps.d.ts +44 -0
- package/dist/ra-core/src/controller/list/useListContextWithProps.js +84 -0
- package/dist/ra-core/src/controller/list/useListController.d.ts +296 -0
- package/dist/ra-core/src/controller/list/useListController.js +234 -0
- package/dist/ra-core/src/controller/list/useListFilterContext.d.ts +11 -0
- package/dist/ra-core/src/controller/list/useListFilterContext.js +18 -0
- package/dist/ra-core/src/controller/list/useListPaginationContext.d.ts +12 -0
- package/dist/ra-core/src/controller/list/useListPaginationContext.js +19 -0
- package/dist/ra-core/src/controller/list/useListParams.d.ts +116 -0
- package/dist/ra-core/src/controller/list/useListParams.js +281 -0
- package/dist/ra-core/src/controller/list/useListSortContext.d.ts +12 -0
- package/dist/ra-core/src/controller/list/useListSortContext.js +19 -0
- package/dist/ra-core/src/controller/list/useRecordSelection.d.ts +32 -0
- package/dist/ra-core/src/controller/list/useRecordSelection.js +93 -0
- package/dist/ra-core/src/controller/list/useSavedQueries.d.ts +14 -0
- package/dist/ra-core/src/controller/list/useSavedQueries.js +29 -0
- package/dist/ra-core/src/controller/list/useSelectAll.d.ts +48 -0
- package/dist/ra-core/src/controller/list/useSelectAll.js +102 -0
- package/dist/ra-core/src/controller/list/useUnselect.d.ts +10 -0
- package/dist/ra-core/src/controller/list/useUnselect.js +18 -0
- package/dist/ra-core/src/controller/list/useUnselectAll.d.ts +9 -0
- package/dist/ra-core/src/controller/list/useUnselectAll.js +18 -0
- package/dist/ra-core/src/controller/record/OptionalRecordContextProvider.d.ts +21 -0
- package/dist/ra-core/src/controller/record/OptionalRecordContextProvider.js +18 -0
- package/dist/ra-core/src/controller/record/RecordContext.d.ts +37 -0
- package/dist/ra-core/src/controller/record/RecordContext.js +33 -0
- package/dist/ra-core/src/controller/record/RecordRepresentation.d.ts +11 -0
- package/dist/ra-core/src/controller/record/RecordRepresentation.js +15 -0
- package/dist/ra-core/src/controller/record/WithRecord.d.ts +20 -0
- package/dist/ra-core/src/controller/record/WithRecord.js +18 -0
- package/dist/ra-core/src/controller/record/index.d.ts +5 -0
- package/dist/ra-core/src/controller/record/index.js +5 -0
- package/dist/ra-core/src/controller/record/useRecordContext.d.ts +34 -0
- package/dist/ra-core/src/controller/record/useRecordContext.js +36 -0
- package/dist/ra-core/src/controller/saveContext/SaveContext.d.ts +20 -0
- package/dist/ra-core/src/controller/saveContext/SaveContext.js +2 -0
- package/dist/ra-core/src/controller/saveContext/SaveContextProvider.d.ts +4 -0
- package/dist/ra-core/src/controller/saveContext/SaveContextProvider.js +3 -0
- package/dist/ra-core/src/controller/saveContext/index.d.ts +6 -0
- package/dist/ra-core/src/controller/saveContext/index.js +6 -0
- package/dist/ra-core/src/controller/saveContext/useMutationMiddlewares.d.ts +39 -0
- package/dist/ra-core/src/controller/saveContext/useMutationMiddlewares.js +79 -0
- package/dist/ra-core/src/controller/saveContext/usePickSaveContext.d.ts +5 -0
- package/dist/ra-core/src/controller/saveContext/usePickSaveContext.js +25 -0
- package/dist/ra-core/src/controller/saveContext/useRegisterMutationMiddleware.d.ts +6 -0
- package/dist/ra-core/src/controller/saveContext/useRegisterMutationMiddleware.js +18 -0
- package/dist/ra-core/src/controller/saveContext/useSaveContext.d.ts +14 -0
- package/dist/ra-core/src/controller/saveContext/useSaveContext.js +17 -0
- package/dist/ra-core/src/controller/show/ShowBase.d.ts +42 -0
- package/dist/ra-core/src/controller/show/ShowBase.js +72 -0
- package/dist/ra-core/src/controller/show/ShowContext.d.ts +20 -0
- package/dist/ra-core/src/controller/show/ShowContext.js +21 -0
- package/dist/ra-core/src/controller/show/ShowContextProvider.d.ts +27 -0
- package/dist/ra-core/src/controller/show/ShowContextProvider.js +25 -0
- package/dist/ra-core/src/controller/show/ShowController.d.ts +19 -0
- package/dist/ra-core/src/controller/show/ShowController.js +18 -0
- package/dist/ra-core/src/controller/show/index.d.ts +6 -0
- package/dist/ra-core/src/controller/show/index.js +6 -0
- package/dist/ra-core/src/controller/show/useShowContext.d.ts +12 -0
- package/dist/ra-core/src/controller/show/useShowContext.js +19 -0
- package/dist/ra-core/src/controller/show/useShowController.d.ts +75 -0
- package/dist/ra-core/src/controller/show/useShowController.js +110 -0
- package/dist/ra-core/src/controller/useFilterState.d.ts +46 -0
- package/dist/ra-core/src/controller/useFilterState.js +70 -0
- package/dist/ra-core/src/controller/usePaginationState.d.ts +33 -0
- package/dist/ra-core/src/controller/usePaginationState.js +45 -0
- package/dist/ra-core/src/controller/usePrevNextController.d.ts +127 -0
- package/dist/ra-core/src/controller/usePrevNextController.js +215 -0
- package/dist/ra-core/src/controller/useReference.d.ts +49 -0
- package/dist/ra-core/src/controller/useReference.js +42 -0
- package/dist/ra-core/src/controller/useSortState.d.ts +61 -0
- package/dist/ra-core/src/controller/useSortState.js +96 -0
- package/dist/ra-core/src/core/CoreAdmin.d.ts +83 -0
- package/dist/ra-core/src/core/CoreAdmin.js +86 -0
- package/dist/ra-core/src/core/CoreAdminContext.d.ts +154 -0
- package/dist/ra-core/src/core/CoreAdminContext.js +27 -0
- package/dist/ra-core/src/core/CoreAdminRoutes.d.ts +15 -0
- package/dist/ra-core/src/core/CoreAdminRoutes.js +33 -0
- package/dist/ra-core/src/core/CoreAdminUI.d.ts +260 -0
- package/dist/ra-core/src/core/CoreAdminUI.js +33 -0
- package/dist/ra-core/src/core/CustomRoutes.d.ts +16 -0
- package/dist/ra-core/src/core/CustomRoutes.js +11 -0
- package/dist/ra-core/src/core/DefaultTitleContext.d.ts +15 -0
- package/dist/ra-core/src/core/DefaultTitleContext.js +15 -0
- package/dist/ra-core/src/core/HasDashboardContext.d.ts +21 -0
- package/dist/ra-core/src/core/HasDashboardContext.js +22 -0
- package/dist/ra-core/src/core/IsOffline.d.ts +4 -0
- package/dist/ra-core/src/core/IsOffline.js +5 -0
- package/dist/ra-core/src/core/NavigateToFirstResource.d.ts +10 -0
- package/dist/ra-core/src/core/NavigateToFirstResource.js +21 -0
- package/dist/ra-core/src/core/OptionalResourceContextProvider.d.ts +22 -0
- package/dist/ra-core/src/core/OptionalResourceContextProvider.js +18 -0
- package/dist/ra-core/src/core/Resource.d.ts +16 -0
- package/dist/ra-core/src/core/Resource.js +31 -0
- package/dist/ra-core/src/core/ResourceContext.d.ts +19 -0
- package/dist/ra-core/src/core/ResourceContext.js +19 -0
- package/dist/ra-core/src/core/ResourceContextProvider.d.ts +26 -0
- package/dist/ra-core/src/core/ResourceContextProvider.js +22 -0
- package/dist/ra-core/src/core/ResourceDefinitionContext.d.ts +35 -0
- package/dist/ra-core/src/core/ResourceDefinitionContext.js +48 -0
- package/dist/ra-core/src/core/SourceContext.d.ts +27 -0
- package/dist/ra-core/src/core/SourceContext.js +35 -0
- package/dist/ra-core/src/core/UserMenuContext.d.ts +34 -0
- package/dist/ra-core/src/core/UserMenuContext.js +28 -0
- package/dist/ra-core/src/core/UserMenuContextProvider.d.ts +16 -0
- package/dist/ra-core/src/core/UserMenuContextProvider.js +9 -0
- package/dist/ra-core/src/core/index.d.ts +27 -0
- package/dist/ra-core/src/core/index.js +27 -0
- package/dist/ra-core/src/core/useConfigureAdminRouterFromChildren.d.ts +34 -0
- package/dist/ra-core/src/core/useConfigureAdminRouterFromChildren.js +227 -0
- package/dist/ra-core/src/core/useFirstResourceWithListAccess.d.ts +8 -0
- package/dist/ra-core/src/core/useFirstResourceWithListAccess.js +19 -0
- package/dist/ra-core/src/core/useGetRecordRepresentation.d.ts +13 -0
- package/dist/ra-core/src/core/useGetRecordRepresentation.js +44 -0
- package/dist/ra-core/src/core/useGetResourceLabel.d.ts +22 -0
- package/dist/ra-core/src/core/useGetResourceLabel.js +42 -0
- package/dist/ra-core/src/core/useIsOffline.d.ts +7 -0
- package/dist/ra-core/src/core/useIsOffline.js +18 -0
- package/dist/ra-core/src/core/useResourceContext.d.ts +36 -0
- package/dist/ra-core/src/core/useResourceContext.js +38 -0
- package/dist/ra-core/src/core/useResourceDefinition.d.ts +31 -0
- package/dist/ra-core/src/core/useResourceDefinition.js +48 -0
- package/dist/ra-core/src/core/useResourceDefinitionContext.d.ts +1 -0
- package/dist/ra-core/src/core/useResourceDefinitionContext.js +3 -0
- package/dist/ra-core/src/core/useResourceDefinitions.d.ts +21 -0
- package/dist/ra-core/src/core/useResourceDefinitions.js +20 -0
- package/dist/ra-core/src/core/useUserMenu.d.ts +28 -0
- package/dist/ra-core/src/core/useUserMenu.js +30 -0
- package/dist/ra-core/src/core/useWrappedSource.d.ts +11 -0
- package/dist/ra-core/src/core/useWrappedSource.js +15 -0
- package/dist/ra-core/src/dataProvider/DataProviderContext.d.ts +3 -0
- package/dist/ra-core/src/dataProvider/DataProviderContext.js +4 -0
- package/dist/ra-core/src/dataProvider/HttpError.d.ts +6 -0
- package/dist/ra-core/src/dataProvider/HttpError.js +19 -0
- package/dist/ra-core/src/dataProvider/combineDataProviders.d.ts +21 -0
- package/dist/ra-core/src/dataProvider/combineDataProviders.js +32 -0
- package/dist/ra-core/src/dataProvider/convertLegacyDataProvider.d.ts +12 -0
- package/dist/ra-core/src/dataProvider/convertLegacyDataProvider.js +40 -0
- package/dist/ra-core/src/dataProvider/dataFetchActions.d.ts +15 -0
- package/dist/ra-core/src/dataProvider/dataFetchActions.js +49 -0
- package/dist/ra-core/src/dataProvider/defaultDataProvider.d.ts +2 -0
- package/dist/ra-core/src/dataProvider/defaultDataProvider.js +12 -0
- package/dist/ra-core/src/dataProvider/fetch.d.ts +32 -0
- package/dist/ra-core/src/dataProvider/fetch.js +78 -0
- package/dist/ra-core/src/dataProvider/index.d.ts +34 -0
- package/dist/ra-core/src/dataProvider/index.js +33 -0
- package/dist/ra-core/src/dataProvider/populateQueryCache.d.ts +22 -0
- package/dist/ra-core/src/dataProvider/populateQueryCache.js +30 -0
- package/dist/ra-core/src/dataProvider/testDataProvider.d.ts +2 -0
- package/dist/ra-core/src/dataProvider/testDataProvider.js +41 -0
- package/dist/ra-core/src/dataProvider/undo/AddUndoableMutationContext.d.ts +2 -0
- package/dist/ra-core/src/dataProvider/undo/AddUndoableMutationContext.js +2 -0
- package/dist/ra-core/src/dataProvider/undo/TakeUndoableMutationContext.d.ts +2 -0
- package/dist/ra-core/src/dataProvider/undo/TakeUndoableMutationContext.js +2 -0
- package/dist/ra-core/src/dataProvider/undo/UndoableMutationsContextProvider.d.ts +13 -0
- package/dist/ra-core/src/dataProvider/undo/UndoableMutationsContextProvider.js +38 -0
- package/dist/ra-core/src/dataProvider/undo/index.d.ts +6 -0
- package/dist/ra-core/src/dataProvider/undo/index.js +6 -0
- package/dist/ra-core/src/dataProvider/undo/types.d.ts +3 -0
- package/dist/ra-core/src/dataProvider/undo/types.js +1 -0
- package/dist/ra-core/src/dataProvider/undo/useAddUndoableMutation.d.ts +1 -0
- package/dist/ra-core/src/dataProvider/undo/useAddUndoableMutation.js +3 -0
- package/dist/ra-core/src/dataProvider/undo/useTakeUndoableMutation.d.ts +1 -0
- package/dist/ra-core/src/dataProvider/undo/useTakeUndoableMutation.js +3 -0
- package/dist/ra-core/src/dataProvider/undoableEventEmitter.d.ts +3 -0
- package/dist/ra-core/src/dataProvider/undoableEventEmitter.js +2 -0
- package/dist/ra-core/src/dataProvider/useCreate.d.ts +89 -0
- package/dist/ra-core/src/dataProvider/useCreate.js +155 -0
- package/dist/ra-core/src/dataProvider/useDataProvider.d.ts +2 -0
- package/dist/ra-core/src/dataProvider/useDataProvider.js +140 -0
- package/dist/ra-core/src/dataProvider/useDelete.d.ts +83 -0
- package/dist/ra-core/src/dataProvider/useDelete.js +171 -0
- package/dist/ra-core/src/dataProvider/useDeleteMany.d.ts +81 -0
- package/dist/ra-core/src/dataProvider/useDeleteMany.js +193 -0
- package/dist/ra-core/src/dataProvider/useGetList.d.ts +58 -0
- package/dist/ra-core/src/dataProvider/useGetList.js +131 -0
- package/dist/ra-core/src/dataProvider/useGetMany.d.ts +49 -0
- package/dist/ra-core/src/dataProvider/useGetMany.js +143 -0
- package/dist/ra-core/src/dataProvider/useGetManyAggregate.d.ts +62 -0
- package/dist/ra-core/src/dataProvider/useGetManyAggregate.js +295 -0
- package/dist/ra-core/src/dataProvider/useGetManyReference.d.ts +62 -0
- package/dist/ra-core/src/dataProvider/useGetManyReference.js +117 -0
- package/dist/ra-core/src/dataProvider/useGetOne.d.ts +48 -0
- package/dist/ra-core/src/dataProvider/useGetOne.js +94 -0
- package/dist/ra-core/src/dataProvider/useGetRecordId.d.ts +14 -0
- package/dist/ra-core/src/dataProvider/useGetRecordId.js +22 -0
- package/dist/ra-core/src/dataProvider/useInfiniteGetList.d.ts +64 -0
- package/dist/ra-core/src/dataProvider/useInfiniteGetList.js +177 -0
- package/dist/ra-core/src/dataProvider/useIsDataLoaded.d.ts +13 -0
- package/dist/ra-core/src/dataProvider/useIsDataLoaded.js +35 -0
- package/dist/ra-core/src/dataProvider/useLoading.d.ts +12 -0
- package/dist/ra-core/src/dataProvider/useLoading.js +41 -0
- package/dist/ra-core/src/dataProvider/useMutationWithMutationMode.d.ts +51 -0
- package/dist/ra-core/src/dataProvider/useMutationWithMutationMode.js +238 -0
- package/dist/ra-core/src/dataProvider/useRefresh.d.ts +14 -0
- package/dist/ra-core/src/dataProvider/useRefresh.js +21 -0
- package/dist/ra-core/src/dataProvider/useUpdate.d.ts +89 -0
- package/dist/ra-core/src/dataProvider/useUpdate.js +183 -0
- package/dist/ra-core/src/dataProvider/useUpdateMany.d.ts +81 -0
- package/dist/ra-core/src/dataProvider/useUpdateMany.js +171 -0
- package/dist/ra-core/src/dataProvider/validateResponseFormat.d.ts +2 -0
- package/dist/ra-core/src/dataProvider/validateResponseFormat.js +35 -0
- package/dist/ra-core/src/dataProvider/withLifecycleCallbacks.d.ts +162 -0
- package/dist/ra-core/src/dataProvider/withLifecycleCallbacks.js +377 -0
- package/dist/ra-core/src/dataTable/DataTableBase.d.ts +36 -0
- package/dist/ra-core/src/dataTable/DataTableBase.js +104 -0
- package/dist/ra-core/src/dataTable/DataTableCallbacksContext.d.ts +18 -0
- package/dist/ra-core/src/dataTable/DataTableCallbacksContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableColumnFilterContext.d.ts +2 -0
- package/dist/ra-core/src/dataTable/DataTableColumnFilterContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableColumnRankContext.d.ts +2 -0
- package/dist/ra-core/src/dataTable/DataTableColumnRankContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableConfigContext.d.ts +22 -0
- package/dist/ra-core/src/dataTable/DataTableConfigContext.js +7 -0
- package/dist/ra-core/src/dataTable/DataTableDataContext.d.ts +4 -0
- package/dist/ra-core/src/dataTable/DataTableDataContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableRenderContext.d.ts +3 -0
- package/dist/ra-core/src/dataTable/DataTableRenderContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableSelectedIdsContext.d.ts +3 -0
- package/dist/ra-core/src/dataTable/DataTableSelectedIdsContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableSortContext.d.ts +3 -0
- package/dist/ra-core/src/dataTable/DataTableSortContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableStoreContext.d.ts +8 -0
- package/dist/ra-core/src/dataTable/DataTableStoreContext.js +6 -0
- package/dist/ra-core/src/dataTable/index.d.ts +11 -0
- package/dist/ra-core/src/dataTable/index.js +11 -0
- package/dist/ra-core/src/dataTable/types.d.ts +2 -0
- package/dist/ra-core/src/dataTable/types.js +1 -0
- package/dist/ra-core/src/export/ExporterContext.d.ts +2 -0
- package/dist/ra-core/src/export/ExporterContext.js +4 -0
- package/dist/ra-core/src/export/defaultExporter.d.ts +2 -0
- package/dist/ra-core/src/export/defaultExporter.js +3 -0
- package/dist/ra-core/src/export/downloadCSV.d.ts +1 -0
- package/dist/ra-core/src/export/downloadCSV.js +17 -0
- package/dist/ra-core/src/export/fetchRelatedRecords.d.ts +14 -0
- package/dist/ra-core/src/export/fetchRelatedRecords.js +19 -0
- package/dist/ra-core/src/export/getRelatedIds.d.ts +24 -0
- package/dist/ra-core/src/export/getRelatedIds.js +26 -0
- package/dist/ra-core/src/export/index.d.ts +5 -0
- package/dist/ra-core/src/export/index.js +5 -0
- package/dist/ra-core/src/export/useBulkExport.d.ts +11 -0
- package/dist/ra-core/src/export/useBulkExport.js +30 -0
- package/dist/ra-core/src/form/FilterLiveForm.d.ts +56 -0
- package/dist/ra-core/src/form/FilterLiveForm.js +161 -0
- package/dist/ra-core/src/form/Form.d.ts +56 -0
- package/dist/ra-core/src/form/Form.js +55 -0
- package/dist/ra-core/src/form/FormDataConsumer.d.ts +74 -0
- package/dist/ra-core/src/form/FormDataConsumer.js +68 -0
- package/dist/ra-core/src/form/WarnWhenUnsavedChanges.d.ts +5 -0
- package/dist/ra-core/src/form/WarnWhenUnsavedChanges.js +5 -0
- package/dist/ra-core/src/form/choices/ChoicesContext.d.ts +65 -0
- package/dist/ra-core/src/form/choices/ChoicesContext.js +7 -0
- package/dist/ra-core/src/form/choices/ChoicesContextProvider.d.ts +6 -0
- package/dist/ra-core/src/form/choices/ChoicesContextProvider.js +3 -0
- package/dist/ra-core/src/form/choices/index.d.ts +4 -0
- package/dist/ra-core/src/form/choices/index.js +4 -0
- package/dist/ra-core/src/form/choices/useChoices.d.ts +31 -0
- package/dist/ra-core/src/form/choices/useChoices.js +42 -0
- package/dist/ra-core/src/form/choices/useChoicesContext.d.ts +5 -0
- package/dist/ra-core/src/form/choices/useChoicesContext.js +62 -0
- package/dist/ra-core/src/form/getFormInitialValues.d.ts +8 -0
- package/dist/ra-core/src/form/getFormInitialValues.js +14 -0
- package/dist/ra-core/src/form/groups/FormGroupContext.d.ts +9 -0
- package/dist/ra-core/src/form/groups/FormGroupContext.js +9 -0
- package/dist/ra-core/src/form/groups/FormGroupContextProvider.d.ts +49 -0
- package/dist/ra-core/src/form/groups/FormGroupContextProvider.js +64 -0
- package/dist/ra-core/src/form/groups/FormGroupsContext.d.ts +15 -0
- package/dist/ra-core/src/form/groups/FormGroupsContext.js +3 -0
- package/dist/ra-core/src/form/groups/FormGroupsProvider.d.ts +11 -0
- package/dist/ra-core/src/form/groups/FormGroupsProvider.js +67 -0
- package/dist/ra-core/src/form/groups/index.d.ts +6 -0
- package/dist/ra-core/src/form/groups/index.js +6 -0
- package/dist/ra-core/src/form/groups/useFormGroup.d.ts +67 -0
- package/dist/ra-core/src/form/groups/useFormGroup.js +146 -0
- package/dist/ra-core/src/form/groups/useFormGroupContext.d.ts +4 -0
- package/dist/ra-core/src/form/groups/useFormGroupContext.js +9 -0
- package/dist/ra-core/src/form/groups/useFormGroups.d.ts +4 -0
- package/dist/ra-core/src/form/groups/useFormGroups.js +9 -0
- package/dist/ra-core/src/form/index.d.ts +14 -0
- package/dist/ra-core/src/form/index.js +14 -0
- package/dist/ra-core/src/form/sanitizeEmptyValues.d.ts +7 -0
- package/dist/ra-core/src/form/sanitizeEmptyValues.js +26 -0
- package/dist/ra-core/src/form/useApplyInputDefaultValues.d.ts +19 -0
- package/dist/ra-core/src/form/useApplyInputDefaultValues.js +71 -0
- package/dist/ra-core/src/form/useAugmentedForm.d.ts +32 -0
- package/dist/ra-core/src/form/useAugmentedForm.js +101 -0
- package/dist/ra-core/src/form/useFormIsDirty.d.ts +4 -0
- package/dist/ra-core/src/form/useFormIsDirty.js +39 -0
- package/dist/ra-core/src/form/useFormValues.d.ts +4 -0
- package/dist/ra-core/src/form/useFormValues.js +9 -0
- package/dist/ra-core/src/form/useInput.d.ts +33 -0
- package/dist/ra-core/src/form/useInput.js +100 -0
- package/dist/ra-core/src/form/useRecordFromLocation.d.ts +22 -0
- package/dist/ra-core/src/form/useRecordFromLocation.js +59 -0
- package/dist/ra-core/src/form/useSuggestions.d.ts +43 -0
- package/dist/ra-core/src/form/useSuggestions.js +186 -0
- package/dist/ra-core/src/form/useWarnWhenUnsavedChanges.d.ts +7 -0
- package/dist/ra-core/src/form/useWarnWhenUnsavedChanges.js +74 -0
- package/dist/ra-core/src/form/validation/ValidationError.d.ts +5 -0
- package/dist/ra-core/src/form/validation/ValidationError.js +22 -0
- package/dist/ra-core/src/form/validation/getSimpleValidationResolver.d.ts +31 -0
- package/dist/ra-core/src/form/validation/getSimpleValidationResolver.js +87 -0
- package/dist/ra-core/src/form/validation/index.d.ts +7 -0
- package/dist/ra-core/src/form/validation/index.js +7 -0
- package/dist/ra-core/src/form/validation/setSubmissionErrors.d.ts +21 -0
- package/dist/ra-core/src/form/validation/setSubmissionErrors.js +34 -0
- package/dist/ra-core/src/form/validation/useGetValidationErrorMessage.d.ts +26 -0
- package/dist/ra-core/src/form/validation/useGetValidationErrorMessage.js +35 -0
- package/dist/ra-core/src/form/validation/useNotifyIsFormInvalid.d.ts +9 -0
- package/dist/ra-core/src/form/validation/useNotifyIsFormInvalid.js +30 -0
- package/dist/ra-core/src/form/validation/useUnique.d.ts +57 -0
- package/dist/ra-core/src/form/validation/useUnique.js +107 -0
- package/dist/ra-core/src/form/validation/validate.d.ts +168 -0
- package/dist/ra-core/src/form/validation/validate.js +218 -0
- package/dist/ra-core/src/i18n/I18nContext.d.ts +3 -0
- package/dist/ra-core/src/i18n/I18nContext.js +11 -0
- package/dist/ra-core/src/i18n/I18nContextProvider.d.ts +10 -0
- package/dist/ra-core/src/i18n/I18nContextProvider.js +47 -0
- package/dist/ra-core/src/i18n/TestTranslationProvider.d.ts +8 -0
- package/dist/ra-core/src/i18n/TestTranslationProvider.js +20 -0
- package/dist/ra-core/src/i18n/TranslatableContext.d.ts +16 -0
- package/dist/ra-core/src/i18n/TranslatableContext.js +2 -0
- package/dist/ra-core/src/i18n/TranslatableContextProvider.d.ts +6 -0
- package/dist/ra-core/src/i18n/TranslatableContextProvider.js +5 -0
- package/dist/ra-core/src/i18n/Translate.d.ts +7 -0
- package/dist/ra-core/src/i18n/Translate.js +10 -0
- package/dist/ra-core/src/i18n/TranslationMessages.d.ts +221 -0
- package/dist/ra-core/src/i18n/TranslationMessages.js +1 -0
- package/dist/ra-core/src/i18n/TranslationUtils.d.ts +60 -0
- package/dist/ra-core/src/i18n/TranslationUtils.js +70 -0
- package/dist/ra-core/src/i18n/index.d.ts +20 -0
- package/dist/ra-core/src/i18n/index.js +20 -0
- package/dist/ra-core/src/i18n/substituteTokens.d.ts +8 -0
- package/dist/ra-core/src/i18n/substituteTokens.js +18 -0
- package/dist/ra-core/src/i18n/useI18nProvider.d.ts +12 -0
- package/dist/ra-core/src/i18n/useI18nProvider.js +14 -0
- package/dist/ra-core/src/i18n/useLocale.d.ts +17 -0
- package/dist/ra-core/src/i18n/useLocale.js +21 -0
- package/dist/ra-core/src/i18n/useLocaleState.d.ts +27 -0
- package/dist/ra-core/src/i18n/useLocaleState.js +34 -0
- package/dist/ra-core/src/i18n/useLocales.d.ts +31 -0
- package/dist/ra-core/src/i18n/useLocales.js +28 -0
- package/dist/ra-core/src/i18n/useResourceTranslation.d.ts +8 -0
- package/dist/ra-core/src/i18n/useResourceTranslation.js +18 -0
- package/dist/ra-core/src/i18n/useSetLocale.d.ts +25 -0
- package/dist/ra-core/src/i18n/useSetLocale.js +29 -0
- package/dist/ra-core/src/i18n/useTranslatable.d.ts +29 -0
- package/dist/ra-core/src/i18n/useTranslatable.js +98 -0
- package/dist/ra-core/src/i18n/useTranslatableContext.d.ts +31 -0
- package/dist/ra-core/src/i18n/useTranslatableContext.js +38 -0
- package/dist/ra-core/src/i18n/useTranslate.d.ts +21 -0
- package/dist/ra-core/src/i18n/useTranslate.js +29 -0
- package/dist/ra-core/src/i18n/useTranslateLabel.d.ts +6 -0
- package/dist/ra-core/src/i18n/useTranslateLabel.js +26 -0
- package/dist/ra-core/src/index.d.ts +16 -0
- package/dist/ra-core/src/index.js +16 -0
- package/dist/ra-core/src/inference/InferredElement.d.ts +12 -0
- package/dist/ra-core/src/inference/InferredElement.js +40 -0
- package/dist/ra-core/src/inference/assertions.d.ts +26 -0
- package/dist/ra-core/src/inference/assertions.js +38 -0
- package/dist/ra-core/src/inference/getElementsFromRecords.d.ts +35 -0
- package/dist/ra-core/src/inference/getElementsFromRecords.js +39 -0
- package/dist/ra-core/src/inference/getValuesFromRecords.d.ts +28 -0
- package/dist/ra-core/src/inference/getValuesFromRecords.js +40 -0
- package/dist/ra-core/src/inference/index.d.ts +6 -0
- package/dist/ra-core/src/inference/index.js +6 -0
- package/dist/ra-core/src/inference/inferElementFromValues.d.ts +41 -0
- package/dist/ra-core/src/inference/inferElementFromValues.js +161 -0
- package/dist/ra-core/src/inference/inferTypeFromValues.d.ts +21 -0
- package/dist/ra-core/src/inference/inferTypeFromValues.js +141 -0
- package/dist/ra-core/src/inference/types.d.ts +9 -0
- package/dist/ra-core/src/inference/types.js +1 -0
- package/dist/ra-core/src/notification/AddNotificationContext.d.ts +2 -0
- package/dist/ra-core/src/notification/AddNotificationContext.js +2 -0
- package/dist/ra-core/src/notification/CloseNotificationContext.d.ts +2 -0
- package/dist/ra-core/src/notification/CloseNotificationContext.js +2 -0
- package/dist/ra-core/src/notification/NotificationContext.d.ts +37 -0
- package/dist/ra-core/src/notification/NotificationContext.js +35 -0
- package/dist/ra-core/src/notification/NotificationContextProvider.d.ts +3 -0
- package/dist/ra-core/src/notification/NotificationContextProvider.js +31 -0
- package/dist/ra-core/src/notification/index.d.ts +9 -0
- package/dist/ra-core/src/notification/index.js +9 -0
- package/dist/ra-core/src/notification/types.d.ts +14 -0
- package/dist/ra-core/src/notification/types.js +1 -0
- package/dist/ra-core/src/notification/useAddNotificationContext.d.ts +1 -0
- package/dist/ra-core/src/notification/useAddNotificationContext.js +3 -0
- package/dist/ra-core/src/notification/useCloseNotification.d.ts +1 -0
- package/dist/ra-core/src/notification/useCloseNotification.js +9 -0
- package/dist/ra-core/src/notification/useNotificationContext.d.ts +1 -0
- package/dist/ra-core/src/notification/useNotificationContext.js +3 -0
- package/dist/ra-core/src/notification/useNotify.d.ts +20 -0
- package/dist/ra-core/src/notification/useNotify.js +28 -0
- package/dist/ra-core/src/preferences/PreferenceKeyContext.d.ts +7 -0
- package/dist/ra-core/src/preferences/PreferenceKeyContext.js +7 -0
- package/dist/ra-core/src/preferences/PreferencesEditorContext.d.ts +16 -0
- package/dist/ra-core/src/preferences/PreferencesEditorContext.js +2 -0
- package/dist/ra-core/src/preferences/PreferencesEditorContextProvider.d.ts +3 -0
- package/dist/ra-core/src/preferences/PreferencesEditorContextProvider.js +48 -0
- package/dist/ra-core/src/preferences/index.d.ts +7 -0
- package/dist/ra-core/src/preferences/index.js +7 -0
- package/dist/ra-core/src/preferences/usePreference.d.ts +18 -0
- package/dist/ra-core/src/preferences/usePreference.js +10 -0
- package/dist/ra-core/src/preferences/usePreferenceInput.d.ts +22 -0
- package/dist/ra-core/src/preferences/usePreferenceInput.js +43 -0
- package/dist/ra-core/src/preferences/usePreferencesEditor.d.ts +2 -0
- package/dist/ra-core/src/preferences/usePreferencesEditor.js +9 -0
- package/dist/ra-core/src/preferences/useSetInspectorTitle.d.ts +7 -0
- package/dist/ra-core/src/preferences/useSetInspectorTitle.js +19 -0
- package/dist/ra-core/src/routing/AdminRouter.d.ts +13 -0
- package/dist/ra-core/src/routing/AdminRouter.js +15 -0
- package/dist/ra-core/src/routing/BasenameContext.d.ts +1 -0
- package/dist/ra-core/src/routing/BasenameContext.js +2 -0
- package/dist/ra-core/src/routing/BasenameContextProvider.d.ts +12 -0
- package/dist/ra-core/src/routing/BasenameContextProvider.js +11 -0
- package/dist/ra-core/src/routing/LinkBase.d.ts +17 -0
- package/dist/ra-core/src/routing/LinkBase.js +22 -0
- package/dist/ra-core/src/routing/Navigate.d.ts +14 -0
- package/dist/ra-core/src/routing/Navigate.js +17 -0
- package/dist/ra-core/src/routing/Outlet.d.ts +19 -0
- package/dist/ra-core/src/routing/Outlet.js +22 -0
- package/dist/ra-core/src/routing/RestoreScrollPosition.d.ts +24 -0
- package/dist/ra-core/src/routing/RestoreScrollPosition.js +23 -0
- package/dist/ra-core/src/routing/RouterProvider.d.ts +163 -0
- package/dist/ra-core/src/routing/RouterProvider.js +1 -0
- package/dist/ra-core/src/routing/RouterProviderContext.d.ts +15 -0
- package/dist/ra-core/src/routing/RouterProviderContext.js +19 -0
- package/dist/ra-core/src/routing/TestMemoryRouter.d.ts +21 -0
- package/dist/ra-core/src/routing/TestMemoryRouter.js +42 -0
- package/dist/ra-core/src/routing/adapters/reactRouterProvider.d.ts +6 -0
- package/dist/ra-core/src/routing/adapters/reactRouterProvider.js +86 -0
- package/dist/ra-core/src/routing/index.d.ts +28 -0
- package/dist/ra-core/src/routing/index.js +28 -0
- package/dist/ra-core/src/routing/types.d.ts +3 -0
- package/dist/ra-core/src/routing/types.js +1 -0
- package/dist/ra-core/src/routing/useBasename.d.ts +21 -0
- package/dist/ra-core/src/routing/useBasename.js +23 -0
- package/dist/ra-core/src/routing/useBlocker.d.ts +14 -0
- package/dist/ra-core/src/routing/useBlocker.js +17 -0
- package/dist/ra-core/src/routing/useCanBlock.d.ts +7 -0
- package/dist/ra-core/src/routing/useCanBlock.js +11 -0
- package/dist/ra-core/src/routing/useCreatePath.d.ts +42 -0
- package/dist/ra-core/src/routing/useCreatePath.js +69 -0
- package/dist/ra-core/src/routing/useGetPathForRecord.d.ts +42 -0
- package/dist/ra-core/src/routing/useGetPathForRecord.js +135 -0
- package/dist/ra-core/src/routing/useGetPathForRecordCallback.d.ts +6 -0
- package/dist/ra-core/src/routing/useGetPathForRecordCallback.js +82 -0
- package/dist/ra-core/src/routing/useInRouterContext.d.ts +11 -0
- package/dist/ra-core/src/routing/useInRouterContext.js +15 -0
- package/dist/ra-core/src/routing/useLocation.d.ts +10 -0
- package/dist/ra-core/src/routing/useLocation.js +13 -0
- package/dist/ra-core/src/routing/useMatch.d.ts +15 -0
- package/dist/ra-core/src/routing/useMatch.js +15 -0
- package/dist/ra-core/src/routing/useMatchPath.d.ts +17 -0
- package/dist/ra-core/src/routing/useMatchPath.js +17 -0
- package/dist/ra-core/src/routing/useNavigate.d.ts +12 -0
- package/dist/ra-core/src/routing/useNavigate.js +15 -0
- package/dist/ra-core/src/routing/useParams.d.ts +9 -0
- package/dist/ra-core/src/routing/useParams.js +13 -0
- package/dist/ra-core/src/routing/useRedirect.d.ts +30 -0
- package/dist/ra-core/src/routing/useRedirect.js +66 -0
- package/dist/ra-core/src/routing/useResetErrorBoundaryOnLocationChange.d.ts +7 -0
- package/dist/ra-core/src/routing/useResetErrorBoundaryOnLocationChange.js +17 -0
- package/dist/ra-core/src/routing/useRestoreScrollPosition.d.ts +40 -0
- package/dist/ra-core/src/routing/useRestoreScrollPosition.js +70 -0
- package/dist/ra-core/src/routing/useScrollToTop.d.ts +22 -0
- package/dist/ra-core/src/routing/useScrollToTop.js +33 -0
- package/dist/ra-core/src/routing/useSplatPathBase.d.ts +13 -0
- package/dist/ra-core/src/routing/useSplatPathBase.js +21 -0
- package/dist/ra-core/src/store/StoreContext.d.ts +2 -0
- package/dist/ra-core/src/store/StoreContext.js +4 -0
- package/dist/ra-core/src/store/StoreContextProvider.d.ts +7 -0
- package/dist/ra-core/src/store/StoreContextProvider.js +12 -0
- package/dist/ra-core/src/store/StoreSetter.d.ts +37 -0
- package/dist/ra-core/src/store/StoreSetter.js +40 -0
- package/dist/ra-core/src/store/index.d.ts +11 -0
- package/dist/ra-core/src/store/index.js +11 -0
- package/dist/ra-core/src/store/localStorageStore.d.ts +27 -0
- package/dist/ra-core/src/store/localStorageStore.js +198 -0
- package/dist/ra-core/src/store/memoryStore.d.ts +15 -0
- package/dist/ra-core/src/store/memoryStore.js +108 -0
- package/dist/ra-core/src/store/types.d.ts +11 -0
- package/dist/ra-core/src/store/types.js +1 -0
- package/dist/ra-core/src/store/useRemoveFromStore.d.ts +17 -0
- package/dist/ra-core/src/store/useRemoveFromStore.js +29 -0
- package/dist/ra-core/src/store/useRemoveItemsFromStore.d.ts +17 -0
- package/dist/ra-core/src/store/useRemoveItemsFromStore.js +29 -0
- package/dist/ra-core/src/store/useResetStore.d.ts +17 -0
- package/dist/ra-core/src/store/useResetStore.js +21 -0
- package/dist/ra-core/src/store/useStore.d.ts +48 -0
- package/dist/ra-core/src/store/useStore.js +32 -0
- package/dist/ra-core/src/store/useStoreContext.d.ts +4 -0
- package/dist/ra-core/src/store/useStoreContext.js +6 -0
- package/dist/ra-core/src/test-ui/Admin.d.ts +2 -0
- package/dist/ra-core/src/test-ui/Admin.js +8 -0
- package/dist/ra-core/src/test-ui/ArrayInput.d.ts +10 -0
- package/dist/ra-core/src/test-ui/ArrayInput.js +8 -0
- package/dist/ra-core/src/test-ui/AutocompleteArrayInput.d.ts +5 -0
- package/dist/ra-core/src/test-ui/AutocompleteArrayInput.js +5 -0
- package/dist/ra-core/src/test-ui/AutocompleteInput.d.ts +5 -0
- package/dist/ra-core/src/test-ui/AutocompleteInput.js +29 -0
- package/dist/ra-core/src/test-ui/BooleanInput.d.ts +2 -0
- package/dist/ra-core/src/test-ui/BooleanInput.js +10 -0
- package/dist/ra-core/src/test-ui/Confirm.d.ts +10 -0
- package/dist/ra-core/src/test-ui/Confirm.js +25 -0
- package/dist/ra-core/src/test-ui/CreateButton.d.ts +3 -0
- package/dist/ra-core/src/test-ui/CreateButton.js +9 -0
- package/dist/ra-core/src/test-ui/DataTable.d.ts +15 -0
- package/dist/ra-core/src/test-ui/DataTable.js +88 -0
- package/dist/ra-core/src/test-ui/DeleteButton.d.ts +5 -0
- package/dist/ra-core/src/test-ui/DeleteButton.js +18 -0
- package/dist/ra-core/src/test-ui/EditButton.d.ts +5 -0
- package/dist/ra-core/src/test-ui/EditButton.js +13 -0
- package/dist/ra-core/src/test-ui/Layout.d.ts +4 -0
- package/dist/ra-core/src/test-ui/Layout.js +36 -0
- package/dist/ra-core/src/test-ui/Notification.d.ts +13 -0
- package/dist/ra-core/src/test-ui/Notification.js +109 -0
- package/dist/ra-core/src/test-ui/Pagination.d.ts +1 -0
- package/dist/ra-core/src/test-ui/Pagination.js +28 -0
- package/dist/ra-core/src/test-ui/PrevNextButtons.d.ts +5 -0
- package/dist/ra-core/src/test-ui/PrevNextButtons.js +18 -0
- package/dist/ra-core/src/test-ui/ShowButton.d.ts +5 -0
- package/dist/ra-core/src/test-ui/ShowButton.js +13 -0
- package/dist/ra-core/src/test-ui/SimpleForm.d.ts +2 -0
- package/dist/ra-core/src/test-ui/SimpleForm.js +11 -0
- package/dist/ra-core/src/test-ui/SimpleFormIterator.d.ts +46 -0
- package/dist/ra-core/src/test-ui/SimpleFormIterator.js +101 -0
- package/dist/ra-core/src/test-ui/SimpleList.d.ts +6 -0
- package/dist/ra-core/src/test-ui/SimpleList.js +12 -0
- package/dist/ra-core/src/test-ui/SimpleShowLayout.d.ts +4 -0
- package/dist/ra-core/src/test-ui/SimpleShowLayout.js +3 -0
- package/dist/ra-core/src/test-ui/TextInput.d.ts +6 -0
- package/dist/ra-core/src/test-ui/TextInput.js +9 -0
- package/dist/ra-core/src/test-ui/defaultI18nProvider.d.ts +2 -0
- package/dist/ra-core/src/test-ui/defaultI18nProvider.js +10 -0
- package/dist/ra-core/src/test-ui/index.d.ts +21 -0
- package/dist/ra-core/src/test-ui/index.js +21 -0
- package/dist/ra-core/src/types.d.ts +284 -0
- package/dist/ra-core/src/types.js +5 -0
- package/dist/ra-core/src/util/FieldTitle.d.ts +17 -0
- package/dist/ra-core/src/util/FieldTitle.js +24 -0
- package/dist/ra-core/src/util/Ready.d.ts +2 -0
- package/dist/ra-core/src/util/Ready.js +57 -0
- package/dist/ra-core/src/util/asyncDebounce.d.ts +7 -0
- package/dist/ra-core/src/util/asyncDebounce.js +29 -0
- package/dist/ra-core/src/util/escapePath.d.ts +11 -0
- package/dist/ra-core/src/util/escapePath.js +10 -0
- package/dist/ra-core/src/util/genericMemo.d.ts +5 -0
- package/dist/ra-core/src/util/genericMemo.js +14 -0
- package/dist/ra-core/src/util/getFieldLabelTranslationArgs.d.ts +22 -0
- package/dist/ra-core/src/util/getFieldLabelTranslationArgs.js +73 -0
- package/dist/ra-core/src/util/getMutationMode.d.ts +1 -0
- package/dist/ra-core/src/util/getMutationMode.js +13 -0
- package/dist/ra-core/src/util/hooks.d.ts +15 -0
- package/dist/ra-core/src/util/hooks.js +73 -0
- package/dist/ra-core/src/util/index.d.ts +20 -0
- package/dist/ra-core/src/util/index.js +19 -0
- package/dist/ra-core/src/util/mergeRefs.d.ts +2 -0
- package/dist/ra-core/src/util/mergeRefs.js +13 -0
- package/dist/ra-core/src/util/removeEmpty.d.ts +2 -0
- package/dist/ra-core/src/util/removeEmpty.js +16 -0
- package/dist/ra-core/src/util/removeKey.d.ts +2 -0
- package/dist/ra-core/src/util/removeKey.js +22 -0
- package/dist/ra-core/src/util/shallowEqual.d.ts +1 -0
- package/dist/ra-core/src/util/shallowEqual.js +29 -0
- package/dist/ra-core/src/util/useCheckForApplicationUpdate.d.ts +21 -0
- package/dist/ra-core/src/util/useCheckForApplicationUpdate.js +84 -0
- package/dist/ra-core/src/util/useDebouncedEvent.d.ts +8 -0
- package/dist/ra-core/src/util/useDebouncedEvent.js +28 -0
- package/dist/ra-core/src/util/useEvent.d.ts +7 -0
- package/dist/ra-core/src/util/useEvent.js +19 -0
- package/dist/ra-core/src/util/useFieldValue.d.ts +21 -0
- package/dist/ra-core/src/util/useFieldValue.js +27 -0
- package/dist/ra-core/src/util/useWhyDidYouUpdate.d.ts +12 -0
- package/dist/ra-core/src/util/useWhyDidYouUpdate.js +42 -0
- package/dist/ra-core/src/util/warning.d.ts +2 -0
- package/dist/ra-core/src/util/warning.js +5 -0
- package/dist/resource/Resource.d.ts +14 -0
- package/dist/resource/Resource.js +31 -0
- package/dist/resource/ResourceSchema.d.ts +170 -13
- package/dist/resource/ResourceSchema.js +118 -20
- package/dist/resource/ResourceSchemaProvider.d.ts +2 -1
- package/dist/resource/ResourceSchemaProvider.js +9 -9
- package/dist/resource/SchemaRegistry.d.ts +64 -5
- package/dist/resource/SchemaRegistry.js +189 -22
- package/dist/resource/index.d.ts +2 -0
- package/dist/resource/index.js +2 -0
- package/dist/resource/useConstructedPageTitle.d.ts +1 -0
- package/dist/resource/useConstructedPageTitle.js +27 -0
- package/dist/routing/index.d.ts +2 -0
- package/dist/routing/index.js +2 -0
- package/dist/routing/useCreatePath.d.ts +7 -0
- package/dist/routing/useCreatePath.js +36 -0
- package/dist/routing/useGetPathForRecord.d.ts +11 -0
- package/dist/routing/useGetPathForRecord.js +94 -0
- package/dist/settings/SettingsContext.d.ts +16 -0
- package/dist/settings/SettingsContext.js +3 -0
- package/dist/settings/useSettingValue.d.ts +15 -0
- package/dist/settings/useSettingValue.js +23 -0
- package/dist/strato-core/src/core/Resource.d.ts +0 -0
- package/dist/strato-core/src/core/Resource.js +1 -0
- package/dist/strato-core/src/core/index.d.ts +0 -0
- package/dist/strato-core/src/core/index.js +1 -0
- package/dist/strato-core/src/index.d.ts +3 -0
- package/dist/strato-core/src/index.js +4 -0
- package/dist/strato-core/src/ra-messages.d.ts +1 -0
- package/dist/strato-core/src/ra-messages.js +296 -0
- package/dist/strato-core/src/resource/FieldSchema.d.ts +18 -0
- package/dist/strato-core/src/resource/FieldSchema.js +19 -0
- package/dist/strato-core/src/resource/InputSchema.d.ts +18 -0
- package/dist/strato-core/src/resource/InputSchema.js +19 -0
- package/dist/strato-core/src/resource/ResourceContext.d.ts +2 -0
- package/dist/strato-core/src/resource/ResourceContext.js +3 -0
- package/dist/strato-core/src/resource/ResourceSchema.d.ts +33 -0
- package/dist/strato-core/src/resource/ResourceSchema.js +90 -0
- package/dist/strato-core/src/resource/ResourceSchemaProvider.d.ts +15 -0
- package/dist/strato-core/src/resource/ResourceSchemaProvider.js +71 -0
- package/dist/strato-core/src/resource/SchemaRegistry.d.ts +71 -0
- package/dist/strato-core/src/resource/SchemaRegistry.js +212 -0
- package/dist/strato-core/src/resource/index.d.ts +6 -0
- package/dist/strato-core/src/resource/index.js +6 -0
- package/package.json +9 -3
- package/src/index.ts +3 -4
- package/src/resource/Resource.test.tsx +87 -0
- package/src/resource/Resource.tsx +62 -0
- package/src/resource/ResourceSchema.tsx +378 -57
- package/src/resource/ResourceSchemaProvider.tsx +17 -27
- package/src/resource/SchemaRegistry.tsx +295 -46
- package/src/resource/index.ts +2 -0
- package/src/resource/useConstructedPageTitle.ts +31 -0
- package/src/routing/index.ts +2 -0
- package/src/routing/useCreatePath.test.tsx +38 -0
- package/src/routing/useCreatePath.ts +40 -0
- package/src/routing/useGetPathForRecord.ts +127 -0
- package/src/settings/SettingsContext.ts +20 -0
- package/src/settings/useSettingValue.ts +32 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { useEffect, useId } from 'react';
|
|
2
|
+
import { useController, } from 'react-hook-form';
|
|
3
|
+
import get from 'lodash/get.js';
|
|
4
|
+
import { useRecordContext } from '../controller';
|
|
5
|
+
import { composeValidators, isRequired } from './validation';
|
|
6
|
+
import { useFormGroupContext, useFormGroups } from './groups';
|
|
7
|
+
import { useApplyInputDefaultValues } from './useApplyInputDefaultValues';
|
|
8
|
+
import { useEvent } from '../util';
|
|
9
|
+
import { useWrappedSource } from '../core';
|
|
10
|
+
// replace null or undefined values by empty string to avoid controlled/uncontrolled input warning
|
|
11
|
+
const defaultFormat = (value) => (value == null ? '' : value);
|
|
12
|
+
// parse empty string into null as it's more suitable for a majority of backends
|
|
13
|
+
const defaultParse = (value) => (value === '' ? null : value);
|
|
14
|
+
export const useInput = (props) => {
|
|
15
|
+
const { defaultValue, format = defaultFormat, id, isRequired: isRequiredOption, name, onBlur: initialOnBlur, onChange: initialOnChange, parse: parseProp = defaultParse, source, validate, ...options } = props;
|
|
16
|
+
const finalSource = useWrappedSource(source);
|
|
17
|
+
const finalName = name || finalSource;
|
|
18
|
+
const formGroupName = useFormGroupContext();
|
|
19
|
+
const formGroups = useFormGroups();
|
|
20
|
+
const record = useRecordContext();
|
|
21
|
+
// @ts-ignore
|
|
22
|
+
const parse = useEvent(parseProp);
|
|
23
|
+
const defaultId = useId();
|
|
24
|
+
if (!finalName && process.env.NODE_ENV === 'development') {
|
|
25
|
+
console.warn('Input components require either a source or a name prop.');
|
|
26
|
+
}
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (!formGroups || formGroupName == null) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
formGroups.registerField(finalSource, formGroupName);
|
|
32
|
+
return () => {
|
|
33
|
+
formGroups.unregisterField(finalSource, formGroupName);
|
|
34
|
+
};
|
|
35
|
+
}, [formGroups, formGroupName, finalSource]);
|
|
36
|
+
const sanitizedValidate = Array.isArray(validate)
|
|
37
|
+
? composeValidators(validate)
|
|
38
|
+
: validate;
|
|
39
|
+
// Fetch the defaultValue from the record if available or apply the provided defaultValue.
|
|
40
|
+
// This ensures dynamically added inputs have their value set correctly (ArrayInput for example).
|
|
41
|
+
// We don't do this for the form level defaultValues so that it works as it should in react-hook-form
|
|
42
|
+
// (i.e. field level defaultValue override form level defaultValues for this field).
|
|
43
|
+
const { field: controllerField, fieldState, formState, } = useController({
|
|
44
|
+
name: finalName,
|
|
45
|
+
defaultValue: get(record, finalSource, defaultValue),
|
|
46
|
+
rules: {
|
|
47
|
+
validate: async (value, values) => {
|
|
48
|
+
if (!sanitizedValidate)
|
|
49
|
+
return true;
|
|
50
|
+
const error = await sanitizedValidate(value, values, {
|
|
51
|
+
...props,
|
|
52
|
+
finalSource,
|
|
53
|
+
});
|
|
54
|
+
if (!error)
|
|
55
|
+
return true;
|
|
56
|
+
// react-hook-form expects errors to be plain strings but our validators can return objects
|
|
57
|
+
// that have message and args.
|
|
58
|
+
// To avoid double translation for users that validate with a schema instead of our validators
|
|
59
|
+
// we use a special format for our validators errors.
|
|
60
|
+
// The ValidationError component will check for this format and extract the message and args
|
|
61
|
+
// to translate.
|
|
62
|
+
return `@@react-admin@@${JSON.stringify(error)}`;
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
...options,
|
|
66
|
+
});
|
|
67
|
+
// Because our forms may receive an asynchronously loaded record for instance,
|
|
68
|
+
// they may reset their default values which would override the input default value.
|
|
69
|
+
// This hook ensures that the input default value is applied when a new record is loaded but has
|
|
70
|
+
// no value for the input.
|
|
71
|
+
useApplyInputDefaultValues({ inputProps: props });
|
|
72
|
+
const onBlur = useEvent((...event) => {
|
|
73
|
+
controllerField.onBlur();
|
|
74
|
+
if (initialOnBlur) {
|
|
75
|
+
initialOnBlur(...event);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
const onChange = useEvent((...event) => {
|
|
79
|
+
const eventOrValue = (props.type === 'checkbox' && event[0]?.target?.value === 'on'
|
|
80
|
+
? event[0].target.checked
|
|
81
|
+
: event[0]?.target?.value ?? event[0]);
|
|
82
|
+
controllerField.onChange(parse ? parse(eventOrValue) : eventOrValue);
|
|
83
|
+
if (initialOnChange) {
|
|
84
|
+
initialOnChange(...event);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
const field = {
|
|
88
|
+
...controllerField,
|
|
89
|
+
value: format ? format(controllerField.value) : controllerField.value,
|
|
90
|
+
onBlur,
|
|
91
|
+
onChange,
|
|
92
|
+
};
|
|
93
|
+
return {
|
|
94
|
+
id: id || defaultId,
|
|
95
|
+
field,
|
|
96
|
+
fieldState,
|
|
97
|
+
formState,
|
|
98
|
+
isRequired: isRequiredOption || isRequired(validate),
|
|
99
|
+
};
|
|
100
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { RaRecord } from '../types';
|
|
2
|
+
import { RouterLocation } from '../routing';
|
|
3
|
+
/**
|
|
4
|
+
* A hook that returns the record to use to override the values in a form
|
|
5
|
+
* @param options The hook options
|
|
6
|
+
* @param options.searchSource The key in the location search to use as a source for the record. Its content should be a stringified JSON object.
|
|
7
|
+
* @param options.stateSource The key in the location state to use as a source for the record
|
|
8
|
+
* @returns The record to use to override the values in a form
|
|
9
|
+
*/
|
|
10
|
+
export declare const useRecordFromLocation: (props?: UseRecordFromLocationOptions) => Partial<RaRecord<import("@strato-admin/core").Identifier>> | null;
|
|
11
|
+
export type UseRecordFromLocationOptions = {
|
|
12
|
+
searchSource?: string;
|
|
13
|
+
stateSource?: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Get the initial record from the location, whether it comes from the location
|
|
17
|
+
* state or is serialized in the url search part.
|
|
18
|
+
*/
|
|
19
|
+
export declare const getRecordFromLocation: ({ state, search }: RouterLocation, { searchSource, stateSource, }?: {
|
|
20
|
+
searchSource?: string;
|
|
21
|
+
stateSource?: string;
|
|
22
|
+
}) => Partial<RaRecord> | null;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { parse } from 'query-string';
|
|
3
|
+
import isEqual from 'lodash/isEqual.js';
|
|
4
|
+
import { useLocation } from '../routing';
|
|
5
|
+
/**
|
|
6
|
+
* A hook that returns the record to use to override the values in a form
|
|
7
|
+
* @param options The hook options
|
|
8
|
+
* @param options.searchSource The key in the location search to use as a source for the record. Its content should be a stringified JSON object.
|
|
9
|
+
* @param options.stateSource The key in the location state to use as a source for the record
|
|
10
|
+
* @returns The record to use to override the values in a form
|
|
11
|
+
*/
|
|
12
|
+
export const useRecordFromLocation = (props = {}) => {
|
|
13
|
+
const { searchSource, stateSource } = props;
|
|
14
|
+
const location = useLocation();
|
|
15
|
+
const [recordFromLocation, setRecordFromLocation] = useState(() => getRecordFromLocation(location, {
|
|
16
|
+
stateSource,
|
|
17
|
+
searchSource,
|
|
18
|
+
}));
|
|
19
|
+
// To avoid having the form resets when the location changes but the final record is the same
|
|
20
|
+
// This is needed for forms such as TabbedForm or WizardForm that may change the location for their sections
|
|
21
|
+
const previousRecordRef = useRef(recordFromLocation);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
const newRecordFromLocation = getRecordFromLocation(location, {
|
|
24
|
+
stateSource,
|
|
25
|
+
searchSource,
|
|
26
|
+
});
|
|
27
|
+
if (!isEqual(newRecordFromLocation, previousRecordRef.current)) {
|
|
28
|
+
previousRecordRef.current = newRecordFromLocation;
|
|
29
|
+
setRecordFromLocation(newRecordFromLocation);
|
|
30
|
+
}
|
|
31
|
+
}, [location, stateSource, searchSource]);
|
|
32
|
+
return recordFromLocation;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Get the initial record from the location, whether it comes from the location
|
|
36
|
+
* state or is serialized in the url search part.
|
|
37
|
+
*/
|
|
38
|
+
export const getRecordFromLocation = ({ state, search }, { searchSource = 'source', stateSource = 'record', } = {}) => {
|
|
39
|
+
if (state && state[stateSource]) {
|
|
40
|
+
return state[stateSource];
|
|
41
|
+
}
|
|
42
|
+
if (search) {
|
|
43
|
+
try {
|
|
44
|
+
const searchParams = parse(search);
|
|
45
|
+
const source = searchParams[searchSource];
|
|
46
|
+
if (source) {
|
|
47
|
+
if (Array.isArray(source)) {
|
|
48
|
+
console.error(`Failed to parse location ${searchSource} parameter '${search}'. To pre-fill some fields in the Create form, pass a stringified ${searchSource} parameter (e.g. '?${searchSource}={"title":"foo"}')`);
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
return JSON.parse(source);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
console.error(`Failed to parse location ${searchSource} parameter '${search}'. To pre-fill some fields in the Create form, pass a stringified ${searchSource} parameter (e.g. '?${searchSource}={"title":"foo"}')`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
2
|
+
import { UseChoicesOptions } from './choices/useChoices';
|
|
3
|
+
export declare const useSuggestions: ({ allowCreate, choices, createText, createValue, createHintValue, limitChoicesToValue, matchSuggestion, optionText, optionValue, selectedItem, suggestionLimit, translateChoice, }: UseSuggestionsOptions) => {
|
|
4
|
+
getChoiceText: (choice: any) => any;
|
|
5
|
+
getChoiceValue: (choice: any) => any;
|
|
6
|
+
getSuggestions: (filter: any) => any[];
|
|
7
|
+
};
|
|
8
|
+
export interface UseSuggestionsOptions extends UseChoicesOptions {
|
|
9
|
+
allowCreate?: boolean;
|
|
10
|
+
allowDuplicates?: boolean;
|
|
11
|
+
choices?: any[];
|
|
12
|
+
createText?: string;
|
|
13
|
+
limitChoicesToValue?: boolean;
|
|
14
|
+
matchSuggestion?: (filter: string, suggestion: any, exact?: boolean) => boolean;
|
|
15
|
+
suggestionLimit?: number;
|
|
16
|
+
selectedItem?: any | any[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get the suggestions to display after applying a fuzzy search on the available choices
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
*
|
|
23
|
+
* getSuggestions({
|
|
24
|
+
* choices: [{ id: 1, name: 'admin' }, { id: 2, name: 'publisher' }],
|
|
25
|
+
* optionText: 'name',
|
|
26
|
+
* optionValue: 'id',
|
|
27
|
+
* getSuggestionText: choice => choice[optionText],
|
|
28
|
+
* })('pub')
|
|
29
|
+
*
|
|
30
|
+
* // Will return [{ id: 2, name: 'publisher' }]
|
|
31
|
+
* getSuggestions({
|
|
32
|
+
* choices: [{ id: 1, name: 'admin' }, { id: 2, name: 'publisher' }],
|
|
33
|
+
* optionText: 'name',
|
|
34
|
+
* optionValue: 'id',
|
|
35
|
+
* getSuggestionText: choice => choice[optionText],
|
|
36
|
+
* })('pub')
|
|
37
|
+
*
|
|
38
|
+
* // Will return [{ id: 2, name: 'publisher' }]
|
|
39
|
+
*/
|
|
40
|
+
export declare const getSuggestionsFactory: ({ allowCreate, choices, createText, createValue, optionText, optionValue, getChoiceText, getChoiceValue, limitChoicesToValue, matchSuggestion, selectedItem, suggestionLimit, }: UseSuggestionsOptions & {
|
|
41
|
+
getChoiceText: (choice: any) => string | ReactElement;
|
|
42
|
+
getChoiceValue: (choice: any) => string;
|
|
43
|
+
}) => (filter: any) => any[];
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { useCallback, isValidElement } from 'react';
|
|
2
|
+
import set from 'lodash/set.js';
|
|
3
|
+
import { useChoices, } from './choices/useChoices';
|
|
4
|
+
import { useTranslate } from '../i18n';
|
|
5
|
+
/*
|
|
6
|
+
* Returns helper functions for suggestions handling.
|
|
7
|
+
*
|
|
8
|
+
* @param allowDuplicates A boolean indicating whether a suggestion can be added several times
|
|
9
|
+
* @param choices An array of available choices
|
|
10
|
+
* @param limitChoicesToValue A boolean indicating whether the initial suggestions should be limited to the currently selected one(s)
|
|
11
|
+
* @param matchSuggestion Optional unless `optionText` is a React element. Function which check whether a choice matches a filter. Must return a boolean.
|
|
12
|
+
* @param optionText Either a string defining the property to use to get the choice text, a function or a React element
|
|
13
|
+
* @param optionValue The property to use to get the choice value
|
|
14
|
+
* @param selectedItem The currently selected item. Maybe an array of selected items
|
|
15
|
+
* @param suggestionLimit The maximum number of suggestions returned
|
|
16
|
+
* @param translateChoice A boolean indicating whether to option text should be translated
|
|
17
|
+
*
|
|
18
|
+
* @returns An object with helper functions:
|
|
19
|
+
* - getChoiceText: Returns the choice text or a React element
|
|
20
|
+
* - getChoiceValue: Returns the choice value
|
|
21
|
+
* - getSuggestions: A function taking a filter value (string) and returning the matching suggestions
|
|
22
|
+
*/
|
|
23
|
+
export const useSuggestions = ({ allowCreate, choices, createText = "strato.action.create', createValue = '@@create', createHintValue = '@@ra-create-hint', limitChoicesToValue, matchSuggestion, optionText, optionValue, selectedItem, suggestionLimit = 0, translateChoice, }) => {
|
|
24
|
+
const translate = useTranslate();
|
|
25
|
+
const { getChoiceText, getChoiceValue } = useChoices({
|
|
26
|
+
optionText,
|
|
27
|
+
optionValue,
|
|
28
|
+
translateChoice,
|
|
29
|
+
createValue,
|
|
30
|
+
createHintValue,
|
|
31
|
+
});
|
|
32
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
33
|
+
const getSuggestions = useCallback(getSuggestionsFactory({
|
|
34
|
+
allowCreate,
|
|
35
|
+
choices,
|
|
36
|
+
createText,
|
|
37
|
+
createValue,
|
|
38
|
+
getChoiceText,
|
|
39
|
+
getChoiceValue,
|
|
40
|
+
limitChoicesToValue,
|
|
41
|
+
matchSuggestion,
|
|
42
|
+
optionText,
|
|
43
|
+
optionValue,
|
|
44
|
+
selectedItem,
|
|
45
|
+
suggestionLimit,
|
|
46
|
+
}), [
|
|
47
|
+
allowCreate,
|
|
48
|
+
choices,
|
|
49
|
+
createText,
|
|
50
|
+
createValue,
|
|
51
|
+
getChoiceText,
|
|
52
|
+
getChoiceValue,
|
|
53
|
+
limitChoicesToValue,
|
|
54
|
+
matchSuggestion,
|
|
55
|
+
optionText,
|
|
56
|
+
optionValue,
|
|
57
|
+
selectedItem,
|
|
58
|
+
suggestionLimit,
|
|
59
|
+
translate,
|
|
60
|
+
]);
|
|
61
|
+
return {
|
|
62
|
+
getChoiceText,
|
|
63
|
+
getChoiceValue,
|
|
64
|
+
getSuggestions,
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
const escapeRegExp = value => value ? value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') : ''; // $& means the whole matched string
|
|
68
|
+
/**
|
|
69
|
+
* Default matcher implementation which check whether the suggestion text matches the filter.
|
|
70
|
+
*/
|
|
71
|
+
const defaultMatchSuggestion = getChoiceText => (filter, suggestion, exact = false) => {
|
|
72
|
+
const suggestionText = getChoiceText(suggestion);
|
|
73
|
+
const isReactElement = isValidElement(suggestionText);
|
|
74
|
+
const regex = escapeRegExp(filter);
|
|
75
|
+
return isReactElement
|
|
76
|
+
? false
|
|
77
|
+
: suggestionText &&
|
|
78
|
+
!!suggestionText.match(
|
|
79
|
+
// We must escape any RegExp reserved characters to avoid errors
|
|
80
|
+
// For example, the filter might contain * which must be escaped as \*
|
|
81
|
+
new RegExp(exact ? `^${regex}$` : regex, 'i'));
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Get the suggestions to display after applying a fuzzy search on the available choices
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
*
|
|
88
|
+
* getSuggestions({
|
|
89
|
+
* choices: [{ id: 1, name: 'admin' }, { id: 2, name: 'publisher' }],
|
|
90
|
+
* optionText: 'name',
|
|
91
|
+
* optionValue: 'id',
|
|
92
|
+
* getSuggestionText: choice => choice[optionText],
|
|
93
|
+
* })('pub')
|
|
94
|
+
*
|
|
95
|
+
* // Will return [{ id: 2, name: 'publisher' }]
|
|
96
|
+
* getSuggestions({
|
|
97
|
+
* choices: [{ id: 1, name: 'admin' }, { id: 2, name: 'publisher' }],
|
|
98
|
+
* optionText: 'name',
|
|
99
|
+
* optionValue: 'id',
|
|
100
|
+
* getSuggestionText: choice => choice[optionText],
|
|
101
|
+
* })('pub')
|
|
102
|
+
*
|
|
103
|
+
* // Will return [{ id: 2, name: 'publisher' }]
|
|
104
|
+
*/
|
|
105
|
+
export const getSuggestionsFactory = ({ allowCreate = false, choices = [], createText = "strato.action.create', createValue = '@@create', optionText = 'name', optionValue = 'id', getChoiceText, getChoiceValue, limitChoicesToValue = false, matchSuggestion = defaultMatchSuggestion(getChoiceText), selectedItem, suggestionLimit = 0, }) => filter => {
|
|
106
|
+
let suggestions = [];
|
|
107
|
+
// if an item is selected and matches the filter
|
|
108
|
+
if (selectedItem &&
|
|
109
|
+
!Array.isArray(selectedItem) &&
|
|
110
|
+
matchSuggestion(filter, selectedItem)) {
|
|
111
|
+
if (limitChoicesToValue) {
|
|
112
|
+
// display only the selected item
|
|
113
|
+
suggestions = choices.filter(choice => getChoiceValue(choice) === getChoiceValue(selectedItem));
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
suggestions = [...choices];
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
suggestions = choices.filter(choice => matchSuggestion(filter, choice) ||
|
|
121
|
+
(selectedItem != null &&
|
|
122
|
+
(!Array.isArray(selectedItem)
|
|
123
|
+
? getChoiceValue(choice) ===
|
|
124
|
+
getChoiceValue(selectedItem)
|
|
125
|
+
: selectedItem.some(selected => getChoiceValue(choice) ===
|
|
126
|
+
getChoiceValue(selected)))));
|
|
127
|
+
}
|
|
128
|
+
suggestions = limitSuggestions(suggestions, suggestionLimit);
|
|
129
|
+
const hasExactMatch = suggestions.some(suggestion => matchSuggestion(filter, suggestion, true));
|
|
130
|
+
if (allowCreate) {
|
|
131
|
+
const filterIsSelectedItem =
|
|
132
|
+
// If the selectedItem is an array (for example AutocompleteArrayInput)
|
|
133
|
+
// we shouldn't try to match
|
|
134
|
+
!!selectedItem && !Array.isArray(selectedItem)
|
|
135
|
+
? matchSuggestion(filter, selectedItem, true)
|
|
136
|
+
: false;
|
|
137
|
+
if (!hasExactMatch && !filterIsSelectedItem) {
|
|
138
|
+
suggestions.push(getSuggestion({
|
|
139
|
+
optionText,
|
|
140
|
+
optionValue,
|
|
141
|
+
text: createText,
|
|
142
|
+
value: createValue,
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Only keep unique items. Necessary because we might have fetched
|
|
147
|
+
// the currently selected choice in addition of the possible choices
|
|
148
|
+
// that may also contain it
|
|
149
|
+
const result = suggestions.filter((suggestion, index) => suggestions.indexOf(suggestion) === index);
|
|
150
|
+
return result;
|
|
151
|
+
};
|
|
152
|
+
/**
|
|
153
|
+
* @example
|
|
154
|
+
*
|
|
155
|
+
* limitSuggestions(
|
|
156
|
+
* [{ id: 1, name: 'foo'}, { id: 2, name: 'bar' }],
|
|
157
|
+
* 1
|
|
158
|
+
* );
|
|
159
|
+
*
|
|
160
|
+
* // Will return [{ id: 1, name: 'foo' }]
|
|
161
|
+
*
|
|
162
|
+
* @param suggestions List of suggestions
|
|
163
|
+
* @param limit
|
|
164
|
+
*/
|
|
165
|
+
const limitSuggestions = (suggestions, limit = 0) => Number.isInteger(limit) && limit > 0
|
|
166
|
+
? suggestions.slice(0, limit)
|
|
167
|
+
: suggestions;
|
|
168
|
+
/**
|
|
169
|
+
* addSuggestion(
|
|
170
|
+
* [{ id: 1, name: 'foo'}, { id: 2, name: 'bar' }],
|
|
171
|
+
* );
|
|
172
|
+
*
|
|
173
|
+
* // Will return [{ id: null, name: '' }, { id: 1, name: 'foo' }, { id: 2, name: 'bar' }]
|
|
174
|
+
*
|
|
175
|
+
* @param suggestions List of suggestions
|
|
176
|
+
* @param options
|
|
177
|
+
* @param options.optionText
|
|
178
|
+
*/
|
|
179
|
+
const getSuggestion = ({ optionText = 'name', optionValue = 'id', text = '', value = null, }) => {
|
|
180
|
+
const suggestion = {};
|
|
181
|
+
set(suggestion, optionValue, value);
|
|
182
|
+
if (typeof optionText === 'string') {
|
|
183
|
+
set(suggestion, optionText, text);
|
|
184
|
+
}
|
|
185
|
+
return suggestion;
|
|
186
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Control } from 'react-hook-form';
|
|
2
|
+
/**
|
|
3
|
+
* Display a confirmation dialog if the form has unsaved changes.
|
|
4
|
+
* - If the user confirms, the navigation continues and the changes are lost.
|
|
5
|
+
* - If the user cancels, the navigation is cancelled and the changes are kept.
|
|
6
|
+
*/
|
|
7
|
+
export declare const useWarnWhenUnsavedChanges: (enable: boolean, formRootPathname?: string, control?: Control) => void;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
import { useFormState } from 'react-hook-form';
|
|
3
|
+
import { useTranslate } from '../i18n';
|
|
4
|
+
import { useBlocker } from '../routing/useBlocker';
|
|
5
|
+
/**
|
|
6
|
+
* Display a confirmation dialog if the form has unsaved changes.
|
|
7
|
+
* - If the user confirms, the navigation continues and the changes are lost.
|
|
8
|
+
* - If the user cancels, the navigation is cancelled and the changes are kept.
|
|
9
|
+
*/
|
|
10
|
+
export const useWarnWhenUnsavedChanges = (enable, formRootPathname, control) => {
|
|
11
|
+
const translate = useTranslate();
|
|
12
|
+
const { isSubmitSuccessful, dirtyFields } = useFormState(control ? { control } : undefined);
|
|
13
|
+
const isDirty = Object.keys(dirtyFields).length > 0;
|
|
14
|
+
const [shouldNotify, setShouldNotify] = useState(false);
|
|
15
|
+
const shouldNotBlock = !enable || !isDirty || isSubmitSuccessful;
|
|
16
|
+
const blocker = useBlocker(({ currentLocation, nextLocation }) => {
|
|
17
|
+
if (shouldNotBlock)
|
|
18
|
+
return false;
|
|
19
|
+
// Also check if the new location is inside the form
|
|
20
|
+
const initialLocation = formRootPathname || currentLocation.pathname;
|
|
21
|
+
const newLocationIsInsideCurrentLocation = nextLocation.pathname.startsWith(initialLocation);
|
|
22
|
+
const newLocationIsShowView = nextLocation.pathname.startsWith(`${initialLocation}/show`);
|
|
23
|
+
const newLocationIsInsideForm = newLocationIsInsideCurrentLocation && !newLocationIsShowView;
|
|
24
|
+
if (newLocationIsInsideForm)
|
|
25
|
+
return false;
|
|
26
|
+
return true;
|
|
27
|
+
});
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
if (blocker.state === 'blocked') {
|
|
30
|
+
// Corner case: the blocker might be triggered by a redirect in the onSuccess side effect,
|
|
31
|
+
// happening during the same tick the form is reset after a successful save.
|
|
32
|
+
// In that case, the blocker will block but shouldNotBlock will be true one tick after.
|
|
33
|
+
// If we are in that case, we can proceed immediately.
|
|
34
|
+
if (shouldNotBlock) {
|
|
35
|
+
blocker.proceed();
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
setShouldNotify(true);
|
|
39
|
+
}
|
|
40
|
+
// This effect should only run when the blocker state changes, not when shouldNotBlock changes.
|
|
41
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
42
|
+
}, [blocker.state]);
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
if (shouldNotify) {
|
|
45
|
+
const shouldProceed = window.confirm(translate("strato.message.unsaved_changes'));
|
|
46
|
+
if (shouldProceed) {
|
|
47
|
+
blocker.proceed && blocker.proceed();
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
blocker.reset && blocker.reset();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
setShouldNotify(false);
|
|
54
|
+
// Can't use blocker in the dependency array because it is not stable across rerenders
|
|
55
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
56
|
+
}, [shouldNotify, translate]);
|
|
57
|
+
// This effect handles document navigation, e.g. closing the tab
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
const beforeunload = (e) => {
|
|
60
|
+
// Invoking event.preventDefault() will trigger a warning dialog when the user closes or navigates the tab
|
|
61
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event#examples
|
|
62
|
+
e.preventDefault();
|
|
63
|
+
// Included for legacy support, e.g. Chrome/Edge < 119
|
|
64
|
+
e.returnValue = true;
|
|
65
|
+
};
|
|
66
|
+
if (shouldNotBlock) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
window.addEventListener('beforeunload', beforeunload);
|
|
70
|
+
return () => {
|
|
71
|
+
window.removeEventListener('beforeunload', beforeunload);
|
|
72
|
+
};
|
|
73
|
+
}, [shouldNotBlock]);
|
|
74
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useTranslate } from '../../i18n';
|
|
3
|
+
const ValidationErrorSpecialFormatPrefix = '@@react-admin@@';
|
|
4
|
+
export const ValidationError = (props) => {
|
|
5
|
+
const { error } = props;
|
|
6
|
+
let errorMessage = error;
|
|
7
|
+
const translate = useTranslate();
|
|
8
|
+
// react-hook-form expects errors to be plain strings but our validators can return objects
|
|
9
|
+
// that have message and args.
|
|
10
|
+
// To avoid double translation for users that validate with a schema instead of our validators
|
|
11
|
+
// we use a special format for our validators errors.
|
|
12
|
+
// The useInput hook handle the special formatting
|
|
13
|
+
if (typeof error === 'string' &&
|
|
14
|
+
error.startsWith(ValidationErrorSpecialFormatPrefix)) {
|
|
15
|
+
errorMessage = JSON.parse(error.substring(ValidationErrorSpecialFormatPrefix.length));
|
|
16
|
+
}
|
|
17
|
+
if (errorMessage.message) {
|
|
18
|
+
const { message, args } = errorMessage;
|
|
19
|
+
return _jsx(_Fragment, { children: translate(message, { _: message, ...args }) });
|
|
20
|
+
}
|
|
21
|
+
return _jsx(_Fragment, { children: translate(errorMessage, { _: errorMessage }) });
|
|
22
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { FieldValues } from 'react-hook-form';
|
|
2
|
+
/**
|
|
3
|
+
* Convert a simple validation function that returns an object matching the form shape with errors
|
|
4
|
+
* to a validation resolver compatible with react-hook-form.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* const validate = (values: any) => {
|
|
8
|
+
* if (values.username == null || values.username.trim() === '') {
|
|
9
|
+
* return { username: 'Required' };
|
|
10
|
+
* }
|
|
11
|
+
* }
|
|
12
|
+
*
|
|
13
|
+
* const validationResolver = getSimpleValidationResolver(validate);
|
|
14
|
+
*
|
|
15
|
+
* const UserForm = () => (
|
|
16
|
+
* <Form
|
|
17
|
+
* defaultValues={{ username: 'John' }}
|
|
18
|
+
* validationResolver={validationResolver}
|
|
19
|
+
* >
|
|
20
|
+
* <TextField source="username" />
|
|
21
|
+
* </Form>
|
|
22
|
+
* );
|
|
23
|
+
*/
|
|
24
|
+
export declare const getSimpleValidationResolver: (validate: ValidateForm) => (data: FieldValues) => Promise<{
|
|
25
|
+
values: FieldValues;
|
|
26
|
+
errors: {};
|
|
27
|
+
} | {
|
|
28
|
+
values: {};
|
|
29
|
+
errors: any;
|
|
30
|
+
}>;
|
|
31
|
+
export type ValidateForm = (data: FieldValues) => FieldValues | Promise<FieldValues>;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert a simple validation function that returns an object matching the form shape with errors
|
|
3
|
+
* to a validation resolver compatible with react-hook-form.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* const validate = (values: any) => {
|
|
7
|
+
* if (values.username == null || values.username.trim() === '') {
|
|
8
|
+
* return { username: 'Required' };
|
|
9
|
+
* }
|
|
10
|
+
* }
|
|
11
|
+
*
|
|
12
|
+
* const validationResolver = getSimpleValidationResolver(validate);
|
|
13
|
+
*
|
|
14
|
+
* const UserForm = () => (
|
|
15
|
+
* <Form
|
|
16
|
+
* defaultValues={{ username: 'John' }}
|
|
17
|
+
* validationResolver={validationResolver}
|
|
18
|
+
* >
|
|
19
|
+
* <TextField source="username" />
|
|
20
|
+
* </Form>
|
|
21
|
+
* );
|
|
22
|
+
*/
|
|
23
|
+
export const getSimpleValidationResolver = (validate) => async (data) => {
|
|
24
|
+
const errors = await validate(data);
|
|
25
|
+
// If there are no errors, early return the form values
|
|
26
|
+
if (!errors || isEmptyObject(errors)) {
|
|
27
|
+
return { values: data, errors: {} };
|
|
28
|
+
}
|
|
29
|
+
// Else, we return an error object shaped like errors but having for each leaf
|
|
30
|
+
// `type: 'manual'` and a `message` prop like react-hook-form expects it
|
|
31
|
+
const transformedErrors = transformErrorFields(errors);
|
|
32
|
+
// Sometimes we still need to transform the error object to realize there are actually
|
|
33
|
+
// no errors in it.
|
|
34
|
+
// e.g. with an ArrayInput we can get something like: `{backlinks: [{}, {}]}`
|
|
35
|
+
// If, after transformation, there are no errors, we return the form values
|
|
36
|
+
if (!transformedErrors || isEmptyObject(transformedErrors)) {
|
|
37
|
+
return { values: data, errors: {} };
|
|
38
|
+
}
|
|
39
|
+
// Else return the errors and no values
|
|
40
|
+
return {
|
|
41
|
+
values: {},
|
|
42
|
+
errors: transformedErrors,
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
const transformErrorFields = (error) => {
|
|
46
|
+
return Object.keys(error).reduce((acc, field) => {
|
|
47
|
+
// Handle arrays
|
|
48
|
+
if (Array.isArray(error[field])) {
|
|
49
|
+
let arrayHasErrors = false;
|
|
50
|
+
const transformedArrayErrors = error[field].map(item => {
|
|
51
|
+
if (!isEmptyObject(item)) {
|
|
52
|
+
arrayHasErrors = true;
|
|
53
|
+
}
|
|
54
|
+
return transformErrorFields(item);
|
|
55
|
+
});
|
|
56
|
+
if (!arrayHasErrors) {
|
|
57
|
+
return acc;
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
...acc,
|
|
61
|
+
[field]: transformedArrayErrors,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
// Handle objects
|
|
65
|
+
if (isEmptyObject(error[field])) {
|
|
66
|
+
return acc;
|
|
67
|
+
}
|
|
68
|
+
if (typeof error[field] === 'object' &&
|
|
69
|
+
!isRaTranslationObj(error[field])) {
|
|
70
|
+
return {
|
|
71
|
+
...acc,
|
|
72
|
+
[field]: transformErrorFields(error[field]),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// Handle leaf (either primary type or RaTranslationObj)
|
|
76
|
+
return {
|
|
77
|
+
...acc,
|
|
78
|
+
[field]: addTypeAndMessage(error[field]),
|
|
79
|
+
};
|
|
80
|
+
}, {});
|
|
81
|
+
};
|
|
82
|
+
const addTypeAndMessage = (error) => ({
|
|
83
|
+
type: 'manual',
|
|
84
|
+
message: isRaTranslationObj(error) ? error : { message: error },
|
|
85
|
+
});
|
|
86
|
+
const isRaTranslationObj = (obj) => Object.keys(obj).includes('message') && Object.keys(obj).includes('args');
|
|
87
|
+
const isEmptyObject = (obj) => obj == null || Object.getOwnPropertyNames(obj).length === 0;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './getSimpleValidationResolver';
|
|
2
|
+
export * from './setSubmissionErrors';
|
|
3
|
+
export * from './useGetValidationErrorMessage';
|
|
4
|
+
export * from './useNotifyIsFormInvalid';
|
|
5
|
+
export * from './useUnique';
|
|
6
|
+
export * from './validate';
|
|
7
|
+
export * from './ValidationError';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './getSimpleValidationResolver';
|
|
2
|
+
export * from './setSubmissionErrors';
|
|
3
|
+
export * from './useGetValidationErrorMessage';
|
|
4
|
+
export * from './useNotifyIsFormInvalid';
|
|
5
|
+
export * from './useUnique';
|
|
6
|
+
export * from './validate';
|
|
7
|
+
export * from './ValidationError';
|