@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.
Files changed (519) hide show
  1. package/dist/dataProvider.js +1 -2
  2. package/dist/generate.d.ts +2 -1
  3. package/dist/generate.js +15 -8
  4. package/dist/ra-core/src/auth/LogoutOnMount.d.ts +8 -0
  5. package/dist/ra-core/src/auth/LogoutOnMount.js +16 -0
  6. package/dist/ra-core/src/auth/addRefreshAuthToAuthProvider.d.ts +22 -0
  7. package/dist/ra-core/src/auth/addRefreshAuthToAuthProvider.js +41 -0
  8. package/dist/ra-core/src/auth/addRefreshAuthToDataProvider.d.ts +21 -0
  9. package/dist/ra-core/src/auth/addRefreshAuthToDataProvider.js +30 -0
  10. package/dist/ra-core/src/auth/convertLegacyAuthProvider.d.ts +12 -0
  11. package/dist/ra-core/src/auth/convertLegacyAuthProvider.js +19 -0
  12. package/dist/ra-core/src/auth/index.d.ts +27 -0
  13. package/dist/ra-core/src/auth/index.js +34 -0
  14. package/dist/ra-core/src/auth/types.d.ts +7 -0
  15. package/dist/ra-core/src/auth/types.js +5 -0
  16. package/dist/ra-core/src/auth/useAuthProvider.d.ts +10 -0
  17. package/dist/ra-core/src/auth/useAuthProvider.js +11 -0
  18. package/dist/ra-core/src/auth/useAuthState.d.ts +48 -0
  19. package/dist/ra-core/src/auth/useAuthState.js +171 -0
  20. package/dist/ra-core/src/auth/useAuthenticated.d.ts +36 -0
  21. package/dist/ra-core/src/auth/useAuthenticated.js +34 -0
  22. package/dist/ra-core/src/auth/useCanAccess.d.ts +56 -0
  23. package/dist/ra-core/src/auth/useCanAccess.js +108 -0
  24. package/dist/ra-core/src/auth/useCanAccessCallback.d.ts +39 -0
  25. package/dist/ra-core/src/auth/useCanAccessCallback.js +45 -0
  26. package/dist/ra-core/src/auth/useCanAccessResources.d.ts +67 -0
  27. package/dist/ra-core/src/auth/useCanAccessResources.js +92 -0
  28. package/dist/ra-core/src/auth/useCheckAuth.d.ts +48 -0
  29. package/dist/ra-core/src/auth/useCheckAuth.js +76 -0
  30. package/dist/ra-core/src/auth/useGetIdentity.d.ts +41 -0
  31. package/dist/ra-core/src/auth/useGetIdentity.js +86 -0
  32. package/dist/ra-core/src/auth/useGetPermissions.d.ts +41 -0
  33. package/dist/ra-core/src/auth/useGetPermissions.js +47 -0
  34. package/dist/ra-core/src/auth/useHandleAuthCallback.d.ts +20 -0
  35. package/dist/ra-core/src/auth/useHandleAuthCallback.js +83 -0
  36. package/dist/ra-core/src/auth/useIsAuthPending.d.ts +13 -0
  37. package/dist/ra-core/src/auth/useIsAuthPending.js +30 -0
  38. package/dist/ra-core/src/auth/useLogin.d.ts +34 -0
  39. package/dist/ra-core/src/auth/useLogin.js +78 -0
  40. package/dist/ra-core/src/auth/useLogout.d.ts +31 -0
  41. package/dist/ra-core/src/auth/useLogout.js +117 -0
  42. package/dist/ra-core/src/auth/useLogoutIfAccessDenied.d.ts +42 -0
  43. package/dist/ra-core/src/auth/useLogoutIfAccessDenied.js +111 -0
  44. package/dist/ra-core/src/auth/usePermissions.d.ts +41 -0
  45. package/dist/ra-core/src/auth/usePermissions.js +123 -0
  46. package/dist/ra-core/src/controller/button/index.d.ts +7 -0
  47. package/dist/ra-core/src/controller/button/index.js +7 -0
  48. package/dist/ra-core/src/controller/button/useBulkDeleteController.d.ts +14 -0
  49. package/dist/ra-core/src/controller/button/useBulkDeleteController.js +66 -0
  50. package/dist/ra-core/src/controller/create/index.d.ts +6 -0
  51. package/dist/ra-core/src/controller/create/index.js +6 -0
  52. package/dist/ra-core/src/controller/create/useCreateController.d.ts +50 -0
  53. package/dist/ra-core/src/controller/create/useCreateController.js +149 -0
  54. package/dist/ra-core/src/controller/edit/index.d.ts +6 -0
  55. package/dist/ra-core/src/controller/edit/index.js +6 -0
  56. package/dist/ra-core/src/controller/edit/useEditController.d.ts +72 -0
  57. package/dist/ra-core/src/controller/edit/useEditController.js +206 -0
  58. package/dist/ra-core/src/controller/field/index.d.ts +12 -0
  59. package/dist/ra-core/src/controller/field/index.js +12 -0
  60. package/dist/ra-core/src/controller/field/sanitizeFieldRestProps.d.ts +1 -0
  61. package/dist/ra-core/src/controller/field/sanitizeFieldRestProps.js +1 -0
  62. package/dist/ra-core/src/controller/field/types.d.ts +28 -0
  63. package/dist/ra-core/src/controller/field/types.js +1 -0
  64. package/dist/ra-core/src/controller/field/useReferenceArrayFieldController.d.ts +39 -0
  65. package/dist/ra-core/src/controller/field/useReferenceArrayFieldController.js +82 -0
  66. package/dist/ra-core/src/controller/field/useReferenceFieldController.d.ts +14 -0
  67. package/dist/ra-core/src/controller/field/useReferenceFieldController.js +31 -0
  68. package/dist/ra-core/src/controller/field/useReferenceManyFieldController.d.ts +49 -0
  69. package/dist/ra-core/src/controller/field/useReferenceManyFieldController.js +264 -0
  70. package/dist/ra-core/src/controller/index.d.ts +17 -0
  71. package/dist/ra-core/src/controller/index.js +16 -0
  72. package/dist/ra-core/src/controller/input/ArrayInputContext.d.ts +9 -0
  73. package/dist/ra-core/src/controller/input/ArrayInputContext.js +8 -0
  74. package/dist/ra-core/src/controller/input/SimpleFormIteratorContext.d.ts +15 -0
  75. package/dist/ra-core/src/controller/input/SimpleFormIteratorContext.js +8 -0
  76. package/dist/ra-core/src/controller/input/SimpleFormIteratorItemContext.d.ts +13 -0
  77. package/dist/ra-core/src/controller/input/SimpleFormIteratorItemContext.js +8 -0
  78. package/dist/ra-core/src/controller/input/index.d.ts +17 -0
  79. package/dist/ra-core/src/controller/input/index.js +17 -0
  80. package/dist/ra-core/src/controller/input/referenceDataStatus.d.ts +32 -0
  81. package/dist/ra-core/src/controller/input/referenceDataStatus.js +74 -0
  82. package/dist/ra-core/src/controller/input/sanitizeInputRestProps.d.ts +1 -0
  83. package/dist/ra-core/src/controller/input/sanitizeInputRestProps.js +1 -0
  84. package/dist/ra-core/src/controller/input/types.d.ts +3 -0
  85. package/dist/ra-core/src/controller/input/types.js +1 -0
  86. package/dist/ra-core/src/controller/input/useArrayInput.d.ts +8 -0
  87. package/dist/ra-core/src/controller/input/useArrayInput.js +29 -0
  88. package/dist/ra-core/src/controller/input/useGetArrayInputNewItemDefaults.d.ts +3 -0
  89. package/dist/ra-core/src/controller/input/useGetArrayInputNewItemDefaults.js +37 -0
  90. package/dist/ra-core/src/controller/input/useReferenceArrayInputController.d.ts +48 -0
  91. package/dist/ra-core/src/controller/input/useReferenceArrayInputController.js +137 -0
  92. package/dist/ra-core/src/controller/input/useReferenceInputController.d.ts +54 -0
  93. package/dist/ra-core/src/controller/input/useReferenceInputController.js +208 -0
  94. package/dist/ra-core/src/controller/input/useReferenceParams.d.ts +106 -0
  95. package/dist/ra-core/src/controller/input/useReferenceParams.js +226 -0
  96. package/dist/ra-core/src/controller/input/useSimpleFormIterator.d.ts +7 -0
  97. package/dist/ra-core/src/controller/input/useSimpleFormIterator.js +15 -0
  98. package/dist/ra-core/src/controller/input/useSimpleFormIteratorItem.d.ts +7 -0
  99. package/dist/ra-core/src/controller/input/useSimpleFormIteratorItem.js +15 -0
  100. package/dist/ra-core/src/controller/list/InfinitePaginationContext.d.ts +25 -0
  101. package/dist/ra-core/src/controller/list/InfinitePaginationContext.js +32 -0
  102. package/dist/ra-core/src/controller/list/index.d.ts +30 -0
  103. package/dist/ra-core/src/controller/list/index.js +30 -0
  104. package/dist/ra-core/src/controller/list/queryReducer.d.ts +45 -0
  105. package/dist/ra-core/src/controller/list/queryReducer.js +85 -0
  106. package/dist/ra-core/src/controller/list/useFilterContext.d.ts +2 -0
  107. package/dist/ra-core/src/controller/list/useFilterContext.js +5 -0
  108. package/dist/ra-core/src/controller/list/useInfiniteListController.d.ts +44 -0
  109. package/dist/ra-core/src/controller/list/useInfiniteListController.js +175 -0
  110. package/dist/ra-core/src/controller/list/useInfinitePaginationContext.d.ts +16 -0
  111. package/dist/ra-core/src/controller/list/useInfinitePaginationContext.js +17 -0
  112. package/dist/ra-core/src/controller/list/useList.d.ts +55 -0
  113. package/dist/ra-core/src/controller/list/useList.js +223 -0
  114. package/dist/ra-core/src/controller/list/useListContext.d.ts +59 -0
  115. package/dist/ra-core/src/controller/list/useListContext.js +65 -0
  116. package/dist/ra-core/src/controller/list/useListContextWithProps.d.ts +44 -0
  117. package/dist/ra-core/src/controller/list/useListContextWithProps.js +84 -0
  118. package/dist/ra-core/src/controller/list/useListController.d.ts +296 -0
  119. package/dist/ra-core/src/controller/list/useListController.js +234 -0
  120. package/dist/ra-core/src/controller/list/useListFilterContext.d.ts +11 -0
  121. package/dist/ra-core/src/controller/list/useListFilterContext.js +18 -0
  122. package/dist/ra-core/src/controller/list/useListPaginationContext.d.ts +12 -0
  123. package/dist/ra-core/src/controller/list/useListPaginationContext.js +19 -0
  124. package/dist/ra-core/src/controller/list/useListParams.d.ts +116 -0
  125. package/dist/ra-core/src/controller/list/useListParams.js +281 -0
  126. package/dist/ra-core/src/controller/list/useListSortContext.d.ts +12 -0
  127. package/dist/ra-core/src/controller/list/useListSortContext.js +19 -0
  128. package/dist/ra-core/src/controller/list/useRecordSelection.d.ts +32 -0
  129. package/dist/ra-core/src/controller/list/useRecordSelection.js +93 -0
  130. package/dist/ra-core/src/controller/list/useSavedQueries.d.ts +14 -0
  131. package/dist/ra-core/src/controller/list/useSavedQueries.js +29 -0
  132. package/dist/ra-core/src/controller/list/useUnselect.d.ts +10 -0
  133. package/dist/ra-core/src/controller/list/useUnselect.js +18 -0
  134. package/dist/ra-core/src/controller/list/useUnselectAll.d.ts +9 -0
  135. package/dist/ra-core/src/controller/list/useUnselectAll.js +18 -0
  136. package/dist/ra-core/src/controller/record/index.d.ts +5 -0
  137. package/dist/ra-core/src/controller/record/index.js +5 -0
  138. package/dist/ra-core/src/controller/record/useRecordContext.d.ts +34 -0
  139. package/dist/ra-core/src/controller/record/useRecordContext.js +36 -0
  140. package/dist/ra-core/src/controller/saveContext/SaveContext.d.ts +20 -0
  141. package/dist/ra-core/src/controller/saveContext/SaveContext.js +2 -0
  142. package/dist/ra-core/src/controller/saveContext/index.d.ts +6 -0
  143. package/dist/ra-core/src/controller/saveContext/index.js +6 -0
  144. package/dist/ra-core/src/controller/saveContext/useMutationMiddlewares.d.ts +39 -0
  145. package/dist/ra-core/src/controller/saveContext/useMutationMiddlewares.js +79 -0
  146. package/dist/ra-core/src/controller/saveContext/usePickSaveContext.d.ts +5 -0
  147. package/dist/ra-core/src/controller/saveContext/usePickSaveContext.js +25 -0
  148. package/dist/ra-core/src/controller/saveContext/useRegisterMutationMiddleware.d.ts +6 -0
  149. package/dist/ra-core/src/controller/saveContext/useRegisterMutationMiddleware.js +18 -0
  150. package/dist/ra-core/src/controller/saveContext/useSaveContext.d.ts +14 -0
  151. package/dist/ra-core/src/controller/saveContext/useSaveContext.js +17 -0
  152. package/dist/ra-core/src/controller/show/index.d.ts +6 -0
  153. package/dist/ra-core/src/controller/show/index.js +6 -0
  154. package/dist/ra-core/src/controller/show/useShowController.d.ts +75 -0
  155. package/dist/ra-core/src/controller/show/useShowController.js +110 -0
  156. package/dist/ra-core/src/controller/useFilterState.d.ts +46 -0
  157. package/dist/ra-core/src/controller/useFilterState.js +70 -0
  158. package/dist/ra-core/src/controller/usePaginationState.d.ts +33 -0
  159. package/dist/ra-core/src/controller/usePaginationState.js +45 -0
  160. package/dist/ra-core/src/controller/usePrevNextController.d.ts +127 -0
  161. package/dist/ra-core/src/controller/usePrevNextController.js +215 -0
  162. package/dist/ra-core/src/controller/useReference.d.ts +49 -0
  163. package/dist/ra-core/src/controller/useReference.js +42 -0
  164. package/dist/ra-core/src/controller/useSortState.d.ts +61 -0
  165. package/dist/ra-core/src/controller/useSortState.js +96 -0
  166. package/dist/ra-core/src/core/DefaultTitleContext.d.ts +15 -0
  167. package/dist/ra-core/src/core/DefaultTitleContext.js +15 -0
  168. package/dist/ra-core/src/core/HasDashboardContext.d.ts +21 -0
  169. package/dist/ra-core/src/core/HasDashboardContext.js +22 -0
  170. package/dist/ra-core/src/core/ResourceContext.d.ts +19 -0
  171. package/dist/ra-core/src/core/ResourceContext.js +19 -0
  172. package/dist/ra-core/src/core/UserMenuContext.d.ts +34 -0
  173. package/dist/ra-core/src/core/UserMenuContext.js +28 -0
  174. package/dist/ra-core/src/core/index.d.ts +27 -0
  175. package/dist/ra-core/src/core/index.js +27 -0
  176. package/dist/ra-core/src/core/useGetRecordRepresentation.d.ts +13 -0
  177. package/dist/ra-core/src/core/useGetRecordRepresentation.js +44 -0
  178. package/dist/ra-core/src/core/useGetResourceLabel.d.ts +22 -0
  179. package/dist/ra-core/src/core/useGetResourceLabel.js +42 -0
  180. package/dist/ra-core/src/core/useIsOffline.d.ts +7 -0
  181. package/dist/ra-core/src/core/useIsOffline.js +18 -0
  182. package/dist/ra-core/src/core/useResourceContext.d.ts +36 -0
  183. package/dist/ra-core/src/core/useResourceContext.js +38 -0
  184. package/dist/ra-core/src/core/useResourceDefinition.d.ts +31 -0
  185. package/dist/ra-core/src/core/useResourceDefinition.js +48 -0
  186. package/dist/ra-core/src/core/useResourceDefinitionContext.d.ts +1 -0
  187. package/dist/ra-core/src/core/useResourceDefinitionContext.js +3 -0
  188. package/dist/ra-core/src/core/useResourceDefinitions.d.ts +21 -0
  189. package/dist/ra-core/src/core/useResourceDefinitions.js +20 -0
  190. package/dist/ra-core/src/core/useUserMenu.d.ts +28 -0
  191. package/dist/ra-core/src/core/useUserMenu.js +30 -0
  192. package/dist/ra-core/src/core/useWrappedSource.d.ts +11 -0
  193. package/dist/ra-core/src/core/useWrappedSource.js +15 -0
  194. package/dist/ra-core/src/dataProvider/DataProviderContext.d.ts +3 -0
  195. package/dist/ra-core/src/dataProvider/DataProviderContext.js +4 -0
  196. package/dist/ra-core/src/dataProvider/HttpError.d.ts +6 -0
  197. package/dist/ra-core/src/dataProvider/HttpError.js +19 -0
  198. package/dist/ra-core/src/dataProvider/combineDataProviders.d.ts +21 -0
  199. package/dist/ra-core/src/dataProvider/combineDataProviders.js +32 -0
  200. package/dist/ra-core/src/dataProvider/convertLegacyDataProvider.d.ts +12 -0
  201. package/dist/ra-core/src/dataProvider/convertLegacyDataProvider.js +40 -0
  202. package/dist/ra-core/src/dataProvider/dataFetchActions.d.ts +15 -0
  203. package/dist/ra-core/src/dataProvider/dataFetchActions.js +49 -0
  204. package/dist/ra-core/src/dataProvider/defaultDataProvider.d.ts +2 -0
  205. package/dist/ra-core/src/dataProvider/defaultDataProvider.js +12 -0
  206. package/dist/ra-core/src/dataProvider/fetch.d.ts +32 -0
  207. package/dist/ra-core/src/dataProvider/fetch.js +78 -0
  208. package/dist/ra-core/src/dataProvider/index.d.ts +34 -0
  209. package/dist/ra-core/src/dataProvider/index.js +33 -0
  210. package/dist/ra-core/src/dataProvider/populateQueryCache.d.ts +22 -0
  211. package/dist/ra-core/src/dataProvider/populateQueryCache.js +30 -0
  212. package/dist/ra-core/src/dataProvider/testDataProvider.d.ts +2 -0
  213. package/dist/ra-core/src/dataProvider/testDataProvider.js +41 -0
  214. package/dist/ra-core/src/dataProvider/undo/index.d.ts +6 -0
  215. package/dist/ra-core/src/dataProvider/undo/index.js +6 -0
  216. package/dist/ra-core/src/dataProvider/undo/types.d.ts +3 -0
  217. package/dist/ra-core/src/dataProvider/undo/types.js +1 -0
  218. package/dist/ra-core/src/dataProvider/undoableEventEmitter.d.ts +3 -0
  219. package/dist/ra-core/src/dataProvider/undoableEventEmitter.js +2 -0
  220. package/dist/ra-core/src/dataProvider/useCreate.d.ts +89 -0
  221. package/dist/ra-core/src/dataProvider/useCreate.js +155 -0
  222. package/dist/ra-core/src/dataProvider/useDataProvider.d.ts +2 -0
  223. package/dist/ra-core/src/dataProvider/useDataProvider.js +140 -0
  224. package/dist/ra-core/src/dataProvider/useDelete.d.ts +83 -0
  225. package/dist/ra-core/src/dataProvider/useDelete.js +171 -0
  226. package/dist/ra-core/src/dataProvider/useDeleteMany.d.ts +81 -0
  227. package/dist/ra-core/src/dataProvider/useDeleteMany.js +193 -0
  228. package/dist/ra-core/src/dataProvider/useGetList.d.ts +58 -0
  229. package/dist/ra-core/src/dataProvider/useGetList.js +131 -0
  230. package/dist/ra-core/src/dataProvider/useGetMany.d.ts +49 -0
  231. package/dist/ra-core/src/dataProvider/useGetMany.js +143 -0
  232. package/dist/ra-core/src/dataProvider/useGetManyAggregate.d.ts +62 -0
  233. package/dist/ra-core/src/dataProvider/useGetManyAggregate.js +295 -0
  234. package/dist/ra-core/src/dataProvider/useGetManyReference.d.ts +62 -0
  235. package/dist/ra-core/src/dataProvider/useGetManyReference.js +117 -0
  236. package/dist/ra-core/src/dataProvider/useGetOne.d.ts +48 -0
  237. package/dist/ra-core/src/dataProvider/useGetOne.js +94 -0
  238. package/dist/ra-core/src/dataProvider/useGetRecordId.d.ts +14 -0
  239. package/dist/ra-core/src/dataProvider/useGetRecordId.js +22 -0
  240. package/dist/ra-core/src/dataProvider/useInfiniteGetList.d.ts +64 -0
  241. package/dist/ra-core/src/dataProvider/useInfiniteGetList.js +177 -0
  242. package/dist/ra-core/src/dataProvider/useIsDataLoaded.d.ts +13 -0
  243. package/dist/ra-core/src/dataProvider/useIsDataLoaded.js +35 -0
  244. package/dist/ra-core/src/dataProvider/useLoading.d.ts +12 -0
  245. package/dist/ra-core/src/dataProvider/useLoading.js +41 -0
  246. package/dist/ra-core/src/dataProvider/useMutationWithMutationMode.d.ts +51 -0
  247. package/dist/ra-core/src/dataProvider/useMutationWithMutationMode.js +238 -0
  248. package/dist/ra-core/src/dataProvider/useRefresh.d.ts +14 -0
  249. package/dist/ra-core/src/dataProvider/useRefresh.js +21 -0
  250. package/dist/ra-core/src/dataProvider/useUpdate.d.ts +89 -0
  251. package/dist/ra-core/src/dataProvider/useUpdate.js +183 -0
  252. package/dist/ra-core/src/dataProvider/useUpdateMany.d.ts +81 -0
  253. package/dist/ra-core/src/dataProvider/useUpdateMany.js +171 -0
  254. package/dist/ra-core/src/dataProvider/validateResponseFormat.d.ts +5 -0
  255. package/dist/ra-core/src/dataProvider/validateResponseFormat.js +35 -0
  256. package/dist/ra-core/src/dataProvider/withLifecycleCallbacks.d.ts +162 -0
  257. package/dist/ra-core/src/dataProvider/withLifecycleCallbacks.js +377 -0
  258. package/dist/ra-core/src/dataTable/DataTableCallbacksContext.d.ts +18 -0
  259. package/dist/ra-core/src/dataTable/DataTableCallbacksContext.js +3 -0
  260. package/dist/ra-core/src/dataTable/DataTableColumnFilterContext.d.ts +2 -0
  261. package/dist/ra-core/src/dataTable/DataTableColumnFilterContext.js +3 -0
  262. package/dist/ra-core/src/dataTable/DataTableColumnRankContext.d.ts +2 -0
  263. package/dist/ra-core/src/dataTable/DataTableColumnRankContext.js +3 -0
  264. package/dist/ra-core/src/dataTable/DataTableConfigContext.d.ts +22 -0
  265. package/dist/ra-core/src/dataTable/DataTableConfigContext.js +7 -0
  266. package/dist/ra-core/src/dataTable/DataTableDataContext.d.ts +4 -0
  267. package/dist/ra-core/src/dataTable/DataTableDataContext.js +3 -0
  268. package/dist/ra-core/src/dataTable/DataTableRenderContext.d.ts +3 -0
  269. package/dist/ra-core/src/dataTable/DataTableRenderContext.js +3 -0
  270. package/dist/ra-core/src/dataTable/DataTableSelectedIdsContext.d.ts +3 -0
  271. package/dist/ra-core/src/dataTable/DataTableSelectedIdsContext.js +3 -0
  272. package/dist/ra-core/src/dataTable/DataTableSortContext.d.ts +3 -0
  273. package/dist/ra-core/src/dataTable/DataTableSortContext.js +3 -0
  274. package/dist/ra-core/src/dataTable/DataTableStoreContext.d.ts +8 -0
  275. package/dist/ra-core/src/dataTable/DataTableStoreContext.js +6 -0
  276. package/dist/ra-core/src/dataTable/index.d.ts +11 -0
  277. package/dist/ra-core/src/dataTable/index.js +11 -0
  278. package/dist/ra-core/src/dataTable/types.d.ts +2 -0
  279. package/dist/ra-core/src/dataTable/types.js +1 -0
  280. package/dist/ra-core/src/export/ExporterContext.d.ts +2 -0
  281. package/dist/ra-core/src/export/ExporterContext.js +4 -0
  282. package/dist/ra-core/src/export/defaultExporter.d.ts +2 -0
  283. package/dist/ra-core/src/export/defaultExporter.js +3 -0
  284. package/dist/ra-core/src/export/downloadCSV.d.ts +1 -0
  285. package/dist/ra-core/src/export/downloadCSV.js +17 -0
  286. package/dist/ra-core/src/export/fetchRelatedRecords.d.ts +14 -0
  287. package/dist/ra-core/src/export/fetchRelatedRecords.js +19 -0
  288. package/dist/ra-core/src/export/getRelatedIds.d.ts +24 -0
  289. package/dist/ra-core/src/export/getRelatedIds.js +26 -0
  290. package/dist/ra-core/src/export/index.d.ts +5 -0
  291. package/dist/ra-core/src/export/index.js +5 -0
  292. package/dist/ra-core/src/export/useBulkExport.d.ts +11 -0
  293. package/dist/ra-core/src/export/useBulkExport.js +30 -0
  294. package/dist/ra-core/src/form/WarnWhenUnsavedChanges.d.ts +5 -0
  295. package/dist/ra-core/src/form/WarnWhenUnsavedChanges.js +5 -0
  296. package/dist/ra-core/src/form/choices/ChoicesContext.d.ts +65 -0
  297. package/dist/ra-core/src/form/choices/ChoicesContext.js +7 -0
  298. package/dist/ra-core/src/form/choices/index.d.ts +4 -0
  299. package/dist/ra-core/src/form/choices/index.js +4 -0
  300. package/dist/ra-core/src/form/choices/useChoicesContext.d.ts +5 -0
  301. package/dist/ra-core/src/form/choices/useChoicesContext.js +62 -0
  302. package/dist/ra-core/src/form/getFormInitialValues.d.ts +8 -0
  303. package/dist/ra-core/src/form/getFormInitialValues.js +14 -0
  304. package/dist/ra-core/src/form/groups/FormGroupContext.d.ts +9 -0
  305. package/dist/ra-core/src/form/groups/FormGroupContext.js +9 -0
  306. package/dist/ra-core/src/form/groups/index.d.ts +6 -0
  307. package/dist/ra-core/src/form/groups/index.js +6 -0
  308. package/dist/ra-core/src/form/groups/useFormGroup.d.ts +67 -0
  309. package/dist/ra-core/src/form/groups/useFormGroup.js +146 -0
  310. package/dist/ra-core/src/form/groups/useFormGroupContext.d.ts +4 -0
  311. package/dist/ra-core/src/form/groups/useFormGroupContext.js +9 -0
  312. package/dist/ra-core/src/form/groups/useFormGroups.d.ts +4 -0
  313. package/dist/ra-core/src/form/groups/useFormGroups.js +9 -0
  314. package/dist/ra-core/src/form/index.d.ts +14 -0
  315. package/dist/ra-core/src/form/index.js +14 -0
  316. package/dist/ra-core/src/form/sanitizeEmptyValues.d.ts +7 -0
  317. package/dist/ra-core/src/form/sanitizeEmptyValues.js +26 -0
  318. package/dist/ra-core/src/form/useApplyInputDefaultValues.d.ts +19 -0
  319. package/dist/ra-core/src/form/useApplyInputDefaultValues.js +71 -0
  320. package/dist/ra-core/src/form/useAugmentedForm.d.ts +32 -0
  321. package/dist/ra-core/src/form/useAugmentedForm.js +101 -0
  322. package/dist/ra-core/src/form/useFormIsDirty.d.ts +4 -0
  323. package/dist/ra-core/src/form/useFormIsDirty.js +39 -0
  324. package/dist/ra-core/src/form/useInput.d.ts +33 -0
  325. package/dist/ra-core/src/form/useInput.js +100 -0
  326. package/dist/ra-core/src/form/useRecordFromLocation.d.ts +22 -0
  327. package/dist/ra-core/src/form/useRecordFromLocation.js +59 -0
  328. package/dist/ra-core/src/form/useSuggestions.d.ts +43 -0
  329. package/dist/ra-core/src/form/useSuggestions.js +186 -0
  330. package/dist/ra-core/src/form/validation/getSimpleValidationResolver.d.ts +31 -0
  331. package/dist/ra-core/src/form/validation/getSimpleValidationResolver.js +87 -0
  332. package/dist/ra-core/src/form/validation/index.d.ts +7 -0
  333. package/dist/ra-core/src/form/validation/index.js +7 -0
  334. package/dist/ra-core/src/form/validation/setSubmissionErrors.d.ts +21 -0
  335. package/dist/ra-core/src/form/validation/setSubmissionErrors.js +34 -0
  336. package/dist/ra-core/src/form/validation/useGetValidationErrorMessage.d.ts +26 -0
  337. package/dist/ra-core/src/form/validation/useGetValidationErrorMessage.js +35 -0
  338. package/dist/ra-core/src/form/validation/useNotifyIsFormInvalid.d.ts +9 -0
  339. package/dist/ra-core/src/form/validation/useNotifyIsFormInvalid.js +30 -0
  340. package/dist/ra-core/src/form/validation/useUnique.d.ts +57 -0
  341. package/dist/ra-core/src/form/validation/useUnique.js +107 -0
  342. package/dist/ra-core/src/form/validation/validate.d.ts +168 -0
  343. package/dist/ra-core/src/form/validation/validate.js +218 -0
  344. package/dist/ra-core/src/i18n/I18nContext.d.ts +3 -0
  345. package/dist/ra-core/src/i18n/I18nContext.js +11 -0
  346. package/dist/ra-core/src/i18n/TranslatableContext.d.ts +16 -0
  347. package/dist/ra-core/src/i18n/TranslatableContext.js +2 -0
  348. package/dist/ra-core/src/i18n/TranslationMessages.d.ts +221 -0
  349. package/dist/ra-core/src/i18n/TranslationMessages.js +1 -0
  350. package/dist/ra-core/src/i18n/TranslationUtils.d.ts +60 -0
  351. package/dist/ra-core/src/i18n/TranslationUtils.js +70 -0
  352. package/dist/ra-core/src/i18n/index.d.ts +20 -0
  353. package/dist/ra-core/src/i18n/index.js +20 -0
  354. package/dist/ra-core/src/i18n/substituteTokens.d.ts +8 -0
  355. package/dist/ra-core/src/i18n/substituteTokens.js +18 -0
  356. package/dist/ra-core/src/i18n/useI18nProvider.d.ts +12 -0
  357. package/dist/ra-core/src/i18n/useI18nProvider.js +14 -0
  358. package/dist/ra-core/src/i18n/useLocales.d.ts +31 -0
  359. package/dist/ra-core/src/i18n/useLocales.js +28 -0
  360. package/dist/ra-core/src/i18n/useResourceTranslation.d.ts +8 -0
  361. package/dist/ra-core/src/i18n/useResourceTranslation.js +18 -0
  362. package/dist/ra-core/src/i18n/useTranslatable.d.ts +29 -0
  363. package/dist/ra-core/src/i18n/useTranslatable.js +98 -0
  364. package/dist/ra-core/src/i18n/useTranslatableContext.d.ts +31 -0
  365. package/dist/ra-core/src/i18n/useTranslatableContext.js +38 -0
  366. package/dist/ra-core/src/i18n/useTranslate.d.ts +21 -0
  367. package/dist/ra-core/src/i18n/useTranslate.js +29 -0
  368. package/dist/ra-core/src/i18n/useTranslateLabel.d.ts +6 -0
  369. package/dist/ra-core/src/i18n/useTranslateLabel.js +26 -0
  370. package/dist/ra-core/src/index.d.ts +16 -0
  371. package/dist/ra-core/src/index.js +16 -0
  372. package/dist/ra-core/src/inference/InferredElement.d.ts +12 -0
  373. package/dist/ra-core/src/inference/InferredElement.js +40 -0
  374. package/dist/ra-core/src/inference/assertions.d.ts +26 -0
  375. package/dist/ra-core/src/inference/assertions.js +38 -0
  376. package/dist/ra-core/src/inference/getElementsFromRecords.d.ts +35 -0
  377. package/dist/ra-core/src/inference/getElementsFromRecords.js +39 -0
  378. package/dist/ra-core/src/inference/getValuesFromRecords.d.ts +28 -0
  379. package/dist/ra-core/src/inference/getValuesFromRecords.js +40 -0
  380. package/dist/ra-core/src/inference/index.d.ts +6 -0
  381. package/dist/ra-core/src/inference/index.js +6 -0
  382. package/dist/ra-core/src/inference/inferTypeFromValues.d.ts +21 -0
  383. package/dist/ra-core/src/inference/inferTypeFromValues.js +141 -0
  384. package/dist/ra-core/src/inference/types.d.ts +9 -0
  385. package/dist/ra-core/src/inference/types.js +1 -0
  386. package/dist/ra-core/src/notification/CloseNotificationContext.d.ts +2 -0
  387. package/dist/ra-core/src/notification/CloseNotificationContext.js +2 -0
  388. package/dist/ra-core/src/notification/NotificationContext.d.ts +37 -0
  389. package/dist/ra-core/src/notification/NotificationContext.js +35 -0
  390. package/dist/ra-core/src/notification/index.d.ts +9 -0
  391. package/dist/ra-core/src/notification/index.js +9 -0
  392. package/dist/ra-core/src/notification/types.d.ts +14 -0
  393. package/dist/ra-core/src/notification/types.js +1 -0
  394. package/dist/ra-core/src/notification/useCloseNotification.d.ts +1 -0
  395. package/dist/ra-core/src/notification/useCloseNotification.js +9 -0
  396. package/dist/ra-core/src/notification/useNotificationContext.d.ts +1 -0
  397. package/dist/ra-core/src/notification/useNotificationContext.js +3 -0
  398. package/dist/ra-core/src/notification/useNotify.d.ts +20 -0
  399. package/dist/ra-core/src/notification/useNotify.js +28 -0
  400. package/dist/ra-core/src/preferences/index.d.ts +7 -0
  401. package/dist/ra-core/src/preferences/index.js +7 -0
  402. package/dist/ra-core/src/preferences/usePreference.d.ts +18 -0
  403. package/dist/ra-core/src/preferences/usePreference.js +10 -0
  404. package/dist/ra-core/src/preferences/usePreferenceInput.d.ts +22 -0
  405. package/dist/ra-core/src/preferences/usePreferenceInput.js +43 -0
  406. package/dist/ra-core/src/preferences/usePreferencesEditor.d.ts +2 -0
  407. package/dist/ra-core/src/preferences/usePreferencesEditor.js +9 -0
  408. package/dist/ra-core/src/preferences/useSetInspectorTitle.d.ts +7 -0
  409. package/dist/ra-core/src/preferences/useSetInspectorTitle.js +19 -0
  410. package/dist/ra-core/src/routing/BasenameContext.d.ts +1 -0
  411. package/dist/ra-core/src/routing/BasenameContext.js +2 -0
  412. package/dist/ra-core/src/routing/RouterProvider.d.ts +163 -0
  413. package/dist/ra-core/src/routing/RouterProvider.js +1 -0
  414. package/dist/ra-core/src/routing/index.d.ts +28 -0
  415. package/dist/ra-core/src/routing/index.js +28 -0
  416. package/dist/ra-core/src/routing/types.d.ts +3 -0
  417. package/dist/ra-core/src/routing/types.js +1 -0
  418. package/dist/ra-core/src/routing/useBasename.d.ts +21 -0
  419. package/dist/ra-core/src/routing/useBasename.js +23 -0
  420. package/dist/ra-core/src/routing/useBlocker.d.ts +14 -0
  421. package/dist/ra-core/src/routing/useBlocker.js +17 -0
  422. package/dist/ra-core/src/routing/useCanBlock.d.ts +7 -0
  423. package/dist/ra-core/src/routing/useCanBlock.js +11 -0
  424. package/dist/ra-core/src/routing/useCreatePath.d.ts +42 -0
  425. package/dist/ra-core/src/routing/useCreatePath.js +69 -0
  426. package/dist/ra-core/src/routing/useGetPathForRecord.d.ts +42 -0
  427. package/dist/ra-core/src/routing/useGetPathForRecord.js +135 -0
  428. package/dist/ra-core/src/routing/useGetPathForRecordCallback.d.ts +6 -0
  429. package/dist/ra-core/src/routing/useGetPathForRecordCallback.js +82 -0
  430. package/dist/ra-core/src/routing/useInRouterContext.d.ts +11 -0
  431. package/dist/ra-core/src/routing/useInRouterContext.js +15 -0
  432. package/dist/ra-core/src/routing/useLocation.d.ts +10 -0
  433. package/dist/ra-core/src/routing/useLocation.js +13 -0
  434. package/dist/ra-core/src/routing/useMatch.d.ts +15 -0
  435. package/dist/ra-core/src/routing/useMatch.js +15 -0
  436. package/dist/ra-core/src/routing/useMatchPath.d.ts +17 -0
  437. package/dist/ra-core/src/routing/useMatchPath.js +17 -0
  438. package/dist/ra-core/src/routing/useNavigate.d.ts +12 -0
  439. package/dist/ra-core/src/routing/useNavigate.js +15 -0
  440. package/dist/ra-core/src/routing/useParams.d.ts +9 -0
  441. package/dist/ra-core/src/routing/useParams.js +13 -0
  442. package/dist/ra-core/src/routing/useRedirect.d.ts +30 -0
  443. package/dist/ra-core/src/routing/useRedirect.js +66 -0
  444. package/dist/ra-core/src/routing/useResetErrorBoundaryOnLocationChange.d.ts +7 -0
  445. package/dist/ra-core/src/routing/useResetErrorBoundaryOnLocationChange.js +17 -0
  446. package/dist/ra-core/src/routing/useRestoreScrollPosition.d.ts +40 -0
  447. package/dist/ra-core/src/routing/useRestoreScrollPosition.js +70 -0
  448. package/dist/ra-core/src/routing/useSplatPathBase.d.ts +13 -0
  449. package/dist/ra-core/src/routing/useSplatPathBase.js +21 -0
  450. package/dist/ra-core/src/store/index.d.ts +11 -0
  451. package/dist/ra-core/src/store/index.js +11 -0
  452. package/dist/ra-core/src/store/localStorageStore.d.ts +27 -0
  453. package/dist/ra-core/src/store/localStorageStore.js +198 -0
  454. package/dist/ra-core/src/store/types.d.ts +11 -0
  455. package/dist/ra-core/src/store/types.js +1 -0
  456. package/dist/ra-core/src/store/useRemoveFromStore.d.ts +17 -0
  457. package/dist/ra-core/src/store/useRemoveFromStore.js +29 -0
  458. package/dist/ra-core/src/store/useRemoveItemsFromStore.d.ts +17 -0
  459. package/dist/ra-core/src/store/useRemoveItemsFromStore.js +29 -0
  460. package/dist/ra-core/src/store/useResetStore.d.ts +17 -0
  461. package/dist/ra-core/src/store/useResetStore.js +21 -0
  462. package/dist/ra-core/src/store/useStore.d.ts +48 -0
  463. package/dist/ra-core/src/store/useStore.js +32 -0
  464. package/dist/ra-core/src/store/useStoreContext.d.ts +4 -0
  465. package/dist/ra-core/src/store/useStoreContext.js +6 -0
  466. package/dist/ra-core/src/test-ui/defaultI18nProvider.d.ts +2 -0
  467. package/dist/ra-core/src/test-ui/defaultI18nProvider.js +10 -0
  468. package/dist/ra-core/src/test-ui/index.d.ts +21 -0
  469. package/dist/ra-core/src/test-ui/index.js +21 -0
  470. package/dist/ra-core/src/types.d.ts +284 -0
  471. package/dist/ra-core/src/types.js +5 -0
  472. package/dist/ra-core/src/util/asyncDebounce.d.ts +7 -0
  473. package/dist/ra-core/src/util/asyncDebounce.js +29 -0
  474. package/dist/ra-core/src/util/escapePath.d.ts +11 -0
  475. package/dist/ra-core/src/util/escapePath.js +10 -0
  476. package/dist/ra-core/src/util/genericMemo.d.ts +5 -0
  477. package/dist/ra-core/src/util/genericMemo.js +14 -0
  478. package/dist/ra-core/src/util/getFieldLabelTranslationArgs.d.ts +22 -0
  479. package/dist/ra-core/src/util/getFieldLabelTranslationArgs.js +73 -0
  480. package/dist/ra-core/src/util/getMutationMode.d.ts +1 -0
  481. package/dist/ra-core/src/util/getMutationMode.js +13 -0
  482. package/dist/ra-core/src/util/hooks.d.ts +15 -0
  483. package/dist/ra-core/src/util/hooks.js +73 -0
  484. package/dist/ra-core/src/util/index.d.ts +20 -0
  485. package/dist/ra-core/src/util/index.js +19 -0
  486. package/dist/ra-core/src/util/mergeRefs.d.ts +2 -0
  487. package/dist/ra-core/src/util/mergeRefs.js +13 -0
  488. package/dist/ra-core/src/util/removeEmpty.d.ts +2 -0
  489. package/dist/ra-core/src/util/removeEmpty.js +16 -0
  490. package/dist/ra-core/src/util/removeKey.d.ts +2 -0
  491. package/dist/ra-core/src/util/removeKey.js +22 -0
  492. package/dist/ra-core/src/util/shallowEqual.d.ts +1 -0
  493. package/dist/ra-core/src/util/shallowEqual.js +29 -0
  494. package/dist/ra-core/src/util/useCheckForApplicationUpdate.d.ts +21 -0
  495. package/dist/ra-core/src/util/useCheckForApplicationUpdate.js +84 -0
  496. package/dist/ra-core/src/util/useDebouncedEvent.d.ts +8 -0
  497. package/dist/ra-core/src/util/useDebouncedEvent.js +28 -0
  498. package/dist/ra-core/src/util/useEvent.d.ts +7 -0
  499. package/dist/ra-core/src/util/useEvent.js +19 -0
  500. package/dist/ra-core/src/util/useFieldValue.d.ts +21 -0
  501. package/dist/ra-core/src/util/useFieldValue.js +27 -0
  502. package/dist/ra-core/src/util/useWhyDidYouUpdate.d.ts +12 -0
  503. package/dist/ra-core/src/util/useWhyDidYouUpdate.js +42 -0
  504. package/dist/ra-core/src/util/warning.d.ts +2 -0
  505. package/dist/ra-core/src/util/warning.js +5 -0
  506. package/dist/strato-faker-ecommerce/src/dataProvider.d.ts +2 -0
  507. package/dist/strato-faker-ecommerce/src/dataProvider.js +6 -0
  508. package/dist/strato-faker-ecommerce/src/generate.d.ts +8 -0
  509. package/dist/strato-faker-ecommerce/src/generate.js +148 -0
  510. package/dist/strato-faker-ecommerce/src/index.d.ts +3 -0
  511. package/dist/strato-faker-ecommerce/src/index.js +3 -0
  512. package/dist/strato-faker-ecommerce/src/types.d.ts +69 -0
  513. package/dist/strato-faker-ecommerce/src/types.js +1 -0
  514. package/dist/types.d.ts +1 -1
  515. package/package.json +5 -4
  516. package/src/dataProvider.ts +3 -3
  517. package/src/generate.test.ts +12 -12
  518. package/src/generate.ts +21 -14
  519. 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,5 @@
1
+ declare function validateResponseFormat(response: any, type: any, logger?: {
2
+ (...data: any[]): void;
3
+ (message?: any, ...optionalParams: any[]): void;
4
+ }): void;
5
+ export default validateResponseFormat;
@@ -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;