@strato-admin/faker-ecommerce 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/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 +5 -4
- 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,89 @@
|
|
|
1
|
+
import { type UseMutationResult, type MutateOptions, UseMutationOptions } from '@tanstack/react-query';
|
|
2
|
+
import type { RaRecord, UpdateParams, MutationMode, DataProvider } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Get a callback to call the dataProvider.update() method, the result and the loading state.
|
|
5
|
+
*
|
|
6
|
+
* @param {string} resource
|
|
7
|
+
* @param {Params} params The update parameters { id, data, previousData, meta }
|
|
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.data The updates to merge into the record, e.g. { views: 10 }
|
|
15
|
+
* @prop params.previousData The record before the update is applied
|
|
16
|
+
* @prop params.meta Optional meta data
|
|
17
|
+
*
|
|
18
|
+
* @returns The current mutation state. Destructure as [update, { data, error, isPending }].
|
|
19
|
+
*
|
|
20
|
+
* The return value updates according to the request state:
|
|
21
|
+
*
|
|
22
|
+
* - initial: [update, { isPending: false, isIdle: true }]
|
|
23
|
+
* - start: [update, { isPending: true }]
|
|
24
|
+
* - success: [update, { data: [data from response], isPending: false, isSuccess: true }]
|
|
25
|
+
* - error: [update, { error: [error from response], isPending: false, isError: true }]
|
|
26
|
+
*
|
|
27
|
+
* The update() function must be called with a resource and a parameter object: update(resource, { id, data, previousData }, 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://react-query-v3.tanstack.com/reference/useMutation
|
|
33
|
+
*
|
|
34
|
+
* @example // set params when calling the update callback
|
|
35
|
+
*
|
|
36
|
+
* import { useUpdate, useRecordContext } from 'react-admin';
|
|
37
|
+
*
|
|
38
|
+
* const IncreaseLikeButton = () => {
|
|
39
|
+
* const record = useRecordContext();
|
|
40
|
+
* const diff = { likes: record.likes + 1 };
|
|
41
|
+
* const [update, { isPending, error }] = useUpdate();
|
|
42
|
+
* const handleClick = () => {
|
|
43
|
+
* update('likes', { id: record.id, data: diff, previousData: record })
|
|
44
|
+
* }
|
|
45
|
+
* if (error) { return <p>ERROR</p>; }
|
|
46
|
+
* return <button disabled={isPending} onClick={handleClick}>Like</div>;
|
|
47
|
+
* };
|
|
48
|
+
*
|
|
49
|
+
* @example // set params when calling the hook
|
|
50
|
+
*
|
|
51
|
+
* import { useUpdate, useRecordContext } from 'react-admin';
|
|
52
|
+
*
|
|
53
|
+
* const IncreaseLikeButton = () => {
|
|
54
|
+
* const record = useRecordContext();
|
|
55
|
+
* const diff = { likes: record.likes + 1 };
|
|
56
|
+
* const [update, { isPending, error }] = useUpdate('likes', { id: record.id, data: diff, previousData: record });
|
|
57
|
+
* if (error) { return <p>ERROR</p>; }
|
|
58
|
+
* return <button disabled={isPending} onClick={() => update()}>Like</button>;
|
|
59
|
+
* };
|
|
60
|
+
*
|
|
61
|
+
* @example // TypeScript
|
|
62
|
+
* const [update, { data }] = useUpdate<Product>('products', { id, data: diff, previousData: product });
|
|
63
|
+
* \-- data is Product
|
|
64
|
+
*/
|
|
65
|
+
export declare const useUpdate: <RecordType extends RaRecord = any, ErrorType = Error>(resource?: string, params?: Partial<UpdateParams<RecordType>>, options?: UseUpdateOptions<RecordType, ErrorType>) => UseUpdateResult<RecordType, boolean, ErrorType>;
|
|
66
|
+
export interface UseUpdateMutateParams<RecordType extends RaRecord = any> {
|
|
67
|
+
resource?: string;
|
|
68
|
+
id?: RecordType['id'];
|
|
69
|
+
data?: Partial<RecordType>;
|
|
70
|
+
previousData?: any;
|
|
71
|
+
meta?: any;
|
|
72
|
+
}
|
|
73
|
+
export type UseUpdateOptions<RecordType extends RaRecord = any, ErrorType = Error> = Omit<UseMutationOptions<RecordType, ErrorType, Partial<UseUpdateMutateParams<RecordType>>>, 'mutationFn'> & {
|
|
74
|
+
mutationMode?: MutationMode;
|
|
75
|
+
returnPromise?: boolean;
|
|
76
|
+
getMutateWithMiddlewares?: <UpdateFunctionType extends DataProvider['update'] = DataProvider['update']>(mutate: UpdateFunctionType) => (...Params: Parameters<UpdateFunctionType>) => ReturnType<UpdateFunctionType>;
|
|
77
|
+
};
|
|
78
|
+
export type UpdateMutationFunction<RecordType extends RaRecord = any, TReturnPromise extends boolean = boolean, ErrorType = Error> = (resource?: string, params?: Partial<UpdateParams<RecordType>>, options?: MutateOptions<RecordType, ErrorType, Partial<UseUpdateMutateParams<RecordType>>, unknown> & {
|
|
79
|
+
mutationMode?: MutationMode;
|
|
80
|
+
returnPromise?: TReturnPromise;
|
|
81
|
+
}) => Promise<TReturnPromise extends true ? RecordType : void>;
|
|
82
|
+
export type UseUpdateResult<RecordType extends RaRecord = any, TReturnPromise extends boolean = boolean, ErrorType = Error> = [
|
|
83
|
+
UpdateMutationFunction<RecordType, TReturnPromise, ErrorType>,
|
|
84
|
+
UseMutationResult<RecordType, ErrorType, Partial<UpdateParams<RecordType> & {
|
|
85
|
+
resource?: string;
|
|
86
|
+
}>, unknown> & {
|
|
87
|
+
isLoading: boolean;
|
|
88
|
+
}
|
|
89
|
+
];
|
|
@@ -0,0 +1,183 @@
|
|
|
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.update() method, the result and the loading state.
|
|
7
|
+
*
|
|
8
|
+
* @param {string} resource
|
|
9
|
+
* @param {Params} params The update parameters { id, data, previousData, meta }
|
|
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.data The updates to merge into the record, e.g. { views: 10 }
|
|
17
|
+
* @prop params.previousData The record before the update is applied
|
|
18
|
+
* @prop params.meta Optional meta data
|
|
19
|
+
*
|
|
20
|
+
* @returns The current mutation state. Destructure as [update, { data, error, isPending }].
|
|
21
|
+
*
|
|
22
|
+
* The return value updates according to the request state:
|
|
23
|
+
*
|
|
24
|
+
* - initial: [update, { isPending: false, isIdle: true }]
|
|
25
|
+
* - start: [update, { isPending: true }]
|
|
26
|
+
* - success: [update, { data: [data from response], isPending: false, isSuccess: true }]
|
|
27
|
+
* - error: [update, { error: [error from response], isPending: false, isError: true }]
|
|
28
|
+
*
|
|
29
|
+
* The update() function must be called with a resource and a parameter object: update(resource, { id, data, previousData }, options)
|
|
30
|
+
*
|
|
31
|
+
* This hook uses react-query useMutation under the hood.
|
|
32
|
+
* This means the state object contains mutate, isIdle, reset and other react-query methods.
|
|
33
|
+
*
|
|
34
|
+
* @see https://react-query-v3.tanstack.com/reference/useMutation
|
|
35
|
+
*
|
|
36
|
+
* @example // set params when calling the update callback
|
|
37
|
+
*
|
|
38
|
+
* import { useUpdate, useRecordContext } from 'react-admin';
|
|
39
|
+
*
|
|
40
|
+
* const IncreaseLikeButton = () => {
|
|
41
|
+
* const record = useRecordContext();
|
|
42
|
+
* const diff = { likes: record.likes + 1 };
|
|
43
|
+
* const [update, { isPending, error }] = useUpdate();
|
|
44
|
+
* const handleClick = () => {
|
|
45
|
+
* update('likes', { id: record.id, data: diff, previousData: record })
|
|
46
|
+
* }
|
|
47
|
+
* if (error) { return <p>ERROR</p>; }
|
|
48
|
+
* return <button disabled={isPending} onClick={handleClick}>Like</div>;
|
|
49
|
+
* };
|
|
50
|
+
*
|
|
51
|
+
* @example // set params when calling the hook
|
|
52
|
+
*
|
|
53
|
+
* import { useUpdate, useRecordContext } from 'react-admin';
|
|
54
|
+
*
|
|
55
|
+
* const IncreaseLikeButton = () => {
|
|
56
|
+
* const record = useRecordContext();
|
|
57
|
+
* const diff = { likes: record.likes + 1 };
|
|
58
|
+
* const [update, { isPending, error }] = useUpdate('likes', { id: record.id, data: diff, previousData: record });
|
|
59
|
+
* if (error) { return <p>ERROR</p>; }
|
|
60
|
+
* return <button disabled={isPending} onClick={() => update()}>Like</button>;
|
|
61
|
+
* };
|
|
62
|
+
*
|
|
63
|
+
* @example // TypeScript
|
|
64
|
+
* const [update, { data }] = useUpdate<Product>('products', { id, data: diff, previousData: product });
|
|
65
|
+
* \-- data is Product
|
|
66
|
+
*/
|
|
67
|
+
export const useUpdate = (resource, params = {}, options = {}) => {
|
|
68
|
+
const dataProvider = useDataProvider();
|
|
69
|
+
const queryClient = useQueryClient();
|
|
70
|
+
const { mutationMode = 'pessimistic', getMutateWithMiddlewares, ...mutationOptions } = options;
|
|
71
|
+
const dataProviderUpdate = useEvent((resource, params) => dataProvider.update(resource, params));
|
|
72
|
+
const [mutate, mutationResult] = useMutationWithMutationMode({ resource, ...params }, {
|
|
73
|
+
...mutationOptions,
|
|
74
|
+
mutationKey: [resource, 'update', params],
|
|
75
|
+
mutationMode,
|
|
76
|
+
mutationFn: ({ resource, ...params }) => {
|
|
77
|
+
if (resource == null) {
|
|
78
|
+
throw new Error('useUpdate mutation requires a resource');
|
|
79
|
+
}
|
|
80
|
+
if (params.id == null) {
|
|
81
|
+
throw new Error('useUpdate mutation requires a non-empty id');
|
|
82
|
+
}
|
|
83
|
+
if (!params.data) {
|
|
84
|
+
throw new Error('useUpdate mutation requires a non-empty data object');
|
|
85
|
+
}
|
|
86
|
+
return dataProviderUpdate(resource, params);
|
|
87
|
+
},
|
|
88
|
+
updateCache: ({ resource, ...params }, { mutationMode }, result) => {
|
|
89
|
+
// hack: only way to tell react-query not to fetch this query for the next 5 seconds
|
|
90
|
+
// because setQueryData doesn't accept a stale time option
|
|
91
|
+
const now = Date.now();
|
|
92
|
+
const updatedAt = mutationMode === 'undoable' ? now + 5 * 1000 : now;
|
|
93
|
+
// Stringify and parse the data to remove undefined values.
|
|
94
|
+
// If we don't do this, an update with { id: undefined } as payload
|
|
95
|
+
// would remove the id from the record, which no real data provider does.
|
|
96
|
+
const clonedData = JSON.parse(JSON.stringify(mutationMode === 'pessimistic' ? result : params?.data));
|
|
97
|
+
const updateColl = (old) => {
|
|
98
|
+
if (!old)
|
|
99
|
+
return old;
|
|
100
|
+
const index = old.findIndex(
|
|
101
|
+
// eslint-disable-next-line eqeqeq
|
|
102
|
+
record => record.id == params?.id);
|
|
103
|
+
if (index === -1) {
|
|
104
|
+
return old;
|
|
105
|
+
}
|
|
106
|
+
return [
|
|
107
|
+
...old.slice(0, index),
|
|
108
|
+
{ ...old[index], ...clonedData },
|
|
109
|
+
...old.slice(index + 1),
|
|
110
|
+
];
|
|
111
|
+
};
|
|
112
|
+
const previousRecord = queryClient.getQueryData([
|
|
113
|
+
resource,
|
|
114
|
+
'getOne',
|
|
115
|
+
{ id: String(params?.id), meta: params?.meta },
|
|
116
|
+
]);
|
|
117
|
+
queryClient.setQueryData([
|
|
118
|
+
resource,
|
|
119
|
+
'getOne',
|
|
120
|
+
{ id: String(params?.id), meta: params?.meta },
|
|
121
|
+
], (record) => ({
|
|
122
|
+
...record,
|
|
123
|
+
...clonedData,
|
|
124
|
+
}), { updatedAt });
|
|
125
|
+
queryClient.setQueriesData({ queryKey: [resource, 'getList'] }, (res) => res && res.data
|
|
126
|
+
? { ...res, data: updateColl(res.data) }
|
|
127
|
+
: res, { updatedAt });
|
|
128
|
+
queryClient.setQueriesData({ queryKey: [resource, 'getInfiniteList'] }, (res) => res && res.pages
|
|
129
|
+
? {
|
|
130
|
+
...res,
|
|
131
|
+
pages: res.pages.map(page => ({
|
|
132
|
+
...page,
|
|
133
|
+
data: updateColl(page.data),
|
|
134
|
+
})),
|
|
135
|
+
}
|
|
136
|
+
: res, { updatedAt });
|
|
137
|
+
queryClient.setQueriesData({ queryKey: [resource, 'getMany'] }, (coll) => coll && coll.length > 0 ? updateColl(coll) : coll, { updatedAt });
|
|
138
|
+
queryClient.setQueriesData({ queryKey: [resource, 'getManyReference'] }, (res) => res && res.data
|
|
139
|
+
? { ...res, data: updateColl(res.data) }
|
|
140
|
+
: res, { updatedAt });
|
|
141
|
+
const optimisticResult = {
|
|
142
|
+
...previousRecord,
|
|
143
|
+
...clonedData,
|
|
144
|
+
};
|
|
145
|
+
return optimisticResult;
|
|
146
|
+
},
|
|
147
|
+
getQueryKeys: ({ resource, ...params }) => {
|
|
148
|
+
const queryKeys = [
|
|
149
|
+
[
|
|
150
|
+
resource,
|
|
151
|
+
'getOne',
|
|
152
|
+
{ id: String(params?.id), meta: params?.meta },
|
|
153
|
+
],
|
|
154
|
+
[resource, 'getList'],
|
|
155
|
+
[resource, 'getInfiniteList'],
|
|
156
|
+
[resource, 'getMany'],
|
|
157
|
+
[resource, 'getManyReference'],
|
|
158
|
+
];
|
|
159
|
+
return queryKeys;
|
|
160
|
+
},
|
|
161
|
+
getMutateWithMiddlewares: mutationFn => {
|
|
162
|
+
if (getMutateWithMiddlewares) {
|
|
163
|
+
// Immediately get the function with middlewares applied so that even if the middlewares gets unregistered (because of a redirect for instance),
|
|
164
|
+
// we still have them applied when users have called the mutate function.
|
|
165
|
+
const mutateWithMiddlewares = getMutateWithMiddlewares(dataProviderUpdate.bind(dataProvider));
|
|
166
|
+
return args => {
|
|
167
|
+
// This is necessary to avoid breaking changes in useUpdate:
|
|
168
|
+
// The mutation function must have the same signature as before (resource, params) and not ({ resource, params })
|
|
169
|
+
const { resource, ...params } = args;
|
|
170
|
+
return mutateWithMiddlewares(resource, params);
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
return args => mutationFn(args);
|
|
174
|
+
},
|
|
175
|
+
});
|
|
176
|
+
const update = useEvent((callTimeResource = resource, callTimeParams = {}, callTimeOptions = {}) => {
|
|
177
|
+
return mutate({
|
|
178
|
+
resource: callTimeResource,
|
|
179
|
+
...callTimeParams,
|
|
180
|
+
}, callTimeOptions);
|
|
181
|
+
});
|
|
182
|
+
return [update, mutationResult];
|
|
183
|
+
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { type UseMutationOptions, type UseMutationResult, type MutateOptions } from '@tanstack/react-query';
|
|
2
|
+
import type { RaRecord, UpdateManyParams, MutationMode, DataProvider } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Get a callback to call the dataProvider.updateMany() method, the result and the loading state.
|
|
5
|
+
*
|
|
6
|
+
* @param {string} resource
|
|
7
|
+
* @param {Params} params The updateMany parameters { ids, data, meta }
|
|
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
|
+
* @prop params.data The updates to merge into the record, e.g. { views: 10 }
|
|
15
|
+
* @prop params.meta Optional meta parameters
|
|
16
|
+
*
|
|
17
|
+
* @returns The current mutation state. Destructure as [updateMany, { data, error, isPending }].
|
|
18
|
+
*
|
|
19
|
+
* The return value updates according to the request state:
|
|
20
|
+
*
|
|
21
|
+
* - initial: [updateMany, { isPending: false, isIdle: true }]
|
|
22
|
+
* - start: [updateMany, { isPending: true }]
|
|
23
|
+
* - success: [updateMany, { data: [data from response], isPending: false, isSuccess: true }]
|
|
24
|
+
* - error: [updateMany, { error: [error from response], isPending: false, isError: true }]
|
|
25
|
+
*
|
|
26
|
+
* The updateMany() function must be called with a resource and a parameter object: updateMany(resource, { ids, data, previousData }, options)
|
|
27
|
+
*
|
|
28
|
+
* This hook uses react-query useMutation under the hood.
|
|
29
|
+
* This means the state object contains mutate, isIdle, reset and other react-query methods.
|
|
30
|
+
*
|
|
31
|
+
* @see https://tanstack.com/query/v5/docs/react/reference/useMutation
|
|
32
|
+
*
|
|
33
|
+
* @example // set params when calling the updateMany callback
|
|
34
|
+
*
|
|
35
|
+
* import { useUpdateMany, useListContext } from 'react-admin';
|
|
36
|
+
*
|
|
37
|
+
* const BulkResetViewsButton = () => {
|
|
38
|
+
* const { selectedIds } = useListContext();
|
|
39
|
+
* const [updateMany, { isPending, error }] = useUpdateMany();
|
|
40
|
+
* const handleClick = () => {
|
|
41
|
+
* updateMany('posts', { ids: selectedIds, data: { views: 0 } });
|
|
42
|
+
* }
|
|
43
|
+
* if (error) { return <p>ERROR</p>; }
|
|
44
|
+
* return <button disabled={isPending} onClick={handleClick}>Reset views</button>;
|
|
45
|
+
* };
|
|
46
|
+
*
|
|
47
|
+
* @example // set params when calling the hook
|
|
48
|
+
*
|
|
49
|
+
* import { useUpdateMany, useListContext } from 'react-admin';
|
|
50
|
+
*
|
|
51
|
+
* const BulkResetViewsButton = () => {
|
|
52
|
+
* const { selectedIds } = useListContext();
|
|
53
|
+
* const [updateMany, { isPending, error }] = useUpdateMany('posts', { ids: selectedIds, data: { views: 0 } });
|
|
54
|
+
* if (error) { return <p>ERROR</p>; }
|
|
55
|
+
* return <button disabled={isPending} onClick={() => updateMany()}>Reset views</button>;
|
|
56
|
+
* };
|
|
57
|
+
*/
|
|
58
|
+
export declare const useUpdateMany: <RecordType extends RaRecord = any, MutationError = unknown>(resource?: string, params?: Partial<UpdateManyParams<Partial<RecordType>>>, options?: UseUpdateManyOptions<RecordType, MutationError>) => UseUpdateManyResult<RecordType, boolean, MutationError>;
|
|
59
|
+
export interface UseUpdateManyMutateParams<RecordType extends RaRecord = any> {
|
|
60
|
+
resource?: string;
|
|
61
|
+
ids?: Array<RecordType['id']>;
|
|
62
|
+
data?: Partial<RecordType>;
|
|
63
|
+
previousData?: any;
|
|
64
|
+
meta?: any;
|
|
65
|
+
}
|
|
66
|
+
export type UseUpdateManyOptions<RecordType extends RaRecord = any, MutationError = unknown> = Omit<UseMutationOptions<Array<RecordType['id']>, MutationError, Partial<UseUpdateManyMutateParams<RecordType>>>, 'mutationFn'> & {
|
|
67
|
+
mutationMode?: MutationMode;
|
|
68
|
+
returnPromise?: boolean;
|
|
69
|
+
getMutateWithMiddlewares?: <UpdateFunctionType extends DataProvider['updateMany'] = DataProvider['updateMany']>(mutate: UpdateFunctionType) => (...Params: Parameters<UpdateFunctionType>) => ReturnType<UpdateFunctionType>;
|
|
70
|
+
};
|
|
71
|
+
export type UseUpdateManyResult<RecordType extends RaRecord = any, TReturnPromise extends boolean = boolean, MutationError = unknown> = [
|
|
72
|
+
(resource?: string, params?: Partial<UpdateManyParams<RecordType>>, options?: MutateOptions<Array<RecordType['id']>, MutationError, Partial<UseUpdateManyMutateParams<RecordType>>, unknown> & {
|
|
73
|
+
mutationMode?: MutationMode;
|
|
74
|
+
returnPromise?: TReturnPromise;
|
|
75
|
+
}) => Promise<TReturnPromise extends true ? Array<RecordType['id']> : void>,
|
|
76
|
+
UseMutationResult<Array<RecordType['id']> | undefined, MutationError, Partial<UpdateManyParams<Partial<RecordType>> & {
|
|
77
|
+
resource?: string;
|
|
78
|
+
}>, unknown> & {
|
|
79
|
+
isLoading: boolean;
|
|
80
|
+
}
|
|
81
|
+
];
|
|
@@ -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.updateMany() method, the result and the loading state.
|
|
7
|
+
*
|
|
8
|
+
* @param {string} resource
|
|
9
|
+
* @param {Params} params The updateMany parameters { ids, data, meta }
|
|
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.ids The resource identifiers, e.g. [123, 456]
|
|
16
|
+
* @prop params.data The updates to merge into the record, e.g. { views: 10 }
|
|
17
|
+
* @prop params.meta Optional meta parameters
|
|
18
|
+
*
|
|
19
|
+
* @returns The current mutation state. Destructure as [updateMany, { data, error, isPending }].
|
|
20
|
+
*
|
|
21
|
+
* The return value updates according to the request state:
|
|
22
|
+
*
|
|
23
|
+
* - initial: [updateMany, { isPending: false, isIdle: true }]
|
|
24
|
+
* - start: [updateMany, { isPending: true }]
|
|
25
|
+
* - success: [updateMany, { data: [data from response], isPending: false, isSuccess: true }]
|
|
26
|
+
* - error: [updateMany, { error: [error from response], isPending: false, isError: true }]
|
|
27
|
+
*
|
|
28
|
+
* The updateMany() function must be called with a resource and a parameter object: updateMany(resource, { ids, data, previousData }, options)
|
|
29
|
+
*
|
|
30
|
+
* This hook uses react-query useMutation under the hood.
|
|
31
|
+
* This means the state object contains mutate, isIdle, reset and other react-query methods.
|
|
32
|
+
*
|
|
33
|
+
* @see https://tanstack.com/query/v5/docs/react/reference/useMutation
|
|
34
|
+
*
|
|
35
|
+
* @example // set params when calling the updateMany callback
|
|
36
|
+
*
|
|
37
|
+
* import { useUpdateMany, useListContext } from 'react-admin';
|
|
38
|
+
*
|
|
39
|
+
* const BulkResetViewsButton = () => {
|
|
40
|
+
* const { selectedIds } = useListContext();
|
|
41
|
+
* const [updateMany, { isPending, error }] = useUpdateMany();
|
|
42
|
+
* const handleClick = () => {
|
|
43
|
+
* updateMany('posts', { ids: selectedIds, data: { views: 0 } });
|
|
44
|
+
* }
|
|
45
|
+
* if (error) { return <p>ERROR</p>; }
|
|
46
|
+
* return <button disabled={isPending} onClick={handleClick}>Reset views</button>;
|
|
47
|
+
* };
|
|
48
|
+
*
|
|
49
|
+
* @example // set params when calling the hook
|
|
50
|
+
*
|
|
51
|
+
* import { useUpdateMany, useListContext } from 'react-admin';
|
|
52
|
+
*
|
|
53
|
+
* const BulkResetViewsButton = () => {
|
|
54
|
+
* const { selectedIds } = useListContext();
|
|
55
|
+
* const [updateMany, { isPending, error }] = useUpdateMany('posts', { ids: selectedIds, data: { views: 0 } });
|
|
56
|
+
* if (error) { return <p>ERROR</p>; }
|
|
57
|
+
* return <button disabled={isPending} onClick={() => updateMany()}>Reset views</button>;
|
|
58
|
+
* };
|
|
59
|
+
*/
|
|
60
|
+
export const useUpdateMany = (resource, params = {}, options = {}) => {
|
|
61
|
+
const dataProvider = useDataProvider();
|
|
62
|
+
const queryClient = useQueryClient();
|
|
63
|
+
const { mutationMode = 'pessimistic', getMutateWithMiddlewares, ...mutationOptions } = options;
|
|
64
|
+
const dataProviderUpdateMany = useEvent((resource, params) => dataProvider.updateMany(resource, params));
|
|
65
|
+
const [mutate, mutationResult] = useMutationWithMutationMode({ resource, ...params }, {
|
|
66
|
+
...mutationOptions,
|
|
67
|
+
mutationKey: [resource, 'updateMany', params],
|
|
68
|
+
mutationMode,
|
|
69
|
+
mutationFn: ({ resource, ...params }) => {
|
|
70
|
+
if (resource == null) {
|
|
71
|
+
throw new Error('useUpdateMany mutation requires a resource');
|
|
72
|
+
}
|
|
73
|
+
if (params.ids == null) {
|
|
74
|
+
throw new Error('useUpdateMany mutation requires an array of ids');
|
|
75
|
+
}
|
|
76
|
+
if (!params.data) {
|
|
77
|
+
throw new Error('useUpdateMany mutation requires a non-empty data object');
|
|
78
|
+
}
|
|
79
|
+
return dataProviderUpdateMany(resource, params);
|
|
80
|
+
},
|
|
81
|
+
updateCache: ({ resource, ...params }, { mutationMode }) => {
|
|
82
|
+
// hack: only way to tell react-query not to fetch this query for the next 5 seconds
|
|
83
|
+
// because setQueryData doesn't accept a stale time option
|
|
84
|
+
const updatedAt = mutationMode === 'undoable'
|
|
85
|
+
? Date.now() + 1000 * 5
|
|
86
|
+
: Date.now();
|
|
87
|
+
// Stringify and parse the data to remove undefined values.
|
|
88
|
+
// If we don't do this, an update with { id: undefined } as payload
|
|
89
|
+
// would remove the id from the record, which no real data provider does.
|
|
90
|
+
const clonedData = params?.data
|
|
91
|
+
? JSON.parse(JSON.stringify(params?.data))
|
|
92
|
+
: undefined;
|
|
93
|
+
const updateColl = (old) => {
|
|
94
|
+
if (!old)
|
|
95
|
+
return old;
|
|
96
|
+
let newCollection = [...old];
|
|
97
|
+
(params?.ids ?? []).forEach(id => {
|
|
98
|
+
// eslint-disable-next-line eqeqeq
|
|
99
|
+
const index = old.findIndex(record => record.id == id);
|
|
100
|
+
if (index === -1) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
newCollection = [
|
|
104
|
+
...newCollection.slice(0, index),
|
|
105
|
+
{ ...newCollection[index], ...clonedData },
|
|
106
|
+
...newCollection.slice(index + 1),
|
|
107
|
+
];
|
|
108
|
+
});
|
|
109
|
+
return newCollection;
|
|
110
|
+
};
|
|
111
|
+
(params?.ids ?? []).forEach(id => {
|
|
112
|
+
queryClient.setQueryData([
|
|
113
|
+
resource,
|
|
114
|
+
'getOne',
|
|
115
|
+
{ id: String(id), meta: params?.meta },
|
|
116
|
+
], (record) => ({
|
|
117
|
+
...record,
|
|
118
|
+
...clonedData,
|
|
119
|
+
}), { updatedAt });
|
|
120
|
+
});
|
|
121
|
+
queryClient.setQueriesData({ queryKey: [resource, 'getList'] }, (res) => res && res.data
|
|
122
|
+
? { ...res, data: updateColl(res.data) }
|
|
123
|
+
: res, { updatedAt });
|
|
124
|
+
queryClient.setQueriesData({ queryKey: [resource, 'getInfiniteList'] }, (res) => res && res.pages
|
|
125
|
+
? {
|
|
126
|
+
...res,
|
|
127
|
+
pages: res.pages.map(page => ({
|
|
128
|
+
...page,
|
|
129
|
+
data: updateColl(page.data),
|
|
130
|
+
})),
|
|
131
|
+
}
|
|
132
|
+
: res, { updatedAt });
|
|
133
|
+
queryClient.setQueriesData({ queryKey: [resource, 'getMany'] }, (coll) => coll && coll.length > 0 ? updateColl(coll) : coll, { updatedAt });
|
|
134
|
+
queryClient.setQueriesData({ queryKey: [resource, 'getManyReference'] }, (res) => res && res.data
|
|
135
|
+
? { ...res, data: updateColl(res.data) }
|
|
136
|
+
: res, { updatedAt });
|
|
137
|
+
return params?.ids;
|
|
138
|
+
},
|
|
139
|
+
getQueryKeys: ({ resource }) => {
|
|
140
|
+
const queryKeys = [
|
|
141
|
+
[resource, 'getOne'],
|
|
142
|
+
[resource, 'getList'],
|
|
143
|
+
[resource, 'getInfiniteList'],
|
|
144
|
+
[resource, 'getMany'],
|
|
145
|
+
[resource, 'getManyReference'],
|
|
146
|
+
];
|
|
147
|
+
return queryKeys;
|
|
148
|
+
},
|
|
149
|
+
getMutateWithMiddlewares: mutationFn => {
|
|
150
|
+
if (getMutateWithMiddlewares) {
|
|
151
|
+
// Immediately get the function with middlewares applied so that even if the middlewares gets unregistered (because of a redirect for instance),
|
|
152
|
+
// we still have them applied when users have called the mutate function.
|
|
153
|
+
const mutateWithMiddlewares = getMutateWithMiddlewares(dataProviderUpdateMany.bind(dataProvider));
|
|
154
|
+
return args => {
|
|
155
|
+
// This is necessary to avoid breaking changes in useUpdateMany:
|
|
156
|
+
// The mutation function must have the same signature as before (resource, params) and not ({ resource, params })
|
|
157
|
+
const { resource, ...params } = args;
|
|
158
|
+
return mutateWithMiddlewares(resource, params);
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
return args => mutationFn(args);
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
const updateMany = useEvent((callTimeResource = resource, callTimeParams = {}, callTimeOptions = {}) => {
|
|
165
|
+
return mutate({
|
|
166
|
+
resource: callTimeResource,
|
|
167
|
+
...callTimeParams,
|
|
168
|
+
}, callTimeOptions);
|
|
169
|
+
});
|
|
170
|
+
return [updateMany, mutationResult];
|
|
171
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { fetchActionsWithRecordResponse, fetchActionsWithArrayOfIdentifiedRecordsResponse, fetchActionsWithArrayOfRecordsResponse, fetchActionsWithTotalResponse, } from './dataFetchActions';
|
|
2
|
+
function validateResponseFormat(response, type, logger = console.error) {
|
|
3
|
+
if (!response) {
|
|
4
|
+
logger(`The dataProvider returned an empty response for '${type}'.`);
|
|
5
|
+
throw new Error("strato.notification.data_provider_error');
|
|
6
|
+
}
|
|
7
|
+
if (!response.hasOwnProperty('data')) {
|
|
8
|
+
logger(`The response to '${type}' must be like { data: ... }, but the received response does not have a 'data' key. The dataProvider is probably wrong for '${type}'.`);
|
|
9
|
+
throw new Error("strato.notification.data_provider_error');
|
|
10
|
+
}
|
|
11
|
+
if (fetchActionsWithArrayOfRecordsResponse.includes(type) &&
|
|
12
|
+
!Array.isArray(response.data)) {
|
|
13
|
+
logger(`The response to '${type}' must be like { data : [...] }, but the received data is not an array. The dataProvider is probably wrong for '${type}'`);
|
|
14
|
+
throw new Error("strato.notification.data_provider_error');
|
|
15
|
+
}
|
|
16
|
+
if (fetchActionsWithArrayOfIdentifiedRecordsResponse.includes(type) &&
|
|
17
|
+
Array.isArray(response.data) &&
|
|
18
|
+
response.data.length > 0 &&
|
|
19
|
+
!response.data[0].hasOwnProperty('id')) {
|
|
20
|
+
logger(`The response to '${type}' must be like { data : [{ id: 123, ...}, ...] }, but the received data items do not have an 'id' key. The dataProvider is probably wrong for '${type}'`);
|
|
21
|
+
throw new Error("strato.notification.data_provider_error');
|
|
22
|
+
}
|
|
23
|
+
if (fetchActionsWithRecordResponse.includes(type) &&
|
|
24
|
+
!response.data.hasOwnProperty('id')) {
|
|
25
|
+
logger(`The response to '${type}' must be like { data: { id: 123, ... } }, but the received data does not have an 'id' key. The dataProvider is probably wrong for '${type}'`);
|
|
26
|
+
throw new Error("strato.notification.data_provider_error');
|
|
27
|
+
}
|
|
28
|
+
if (fetchActionsWithTotalResponse.includes(type) &&
|
|
29
|
+
!response.hasOwnProperty('total') &&
|
|
30
|
+
!response.hasOwnProperty('pageInfo')) {
|
|
31
|
+
logger(`The response to '${type}' must be like { data: [...], total: 123 } or { data: [...], pageInfo: {...} }, but the received response has neither a 'total' nor a 'pageInfo' key. The dataProvider is probably wrong for '${type}'`);
|
|
32
|
+
throw new Error("strato.notification.data_provider_error');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export default validateResponseFormat;
|