@strato-admin/faker-ecommerce 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +6 -5
  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,22 @@
1
+ import { RaRecord } from '../types';
2
+ import { RouterLocation } from '../routing';
3
+ /**
4
+ * A hook that returns the record to use to override the values in a form
5
+ * @param options The hook options
6
+ * @param options.searchSource The key in the location search to use as a source for the record. Its content should be a stringified JSON object.
7
+ * @param options.stateSource The key in the location state to use as a source for the record
8
+ * @returns The record to use to override the values in a form
9
+ */
10
+ export declare const useRecordFromLocation: (props?: UseRecordFromLocationOptions) => Partial<RaRecord<import("..").Identifier>> | null;
11
+ export type UseRecordFromLocationOptions = {
12
+ searchSource?: string;
13
+ stateSource?: string;
14
+ };
15
+ /**
16
+ * Get the initial record from the location, whether it comes from the location
17
+ * state or is serialized in the url search part.
18
+ */
19
+ export declare const getRecordFromLocation: ({ state, search }: RouterLocation, { searchSource, stateSource, }?: {
20
+ searchSource?: string;
21
+ stateSource?: string;
22
+ }) => Partial<RaRecord> | null;
@@ -0,0 +1,59 @@
1
+ import { useEffect, useRef, useState } from 'react';
2
+ import { parse } from 'query-string';
3
+ import isEqual from 'lodash/isEqual.js';
4
+ import { useLocation } from '../routing';
5
+ /**
6
+ * A hook that returns the record to use to override the values in a form
7
+ * @param options The hook options
8
+ * @param options.searchSource The key in the location search to use as a source for the record. Its content should be a stringified JSON object.
9
+ * @param options.stateSource The key in the location state to use as a source for the record
10
+ * @returns The record to use to override the values in a form
11
+ */
12
+ export const useRecordFromLocation = (props = {}) => {
13
+ const { searchSource, stateSource } = props;
14
+ const location = useLocation();
15
+ const [recordFromLocation, setRecordFromLocation] = useState(() => getRecordFromLocation(location, {
16
+ stateSource,
17
+ searchSource,
18
+ }));
19
+ // To avoid having the form resets when the location changes but the final record is the same
20
+ // This is needed for forms such as TabbedForm or WizardForm that may change the location for their sections
21
+ const previousRecordRef = useRef(recordFromLocation);
22
+ useEffect(() => {
23
+ const newRecordFromLocation = getRecordFromLocation(location, {
24
+ stateSource,
25
+ searchSource,
26
+ });
27
+ if (!isEqual(newRecordFromLocation, previousRecordRef.current)) {
28
+ previousRecordRef.current = newRecordFromLocation;
29
+ setRecordFromLocation(newRecordFromLocation);
30
+ }
31
+ }, [location, stateSource, searchSource]);
32
+ return recordFromLocation;
33
+ };
34
+ /**
35
+ * Get the initial record from the location, whether it comes from the location
36
+ * state or is serialized in the url search part.
37
+ */
38
+ export const getRecordFromLocation = ({ state, search }, { searchSource = 'source', stateSource = 'record', } = {}) => {
39
+ if (state && state[stateSource]) {
40
+ return state[stateSource];
41
+ }
42
+ if (search) {
43
+ try {
44
+ const searchParams = parse(search);
45
+ const source = searchParams[searchSource];
46
+ if (source) {
47
+ if (Array.isArray(source)) {
48
+ console.error(`Failed to parse location ${searchSource} parameter '${search}'. To pre-fill some fields in the Create form, pass a stringified ${searchSource} parameter (e.g. '?${searchSource}={"title":"foo"}')`);
49
+ return null;
50
+ }
51
+ return JSON.parse(source);
52
+ }
53
+ }
54
+ catch (e) {
55
+ console.error(`Failed to parse location ${searchSource} parameter '${search}'. To pre-fill some fields in the Create form, pass a stringified ${searchSource} parameter (e.g. '?${searchSource}={"title":"foo"}')`);
56
+ }
57
+ }
58
+ return null;
59
+ };
@@ -0,0 +1,43 @@
1
+ import { ReactElement } from 'react';
2
+ import { UseChoicesOptions } from './choices/useChoices';
3
+ export declare const useSuggestions: ({ allowCreate, choices, createText, createValue, createHintValue, limitChoicesToValue, matchSuggestion, optionText, optionValue, selectedItem, suggestionLimit, translateChoice, }: UseSuggestionsOptions) => {
4
+ getChoiceText: any;
5
+ getChoiceValue: any;
6
+ getSuggestions: (filter: any) => any[];
7
+ };
8
+ export interface UseSuggestionsOptions extends UseChoicesOptions {
9
+ allowCreate?: boolean;
10
+ allowDuplicates?: boolean;
11
+ choices?: any[];
12
+ createText?: string;
13
+ limitChoicesToValue?: boolean;
14
+ matchSuggestion?: (filter: string, suggestion: any, exact?: boolean) => boolean;
15
+ suggestionLimit?: number;
16
+ selectedItem?: any | any[];
17
+ }
18
+ /**
19
+ * Get the suggestions to display after applying a fuzzy search on the available choices
20
+ *
21
+ * @example
22
+ *
23
+ * getSuggestions({
24
+ * choices: [{ id: 1, name: 'admin' }, { id: 2, name: 'publisher' }],
25
+ * optionText: 'name',
26
+ * optionValue: 'id',
27
+ * getSuggestionText: choice => choice[optionText],
28
+ * })('pub')
29
+ *
30
+ * // Will return [{ id: 2, name: 'publisher' }]
31
+ * getSuggestions({
32
+ * choices: [{ id: 1, name: 'admin' }, { id: 2, name: 'publisher' }],
33
+ * optionText: 'name',
34
+ * optionValue: 'id',
35
+ * getSuggestionText: choice => choice[optionText],
36
+ * })('pub')
37
+ *
38
+ * // Will return [{ id: 2, name: 'publisher' }]
39
+ */
40
+ export declare const getSuggestionsFactory: ({ allowCreate, choices, createText, createValue, optionText, optionValue, getChoiceText, getChoiceValue, limitChoicesToValue, matchSuggestion, selectedItem, suggestionLimit, }: UseSuggestionsOptions & {
41
+ getChoiceText: (choice: any) => string | ReactElement;
42
+ getChoiceValue: (choice: any) => string;
43
+ }) => (filter: any) => any[];
@@ -0,0 +1,186 @@
1
+ import { useCallback, isValidElement } from 'react';
2
+ import set from 'lodash/set.js';
3
+ import { useChoices, } from './choices/useChoices';
4
+ import { useTranslate } from '../i18n';
5
+ /*
6
+ * Returns helper functions for suggestions handling.
7
+ *
8
+ * @param allowDuplicates A boolean indicating whether a suggestion can be added several times
9
+ * @param choices An array of available choices
10
+ * @param limitChoicesToValue A boolean indicating whether the initial suggestions should be limited to the currently selected one(s)
11
+ * @param matchSuggestion Optional unless `optionText` is a React element. Function which check whether a choice matches a filter. Must return a boolean.
12
+ * @param optionText Either a string defining the property to use to get the choice text, a function or a React element
13
+ * @param optionValue The property to use to get the choice value
14
+ * @param selectedItem The currently selected item. Maybe an array of selected items
15
+ * @param suggestionLimit The maximum number of suggestions returned
16
+ * @param translateChoice A boolean indicating whether to option text should be translated
17
+ *
18
+ * @returns An object with helper functions:
19
+ * - getChoiceText: Returns the choice text or a React element
20
+ * - getChoiceValue: Returns the choice value
21
+ * - getSuggestions: A function taking a filter value (string) and returning the matching suggestions
22
+ */
23
+ export const useSuggestions = ({ allowCreate, choices, createText = "strato.action.create', createValue = '@@create', createHintValue = '@@ra-create-hint', limitChoicesToValue, matchSuggestion, optionText, optionValue, selectedItem, suggestionLimit = 0, translateChoice, }) => {
24
+ const translate = useTranslate();
25
+ const { getChoiceText, getChoiceValue } = useChoices({
26
+ optionText,
27
+ optionValue,
28
+ translateChoice,
29
+ createValue,
30
+ createHintValue,
31
+ });
32
+ // eslint-disable-next-line react-hooks/exhaustive-deps
33
+ const getSuggestions = useCallback(getSuggestionsFactory({
34
+ allowCreate,
35
+ choices,
36
+ createText,
37
+ createValue,
38
+ getChoiceText,
39
+ getChoiceValue,
40
+ limitChoicesToValue,
41
+ matchSuggestion,
42
+ optionText,
43
+ optionValue,
44
+ selectedItem,
45
+ suggestionLimit,
46
+ }), [
47
+ allowCreate,
48
+ choices,
49
+ createText,
50
+ createValue,
51
+ getChoiceText,
52
+ getChoiceValue,
53
+ limitChoicesToValue,
54
+ matchSuggestion,
55
+ optionText,
56
+ optionValue,
57
+ selectedItem,
58
+ suggestionLimit,
59
+ translate,
60
+ ]);
61
+ return {
62
+ getChoiceText,
63
+ getChoiceValue,
64
+ getSuggestions,
65
+ };
66
+ };
67
+ const escapeRegExp = value => value ? value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') : ''; // $& means the whole matched string
68
+ /**
69
+ * Default matcher implementation which check whether the suggestion text matches the filter.
70
+ */
71
+ const defaultMatchSuggestion = getChoiceText => (filter, suggestion, exact = false) => {
72
+ const suggestionText = getChoiceText(suggestion);
73
+ const isReactElement = isValidElement(suggestionText);
74
+ const regex = escapeRegExp(filter);
75
+ return isReactElement
76
+ ? false
77
+ : suggestionText &&
78
+ !!suggestionText.match(
79
+ // We must escape any RegExp reserved characters to avoid errors
80
+ // For example, the filter might contain * which must be escaped as \*
81
+ new RegExp(exact ? `^${regex}$` : regex, 'i'));
82
+ };
83
+ /**
84
+ * Get the suggestions to display after applying a fuzzy search on the available choices
85
+ *
86
+ * @example
87
+ *
88
+ * getSuggestions({
89
+ * choices: [{ id: 1, name: 'admin' }, { id: 2, name: 'publisher' }],
90
+ * optionText: 'name',
91
+ * optionValue: 'id',
92
+ * getSuggestionText: choice => choice[optionText],
93
+ * })('pub')
94
+ *
95
+ * // Will return [{ id: 2, name: 'publisher' }]
96
+ * getSuggestions({
97
+ * choices: [{ id: 1, name: 'admin' }, { id: 2, name: 'publisher' }],
98
+ * optionText: 'name',
99
+ * optionValue: 'id',
100
+ * getSuggestionText: choice => choice[optionText],
101
+ * })('pub')
102
+ *
103
+ * // Will return [{ id: 2, name: 'publisher' }]
104
+ */
105
+ export const getSuggestionsFactory = ({ allowCreate = false, choices = [], createText = "strato.action.create', createValue = '@@create', optionText = 'name', optionValue = 'id', getChoiceText, getChoiceValue, limitChoicesToValue = false, matchSuggestion = defaultMatchSuggestion(getChoiceText), selectedItem, suggestionLimit = 0, }) => filter => {
106
+ let suggestions = [];
107
+ // if an item is selected and matches the filter
108
+ if (selectedItem &&
109
+ !Array.isArray(selectedItem) &&
110
+ matchSuggestion(filter, selectedItem)) {
111
+ if (limitChoicesToValue) {
112
+ // display only the selected item
113
+ suggestions = choices.filter(choice => getChoiceValue(choice) === getChoiceValue(selectedItem));
114
+ }
115
+ else {
116
+ suggestions = [...choices];
117
+ }
118
+ }
119
+ else {
120
+ suggestions = choices.filter(choice => matchSuggestion(filter, choice) ||
121
+ (selectedItem != null &&
122
+ (!Array.isArray(selectedItem)
123
+ ? getChoiceValue(choice) ===
124
+ getChoiceValue(selectedItem)
125
+ : selectedItem.some(selected => getChoiceValue(choice) ===
126
+ getChoiceValue(selected)))));
127
+ }
128
+ suggestions = limitSuggestions(suggestions, suggestionLimit);
129
+ const hasExactMatch = suggestions.some(suggestion => matchSuggestion(filter, suggestion, true));
130
+ if (allowCreate) {
131
+ const filterIsSelectedItem =
132
+ // If the selectedItem is an array (for example AutocompleteArrayInput)
133
+ // we shouldn't try to match
134
+ !!selectedItem && !Array.isArray(selectedItem)
135
+ ? matchSuggestion(filter, selectedItem, true)
136
+ : false;
137
+ if (!hasExactMatch && !filterIsSelectedItem) {
138
+ suggestions.push(getSuggestion({
139
+ optionText,
140
+ optionValue,
141
+ text: createText,
142
+ value: createValue,
143
+ }));
144
+ }
145
+ }
146
+ // Only keep unique items. Necessary because we might have fetched
147
+ // the currently selected choice in addition of the possible choices
148
+ // that may also contain it
149
+ const result = suggestions.filter((suggestion, index) => suggestions.indexOf(suggestion) === index);
150
+ return result;
151
+ };
152
+ /**
153
+ * @example
154
+ *
155
+ * limitSuggestions(
156
+ * [{ id: 1, name: 'foo'}, { id: 2, name: 'bar' }],
157
+ * 1
158
+ * );
159
+ *
160
+ * // Will return [{ id: 1, name: 'foo' }]
161
+ *
162
+ * @param suggestions List of suggestions
163
+ * @param limit
164
+ */
165
+ const limitSuggestions = (suggestions, limit = 0) => Number.isInteger(limit) && limit > 0
166
+ ? suggestions.slice(0, limit)
167
+ : suggestions;
168
+ /**
169
+ * addSuggestion(
170
+ * [{ id: 1, name: 'foo'}, { id: 2, name: 'bar' }],
171
+ * );
172
+ *
173
+ * // Will return [{ id: null, name: '' }, { id: 1, name: 'foo' }, { id: 2, name: 'bar' }]
174
+ *
175
+ * @param suggestions List of suggestions
176
+ * @param options
177
+ * @param options.optionText
178
+ */
179
+ const getSuggestion = ({ optionText = 'name', optionValue = 'id', text = '', value = null, }) => {
180
+ const suggestion = {};
181
+ set(suggestion, optionValue, value);
182
+ if (typeof optionText === 'string') {
183
+ set(suggestion, optionText, text);
184
+ }
185
+ return suggestion;
186
+ };
@@ -0,0 +1,31 @@
1
+ import { FieldValues } from 'react-hook-form';
2
+ /**
3
+ * Convert a simple validation function that returns an object matching the form shape with errors
4
+ * to a validation resolver compatible with react-hook-form.
5
+ *
6
+ * @example
7
+ * const validate = (values: any) => {
8
+ * if (values.username == null || values.username.trim() === '') {
9
+ * return { username: 'Required' };
10
+ * }
11
+ * }
12
+ *
13
+ * const validationResolver = getSimpleValidationResolver(validate);
14
+ *
15
+ * const UserForm = () => (
16
+ * <Form
17
+ * defaultValues={{ username: 'John' }}
18
+ * validationResolver={validationResolver}
19
+ * >
20
+ * <TextField source="username" />
21
+ * </Form>
22
+ * );
23
+ */
24
+ export declare const getSimpleValidationResolver: (validate: ValidateForm) => (data: FieldValues) => Promise<{
25
+ values: FieldValues;
26
+ errors: {};
27
+ } | {
28
+ values: {};
29
+ errors: any;
30
+ }>;
31
+ export type ValidateForm = (data: FieldValues) => FieldValues | Promise<FieldValues>;
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Convert a simple validation function that returns an object matching the form shape with errors
3
+ * to a validation resolver compatible with react-hook-form.
4
+ *
5
+ * @example
6
+ * const validate = (values: any) => {
7
+ * if (values.username == null || values.username.trim() === '') {
8
+ * return { username: 'Required' };
9
+ * }
10
+ * }
11
+ *
12
+ * const validationResolver = getSimpleValidationResolver(validate);
13
+ *
14
+ * const UserForm = () => (
15
+ * <Form
16
+ * defaultValues={{ username: 'John' }}
17
+ * validationResolver={validationResolver}
18
+ * >
19
+ * <TextField source="username" />
20
+ * </Form>
21
+ * );
22
+ */
23
+ export const getSimpleValidationResolver = (validate) => async (data) => {
24
+ const errors = await validate(data);
25
+ // If there are no errors, early return the form values
26
+ if (!errors || isEmptyObject(errors)) {
27
+ return { values: data, errors: {} };
28
+ }
29
+ // Else, we return an error object shaped like errors but having for each leaf
30
+ // `type: 'manual'` and a `message` prop like react-hook-form expects it
31
+ const transformedErrors = transformErrorFields(errors);
32
+ // Sometimes we still need to transform the error object to realize there are actually
33
+ // no errors in it.
34
+ // e.g. with an ArrayInput we can get something like: `{backlinks: [{}, {}]}`
35
+ // If, after transformation, there are no errors, we return the form values
36
+ if (!transformedErrors || isEmptyObject(transformedErrors)) {
37
+ return { values: data, errors: {} };
38
+ }
39
+ // Else return the errors and no values
40
+ return {
41
+ values: {},
42
+ errors: transformedErrors,
43
+ };
44
+ };
45
+ const transformErrorFields = (error) => {
46
+ return Object.keys(error).reduce((acc, field) => {
47
+ // Handle arrays
48
+ if (Array.isArray(error[field])) {
49
+ let arrayHasErrors = false;
50
+ const transformedArrayErrors = error[field].map(item => {
51
+ if (!isEmptyObject(item)) {
52
+ arrayHasErrors = true;
53
+ }
54
+ return transformErrorFields(item);
55
+ });
56
+ if (!arrayHasErrors) {
57
+ return acc;
58
+ }
59
+ return {
60
+ ...acc,
61
+ [field]: transformedArrayErrors,
62
+ };
63
+ }
64
+ // Handle objects
65
+ if (isEmptyObject(error[field])) {
66
+ return acc;
67
+ }
68
+ if (typeof error[field] === 'object' &&
69
+ !isRaTranslationObj(error[field])) {
70
+ return {
71
+ ...acc,
72
+ [field]: transformErrorFields(error[field]),
73
+ };
74
+ }
75
+ // Handle leaf (either primary type or RaTranslationObj)
76
+ return {
77
+ ...acc,
78
+ [field]: addTypeAndMessage(error[field]),
79
+ };
80
+ }, {});
81
+ };
82
+ const addTypeAndMessage = (error) => ({
83
+ type: 'manual',
84
+ message: isRaTranslationObj(error) ? error : { message: error },
85
+ });
86
+ const isRaTranslationObj = (obj) => Object.keys(obj).includes('message') && Object.keys(obj).includes('args');
87
+ const isEmptyObject = (obj) => obj == null || Object.getOwnPropertyNames(obj).length === 0;
@@ -0,0 +1,7 @@
1
+ export * from './getSimpleValidationResolver';
2
+ export * from './setSubmissionErrors';
3
+ export * from './useGetValidationErrorMessage';
4
+ export * from './useNotifyIsFormInvalid';
5
+ export * from './useUnique';
6
+ export * from './validate';
7
+ export * from './ValidationError';
@@ -0,0 +1,7 @@
1
+ export * from './getSimpleValidationResolver';
2
+ export * from './setSubmissionErrors';
3
+ export * from './useGetValidationErrorMessage';
4
+ export * from './useNotifyIsFormInvalid';
5
+ export * from './useUnique';
6
+ export * from './validate';
7
+ export * from './ValidationError';
@@ -0,0 +1,21 @@
1
+ import { FieldValues, UseFormSetError } from 'react-hook-form';
2
+ /**
3
+ * This internal function is used to convert an object matching the form shape with errors to a
4
+ * format compatible with react-hook-form. It's used to handle submission errors. Only useful when
5
+ * you are implementing a custom form without leveraging our Form component.
6
+ *
7
+ * @example
8
+ * const MyForm = () => {
9
+ * const { register, handleSubmit, setError } = useForm();
10
+ * const onSubmit = data => {
11
+ * return saveAsync(data).catch(error => setSubmissionErrors(error.body.details));
12
+ * };
13
+ *
14
+ * return (
15
+ * <form onSubmit={handleSubmit(onSubmit)}>
16
+ * ...
17
+ * </form>
18
+ * );
19
+ * };
20
+ */
21
+ export declare const setSubmissionErrors: (errors: FieldValues, setError: UseFormSetError<FieldValues>) => void;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * This internal function is used to convert an object matching the form shape with errors to a
3
+ * format compatible with react-hook-form. It's used to handle submission errors. Only useful when
4
+ * you are implementing a custom form without leveraging our Form component.
5
+ *
6
+ * @example
7
+ * const MyForm = () => {
8
+ * const { register, handleSubmit, setError } = useForm();
9
+ * const onSubmit = data => {
10
+ * return saveAsync(data).catch(error => setSubmissionErrors(error.body.details));
11
+ * };
12
+ *
13
+ * return (
14
+ * <form onSubmit={handleSubmit(onSubmit)}>
15
+ * ...
16
+ * </form>
17
+ * );
18
+ * };
19
+ */
20
+ export const setSubmissionErrors = (errors, setError) => {
21
+ const setErrorFromObject = (errors, rootPath) => {
22
+ Object.entries(errors).forEach(([name, error]) => {
23
+ if (typeof error === 'object') {
24
+ setErrorFromObject(error, `${rootPath}${name}.`);
25
+ return;
26
+ }
27
+ setError(`${rootPath}${name}`, {
28
+ type: 'server',
29
+ message: error.toString(),
30
+ });
31
+ });
32
+ };
33
+ setErrorFromObject(errors, '');
34
+ };
@@ -0,0 +1,26 @@
1
+ import { ValidationErrorMessage } from './validate';
2
+ /**
3
+ * @deprecated
4
+ * This internal hook returns a function that can translate an error message.
5
+ * It handles simple string errors and those which have a message and args.
6
+ * Only useful if you are implementing custom inputs without leveraging our useInput hook.
7
+ *
8
+ * @example
9
+ * const MyInput = props => {
10
+ * const { field, fieldState } = useController(props);
11
+ * useEffect(() => {
12
+ * if (fieldState.error) {
13
+ * const errorMessage = useGetValidationErrorMessage(fieldState.error);
14
+ * alert(errorMessage);
15
+ * }
16
+ * }, [fieldState.error]);
17
+ *
18
+ * return (
19
+ * <input {...field} />
20
+ * );
21
+ * }
22
+ *
23
+ * @see ValidationErrorMessage
24
+ * @see ValidationErrorMessageWithArgs
25
+ */
26
+ export declare const useGetValidationErrorMessage: () => (error: ValidationErrorMessage) => string;
@@ -0,0 +1,35 @@
1
+ import { useTranslate } from '../../i18n';
2
+ /**
3
+ * @deprecated
4
+ * This internal hook returns a function that can translate an error message.
5
+ * It handles simple string errors and those which have a message and args.
6
+ * Only useful if you are implementing custom inputs without leveraging our useInput hook.
7
+ *
8
+ * @example
9
+ * const MyInput = props => {
10
+ * const { field, fieldState } = useController(props);
11
+ * useEffect(() => {
12
+ * if (fieldState.error) {
13
+ * const errorMessage = useGetValidationErrorMessage(fieldState.error);
14
+ * alert(errorMessage);
15
+ * }
16
+ * }, [fieldState.error]);
17
+ *
18
+ * return (
19
+ * <input {...field} />
20
+ * );
21
+ * }
22
+ *
23
+ * @see ValidationErrorMessage
24
+ * @see ValidationErrorMessageWithArgs
25
+ */
26
+ export const useGetValidationErrorMessage = () => {
27
+ const translate = useTranslate();
28
+ return (error) => {
29
+ if (error.message != null) {
30
+ const { message, args } = error;
31
+ return translate(message, { _: message, ...args });
32
+ }
33
+ return translate(error, { _: error });
34
+ };
35
+ };
@@ -0,0 +1,9 @@
1
+ import { Control } from 'react-hook-form';
2
+ /**
3
+ * This hook display an error message on submit in Form and SaveButton.
4
+ *
5
+ * We can't do the form validity check in the form submit handler
6
+ * as the form state may not have been updated yet when onSubmit validation mode is enabled
7
+ * or when the form hasn't been touched at all.
8
+ */
9
+ export declare const useNotifyIsFormInvalid: (control?: Control, enabled?: boolean) => void;
@@ -0,0 +1,30 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import { useFormState } from 'react-hook-form';
3
+ import { useNotify } from '../../notification';
4
+ /**
5
+ * This hook display an error message on submit in Form and SaveButton.
6
+ *
7
+ * We can't do the form validity check in the form submit handler
8
+ * as the form state may not have been updated yet when onSubmit validation mode is enabled
9
+ * or when the form hasn't been touched at all.
10
+ */
11
+ export const useNotifyIsFormInvalid = (control, enabled = true) => {
12
+ const { submitCount, errors } = useFormState(control ? { control } : undefined);
13
+ const submitCountRef = useRef(submitCount);
14
+ const notify = useNotify();
15
+ useEffect(() => {
16
+ // Checking the submit count allows us to only display the notification after users
17
+ // tried to submit
18
+ if (submitCount > submitCountRef.current && enabled) {
19
+ submitCountRef.current = submitCount;
20
+ if (Object.keys(errors).length > 0) {
21
+ const serverError = typeof errors.root?.serverError?.message === 'string'
22
+ ? errors.root.serverError.message
23
+ : undefined;
24
+ notify(serverError || "strato.message.invalid_form', {
25
+ type: 'error',
26
+ });
27
+ }
28
+ }
29
+ }, [errors, submitCount, notify, enabled]);
30
+ };
@@ -0,0 +1,57 @@
1
+ import { InputProps } from '../useInput';
2
+ /**
3
+ * A hook that returns a validation function checking for a record field uniqueness
4
+ * by calling the dataProvider getList function with a filter.
5
+ *
6
+ * @example // Passing options at declaration time
7
+ * const UserCreateForm = () => {
8
+ * const unique = useUnique({ message: 'Username is already used'});
9
+ * return (
10
+ * <SimpleForm>
11
+ * <TextInput source="username" validate={unique()} />
12
+ * </SimpleForm>
13
+ * );
14
+ * }
15
+ *
16
+ * @example // Passing options at call time
17
+ * const UserCreateForm = () => {
18
+ * const unique = useUnique();
19
+ * return (
20
+ * <SimpleForm>
21
+ * <TextInput source="username" validate={unique({ message: 'Username is already used'})} />
22
+ * </SimpleForm>
23
+ * );
24
+ * }
25
+ *
26
+ * @example // With additional filters
27
+ * const UserCreateForm = () => {
28
+ * const unique = useUnique();
29
+ * return (
30
+ * <SimpleForm>
31
+ * <ReferenceInput source="organization_id" reference="organizations" />
32
+ * <FormDataConsumer>
33
+ * {({ formData }) => (
34
+ * <TextInput
35
+ * source="username"
36
+ * validate={unique({ filter: { organization_id: formData.organization_id })}
37
+ * />
38
+ * )}
39
+ * </FormDataConsumer>
40
+ * </SimpleForm>
41
+ * );
42
+ * }
43
+ */
44
+ export declare const useUnique: (options?: UseUniqueOptions) => (callTimeOptions?: UseUniqueOptions) => (value: any, allValues: any, props: InputProps) => Promise<string | {
45
+ message: any;
46
+ args: {
47
+ source: string;
48
+ value: any;
49
+ field: string | number | bigint | true | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<import("react").ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<import("react").ReactNode> | null | undefined> | null;
50
+ };
51
+ } | undefined>;
52
+ export type UseUniqueOptions = {
53
+ debounce?: number;
54
+ resource?: string;
55
+ message?: string;
56
+ filter?: Record<string, any>;
57
+ };