@strato-admin/faker-ecommerce 0.1.0 → 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/dataProvider.js +1 -2
- package/dist/generate.d.ts +2 -1
- package/dist/generate.js +15 -8
- 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/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/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/create/index.d.ts +6 -0
- package/dist/ra-core/src/controller/create/index.js +6 -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/index.d.ts +6 -0
- package/dist/ra-core/src/controller/edit/index.js +6 -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/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/index.d.ts +17 -0
- package/dist/ra-core/src/controller/index.js +16 -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/SimpleFormIteratorContext.d.ts +15 -0
- package/dist/ra-core/src/controller/input/SimpleFormIteratorContext.js +8 -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/list/InfinitePaginationContext.d.ts +25 -0
- package/dist/ra-core/src/controller/list/InfinitePaginationContext.js +32 -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/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/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/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/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/index.d.ts +6 -0
- package/dist/ra-core/src/controller/show/index.js +6 -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/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/ResourceContext.d.ts +19 -0
- package/dist/ra-core/src/core/ResourceContext.js +19 -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/index.d.ts +27 -0
- package/dist/ra-core/src/core/index.js +27 -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/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/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 +5 -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/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/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/index.d.ts +4 -0
- package/dist/ra-core/src/form/choices/index.js +4 -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/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/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/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/TranslatableContext.d.ts +16 -0
- package/dist/ra-core/src/i18n/TranslatableContext.js +2 -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/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/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/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/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/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/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/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/BasenameContext.d.ts +1 -0
- package/dist/ra-core/src/routing/BasenameContext.js +2 -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/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/useSplatPathBase.d.ts +13 -0
- package/dist/ra-core/src/routing/useSplatPathBase.js +21 -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/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/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/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/strato-faker-ecommerce/src/dataProvider.d.ts +2 -0
- package/dist/strato-faker-ecommerce/src/dataProvider.js +6 -0
- package/dist/strato-faker-ecommerce/src/generate.d.ts +8 -0
- package/dist/strato-faker-ecommerce/src/generate.js +148 -0
- package/dist/strato-faker-ecommerce/src/index.d.ts +3 -0
- package/dist/strato-faker-ecommerce/src/index.js +3 -0
- package/dist/strato-faker-ecommerce/src/types.d.ts +69 -0
- package/dist/strato-faker-ecommerce/src/types.js +1 -0
- package/dist/types.d.ts +1 -1
- package/package.json +6 -5
- package/src/dataProvider.ts +3 -3
- package/src/generate.test.ts +12 -12
- package/src/generate.ts +21 -14
- package/src/types.ts +1 -1
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { useQueryClient, } from '@tanstack/react-query';
|
|
2
|
+
import { useDataProvider } from './useDataProvider';
|
|
3
|
+
import { useEvent } from '../util';
|
|
4
|
+
import { useMutationWithMutationMode, } from './useMutationWithMutationMode';
|
|
5
|
+
/**
|
|
6
|
+
* Get a callback to call the dataProvider.create() method, the result and the loading state.
|
|
7
|
+
*
|
|
8
|
+
* @param {string} resource
|
|
9
|
+
* @param {Params} params The create parameters { data }
|
|
10
|
+
* @param {Object} options Options object to pass to the queryClient.
|
|
11
|
+
* May include side effects to be executed upon success or failure, e.g. { onSuccess: () => { refresh(); } }
|
|
12
|
+
*
|
|
13
|
+
* @typedef Params
|
|
14
|
+
* @prop params.data The record to create, e.g. { title: 'hello, world' }
|
|
15
|
+
*
|
|
16
|
+
* @returns The current mutation state. Destructure as [create, { data, error, isPending }].
|
|
17
|
+
*
|
|
18
|
+
* The return value updates according to the request state:
|
|
19
|
+
*
|
|
20
|
+
* - initial: [create, { isPending: false, isIdle: true }]
|
|
21
|
+
* - start: [create, { isPending: true }]
|
|
22
|
+
* - success: [create, { data: [data from response], isPending: false, isSuccess: true }]
|
|
23
|
+
* - error: [create, { error: [error from response], isPending: false, isError: true }]
|
|
24
|
+
*
|
|
25
|
+
* The create() function must be called with a resource and a parameter object: create(resource, { data, meta }, options)
|
|
26
|
+
*
|
|
27
|
+
* This hook uses react-query useMutation under the hood.
|
|
28
|
+
* This means the state object contains mutate, isIdle, reset and other react-query methods.
|
|
29
|
+
*
|
|
30
|
+
* @see https://tanstack.com/query/v5/docs/react/reference/useMutation
|
|
31
|
+
*
|
|
32
|
+
* @example // set params when calling the create callback
|
|
33
|
+
*
|
|
34
|
+
* import { useCreate, useRecordContext } from 'react-admin';
|
|
35
|
+
*
|
|
36
|
+
* const LikeButton = () => {
|
|
37
|
+
* const record = useRecordContext();
|
|
38
|
+
* const like = { postId: record.id };
|
|
39
|
+
* const [create, { isPending, error }] = useCreate();
|
|
40
|
+
* const handleClick = () => {
|
|
41
|
+
* create('likes', { data: like })
|
|
42
|
+
* }
|
|
43
|
+
* if (error) { return <p>ERROR</p>; }
|
|
44
|
+
* return <button disabled={isPending} onClick={handleClick}>Like</button>;
|
|
45
|
+
* };
|
|
46
|
+
*
|
|
47
|
+
* @example // set params when calling the hook
|
|
48
|
+
*
|
|
49
|
+
* import { useCreate, useRecordContext } from 'react-admin';
|
|
50
|
+
*
|
|
51
|
+
* const LikeButton = () => {
|
|
52
|
+
* const record = useRecordContext();
|
|
53
|
+
* const like = { postId: record.id };
|
|
54
|
+
* const [create, { isPending, error }] = useCreate('likes', { data: like });
|
|
55
|
+
* if (error) { return <p>ERROR</p>; }
|
|
56
|
+
* return <button disabled={isPending} onClick={() => create()}>Like</button>;
|
|
57
|
+
* };
|
|
58
|
+
*
|
|
59
|
+
* @example // TypeScript
|
|
60
|
+
* const [create, { data }] = useCreate<Product>('products', { data: product });
|
|
61
|
+
* \-- data is Product
|
|
62
|
+
*/
|
|
63
|
+
export const useCreate = (resource, params = {}, options = {}) => {
|
|
64
|
+
const dataProvider = useDataProvider();
|
|
65
|
+
const queryClient = useQueryClient();
|
|
66
|
+
const { mutationMode = 'pessimistic', getMutateWithMiddlewares, onSettled, ...mutationOptions } = options;
|
|
67
|
+
const dataProviderCreate = useEvent((resource, params) => dataProvider.create(resource, params));
|
|
68
|
+
const [mutate, mutationResult] = useMutationWithMutationMode({ resource, ...params }, {
|
|
69
|
+
...mutationOptions,
|
|
70
|
+
mutationKey: [resource, 'create', params],
|
|
71
|
+
mutationMode,
|
|
72
|
+
mutationFn: ({ resource, ...params }) => {
|
|
73
|
+
if (resource == null) {
|
|
74
|
+
throw new Error('useCreate mutation requires a resource');
|
|
75
|
+
}
|
|
76
|
+
if (params.data == null) {
|
|
77
|
+
throw new Error('useCreate mutation requires a non-empty data object');
|
|
78
|
+
}
|
|
79
|
+
return dataProviderCreate(resource, params);
|
|
80
|
+
},
|
|
81
|
+
updateCache: ({ resource, ...params }, { mutationMode }, result) => {
|
|
82
|
+
const id = mutationMode === 'pessimistic'
|
|
83
|
+
? result?.id
|
|
84
|
+
: params.data?.id;
|
|
85
|
+
if (!id) {
|
|
86
|
+
throw new Error('Invalid dataProvider response for create: missing id');
|
|
87
|
+
}
|
|
88
|
+
// hack: only way to tell react-query not to fetch this query for the next 5 seconds
|
|
89
|
+
// because setQueryData doesn't accept a stale time option
|
|
90
|
+
const now = Date.now();
|
|
91
|
+
const updatedAt = mutationMode === 'undoable' ? now + 5 * 1000 : now;
|
|
92
|
+
// Stringify and parse the data to remove undefined values.
|
|
93
|
+
// If we don't do this, an update with { id: undefined } as payload
|
|
94
|
+
// would remove the id from the record, which no real data provider does.
|
|
95
|
+
const clonedData = JSON.parse(JSON.stringify(mutationMode === 'pessimistic' ? result : params.data));
|
|
96
|
+
queryClient.setQueryData([resource, 'getOne', { id: String(id), meta: params.meta }], (record) => ({ ...record, ...clonedData }), { updatedAt });
|
|
97
|
+
return clonedData;
|
|
98
|
+
},
|
|
99
|
+
getQueryKeys: ({ resource, ...params }, { mutationMode }) => {
|
|
100
|
+
const queryKeys = [
|
|
101
|
+
[resource, 'getList'],
|
|
102
|
+
[resource, 'getInfiniteList'],
|
|
103
|
+
[resource, 'getMany'],
|
|
104
|
+
[resource, 'getManyReference'],
|
|
105
|
+
];
|
|
106
|
+
if (mutationMode !== 'pessimistic' && params.data?.id) {
|
|
107
|
+
queryKeys.push([
|
|
108
|
+
resource,
|
|
109
|
+
'getOne',
|
|
110
|
+
{ id: String(params.data.id), meta: params.meta },
|
|
111
|
+
]);
|
|
112
|
+
}
|
|
113
|
+
return queryKeys;
|
|
114
|
+
},
|
|
115
|
+
getMutateWithMiddlewares: mutationFn => {
|
|
116
|
+
if (getMutateWithMiddlewares) {
|
|
117
|
+
// Immediately get the function with middlewares applied so that even if the middlewares gets unregistered (because of a redirect for instance),
|
|
118
|
+
// we still have them applied when users have called the mutate function.
|
|
119
|
+
const mutateWithMiddlewares = getMutateWithMiddlewares(dataProviderCreate.bind(dataProvider));
|
|
120
|
+
return args => {
|
|
121
|
+
// This is necessary to avoid breaking changes in useCreate:
|
|
122
|
+
// The mutation function must have the same signature as before (resource, params) and not ({ resource, params })
|
|
123
|
+
const { resource, ...params } = args;
|
|
124
|
+
return mutateWithMiddlewares(resource, params);
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return args => mutationFn(args);
|
|
128
|
+
},
|
|
129
|
+
onUndo: ({ resource, data, meta }) => {
|
|
130
|
+
queryClient.removeQueries({
|
|
131
|
+
queryKey: [
|
|
132
|
+
resource,
|
|
133
|
+
'getOne',
|
|
134
|
+
{ id: String(data?.id), meta },
|
|
135
|
+
],
|
|
136
|
+
exact: true,
|
|
137
|
+
});
|
|
138
|
+
},
|
|
139
|
+
onSettled: (...args) => {
|
|
140
|
+
const [, , , mutateResult] = args;
|
|
141
|
+
// For creation, we always refetch after error or success:
|
|
142
|
+
mutateResult.snapshot.forEach(([queryKey]) => {
|
|
143
|
+
queryClient.invalidateQueries({ queryKey });
|
|
144
|
+
});
|
|
145
|
+
onSettled?.(...args);
|
|
146
|
+
},
|
|
147
|
+
});
|
|
148
|
+
const create = useEvent((callTimeResource = resource, callTimeParams = {}, callTimeOptions = {}) => {
|
|
149
|
+
return mutate({
|
|
150
|
+
resource: callTimeResource,
|
|
151
|
+
...callTimeParams,
|
|
152
|
+
}, callTimeOptions);
|
|
153
|
+
});
|
|
154
|
+
return [create, mutationResult];
|
|
155
|
+
};
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { useContext, useMemo } from 'react';
|
|
2
|
+
import { useQueryClient } from '@tanstack/react-query';
|
|
3
|
+
import DataProviderContext from './DataProviderContext';
|
|
4
|
+
import { defaultDataProvider } from './defaultDataProvider';
|
|
5
|
+
import validateResponseFormat from './validateResponseFormat';
|
|
6
|
+
import useLogoutIfAccessDenied from '../auth/useLogoutIfAccessDenied';
|
|
7
|
+
import { reactAdminFetchActions } from './dataFetchActions';
|
|
8
|
+
import { populateQueryCache } from './populateQueryCache';
|
|
9
|
+
/**
|
|
10
|
+
* Hook for getting a dataProvider
|
|
11
|
+
*
|
|
12
|
+
* Gets a dataProvider object, which behaves just like the real dataProvider
|
|
13
|
+
* (same methods returning a Promise). But it's actually a Proxy object,
|
|
14
|
+
* which validates the response format, and logs the user out upon error
|
|
15
|
+
* if authProvider.checkError() rejects.
|
|
16
|
+
*
|
|
17
|
+
* @return dataProvider
|
|
18
|
+
*
|
|
19
|
+
* @example Basic usage
|
|
20
|
+
*
|
|
21
|
+
* import * as React from 'react';
|
|
22
|
+
* import { useState } from 'react';
|
|
23
|
+
* import { useDataProvider } from 'react-admin';
|
|
24
|
+
*
|
|
25
|
+
* const PostList = () => {
|
|
26
|
+
* const [posts, setPosts] = useState([])
|
|
27
|
+
* const dataProvider = useDataProvider();
|
|
28
|
+
* useEffect(() => {
|
|
29
|
+
* dataProvider.getList('posts', { filter: { status: 'pending' }})
|
|
30
|
+
* .then(({ data }) => setPosts(data));
|
|
31
|
+
* }, [])
|
|
32
|
+
*
|
|
33
|
+
* return (
|
|
34
|
+
* <Fragment>
|
|
35
|
+
* {posts.map((post, key) => <PostDetail post={post} key={key} />)}
|
|
36
|
+
* </Fragment>
|
|
37
|
+
* );
|
|
38
|
+
* }
|
|
39
|
+
*
|
|
40
|
+
* @example Handling all states (loading, error, success)
|
|
41
|
+
*
|
|
42
|
+
* import { useState, useEffect } from 'react';
|
|
43
|
+
* import { useDataProvider } from 'react-admin';
|
|
44
|
+
*
|
|
45
|
+
* const UserProfile = ({ userId }) => {
|
|
46
|
+
* const dataProvider = useDataProvider();
|
|
47
|
+
* const [user, setUser] = useState();
|
|
48
|
+
* const [loading, setLoading] = useState(true);
|
|
49
|
+
* const [error, setError] = useState();
|
|
50
|
+
* useEffect(() => {
|
|
51
|
+
* dataProvider.getOne('users', { id: userId })
|
|
52
|
+
* .then(({ data }) => {
|
|
53
|
+
* setUser(data);
|
|
54
|
+
* setLoading(false);
|
|
55
|
+
* })
|
|
56
|
+
* .catch(error => {
|
|
57
|
+
* setError(error);
|
|
58
|
+
* setLoading(false);
|
|
59
|
+
* })
|
|
60
|
+
* }, []);
|
|
61
|
+
*
|
|
62
|
+
* if (loading) return <Loading />;
|
|
63
|
+
* if (error) return <Error />
|
|
64
|
+
* if (!user) return null;
|
|
65
|
+
*
|
|
66
|
+
* return (
|
|
67
|
+
* <ul>
|
|
68
|
+
* <li>Name: {user.name}</li>
|
|
69
|
+
* <li>Email: {user.email}</li>
|
|
70
|
+
* </ul>
|
|
71
|
+
* )
|
|
72
|
+
* }
|
|
73
|
+
*/
|
|
74
|
+
const arrayReturnTypes = ['getList', 'getMany', 'getManyReference'];
|
|
75
|
+
export const useDataProvider = () => {
|
|
76
|
+
const dataProvider = (useContext(DataProviderContext) ||
|
|
77
|
+
defaultDataProvider);
|
|
78
|
+
const queryClient = useQueryClient();
|
|
79
|
+
const logoutIfAccessDenied = useLogoutIfAccessDenied();
|
|
80
|
+
const dataProviderProxy = useMemo(() => {
|
|
81
|
+
return new Proxy(dataProvider, {
|
|
82
|
+
get: (_, name) => {
|
|
83
|
+
if (typeof name === 'symbol' || name === 'then') {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (name === 'supportAbortSignal') {
|
|
87
|
+
return dataProvider.supportAbortSignal;
|
|
88
|
+
}
|
|
89
|
+
return (...args) => {
|
|
90
|
+
const type = name.toString();
|
|
91
|
+
if (typeof dataProvider[type] !== 'function') {
|
|
92
|
+
throw new Error(`Unknown dataProvider function: ${type}`);
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
return dataProvider[type]
|
|
96
|
+
.apply(dataProvider, args)
|
|
97
|
+
.then(response => {
|
|
98
|
+
if (process.env.NODE_ENV === 'development' &&
|
|
99
|
+
reactAdminFetchActions.includes(type)) {
|
|
100
|
+
validateResponseFormat(response, type);
|
|
101
|
+
}
|
|
102
|
+
if (response?.meta?.prefetched) {
|
|
103
|
+
populateQueryCache({
|
|
104
|
+
data: response?.meta.prefetched,
|
|
105
|
+
queryClient,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return response;
|
|
109
|
+
})
|
|
110
|
+
.catch(error => {
|
|
111
|
+
if (process.env.NODE_ENV !== 'production' &&
|
|
112
|
+
// do not log AbortErrors
|
|
113
|
+
!isAbortError(error)) {
|
|
114
|
+
console.error(error);
|
|
115
|
+
}
|
|
116
|
+
return logoutIfAccessDenied(error).then(loggedOut => {
|
|
117
|
+
if (loggedOut)
|
|
118
|
+
return {
|
|
119
|
+
data: arrayReturnTypes.includes(type)
|
|
120
|
+
? []
|
|
121
|
+
: {},
|
|
122
|
+
};
|
|
123
|
+
throw error;
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
catch (e) {
|
|
128
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
129
|
+
console.error(e);
|
|
130
|
+
}
|
|
131
|
+
throw new Error('The dataProvider threw an error. It should return a rejected Promise instead.');
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
}, [dataProvider, logoutIfAccessDenied, queryClient]);
|
|
137
|
+
return dataProviderProxy;
|
|
138
|
+
};
|
|
139
|
+
const isAbortError = error => error instanceof DOMException &&
|
|
140
|
+
error.name === 'AbortError';
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { type UseMutationOptions, type UseMutationResult, type MutateOptions } from '@tanstack/react-query';
|
|
2
|
+
import type { RaRecord, DeleteParams, MutationMode } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Get a callback to call the dataProvider.delete() method, the result and the loading state.
|
|
5
|
+
*
|
|
6
|
+
* @param {string} resource
|
|
7
|
+
* @param {Params} params The delete parameters { id, previousData }
|
|
8
|
+
* @param {Object} options Options object to pass to the queryClient.
|
|
9
|
+
* May include side effects to be executed upon success or failure, e.g. { onSuccess: () => { refresh(); } }
|
|
10
|
+
* May include a mutation mode (optimistic/pessimistic/undoable), e.g. { mutationMode: 'undoable' }
|
|
11
|
+
*
|
|
12
|
+
* @typedef Params
|
|
13
|
+
* @prop params.id The resource identifier, e.g. 123
|
|
14
|
+
* @prop params.previousData The record before the update is applied
|
|
15
|
+
*
|
|
16
|
+
* @returns The current mutation state. Destructure as [deleteOne, { data, error, isPending }].
|
|
17
|
+
*
|
|
18
|
+
* The return value updates according to the request state:
|
|
19
|
+
*
|
|
20
|
+
* - initial: [deleteOne, { isPending: false, isIdle: true }]
|
|
21
|
+
* - start: [deleteOne, { isPending: true }]
|
|
22
|
+
* - success: [deleteOne, { data: [data from response], isPending: false, isSuccess: true }]
|
|
23
|
+
* - error: [deleteOne, { error: [error from response], isPending: false, isError: true }]
|
|
24
|
+
*
|
|
25
|
+
* The deleteOne() function must be called with a resource and a parameter object: deleteOne(resource, { id, previousData, meta }, options)
|
|
26
|
+
*
|
|
27
|
+
* This hook uses react-query useMutation under the hood.
|
|
28
|
+
* This means the state object contains mutate, isIdle, reset and other react-query methods.
|
|
29
|
+
*
|
|
30
|
+
* @see https://tanstack.com/query/v5/docs/react/reference/useMutation
|
|
31
|
+
*
|
|
32
|
+
* @example // set params when calling the deleteOne callback
|
|
33
|
+
*
|
|
34
|
+
* import { useDelete, useRecordContext } from 'react-admin';
|
|
35
|
+
*
|
|
36
|
+
* const DeleteButton = () => {
|
|
37
|
+
* const record = useRecordContext();
|
|
38
|
+
* const [deleteOne, { isPending, error }] = useDelete();
|
|
39
|
+
* const handleClick = () => {
|
|
40
|
+
* deleteOne('likes', { id: record.id, previousData: record })
|
|
41
|
+
* }
|
|
42
|
+
* if (error) { return <p>ERROR</p>; }
|
|
43
|
+
* return <button disabled={isPending} onClick={handleClick}>Delete</div>;
|
|
44
|
+
* };
|
|
45
|
+
*
|
|
46
|
+
* @example // set params when calling the hook
|
|
47
|
+
*
|
|
48
|
+
* import { useDelete, useRecordContext } from 'react-admin';
|
|
49
|
+
*
|
|
50
|
+
* const DeleteButton = () => {
|
|
51
|
+
* const record = useRecordContext();
|
|
52
|
+
* const [deleteOne, { isPending, error }] = useDelete('likes', { id: record.id, previousData: record });
|
|
53
|
+
* if (error) { return <p>ERROR</p>; }
|
|
54
|
+
* return <button disabled={isPending} onClick={() => deleteOne()}>Delete</button>;
|
|
55
|
+
* };
|
|
56
|
+
*
|
|
57
|
+
* @example // TypeScript
|
|
58
|
+
* const [delete, { data }] = useDelete<Product>('products', { id, previousData: product });
|
|
59
|
+
* \-- data is Product
|
|
60
|
+
*/
|
|
61
|
+
export declare const useDelete: <RecordType extends RaRecord = any, MutationError = unknown>(resource?: string, params?: Partial<DeleteParams<RecordType>>, options?: UseDeleteOptions<RecordType, MutationError>) => UseDeleteResult<RecordType, MutationError>;
|
|
62
|
+
export interface UseDeleteMutateParams<RecordType extends RaRecord = any> {
|
|
63
|
+
resource?: string;
|
|
64
|
+
id?: RecordType['id'];
|
|
65
|
+
data?: Partial<RecordType>;
|
|
66
|
+
previousData?: any;
|
|
67
|
+
meta?: any;
|
|
68
|
+
}
|
|
69
|
+
export type UseDeleteOptions<RecordType extends RaRecord = any, MutationError = unknown> = Omit<UseMutationOptions<RecordType, MutationError, Partial<UseDeleteMutateParams<RecordType>>>, 'mutationFn'> & {
|
|
70
|
+
mutationMode?: MutationMode;
|
|
71
|
+
returnPromise?: boolean;
|
|
72
|
+
};
|
|
73
|
+
export type UseDeleteResult<RecordType extends RaRecord = any, MutationError = unknown, TReturnPromise extends boolean = boolean> = [
|
|
74
|
+
(resource?: string, params?: Partial<DeleteParams<RecordType>>, options?: MutateOptions<RecordType | undefined, MutationError, Partial<UseDeleteMutateParams<RecordType>>, unknown> & {
|
|
75
|
+
mutationMode?: MutationMode;
|
|
76
|
+
returnPromise?: TReturnPromise;
|
|
77
|
+
}) => Promise<TReturnPromise extends true ? RecordType | undefined : void>,
|
|
78
|
+
UseMutationResult<RecordType | undefined, MutationError, Partial<DeleteParams<RecordType> & {
|
|
79
|
+
resource?: string;
|
|
80
|
+
}>, unknown> & {
|
|
81
|
+
isLoading: boolean;
|
|
82
|
+
}
|
|
83
|
+
];
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { useQueryClient, } from '@tanstack/react-query';
|
|
2
|
+
import { useDataProvider } from './useDataProvider';
|
|
3
|
+
import { useMutationWithMutationMode, } from './useMutationWithMutationMode';
|
|
4
|
+
import { useEvent } from '../util';
|
|
5
|
+
/**
|
|
6
|
+
* Get a callback to call the dataProvider.delete() method, the result and the loading state.
|
|
7
|
+
*
|
|
8
|
+
* @param {string} resource
|
|
9
|
+
* @param {Params} params The delete parameters { id, previousData }
|
|
10
|
+
* @param {Object} options Options object to pass to the queryClient.
|
|
11
|
+
* May include side effects to be executed upon success or failure, e.g. { onSuccess: () => { refresh(); } }
|
|
12
|
+
* May include a mutation mode (optimistic/pessimistic/undoable), e.g. { mutationMode: 'undoable' }
|
|
13
|
+
*
|
|
14
|
+
* @typedef Params
|
|
15
|
+
* @prop params.id The resource identifier, e.g. 123
|
|
16
|
+
* @prop params.previousData The record before the update is applied
|
|
17
|
+
*
|
|
18
|
+
* @returns The current mutation state. Destructure as [deleteOne, { data, error, isPending }].
|
|
19
|
+
*
|
|
20
|
+
* The return value updates according to the request state:
|
|
21
|
+
*
|
|
22
|
+
* - initial: [deleteOne, { isPending: false, isIdle: true }]
|
|
23
|
+
* - start: [deleteOne, { isPending: true }]
|
|
24
|
+
* - success: [deleteOne, { data: [data from response], isPending: false, isSuccess: true }]
|
|
25
|
+
* - error: [deleteOne, { error: [error from response], isPending: false, isError: true }]
|
|
26
|
+
*
|
|
27
|
+
* The deleteOne() function must be called with a resource and a parameter object: deleteOne(resource, { id, previousData, meta }, options)
|
|
28
|
+
*
|
|
29
|
+
* This hook uses react-query useMutation under the hood.
|
|
30
|
+
* This means the state object contains mutate, isIdle, reset and other react-query methods.
|
|
31
|
+
*
|
|
32
|
+
* @see https://tanstack.com/query/v5/docs/react/reference/useMutation
|
|
33
|
+
*
|
|
34
|
+
* @example // set params when calling the deleteOne callback
|
|
35
|
+
*
|
|
36
|
+
* import { useDelete, useRecordContext } from 'react-admin';
|
|
37
|
+
*
|
|
38
|
+
* const DeleteButton = () => {
|
|
39
|
+
* const record = useRecordContext();
|
|
40
|
+
* const [deleteOne, { isPending, error }] = useDelete();
|
|
41
|
+
* const handleClick = () => {
|
|
42
|
+
* deleteOne('likes', { id: record.id, previousData: record })
|
|
43
|
+
* }
|
|
44
|
+
* if (error) { return <p>ERROR</p>; }
|
|
45
|
+
* return <button disabled={isPending} onClick={handleClick}>Delete</div>;
|
|
46
|
+
* };
|
|
47
|
+
*
|
|
48
|
+
* @example // set params when calling the hook
|
|
49
|
+
*
|
|
50
|
+
* import { useDelete, useRecordContext } from 'react-admin';
|
|
51
|
+
*
|
|
52
|
+
* const DeleteButton = () => {
|
|
53
|
+
* const record = useRecordContext();
|
|
54
|
+
* const [deleteOne, { isPending, error }] = useDelete('likes', { id: record.id, previousData: record });
|
|
55
|
+
* if (error) { return <p>ERROR</p>; }
|
|
56
|
+
* return <button disabled={isPending} onClick={() => deleteOne()}>Delete</button>;
|
|
57
|
+
* };
|
|
58
|
+
*
|
|
59
|
+
* @example // TypeScript
|
|
60
|
+
* const [delete, { data }] = useDelete<Product>('products', { id, previousData: product });
|
|
61
|
+
* \-- data is Product
|
|
62
|
+
*/
|
|
63
|
+
export const useDelete = (resource, params = {}, options = {}) => {
|
|
64
|
+
const dataProvider = useDataProvider();
|
|
65
|
+
const queryClient = useQueryClient();
|
|
66
|
+
const { mutationMode = 'pessimistic', onSettled, ...mutationOptions } = options;
|
|
67
|
+
const [mutate, mutationResult] = useMutationWithMutationMode({ resource, ...params }, {
|
|
68
|
+
...mutationOptions,
|
|
69
|
+
mutationKey: [resource, 'delete', params],
|
|
70
|
+
mutationMode,
|
|
71
|
+
mutationFn: ({ resource, ...params }) => {
|
|
72
|
+
if (resource == null) {
|
|
73
|
+
throw new Error('useDelete mutation requires a resource');
|
|
74
|
+
}
|
|
75
|
+
if (params.id == null) {
|
|
76
|
+
throw new Error('useDelete mutation requires a non-empty id');
|
|
77
|
+
}
|
|
78
|
+
return dataProvider.delete(resource, params);
|
|
79
|
+
},
|
|
80
|
+
updateCache: ({ resource, ...params }, { mutationMode }) => {
|
|
81
|
+
// hack: only way to tell react-query not to fetch this query for the next 5 seconds
|
|
82
|
+
// because setQueryData doesn't accept a stale time option
|
|
83
|
+
const now = Date.now();
|
|
84
|
+
const updatedAt = mutationMode === 'undoable' ? now + 5 * 1000 : now;
|
|
85
|
+
const updateColl = (old) => {
|
|
86
|
+
if (!old)
|
|
87
|
+
return old;
|
|
88
|
+
const index = old.findIndex(
|
|
89
|
+
// eslint-disable-next-line eqeqeq
|
|
90
|
+
record => record.id == params.id);
|
|
91
|
+
if (index === -1) {
|
|
92
|
+
return old;
|
|
93
|
+
}
|
|
94
|
+
return [...old.slice(0, index), ...old.slice(index + 1)];
|
|
95
|
+
};
|
|
96
|
+
queryClient.setQueriesData({ queryKey: [resource, 'getList'] }, (res) => {
|
|
97
|
+
if (!res || !res.data)
|
|
98
|
+
return res;
|
|
99
|
+
const newCollection = updateColl(res.data);
|
|
100
|
+
const recordWasFound = newCollection.length < res.data.length;
|
|
101
|
+
return recordWasFound
|
|
102
|
+
? {
|
|
103
|
+
data: newCollection,
|
|
104
|
+
total: res.total ? res.total - 1 : undefined,
|
|
105
|
+
pageInfo: res.pageInfo,
|
|
106
|
+
}
|
|
107
|
+
: res;
|
|
108
|
+
}, { updatedAt });
|
|
109
|
+
queryClient.setQueriesData({ queryKey: [resource, 'getInfiniteList'] }, (res) => {
|
|
110
|
+
if (!res || !res.pages)
|
|
111
|
+
return res;
|
|
112
|
+
return {
|
|
113
|
+
...res,
|
|
114
|
+
pages: res.pages.map(page => {
|
|
115
|
+
const newCollection = updateColl(page.data);
|
|
116
|
+
const recordWasFound = newCollection.length < page.data.length;
|
|
117
|
+
return recordWasFound
|
|
118
|
+
? {
|
|
119
|
+
...page,
|
|
120
|
+
data: newCollection,
|
|
121
|
+
total: page.total
|
|
122
|
+
? page.total - 1
|
|
123
|
+
: undefined,
|
|
124
|
+
pageInfo: page.pageInfo,
|
|
125
|
+
}
|
|
126
|
+
: page;
|
|
127
|
+
}),
|
|
128
|
+
};
|
|
129
|
+
}, { updatedAt });
|
|
130
|
+
queryClient.setQueriesData({ queryKey: [resource, 'getMany'] }, (coll) => coll && coll.length > 0 ? updateColl(coll) : coll, { updatedAt });
|
|
131
|
+
queryClient.setQueriesData({ queryKey: [resource, 'getManyReference'] }, (res) => {
|
|
132
|
+
if (!res || !res.data)
|
|
133
|
+
return res;
|
|
134
|
+
const newCollection = updateColl(res.data);
|
|
135
|
+
const recordWasFound = newCollection.length < res.data.length;
|
|
136
|
+
return recordWasFound
|
|
137
|
+
? {
|
|
138
|
+
...res,
|
|
139
|
+
data: newCollection,
|
|
140
|
+
total: res.total - 1,
|
|
141
|
+
}
|
|
142
|
+
: res;
|
|
143
|
+
}, { updatedAt });
|
|
144
|
+
return params.previousData;
|
|
145
|
+
},
|
|
146
|
+
getQueryKeys: ({ resource }) => {
|
|
147
|
+
const queryKeys = [
|
|
148
|
+
[resource, 'getList'],
|
|
149
|
+
[resource, 'getInfiniteList'],
|
|
150
|
+
[resource, 'getMany'],
|
|
151
|
+
[resource, 'getManyReference'],
|
|
152
|
+
];
|
|
153
|
+
return queryKeys;
|
|
154
|
+
},
|
|
155
|
+
onSettled: (...args) => {
|
|
156
|
+
const [, , , mutateResult] = args;
|
|
157
|
+
// For deletion, we always refetch after error or success:
|
|
158
|
+
mutateResult.snapshot.forEach(([queryKey]) => {
|
|
159
|
+
queryClient.invalidateQueries({ queryKey });
|
|
160
|
+
});
|
|
161
|
+
onSettled?.(...args);
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
const deleteOne = useEvent((callTimeResource = resource, callTimeParams = {}, callTimeOptions = {}) => {
|
|
165
|
+
return mutate({
|
|
166
|
+
resource: callTimeResource,
|
|
167
|
+
...callTimeParams,
|
|
168
|
+
}, callTimeOptions);
|
|
169
|
+
});
|
|
170
|
+
return [deleteOne, mutationResult];
|
|
171
|
+
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { type UseMutationOptions, type UseMutationResult, type MutateOptions } from '@tanstack/react-query';
|
|
2
|
+
import type { RaRecord, DeleteManyParams, MutationMode } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Get a callback to call the dataProvider.delete() method, the result and the loading state.
|
|
5
|
+
*
|
|
6
|
+
* @param {string} resource
|
|
7
|
+
* @param {Params} params The delete parameters { ids }
|
|
8
|
+
* @param {Object} options Options object to pass to the queryClient.
|
|
9
|
+
* May include side effects to be executed upon success or failure, e.g. { onSuccess: () => { refresh(); } }
|
|
10
|
+
* May include a mutation mode (optimistic/pessimistic/undoable), e.g. { mutationMode: 'undoable' }
|
|
11
|
+
*
|
|
12
|
+
* @typedef Params
|
|
13
|
+
* @prop params.ids The resource identifiers, e.g. [123, 456]
|
|
14
|
+
*
|
|
15
|
+
* @returns The current mutation state. Destructure as [deleteMany, { data, error, isPending }].
|
|
16
|
+
*
|
|
17
|
+
* The return value updates according to the request state:
|
|
18
|
+
*
|
|
19
|
+
* - initial: [deleteMany, { isPending: false, isIdle: true }]
|
|
20
|
+
* - start: [deleteMany, { isPending: true }]
|
|
21
|
+
* - success: [deleteMany, { data: [data from response], isPending: false, isSuccess: true }]
|
|
22
|
+
* - error: [deleteMany, { error: [error from response], isPending: false, isError: true }]
|
|
23
|
+
*
|
|
24
|
+
* The deleteMany() function must be called with a resource and a parameter object: deleteMany(resource, { ids, meta }, options)
|
|
25
|
+
*
|
|
26
|
+
* This hook uses react-query useMutation under the hood.
|
|
27
|
+
* This means the state object contains mutate, isIdle, reset and other react-query methods.
|
|
28
|
+
*
|
|
29
|
+
* @see https://tanstack.com/query/v5/docs/react/reference/useMutation
|
|
30
|
+
*
|
|
31
|
+
* @example // set params when calling the deleteMany callback
|
|
32
|
+
*
|
|
33
|
+
* import { useDeleteMany } from 'react-admin';
|
|
34
|
+
*
|
|
35
|
+
* const BulkDeletePostsButton = ({ selectedIds }) => {
|
|
36
|
+
* const [deleteMany, { isPending, error }] = useDeleteMany();
|
|
37
|
+
* const handleClick = () => {
|
|
38
|
+
* deleteMany('posts', { ids: selectedIds })
|
|
39
|
+
* }
|
|
40
|
+
* if (error) { return <p>ERROR</p>; }
|
|
41
|
+
* return <button disabled={isPending} onClick={handleClick}>Delete selected posts</button>;
|
|
42
|
+
* };
|
|
43
|
+
*
|
|
44
|
+
* @example // set params when calling the hook
|
|
45
|
+
*
|
|
46
|
+
* import { useDeleteMany } from 'react-admin';
|
|
47
|
+
*
|
|
48
|
+
* const BulkDeletePostsButton = ({ selectedIds }) => {
|
|
49
|
+
* const [deleteMany, { isPending, error }] = useDeleteMany('posts', { ids: selectedIds });
|
|
50
|
+
* const handleClick = () => {
|
|
51
|
+
* deleteMany()
|
|
52
|
+
* }
|
|
53
|
+
* if (error) { return <p>ERROR</p>; }
|
|
54
|
+
* return <button disabled={isPending} onClick={handleClick}>Delete selected posts</button>;
|
|
55
|
+
* };
|
|
56
|
+
*
|
|
57
|
+
* @example // TypeScript
|
|
58
|
+
* const [deleteMany, { data }] = useDeleteMany<Product>('products', { ids });
|
|
59
|
+
* \-- data is Product
|
|
60
|
+
*/
|
|
61
|
+
export declare const useDeleteMany: <RecordType extends RaRecord = any, MutationError = unknown>(resource?: string, params?: Partial<DeleteManyParams<RecordType>>, options?: UseDeleteManyOptions<RecordType, MutationError>) => UseDeleteManyResult<RecordType, MutationError>;
|
|
62
|
+
export interface UseDeleteManyMutateParams<RecordType extends RaRecord = any> {
|
|
63
|
+
resource?: string;
|
|
64
|
+
ids?: Array<RecordType['id']>;
|
|
65
|
+
meta?: any;
|
|
66
|
+
}
|
|
67
|
+
export type UseDeleteManyOptions<RecordType extends RaRecord = any, MutationError = unknown, TReturnPromise extends boolean = boolean> = Omit<UseMutationOptions<Array<RecordType['id']> | undefined, MutationError, Partial<UseDeleteManyMutateParams<RecordType>>>, 'mutationFn'> & {
|
|
68
|
+
mutationMode?: MutationMode;
|
|
69
|
+
returnPromise?: TReturnPromise;
|
|
70
|
+
};
|
|
71
|
+
export type UseDeleteManyResult<RecordType extends RaRecord = any, MutationError = unknown, TReturnPromise extends boolean = boolean> = [
|
|
72
|
+
(resource?: string, params?: Partial<DeleteManyParams<RecordType>>, options?: MutateOptions<Array<RecordType['id']> | undefined, MutationError, Partial<UseDeleteManyMutateParams<RecordType>>, unknown> & {
|
|
73
|
+
mutationMode?: MutationMode;
|
|
74
|
+
returnPromise?: TReturnPromise;
|
|
75
|
+
}) => Promise<TReturnPromise extends true ? Array<RecordType['id']> | undefined : void>,
|
|
76
|
+
UseMutationResult<Array<RecordType['id']> | undefined, MutationError, Partial<DeleteManyParams<RecordType> & {
|
|
77
|
+
resource?: string;
|
|
78
|
+
}>, unknown> & {
|
|
79
|
+
isLoading: boolean;
|
|
80
|
+
}
|
|
81
|
+
];
|