@refinedev/core 4.47.2 → 4.48.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 (409) hide show
  1. package/CHANGELOG.md +2944 -2919
  2. package/dist/components/authenticated/index.d.ts.map +1 -1
  3. package/dist/components/autoSaveIndicator/index.d.ts.map +1 -1
  4. package/dist/components/canAccess/index.d.ts.map +1 -1
  5. package/dist/components/containers/refine/index.d.ts.map +1 -1
  6. package/dist/components/layoutWrapper/index.d.ts.map +1 -1
  7. package/dist/components/pages/auth/components/forgotPassword/index.d.ts.map +1 -1
  8. package/dist/components/pages/auth/components/login/index.d.ts.map +1 -1
  9. package/dist/components/pages/auth/components/register/index.d.ts.map +1 -1
  10. package/dist/components/pages/auth/components/updatePassword/index.d.ts.map +1 -1
  11. package/dist/components/pages/auth/index.d.ts.map +1 -1
  12. package/dist/components/pages/config-error/index.d.ts.map +1 -1
  13. package/dist/components/pages/config-success/index.d.ts.map +1 -1
  14. package/dist/components/pages/login/index.d.ts.map +1 -1
  15. package/dist/components/pages/ready/index.d.ts.map +1 -1
  16. package/dist/components/undoableQueue/index.d.ts.map +1 -1
  17. package/dist/contexts/accessControl/IAccessControlContext.d.ts.map +1 -1
  18. package/dist/contexts/accessControl/index.d.ts.map +1 -1
  19. package/dist/contexts/auditLog/IAuditLogContext.d.ts.map +1 -1
  20. package/dist/contexts/auditLog/index.d.ts.map +1 -1
  21. package/dist/contexts/auth/IAuthContext.d.ts +1 -1
  22. package/dist/contexts/auth/IAuthContext.d.ts.map +1 -1
  23. package/dist/contexts/auth/index.d.ts.map +1 -1
  24. package/dist/contexts/data/IDataContext.d.ts.map +1 -1
  25. package/dist/contexts/data/index.d.ts.map +1 -1
  26. package/dist/contexts/legacy-router/IRouterContext.d.ts.map +1 -1
  27. package/dist/contexts/legacy-router/index.d.ts.map +1 -1
  28. package/dist/contexts/live/ILiveContext.d.ts.map +1 -1
  29. package/dist/contexts/live/index.d.ts.map +1 -1
  30. package/dist/contexts/notification/INotificationContext.d.ts.map +1 -1
  31. package/dist/contexts/notification/index.d.ts.map +1 -1
  32. package/dist/contexts/refine/IRefineContext.d.ts.map +1 -1
  33. package/dist/contexts/refine/index.d.ts.map +1 -1
  34. package/dist/contexts/resource/IResourceContext.d.ts.map +1 -1
  35. package/dist/contexts/resource/index.d.ts.map +1 -1
  36. package/dist/contexts/router/index.d.ts.map +1 -1
  37. package/dist/contexts/translation/ITranslationContext.d.ts.map +1 -1
  38. package/dist/contexts/translation/index.d.ts.map +1 -1
  39. package/dist/contexts/undoableQueue/IUndoableQueueContext.d.ts.map +1 -1
  40. package/dist/contexts/undoableQueue/actionTypes.d.ts.map +1 -1
  41. package/dist/contexts/undoableQueue/index.d.ts.map +1 -1
  42. package/dist/contexts/undoableQueue/undoableQueueContext.d.ts.map +1 -1
  43. package/dist/contexts/unsavedWarn/IUnsavedWarnContext.d.ts.map +1 -1
  44. package/dist/definitions/helpers/check-router-prop-misuse/index.d.ts.map +1 -1
  45. package/dist/definitions/helpers/downloadInBrowser/index.d.ts.map +1 -1
  46. package/dist/definitions/helpers/flatten-object-keys/index.d.ts.map +1 -1
  47. package/dist/definitions/helpers/generateDocumentTitle/index.d.ts.map +1 -1
  48. package/dist/definitions/helpers/handlePaginationParams/index.d.ts.map +1 -1
  49. package/dist/definitions/helpers/handleRefineOptions/index.d.ts.map +1 -1
  50. package/dist/definitions/helpers/hasPermission/index.d.ts.map +1 -1
  51. package/dist/definitions/helpers/importCSVMapper/index.d.ts.map +1 -1
  52. package/dist/definitions/helpers/index.d.ts.map +1 -1
  53. package/dist/definitions/helpers/keys/index.d.ts +0 -11
  54. package/dist/definitions/helpers/keys/index.d.ts.map +1 -1
  55. package/dist/definitions/helpers/legacy-resource-transform/index.d.ts.map +1 -1
  56. package/dist/definitions/helpers/menu/create-resource-key.d.ts.map +1 -1
  57. package/dist/definitions/helpers/menu/create-tree.d.ts.map +1 -1
  58. package/dist/definitions/helpers/pick-resource/index.d.ts.map +1 -1
  59. package/dist/definitions/helpers/pickDataProvider/index.d.ts.map +1 -1
  60. package/dist/definitions/helpers/queryKeys/index.d.ts.map +1 -1
  61. package/dist/definitions/helpers/redirectPage/index.d.ts.map +1 -1
  62. package/dist/definitions/helpers/routeGenerator/index.d.ts.map +1 -1
  63. package/dist/definitions/helpers/router/compose-route.d.ts.map +1 -1
  64. package/dist/definitions/helpers/router/get-action-routes-from-resource.d.ts.map +1 -1
  65. package/dist/definitions/helpers/router/get-default-action-path.d.ts.map +1 -1
  66. package/dist/definitions/helpers/router/get-parent-prefix-for-resource.d.ts.map +1 -1
  67. package/dist/definitions/helpers/router/get-parent-resource.d.ts.map +1 -1
  68. package/dist/definitions/helpers/router/match-resource-from-route.d.ts.map +1 -1
  69. package/dist/definitions/helpers/router/pick-matched-route.d.ts.map +1 -1
  70. package/dist/definitions/helpers/router/prepare-route-params.d.ts.map +1 -1
  71. package/dist/definitions/helpers/safe-translate/index.d.ts.map +1 -1
  72. package/dist/definitions/helpers/sanitize-resource/index.d.ts.map +1 -1
  73. package/dist/definitions/helpers/sequentialPromises/index.d.ts.map +1 -1
  74. package/dist/definitions/helpers/treeView/createTreeView/index.d.ts.map +1 -1
  75. package/dist/definitions/helpers/useActiveAuthProvider/index.d.ts +2 -2
  76. package/dist/definitions/helpers/useUserFriendlyName/index.d.ts.map +1 -1
  77. package/dist/definitions/helpers/userFriendlyResourceName/index.d.ts.map +1 -1
  78. package/dist/definitions/table/index.d.ts.map +1 -1
  79. package/dist/esm/index.js +18 -18
  80. package/dist/esm/index.js.map +1 -1
  81. package/dist/hooks/accessControl/useCan/index.d.ts.map +1 -1
  82. package/dist/hooks/accessControl/useCanWithoutCache.d.ts.map +1 -1
  83. package/dist/hooks/auditLog/useLog/index.d.ts.map +1 -1
  84. package/dist/hooks/auditLog/useLogList/index.d.ts.map +1 -1
  85. package/dist/hooks/auth/useForgotPassword/index.d.ts.map +1 -1
  86. package/dist/hooks/auth/useGetIdentity/index.d.ts.map +1 -1
  87. package/dist/hooks/auth/useIsAuthenticated/index.d.ts.map +1 -1
  88. package/dist/hooks/auth/useLogin/index.d.ts.map +1 -1
  89. package/dist/hooks/auth/useLogout/index.d.ts.map +1 -1
  90. package/dist/hooks/auth/useOnError/index.d.ts.map +1 -1
  91. package/dist/hooks/auth/usePermissions/index.d.ts +9 -6
  92. package/dist/hooks/auth/usePermissions/index.d.ts.map +1 -1
  93. package/dist/hooks/auth/useRegister/index.d.ts.map +1 -1
  94. package/dist/hooks/auth/useUpdatePassword/index.d.ts.map +1 -1
  95. package/dist/hooks/breadcrumb/index.d.ts.map +1 -1
  96. package/dist/hooks/data/useApiUrl.d.ts.map +1 -1
  97. package/dist/hooks/data/useCreate.d.ts.map +1 -1
  98. package/dist/hooks/data/useCreateMany.d.ts.map +1 -1
  99. package/dist/hooks/data/useCustom.d.ts.map +1 -1
  100. package/dist/hooks/data/useCustomMutation.d.ts.map +1 -1
  101. package/dist/hooks/data/useDataProvider.d.ts.map +1 -1
  102. package/dist/hooks/data/useDelete.d.ts.map +1 -1
  103. package/dist/hooks/data/useDeleteMany.d.ts.map +1 -1
  104. package/dist/hooks/data/useInfiniteList.d.ts.map +1 -1
  105. package/dist/hooks/data/useList.d.ts.map +1 -1
  106. package/dist/hooks/data/useMany.d.ts.map +1 -1
  107. package/dist/hooks/data/useOne.d.ts.map +1 -1
  108. package/dist/hooks/data/useUpdate.d.ts.map +1 -1
  109. package/dist/hooks/data/useUpdateMany.d.ts.map +1 -1
  110. package/dist/hooks/export/csvDownload.interface.d.ts.map +1 -1
  111. package/dist/hooks/export/index.d.ts +1 -1
  112. package/dist/hooks/export/index.d.ts.map +1 -1
  113. package/dist/hooks/form/useForm.d.ts.map +1 -1
  114. package/dist/hooks/import/index.d.ts.map +1 -1
  115. package/dist/hooks/invalidate/index.d.ts.map +1 -1
  116. package/dist/hooks/live/useLiveMode/index.d.ts.map +1 -1
  117. package/dist/hooks/live/useResourceSubscription/index.d.ts.map +1 -1
  118. package/dist/hooks/live/useSubscription/index.d.ts.map +1 -1
  119. package/dist/hooks/menu/useMenu.d.ts.map +1 -1
  120. package/dist/hooks/modal/useModal/index.d.ts.map +1 -1
  121. package/dist/hooks/navigation/index.d.ts.map +1 -1
  122. package/dist/hooks/notification/useCancelNotification/index.d.ts.map +1 -1
  123. package/dist/hooks/notification/useHandleNotification/index.d.ts.map +1 -1
  124. package/dist/hooks/redirection/index.d.ts.map +1 -1
  125. package/dist/hooks/refine/useMutationMode.d.ts.map +1 -1
  126. package/dist/hooks/refine/useSyncWithLocation.d.ts.map +1 -1
  127. package/dist/hooks/refine/useWarnAboutChange/index.d.ts.map +1 -1
  128. package/dist/hooks/resource/useResource/index.d.ts.map +1 -1
  129. package/dist/hooks/router/use-get-to-path/index.d.ts.map +1 -1
  130. package/dist/hooks/router/use-go/index.d.ts.map +1 -1
  131. package/dist/hooks/router/use-link/index.d.ts.map +1 -1
  132. package/dist/hooks/router/use-parse/index.d.ts.map +1 -1
  133. package/dist/hooks/router/use-to-path/index.d.ts.map +1 -1
  134. package/dist/hooks/show/useShow.d.ts.map +1 -1
  135. package/dist/hooks/translate/useSetLocale.d.ts.map +1 -1
  136. package/dist/hooks/translate/useTranslate.d.ts.map +1 -1
  137. package/dist/hooks/useLoadingOvertime/index.d.ts.map +1 -1
  138. package/dist/hooks/useSelect/index.d.ts +18 -4
  139. package/dist/hooks/useSelect/index.d.ts.map +1 -1
  140. package/dist/hooks/useTable/index.d.ts.map +1 -1
  141. package/dist/iife/index.js +18 -18
  142. package/dist/iife/index.js.map +1 -1
  143. package/dist/index.d.ts.map +1 -1
  144. package/dist/index.js +18 -18
  145. package/dist/index.js.map +1 -1
  146. package/dist/interfaces/actions.d.ts.map +1 -1
  147. package/dist/interfaces/auditLog/logData.d.ts.map +1 -1
  148. package/dist/interfaces/auth.d.ts.map +1 -1
  149. package/dist/interfaces/autoSave.d.ts.map +1 -1
  150. package/dist/interfaces/bindings/access-control.d.ts.map +1 -1
  151. package/dist/interfaces/bindings/auth.d.ts +1 -1
  152. package/dist/interfaces/bindings/auth.d.ts.map +1 -1
  153. package/dist/interfaces/bindings/data.d.ts.map +1 -1
  154. package/dist/interfaces/bindings/i18n.d.ts.map +1 -1
  155. package/dist/interfaces/bindings/index.d.ts.map +1 -1
  156. package/dist/interfaces/bindings/live.d.ts.map +1 -1
  157. package/dist/interfaces/bindings/notifications.d.ts.map +1 -1
  158. package/dist/interfaces/bindings/resource.d.ts.map +1 -1
  159. package/dist/interfaces/bindings/router.d.ts.map +1 -1
  160. package/dist/interfaces/customComponents.d.ts.map +1 -1
  161. package/dist/interfaces/errors/HttpError.d.ts.map +1 -1
  162. package/dist/interfaces/form-url-params.d.ts.map +1 -1
  163. package/dist/interfaces/index.d.ts.map +1 -1
  164. package/dist/interfaces/live/LiveEvent.d.ts.map +1 -1
  165. package/dist/interfaces/live/LiveModeProps.d.ts.map +1 -1
  166. package/dist/interfaces/mapDataFn.d.ts.map +1 -1
  167. package/dist/interfaces/metaData/graphqlQueryOptions.d.ts.map +1 -1
  168. package/dist/interfaces/metaData/metaDataQuery.d.ts.map +1 -1
  169. package/dist/interfaces/metaData/metaQuery.d.ts.map +1 -1
  170. package/dist/interfaces/metaData/nestedField.d.ts.map +1 -1
  171. package/dist/interfaces/metaData/queryBuilderOptions.d.ts.map +1 -1
  172. package/dist/interfaces/metaData/variableOptions.d.ts.map +1 -1
  173. package/dist/interfaces/mutationMode.d.ts.map +1 -1
  174. package/dist/interfaces/notification.d.ts.map +1 -1
  175. package/dist/interfaces/optimistic-update-map.d.ts.map +1 -1
  176. package/dist/interfaces/prettify.d.ts.map +1 -1
  177. package/dist/interfaces/queryKey.d.ts.map +1 -1
  178. package/dist/interfaces/resourceErrorRouterParams.d.ts.map +1 -1
  179. package/dist/interfaces/resourceRouterParams.d.ts.map +1 -1
  180. package/dist/interfaces/successErrorNotification.d.ts +4 -4
  181. package/dist/interfaces/successErrorNotification.d.ts.map +1 -1
  182. package/dist/interfaces/telemetry.d.ts.map +1 -1
  183. package/dist/interfaces/textTransformers.d.ts.map +1 -1
  184. package/package.json +2 -2
  185. package/refine.config.js +99 -102
  186. package/src/components/authenticated/index.tsx +157 -159
  187. package/src/components/autoSaveIndicator/index.tsx +23 -27
  188. package/src/components/canAccess/index.tsx +93 -93
  189. package/src/components/containers/refine/index.tsx +312 -353
  190. package/src/components/gh-banner/index.tsx +235 -242
  191. package/src/components/gh-banner/styles.ts +5 -5
  192. package/src/components/layoutWrapper/defaultLayout/index.tsx +1 -1
  193. package/src/components/layoutWrapper/index.tsx +87 -87
  194. package/src/components/pages/auth/components/forgotPassword/index.tsx +87 -96
  195. package/src/components/pages/auth/components/login/index.tsx +166 -181
  196. package/src/components/pages/auth/components/register/index.tsx +141 -159
  197. package/src/components/pages/auth/components/updatePassword/index.tsx +81 -87
  198. package/src/components/pages/auth/index.tsx +28 -28
  199. package/src/components/pages/config-error/index.tsx +422 -422
  200. package/src/components/pages/config-success/index.tsx +249 -260
  201. package/src/components/pages/error/index.tsx +48 -48
  202. package/src/components/pages/login/index.tsx +59 -73
  203. package/src/components/pages/ready/index.tsx +21 -29
  204. package/src/components/pages/welcome/index.tsx +7 -7
  205. package/src/components/routeChangeHandler/index.tsx +7 -7
  206. package/src/components/telemetry/index.tsx +31 -31
  207. package/src/components/undoableQueue/index.tsx +49 -49
  208. package/src/contexts/accessControl/IAccessControlContext.ts +34 -34
  209. package/src/contexts/accessControl/index.tsx +35 -35
  210. package/src/contexts/auditLog/IAuditLogContext.ts +22 -22
  211. package/src/contexts/auditLog/index.tsx +8 -8
  212. package/src/contexts/auth/IAuthContext.ts +10 -10
  213. package/src/contexts/auth/index.tsx +169 -169
  214. package/src/contexts/data/IDataContext.ts +203 -203
  215. package/src/contexts/data/index.tsx +18 -18
  216. package/src/contexts/legacy-router/IRouterContext.ts +23 -27
  217. package/src/contexts/legacy-router/index.tsx +30 -30
  218. package/src/contexts/live/ILiveContext.ts +49 -49
  219. package/src/contexts/live/index.tsx +5 -7
  220. package/src/contexts/notification/INotificationContext.ts +8 -8
  221. package/src/contexts/notification/index.tsx +8 -8
  222. package/src/contexts/refine/IRefineContext.ts +119 -119
  223. package/src/contexts/refine/index.tsx +80 -80
  224. package/src/contexts/resource/IResourceContext.ts +35 -35
  225. package/src/contexts/resource/index.tsx +16 -16
  226. package/src/contexts/router/index.tsx +7 -7
  227. package/src/contexts/router-picker/index.tsx +2 -2
  228. package/src/contexts/translation/ITranslationContext.ts +7 -7
  229. package/src/contexts/translation/index.tsx +12 -12
  230. package/src/contexts/undoableQueue/IUndoableQueueContext.ts +2 -2
  231. package/src/contexts/undoableQueue/actionTypes.ts +3 -3
  232. package/src/contexts/undoableQueue/index.ts +2 -2
  233. package/src/contexts/undoableQueue/undoableQueueContext.tsx +59 -60
  234. package/src/contexts/unsavedWarn/IUnsavedWarnContext.ts +2 -2
  235. package/src/contexts/unsavedWarn/index.tsx +7 -7
  236. package/src/definitions/helpers/check-router-prop-misuse/index.ts +20 -20
  237. package/src/definitions/helpers/downloadInBrowser/index.ts +19 -20
  238. package/src/definitions/helpers/flatten-object-keys/index.ts +26 -29
  239. package/src/definitions/helpers/generateDocumentTitle/index.ts +39 -45
  240. package/src/definitions/helpers/handleMultiple/index.ts +4 -4
  241. package/src/definitions/helpers/handlePaginationParams/index.ts +17 -18
  242. package/src/definitions/helpers/handleRefineOptions/index.ts +88 -90
  243. package/src/definitions/helpers/handleUseParams/index.tsx +7 -7
  244. package/src/definitions/helpers/hasPermission/index.ts +6 -6
  245. package/src/definitions/helpers/humanizeString/index.ts +9 -9
  246. package/src/definitions/helpers/importCSVMapper/index.ts +8 -8
  247. package/src/definitions/helpers/index.ts +2 -2
  248. package/src/definitions/helpers/keys/index.ts +205 -258
  249. package/src/definitions/helpers/legacy-resource-transform/index.ts +14 -14
  250. package/src/definitions/helpers/menu/create-resource-key.ts +20 -23
  251. package/src/definitions/helpers/menu/create-tree.ts +61 -63
  252. package/src/definitions/helpers/pick-resource/index.ts +25 -25
  253. package/src/definitions/helpers/pickDataProvider/index.ts +15 -15
  254. package/src/definitions/helpers/pickNotDeprecated/index.ts +2 -2
  255. package/src/definitions/helpers/property-path-to-array/index.ts +3 -3
  256. package/src/definitions/helpers/queryKeys/index.ts +92 -92
  257. package/src/definitions/helpers/redirectPage/index.ts +19 -19
  258. package/src/definitions/helpers/routeGenerator/index.ts +15 -15
  259. package/src/definitions/helpers/router/__tests__/check-by-segments.ts +12 -15
  260. package/src/definitions/helpers/router/__tests__/compose-route.ts +48 -48
  261. package/src/definitions/helpers/router/__tests__/get-action-routes-from-resource.ts +152 -152
  262. package/src/definitions/helpers/router/__tests__/get-default-action-path.ts +39 -41
  263. package/src/definitions/helpers/router/__tests__/get-parent-prefix-for-resource.ts +69 -73
  264. package/src/definitions/helpers/router/__tests__/get-parent-resource.ts +40 -40
  265. package/src/definitions/helpers/router/__tests__/is-segment-counts-same.ts +11 -14
  266. package/src/definitions/helpers/router/__tests__/match-resource-from-route.ts +55 -55
  267. package/src/definitions/helpers/router/__tests__/pick-matched-route.ts +74 -74
  268. package/src/definitions/helpers/router/__tests__/pick-route-params.ts +12 -12
  269. package/src/definitions/helpers/router/__tests__/prepare-route-params.ts +18 -18
  270. package/src/definitions/helpers/router/__tests__/remove-leading-trailing-slashes.ts +9 -9
  271. package/src/definitions/helpers/router/__tests__/split-to-segments.ts +9 -9
  272. package/src/definitions/helpers/router/check-by-segments.ts +12 -12
  273. package/src/definitions/helpers/router/compose-route.ts +25 -27
  274. package/src/definitions/helpers/router/get-action-routes-from-resource.ts +41 -47
  275. package/src/definitions/helpers/router/get-default-action-path.ts +19 -19
  276. package/src/definitions/helpers/router/get-parent-prefix-for-resource.ts +22 -24
  277. package/src/definitions/helpers/router/get-parent-resource.ts +18 -18
  278. package/src/definitions/helpers/router/is-parameter.ts +1 -1
  279. package/src/definitions/helpers/router/is-segment-counts-same.ts +3 -3
  280. package/src/definitions/helpers/router/match-resource-from-route.ts +19 -19
  281. package/src/definitions/helpers/router/pick-matched-route.ts +44 -44
  282. package/src/definitions/helpers/router/pick-route-params.ts +7 -7
  283. package/src/definitions/helpers/router/prepare-route-params.ts +13 -10
  284. package/src/definitions/helpers/router/remove-leading-trailing-slashes.ts +1 -1
  285. package/src/definitions/helpers/router/split-to-segments.ts +2 -2
  286. package/src/definitions/helpers/safe-translate/index.ts +12 -12
  287. package/src/definitions/helpers/sanitize-resource/index.ts +26 -27
  288. package/src/definitions/helpers/sequentialPromises/index.ts +21 -21
  289. package/src/definitions/helpers/treeView/createTreeView/index.ts +33 -33
  290. package/src/definitions/helpers/useActiveAuthProvider/index.ts +18 -18
  291. package/src/definitions/helpers/useInfinitePagination/index.ts +16 -16
  292. package/src/definitions/helpers/useMediaQuery/index.ts +11 -11
  293. package/src/definitions/helpers/useUserFriendlyName/index.ts +11 -14
  294. package/src/definitions/helpers/userFriendlyResourceName/index.ts +7 -7
  295. package/src/definitions/helpers/userFriendlySeconds/index.ts +1 -1
  296. package/src/definitions/table/index.ts +127 -130
  297. package/src/definitions/upload/file2Base64/index.ts +15 -15
  298. package/src/hooks/accessControl/useCan/index.ts +52 -54
  299. package/src/hooks/accessControl/useCanWithoutCache.ts +25 -26
  300. package/src/hooks/auditLog/useLog/index.ts +114 -114
  301. package/src/hooks/auditLog/useLogList/index.ts +44 -44
  302. package/src/hooks/auth/useForgotPassword/index.ts +158 -163
  303. package/src/hooks/auth/useGetIdentity/index.ts +55 -57
  304. package/src/hooks/auth/useInvalidateAuthStore/index.ts +12 -12
  305. package/src/hooks/auth/useIsAuthenticated/index.ts +44 -48
  306. package/src/hooks/auth/useIsExistAuthentication/index.ts +3 -3
  307. package/src/hooks/auth/useLogin/index.ts +181 -194
  308. package/src/hooks/auth/useLogout/index.ts +175 -177
  309. package/src/hooks/auth/useOnError/index.ts +76 -76
  310. package/src/hooks/auth/usePermissions/index.ts +94 -61
  311. package/src/hooks/auth/useRegister/index.ts +166 -178
  312. package/src/hooks/auth/useUpdatePassword/index.ts +183 -194
  313. package/src/hooks/breadcrumb/index.ts +99 -106
  314. package/src/hooks/data/useApiUrl.ts +7 -8
  315. package/src/hooks/data/useCreate.ts +241 -241
  316. package/src/hooks/data/useCreateMany.ts +219 -226
  317. package/src/hooks/data/useCustom.ts +181 -182
  318. package/src/hooks/data/useCustomMutation.ts +174 -174
  319. package/src/hooks/data/useDataProvider.tsx +27 -29
  320. package/src/hooks/data/useDelete.ts +447 -454
  321. package/src/hooks/data/useDeleteMany.ts +475 -484
  322. package/src/hooks/data/useInfiniteList.ts +280 -280
  323. package/src/hooks/data/useList.ts +280 -283
  324. package/src/hooks/data/useMany.ts +215 -216
  325. package/src/hooks/data/useOne.ts +210 -211
  326. package/src/hooks/data/useUpdate.ts +529 -556
  327. package/src/hooks/data/useUpdateMany.ts +556 -584
  328. package/src/hooks/deepMemo/index.tsx +5 -5
  329. package/src/hooks/export/csvDownload.interface.ts +13 -13
  330. package/src/hooks/export/index.ts +223 -217
  331. package/src/hooks/form/useForm.ts +543 -560
  332. package/src/hooks/import/index.tsx +254 -260
  333. package/src/hooks/invalidate/index.tsx +75 -75
  334. package/src/hooks/legacy-router/useRouterContext.ts +11 -11
  335. package/src/hooks/live/useLiveMode/index.ts +4 -4
  336. package/src/hooks/live/usePublish/index.ts +2 -2
  337. package/src/hooks/live/useResourceSubscription/index.ts +103 -103
  338. package/src/hooks/live/useSubscription/index.ts +77 -77
  339. package/src/hooks/memoized/index.tsx +6 -6
  340. package/src/hooks/menu/useMenu.tsx +113 -120
  341. package/src/hooks/modal/useModal/index.tsx +16 -16
  342. package/src/hooks/navigation/index.ts +362 -392
  343. package/src/hooks/notification/useCancelNotification/index.tsx +5 -5
  344. package/src/hooks/notification/useHandleNotification/index.ts +17 -17
  345. package/src/hooks/notification/useNotification/index.ts +2 -2
  346. package/src/hooks/redirection/index.ts +45 -46
  347. package/src/hooks/refine/useMutationMode.ts +4 -4
  348. package/src/hooks/refine/useRefineContext.ts +36 -36
  349. package/src/hooks/refine/useSyncWithLocation.ts +3 -3
  350. package/src/hooks/refine/useTitle.tsx +2 -2
  351. package/src/hooks/refine/useWarnAboutChange/index.ts +12 -12
  352. package/src/hooks/resource/useResource/index.ts +141 -146
  353. package/src/hooks/resource/useResourceWithRoute/index.ts +12 -12
  354. package/src/hooks/router/use-back/index.tsx +7 -7
  355. package/src/hooks/router/use-get-to-path/index.ts +35 -35
  356. package/src/hooks/router/use-go/index.tsx +66 -66
  357. package/src/hooks/router/use-link/index.tsx +8 -9
  358. package/src/hooks/router/use-parse/index.tsx +13 -13
  359. package/src/hooks/router/use-parsed/index.tsx +4 -4
  360. package/src/hooks/router/use-router-misuse-warning/index.ts +10 -10
  361. package/src/hooks/router/use-to-path/index.ts +10 -10
  362. package/src/hooks/show/useShow.ts +135 -135
  363. package/src/hooks/translate/useGetLocale.ts +2 -2
  364. package/src/hooks/translate/useSetLocale.ts +2 -2
  365. package/src/hooks/translate/useTranslate.ts +24 -25
  366. package/src/hooks/useKeys/index.tsx +7 -7
  367. package/src/hooks/useLoadingOvertime/index.ts +74 -76
  368. package/src/hooks/useMeta/index.ts +20 -20
  369. package/src/hooks/useSelect/index.ts +317 -277
  370. package/src/hooks/useTable/index.ts +483 -507
  371. package/src/hooks/useTelemetryData/index.ts +48 -48
  372. package/src/index.tsx +125 -125
  373. package/src/interfaces/actions.ts +2 -2
  374. package/src/interfaces/auditLog/logData.ts +9 -9
  375. package/src/interfaces/auth.tsx +176 -176
  376. package/src/interfaces/autoSave.ts +37 -37
  377. package/src/interfaces/bindings/access-control.ts +21 -21
  378. package/src/interfaces/bindings/auth.ts +27 -25
  379. package/src/interfaces/bindings/data.ts +2 -2
  380. package/src/interfaces/bindings/i18n.ts +8 -8
  381. package/src/interfaces/bindings/index.ts +15 -15
  382. package/src/interfaces/bindings/live.ts +28 -28
  383. package/src/interfaces/bindings/notifications.ts +8 -8
  384. package/src/interfaces/bindings/resource.ts +127 -127
  385. package/src/interfaces/bindings/router.ts +26 -26
  386. package/src/interfaces/customComponents.ts +17 -17
  387. package/src/interfaces/errors/HttpError.ts +8 -8
  388. package/src/interfaces/form-url-params.ts +6 -6
  389. package/src/interfaces/index.ts +8 -10
  390. package/src/interfaces/live/LiveEvent.ts +10 -10
  391. package/src/interfaces/live/LiveModeProps.ts +21 -21
  392. package/src/interfaces/mapDataFn.ts +1 -1
  393. package/src/interfaces/metaData/graphqlQueryOptions.ts +49 -49
  394. package/src/interfaces/metaData/metaDataQuery.ts +2 -2
  395. package/src/interfaces/metaData/metaQuery.ts +3 -3
  396. package/src/interfaces/metaData/nestedField.ts +3 -3
  397. package/src/interfaces/metaData/queryBuilderOptions.ts +3 -3
  398. package/src/interfaces/metaData/variableOptions.ts +8 -8
  399. package/src/interfaces/mutationMode.ts +14 -14
  400. package/src/interfaces/notification.ts +7 -7
  401. package/src/interfaces/optimistic-update-map.ts +42 -42
  402. package/src/interfaces/prettify.ts +1 -1
  403. package/src/interfaces/queryKey.ts +16 -16
  404. package/src/interfaces/resourceErrorRouterParams.ts +2 -2
  405. package/src/interfaces/resourceRouterParams.ts +3 -3
  406. package/src/interfaces/successErrorNotification.ts +24 -24
  407. package/src/interfaces/telemetry.ts +13 -13
  408. package/src/interfaces/textTransformers.ts +18 -18
  409. package/tsconfig.json +26 -26
@@ -1,139 +1,139 @@
1
1
  import { getXRay } from "@refinedev/devtools-internal";
2
2
  import {
3
- useMutation,
4
- UseMutationOptions,
5
- UseMutationResult,
6
- useQueryClient,
3
+ useMutation,
4
+ UseMutationOptions,
5
+ UseMutationResult,
6
+ useQueryClient,
7
7
  } from "@tanstack/react-query";
8
8
 
9
9
  import { ActionTypes } from "@contexts/undoableQueue";
10
10
  import {
11
- pickDataProvider,
12
- pickNotDeprecated,
13
- queryKeysReplacement,
14
- useActiveAuthProvider,
11
+ pickDataProvider,
12
+ pickNotDeprecated,
13
+ queryKeysReplacement,
14
+ useActiveAuthProvider,
15
15
  } from "@definitions/helpers";
16
16
  import {
17
- useCancelNotification,
18
- useDataProvider,
19
- useHandleNotification,
20
- useInvalidate,
21
- useLog,
22
- useMeta,
23
- useMutationMode,
24
- useOnError,
25
- usePublish,
26
- useRefineContext,
27
- useResource,
28
- useTranslate,
17
+ useCancelNotification,
18
+ useDataProvider,
19
+ useHandleNotification,
20
+ useInvalidate,
21
+ useLog,
22
+ useMeta,
23
+ useMutationMode,
24
+ useOnError,
25
+ usePublish,
26
+ useRefineContext,
27
+ useResource,
28
+ useTranslate,
29
29
  } from "@hooks";
30
30
  import { useKeys } from "@hooks/useKeys";
31
31
  import {
32
- BaseKey,
33
- BaseRecord,
34
- GetListResponse,
35
- GetManyResponse,
36
- GetOneResponse,
37
- HttpError,
38
- IQueryKeys,
39
- MetaQuery,
40
- MutationMode,
41
- OptimisticUpdateMapType,
42
- PrevContext as UpdateContext,
43
- PreviousQuery,
44
- SuccessErrorNotification,
45
- UpdateResponse,
32
+ BaseKey,
33
+ BaseRecord,
34
+ GetListResponse,
35
+ GetManyResponse,
36
+ GetOneResponse,
37
+ HttpError,
38
+ IQueryKeys,
39
+ MetaQuery,
40
+ MutationMode,
41
+ OptimisticUpdateMapType,
42
+ PrevContext as UpdateContext,
43
+ PreviousQuery,
44
+ SuccessErrorNotification,
45
+ UpdateResponse,
46
46
  } from "../../interfaces";
47
47
  import {
48
- useLoadingOvertime,
49
- UseLoadingOvertimeOptionsProps,
50
- UseLoadingOvertimeReturnType,
48
+ useLoadingOvertime,
49
+ UseLoadingOvertimeOptionsProps,
50
+ UseLoadingOvertimeReturnType,
51
51
  } from "../useLoadingOvertime";
52
52
 
53
53
  export type UpdateParams<TData, TError, TVariables> = {
54
- /**
55
- * Resource name for API data interactions
56
- */
57
- resource: string;
58
- /**
59
- * id for mutation function
60
- */
61
- id: BaseKey;
62
- /**
63
- * [Determines when mutations are executed](/advanced-tutorials/mutation-mode.md)
64
- */
65
- mutationMode?: MutationMode;
66
- /**
67
- * Duration in ms to wait before executing the mutation when `mutationMode = "undoable"`
68
- */
69
- undoableTimeout?: number;
70
- /**
71
- * Provides a function to cancel the mutation when `mutationMode = "undoable"`
72
- */
73
- onCancel?: (cancelMutation: () => void) => void;
74
- /**
75
- * Values for mutation function
76
- */
77
- values: TVariables;
78
- /**
79
- * Metadata query for dataProvider
80
- */
81
- meta?: MetaQuery;
82
- /**
83
- * Metadata query for dataProvider
84
- * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.
85
- */
86
- metaData?: MetaQuery;
87
- /**
88
- * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.
89
- * @default "default"
90
- */
91
- dataProviderName?: string;
92
- /**
93
- * You can use it to manage the invalidations that will occur at the end of the mutation.
94
- */
95
- invalidates?: Array<keyof IQueryKeys>;
96
- /**
97
- * You can use it to customize the optimistic update logic.
98
- * @default {
99
- * list: true,
100
- * many: true,
101
- * detail: true,
102
- * }
103
- */
104
- optimisticUpdateMap?: OptimisticUpdateMapType<TData, TVariables>;
54
+ /**
55
+ * Resource name for API data interactions
56
+ */
57
+ resource: string;
58
+ /**
59
+ * id for mutation function
60
+ */
61
+ id: BaseKey;
62
+ /**
63
+ * [Determines when mutations are executed](/advanced-tutorials/mutation-mode.md)
64
+ */
65
+ mutationMode?: MutationMode;
66
+ /**
67
+ * Duration in ms to wait before executing the mutation when `mutationMode = "undoable"`
68
+ */
69
+ undoableTimeout?: number;
70
+ /**
71
+ * Provides a function to cancel the mutation when `mutationMode = "undoable"`
72
+ */
73
+ onCancel?: (cancelMutation: () => void) => void;
74
+ /**
75
+ * Values for mutation function
76
+ */
77
+ values: TVariables;
78
+ /**
79
+ * Metadata query for dataProvider
80
+ */
81
+ meta?: MetaQuery;
82
+ /**
83
+ * Metadata query for dataProvider
84
+ * @deprecated `metaData` is deprecated with refine@4, refine will pass `meta` instead, however, we still support `metaData` for backward compatibility.
85
+ */
86
+ metaData?: MetaQuery;
87
+ /**
88
+ * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.
89
+ * @default "default"
90
+ */
91
+ dataProviderName?: string;
92
+ /**
93
+ * You can use it to manage the invalidations that will occur at the end of the mutation.
94
+ */
95
+ invalidates?: Array<keyof IQueryKeys>;
96
+ /**
97
+ * You can use it to customize the optimistic update logic.
98
+ * @default {
99
+ * list: true,
100
+ * many: true,
101
+ * detail: true,
102
+ * }
103
+ */
104
+ optimisticUpdateMap?: OptimisticUpdateMapType<TData, TVariables>;
105
105
  } & SuccessErrorNotification<
106
- UpdateResponse<TData>,
107
- TError,
108
- { id: BaseKey; values: TVariables }
106
+ UpdateResponse<TData>,
107
+ TError,
108
+ { id: BaseKey; values: TVariables }
109
109
  >;
110
110
 
111
111
  export type UseUpdateReturnType<
112
- TData extends BaseRecord = BaseRecord,
113
- TError extends HttpError = HttpError,
114
- TVariables = {},
112
+ TData extends BaseRecord = BaseRecord,
113
+ TError extends HttpError = HttpError,
114
+ TVariables = {},
115
115
  > = UseMutationResult<
116
- UpdateResponse<TData>,
117
- TError,
118
- UpdateParams<TData, TError, TVariables>,
119
- UpdateContext<TData>
116
+ UpdateResponse<TData>,
117
+ TError,
118
+ UpdateParams<TData, TError, TVariables>,
119
+ UpdateContext<TData>
120
120
  > &
121
- UseLoadingOvertimeReturnType;
121
+ UseLoadingOvertimeReturnType;
122
122
 
123
123
  export type UseUpdateProps<
124
- TData extends BaseRecord = BaseRecord,
125
- TError extends HttpError = HttpError,
126
- TVariables = {},
124
+ TData extends BaseRecord = BaseRecord,
125
+ TError extends HttpError = HttpError,
126
+ TVariables = {},
127
127
  > = {
128
- mutationOptions?: Omit<
129
- UseMutationOptions<
130
- UpdateResponse<TData>,
131
- TError,
132
- UpdateParams<TData, TError, TVariables>,
133
- UpdateContext<TData>
134
- >,
135
- "mutationFn" | "onError" | "onSuccess" | "onSettled" | "onMutate"
136
- >;
128
+ mutationOptions?: Omit<
129
+ UseMutationOptions<
130
+ UpdateResponse<TData>,
131
+ TError,
132
+ UpdateParams<TData, TError, TVariables>,
133
+ UpdateContext<TData>
134
+ >,
135
+ "mutationFn" | "onError" | "onSuccess" | "onSettled" | "onMutate"
136
+ >;
137
137
  } & UseLoadingOvertimeOptionsProps;
138
138
 
139
139
  /**
@@ -149,462 +149,435 @@ export type UseUpdateProps<
149
149
  *
150
150
  */
151
151
  export const useUpdate = <
152
- TData extends BaseRecord = BaseRecord,
153
- TError extends HttpError = HttpError,
154
- TVariables = {},
152
+ TData extends BaseRecord = BaseRecord,
153
+ TError extends HttpError = HttpError,
154
+ TVariables = {},
155
155
  >({
156
- mutationOptions,
157
- overtimeOptions,
156
+ mutationOptions,
157
+ overtimeOptions,
158
158
  }: UseUpdateProps<TData, TError, TVariables> = {}): UseUpdateReturnType<
159
- TData,
160
- TError,
161
- TVariables
159
+ TData,
160
+ TError,
161
+ TVariables
162
162
  > => {
163
- const { resources, select } = useResource();
164
- const queryClient = useQueryClient();
165
- const dataProvider = useDataProvider();
166
-
167
- const {
168
- mutationMode: mutationModeContext,
169
- undoableTimeout: undoableTimeoutContext,
170
- } = useMutationMode();
171
- const translate = useTranslate();
172
- const authProvider = useActiveAuthProvider();
173
- const { mutate: checkError } = useOnError({
174
- v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),
175
- });
176
- const publish = usePublish();
177
- const { log } = useLog();
178
- const { notificationDispatch } = useCancelNotification();
179
- const handleNotification = useHandleNotification();
180
- const invalidateStore = useInvalidate();
181
- const getMeta = useMeta();
182
- const {
183
- options: { textTransformers },
184
- } = useRefineContext();
185
- const { keys, preferLegacyKeys } = useKeys();
186
-
187
- const mutation = useMutation<
188
- UpdateResponse<TData>,
189
- TError,
190
- UpdateParams<TData, TError, TVariables>,
191
- UpdateContext<TData>
192
- >({
193
- mutationFn: ({
194
- id,
195
- values,
196
- resource: resourceName,
197
- mutationMode,
198
- undoableTimeout,
199
- onCancel,
200
- meta,
201
- metaData,
202
- dataProviderName,
203
- }) => {
204
- const { resource, identifier } = select(resourceName);
205
-
206
- const combinedMeta = getMeta({
207
- resource,
208
- meta: pickNotDeprecated(meta, metaData),
209
- });
210
-
211
- const mutationModePropOrContext =
212
- mutationMode ?? mutationModeContext;
213
-
214
- const undoableTimeoutPropOrContext =
215
- undoableTimeout ?? undoableTimeoutContext;
216
-
217
- if (!(mutationModePropOrContext === "undoable")) {
218
- return dataProvider(
219
- pickDataProvider(identifier, dataProviderName, resources),
220
- ).update<TData, TVariables>({
221
- resource: resource.name,
222
- id,
223
- variables: values,
224
- meta: combinedMeta,
225
- metaData: combinedMeta,
226
- });
227
- }
228
- const updatePromise = new Promise<UpdateResponse<TData>>(
229
- (resolve, reject) => {
230
- const doMutation = () => {
231
- dataProvider(
232
- pickDataProvider(
233
- identifier,
234
- dataProviderName,
235
- resources,
236
- ),
237
- )
238
- .update<TData, TVariables>({
239
- resource: resource.name,
240
- id,
241
- variables: values,
242
- meta: combinedMeta,
243
- metaData: combinedMeta,
244
- })
245
- .then((result) => resolve(result))
246
- .catch((err) => reject(err));
247
- };
248
-
249
- const cancelMutation = () => {
250
- reject({ message: "mutationCancelled" });
251
- };
252
-
253
- if (onCancel) {
254
- onCancel(cancelMutation);
255
- }
256
-
257
- notificationDispatch({
258
- type: ActionTypes.ADD,
259
- payload: {
260
- id: id,
261
- resource: identifier,
262
- cancelMutation: cancelMutation,
263
- doMutation: doMutation,
264
- seconds: undoableTimeoutPropOrContext,
265
- isSilent: !!onCancel,
266
- },
267
- });
268
- },
269
- );
270
- return updatePromise;
271
- },
272
- onMutate: async ({
273
- resource: resourceName,
274
- id,
275
- mutationMode,
276
- values,
277
- dataProviderName,
278
- meta,
279
- metaData,
280
- optimisticUpdateMap = { list: true, many: true, detail: true },
281
- }) => {
282
- const { identifier } = select(resourceName);
283
-
284
- const {
285
- gqlMutation: _,
286
- gqlQuery: __,
287
- ...preferredMeta
288
- } = pickNotDeprecated(meta, metaData) ?? {};
289
-
290
- const queryKey = queryKeysReplacement(preferLegacyKeys)(
291
- identifier,
292
- pickDataProvider(identifier, dataProviderName, resources),
293
- preferredMeta,
294
- );
295
-
296
- const resourceKeys = keys()
297
- .data(pickDataProvider(identifier, dataProviderName, resources))
298
- .resource(identifier);
299
-
300
- const previousQueries: PreviousQuery<TData>[] =
301
- queryClient.getQueriesData(resourceKeys.get(preferLegacyKeys));
302
-
303
- const mutationModePropOrContext =
304
- mutationMode ?? mutationModeContext;
305
-
306
- await queryClient.cancelQueries(
307
- resourceKeys.get(preferLegacyKeys),
308
- undefined,
309
- {
310
- silent: true,
311
- },
312
- );
313
-
314
- if (mutationModePropOrContext !== "pessimistic") {
315
- if (optimisticUpdateMap.list) {
316
- // Set the previous queries to the new ones:
317
- queryClient.setQueriesData(
318
- resourceKeys
319
- .action("list")
320
- .params(preferredMeta ?? {})
321
- .get(preferLegacyKeys),
322
- (previous?: GetListResponse<TData> | null) => {
323
- if (
324
- typeof optimisticUpdateMap.list === "function"
325
- ) {
326
- return optimisticUpdateMap.list(
327
- previous,
328
- values,
329
- id,
330
- );
331
- }
332
-
333
- if (!previous) {
334
- return null;
335
- }
336
-
337
- const data = previous.data.map((record: TData) => {
338
- if (record.id?.toString() === id?.toString()) {
339
- return {
340
- id,
341
- ...record,
342
- ...values,
343
- } as unknown as TData;
344
- }
345
- return record;
346
- });
347
-
348
- return {
349
- ...previous,
350
- data,
351
- };
352
- },
353
- );
354
- }
355
-
356
- if (optimisticUpdateMap.many) {
357
- queryClient.setQueriesData(
358
- resourceKeys.action("many").get(preferLegacyKeys),
359
- (previous?: GetManyResponse<TData> | null) => {
360
- if (
361
- typeof optimisticUpdateMap.many === "function"
362
- ) {
363
- return optimisticUpdateMap.many(
364
- previous,
365
- values,
366
- id,
367
- );
368
- }
369
-
370
- if (!previous) {
371
- return null;
372
- }
373
-
374
- const data = previous.data.map((record: TData) => {
375
- if (record.id?.toString() === id?.toString()) {
376
- record = {
377
- id,
378
- ...record,
379
- ...values,
380
- } as unknown as TData;
381
- }
382
- return record;
383
- });
384
- return {
385
- ...previous,
386
- data,
387
- };
388
- },
389
- );
390
- }
391
-
392
- if (optimisticUpdateMap.detail) {
393
- queryClient.setQueriesData(
394
- resourceKeys
395
- .action("one")
396
- .id(id)
397
- .params(preferredMeta ?? {})
398
- .get(preferLegacyKeys),
399
- (previous?: GetOneResponse<TData> | null) => {
400
- if (
401
- typeof optimisticUpdateMap.detail === "function"
402
- ) {
403
- return optimisticUpdateMap.detail(
404
- previous,
405
- values,
406
- id,
407
- );
408
- }
409
-
410
- if (!previous) {
411
- return null;
412
- }
413
-
414
- return {
415
- ...previous,
416
- data: {
417
- ...previous.data,
418
- ...values,
419
- },
420
- };
421
- },
422
- );
423
- }
424
- }
425
-
426
- return {
427
- previousQueries,
428
- queryKey,
429
- };
430
- },
431
- onSettled: (
432
- _data,
433
- _error,
434
- {
163
+ const { resources, select } = useResource();
164
+ const queryClient = useQueryClient();
165
+ const dataProvider = useDataProvider();
166
+
167
+ const {
168
+ mutationMode: mutationModeContext,
169
+ undoableTimeout: undoableTimeoutContext,
170
+ } = useMutationMode();
171
+ const translate = useTranslate();
172
+ const authProvider = useActiveAuthProvider();
173
+ const { mutate: checkError } = useOnError({
174
+ v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy),
175
+ });
176
+ const publish = usePublish();
177
+ const { log } = useLog();
178
+ const { notificationDispatch } = useCancelNotification();
179
+ const handleNotification = useHandleNotification();
180
+ const invalidateStore = useInvalidate();
181
+ const getMeta = useMeta();
182
+ const {
183
+ options: { textTransformers },
184
+ } = useRefineContext();
185
+ const { keys, preferLegacyKeys } = useKeys();
186
+
187
+ const mutation = useMutation<
188
+ UpdateResponse<TData>,
189
+ TError,
190
+ UpdateParams<TData, TError, TVariables>,
191
+ UpdateContext<TData>
192
+ >({
193
+ mutationFn: ({
194
+ id,
195
+ values,
196
+ resource: resourceName,
197
+ mutationMode,
198
+ undoableTimeout,
199
+ onCancel,
200
+ meta,
201
+ metaData,
202
+ dataProviderName,
203
+ }) => {
204
+ const { resource, identifier } = select(resourceName);
205
+
206
+ const combinedMeta = getMeta({
207
+ resource,
208
+ meta: pickNotDeprecated(meta, metaData),
209
+ });
210
+
211
+ const mutationModePropOrContext = mutationMode ?? mutationModeContext;
212
+
213
+ const undoableTimeoutPropOrContext =
214
+ undoableTimeout ?? undoableTimeoutContext;
215
+
216
+ if (!(mutationModePropOrContext === "undoable")) {
217
+ return dataProvider(
218
+ pickDataProvider(identifier, dataProviderName, resources),
219
+ ).update<TData, TVariables>({
220
+ resource: resource.name,
221
+ id,
222
+ variables: values,
223
+ meta: combinedMeta,
224
+ metaData: combinedMeta,
225
+ });
226
+ }
227
+ const updatePromise = new Promise<UpdateResponse<TData>>(
228
+ (resolve, reject) => {
229
+ const doMutation = () => {
230
+ dataProvider(
231
+ pickDataProvider(identifier, dataProviderName, resources),
232
+ )
233
+ .update<TData, TVariables>({
234
+ resource: resource.name,
435
235
  id,
436
- resource: resourceName,
437
- dataProviderName,
438
- invalidates = ["list", "many", "detail"],
236
+ variables: values,
237
+ meta: combinedMeta,
238
+ metaData: combinedMeta,
239
+ })
240
+ .then((result) => resolve(result))
241
+ .catch((err) => reject(err));
242
+ };
243
+
244
+ const cancelMutation = () => {
245
+ reject({ message: "mutationCancelled" });
246
+ };
247
+
248
+ if (onCancel) {
249
+ onCancel(cancelMutation);
250
+ }
251
+
252
+ notificationDispatch({
253
+ type: ActionTypes.ADD,
254
+ payload: {
255
+ id: id,
256
+ resource: identifier,
257
+ cancelMutation: cancelMutation,
258
+ doMutation: doMutation,
259
+ seconds: undoableTimeoutPropOrContext,
260
+ isSilent: !!onCancel,
439
261
  },
440
- ) => {
441
- const { identifier } = select(resourceName);
442
-
443
- invalidateStore({
444
- resource: identifier,
445
- dataProviderName: pickDataProvider(
446
- identifier,
447
- dataProviderName,
448
- resources,
449
- ),
450
- invalidates,
451
- id,
452
- });
453
-
454
- notificationDispatch({
455
- type: ActionTypes.REMOVE,
456
- payload: { id, resource: identifier },
457
- });
262
+ });
458
263
  },
459
- onSuccess: (
460
- data,
461
- {
462
- id,
463
- resource: resourceName,
464
- successNotification,
465
- dataProviderName: dataProviderNameFromProp,
466
- values,
467
- meta,
468
- metaData,
264
+ );
265
+ return updatePromise;
266
+ },
267
+ onMutate: async ({
268
+ resource: resourceName,
269
+ id,
270
+ mutationMode,
271
+ values,
272
+ dataProviderName,
273
+ meta,
274
+ metaData,
275
+ optimisticUpdateMap = { list: true, many: true, detail: true },
276
+ }) => {
277
+ const { identifier } = select(resourceName);
278
+
279
+ const {
280
+ gqlMutation: _,
281
+ gqlQuery: __,
282
+ ...preferredMeta
283
+ } = pickNotDeprecated(meta, metaData) ?? {};
284
+
285
+ const queryKey = queryKeysReplacement(preferLegacyKeys)(
286
+ identifier,
287
+ pickDataProvider(identifier, dataProviderName, resources),
288
+ preferredMeta,
289
+ );
290
+
291
+ const resourceKeys = keys()
292
+ .data(pickDataProvider(identifier, dataProviderName, resources))
293
+ .resource(identifier);
294
+
295
+ const previousQueries: PreviousQuery<TData>[] =
296
+ queryClient.getQueriesData(resourceKeys.get(preferLegacyKeys));
297
+
298
+ const mutationModePropOrContext = mutationMode ?? mutationModeContext;
299
+
300
+ await queryClient.cancelQueries(
301
+ resourceKeys.get(preferLegacyKeys),
302
+ undefined,
303
+ {
304
+ silent: true,
305
+ },
306
+ );
307
+
308
+ if (mutationModePropOrContext !== "pessimistic") {
309
+ if (optimisticUpdateMap.list) {
310
+ // Set the previous queries to the new ones:
311
+ queryClient.setQueriesData(
312
+ resourceKeys
313
+ .action("list")
314
+ .params(preferredMeta ?? {})
315
+ .get(preferLegacyKeys),
316
+ (previous?: GetListResponse<TData> | null) => {
317
+ if (typeof optimisticUpdateMap.list === "function") {
318
+ return optimisticUpdateMap.list(previous, values, id);
319
+ }
320
+
321
+ if (!previous) {
322
+ return null;
323
+ }
324
+
325
+ const data = previous.data.map((record: TData) => {
326
+ if (record.id?.toString() === id?.toString()) {
327
+ return {
328
+ id,
329
+ ...record,
330
+ ...values,
331
+ } as unknown as TData;
332
+ }
333
+ return record;
334
+ });
335
+
336
+ return {
337
+ ...previous,
338
+ data,
339
+ };
469
340
  },
470
- context,
471
- ) => {
472
- const { resource, identifier } = select(resourceName);
473
- const resourceSingular = textTransformers.singular(identifier);
474
-
475
- const dataProviderName = pickDataProvider(
476
- identifier,
477
- dataProviderNameFromProp,
478
- resources,
479
- );
480
-
481
- const combinedMeta = getMeta({
482
- resource,
483
- meta: pickNotDeprecated(meta, metaData),
484
- });
485
-
486
- const notificationConfig =
487
- typeof successNotification === "function"
488
- ? successNotification(data, { id, values }, identifier)
489
- : successNotification;
490
-
491
- handleNotification(notificationConfig, {
492
- key: `${id}-${identifier}-notification`,
493
- description: translate("notifications.success", "Successful"),
494
- message: translate(
495
- "notifications.editSuccess",
496
- {
497
- resource: translate(
498
- `${identifier}.${identifier}`,
499
- resourceSingular,
500
- ),
501
- },
502
- `Successfully updated ${resourceSingular}`,
503
- ),
504
- type: "success",
505
- });
506
-
507
- publish?.({
508
- channel: `resources/${resource.name}`,
509
- type: "updated",
510
- payload: {
511
- ids: data.data?.id ? [data.data.id] : undefined,
512
- },
513
- date: new Date(),
514
- meta: {
515
- ...combinedMeta,
516
- dataProviderName,
517
- },
518
- });
519
-
520
- let previousData: any;
521
- if (context) {
522
- const queryData = queryClient.getQueryData<
523
- UpdateResponse<TData>
524
- >(context.queryKey.detail(id));
525
-
526
- previousData = Object.keys(values || {}).reduce<any>(
527
- (acc, item) => {
528
- acc[item] = queryData?.data?.[item];
529
- return acc;
530
- },
531
- {},
532
- );
533
- }
534
-
535
- const {
536
- fields: _fields,
537
- operation: _operation,
538
- variables: _variables,
539
- ...rest
540
- } = combinedMeta || {};
541
- log?.mutate({
542
- action: "update",
543
- resource: resource.name,
544
- data: values,
545
- previousData,
546
- meta: {
341
+ );
342
+ }
343
+
344
+ if (optimisticUpdateMap.many) {
345
+ queryClient.setQueriesData(
346
+ resourceKeys.action("many").get(preferLegacyKeys),
347
+ (previous?: GetManyResponse<TData> | null) => {
348
+ if (typeof optimisticUpdateMap.many === "function") {
349
+ return optimisticUpdateMap.many(previous, values, id);
350
+ }
351
+
352
+ if (!previous) {
353
+ return null;
354
+ }
355
+
356
+ const data = previous.data.map((record: TData) => {
357
+ if (record.id?.toString() === id?.toString()) {
358
+ record = {
547
359
  id,
548
- dataProviderName,
549
- ...rest,
360
+ ...record,
361
+ ...values,
362
+ } as unknown as TData;
363
+ }
364
+ return record;
365
+ });
366
+ return {
367
+ ...previous,
368
+ data,
369
+ };
370
+ },
371
+ );
372
+ }
373
+
374
+ if (optimisticUpdateMap.detail) {
375
+ queryClient.setQueriesData(
376
+ resourceKeys
377
+ .action("one")
378
+ .id(id)
379
+ .params(preferredMeta ?? {})
380
+ .get(preferLegacyKeys),
381
+ (previous?: GetOneResponse<TData> | null) => {
382
+ if (typeof optimisticUpdateMap.detail === "function") {
383
+ return optimisticUpdateMap.detail(previous, values, id);
384
+ }
385
+
386
+ if (!previous) {
387
+ return null;
388
+ }
389
+
390
+ return {
391
+ ...previous,
392
+ data: {
393
+ ...previous.data,
394
+ ...values,
550
395
  },
551
- });
396
+ };
397
+ },
398
+ );
399
+ }
400
+ }
401
+
402
+ return {
403
+ previousQueries,
404
+ queryKey,
405
+ };
406
+ },
407
+ onSettled: (
408
+ _data,
409
+ _error,
410
+ {
411
+ id,
412
+ resource: resourceName,
413
+ dataProviderName,
414
+ invalidates = ["list", "many", "detail"],
415
+ },
416
+ ) => {
417
+ const { identifier } = select(resourceName);
418
+
419
+ invalidateStore({
420
+ resource: identifier,
421
+ dataProviderName: pickDataProvider(
422
+ identifier,
423
+ dataProviderName,
424
+ resources,
425
+ ),
426
+ invalidates,
427
+ id,
428
+ });
429
+
430
+ notificationDispatch({
431
+ type: ActionTypes.REMOVE,
432
+ payload: { id, resource: identifier },
433
+ });
434
+ },
435
+ onSuccess: (
436
+ data,
437
+ {
438
+ id,
439
+ resource: resourceName,
440
+ successNotification,
441
+ dataProviderName: dataProviderNameFromProp,
442
+ values,
443
+ meta,
444
+ metaData,
445
+ },
446
+ context,
447
+ ) => {
448
+ const { resource, identifier } = select(resourceName);
449
+ const resourceSingular = textTransformers.singular(identifier);
450
+
451
+ const dataProviderName = pickDataProvider(
452
+ identifier,
453
+ dataProviderNameFromProp,
454
+ resources,
455
+ );
456
+
457
+ const combinedMeta = getMeta({
458
+ resource,
459
+ meta: pickNotDeprecated(meta, metaData),
460
+ });
461
+
462
+ const notificationConfig =
463
+ typeof successNotification === "function"
464
+ ? successNotification(data, { id, values }, identifier)
465
+ : successNotification;
466
+
467
+ handleNotification(notificationConfig, {
468
+ key: `${id}-${identifier}-notification`,
469
+ description: translate("notifications.success", "Successful"),
470
+ message: translate(
471
+ "notifications.editSuccess",
472
+ {
473
+ resource: translate(
474
+ `${identifier}.${identifier}`,
475
+ resourceSingular,
476
+ ),
477
+ },
478
+ `Successfully updated ${resourceSingular}`,
479
+ ),
480
+ type: "success",
481
+ });
482
+
483
+ publish?.({
484
+ channel: `resources/${resource.name}`,
485
+ type: "updated",
486
+ payload: {
487
+ ids: data.data?.id ? [data.data.id] : undefined,
552
488
  },
553
- onError: (
554
- err: TError,
555
- { id, resource: resourceName, errorNotification, values },
556
- context,
557
- ) => {
558
- const { identifier } = select(resourceName);
559
-
560
- // set back the queries to the context:
561
- if (context) {
562
- for (const query of context.previousQueries) {
563
- queryClient.setQueryData(query[0], query[1]);
564
- }
565
- }
566
-
567
- if (err.message !== "mutationCancelled") {
568
- checkError?.(err);
569
-
570
- const resourceSingular = textTransformers.singular(identifier);
571
-
572
- const notificationConfig =
573
- typeof errorNotification === "function"
574
- ? errorNotification(err, { id, values }, identifier)
575
- : errorNotification;
576
-
577
- handleNotification(notificationConfig, {
578
- key: `${id}-${identifier}-notification`,
579
- message: translate(
580
- "notifications.editError",
581
- {
582
- resource: translate(
583
- `${identifier}.${identifier}`,
584
- resourceSingular,
585
- ),
586
- statusCode: err.statusCode,
587
- },
588
- `Error when updating ${resourceSingular} (status code: ${err.statusCode})`,
589
- ),
590
- description: err.message,
591
- type: "error",
592
- });
593
- }
489
+ date: new Date(),
490
+ meta: {
491
+ ...combinedMeta,
492
+ dataProviderName,
594
493
  },
595
- mutationKey: keys().data().mutation("update").get(preferLegacyKeys),
596
- ...mutationOptions,
494
+ });
495
+
496
+ let previousData: any;
497
+ if (context) {
498
+ const queryData = queryClient.getQueryData<UpdateResponse<TData>>(
499
+ context.queryKey.detail(id),
500
+ );
501
+
502
+ previousData = Object.keys(values || {}).reduce<any>((acc, item) => {
503
+ acc[item] = queryData?.data?.[item];
504
+ return acc;
505
+ }, {});
506
+ }
507
+
508
+ const {
509
+ fields: _fields,
510
+ operation: _operation,
511
+ variables: _variables,
512
+ ...rest
513
+ } = combinedMeta || {};
514
+ log?.mutate({
515
+ action: "update",
516
+ resource: resource.name,
517
+ data: values,
518
+ previousData,
597
519
  meta: {
598
- ...mutationOptions?.meta,
599
- ...getXRay("useUpdate", preferLegacyKeys),
520
+ id,
521
+ dataProviderName,
522
+ ...rest,
600
523
  },
601
- });
602
-
603
- const { elapsedTime } = useLoadingOvertime({
604
- isLoading: mutation.isLoading,
605
- interval: overtimeOptions?.interval,
606
- onInterval: overtimeOptions?.onInterval,
607
- });
608
-
609
- return { ...mutation, overtime: { elapsedTime } };
524
+ });
525
+ },
526
+ onError: (
527
+ err: TError,
528
+ { id, resource: resourceName, errorNotification, values },
529
+ context,
530
+ ) => {
531
+ const { identifier } = select(resourceName);
532
+
533
+ // set back the queries to the context:
534
+ if (context) {
535
+ for (const query of context.previousQueries) {
536
+ queryClient.setQueryData(query[0], query[1]);
537
+ }
538
+ }
539
+
540
+ if (err.message !== "mutationCancelled") {
541
+ checkError?.(err);
542
+
543
+ const resourceSingular = textTransformers.singular(identifier);
544
+
545
+ const notificationConfig =
546
+ typeof errorNotification === "function"
547
+ ? errorNotification(err, { id, values }, identifier)
548
+ : errorNotification;
549
+
550
+ handleNotification(notificationConfig, {
551
+ key: `${id}-${identifier}-notification`,
552
+ message: translate(
553
+ "notifications.editError",
554
+ {
555
+ resource: translate(
556
+ `${identifier}.${identifier}`,
557
+ resourceSingular,
558
+ ),
559
+ statusCode: err.statusCode,
560
+ },
561
+ `Error when updating ${resourceSingular} (status code: ${err.statusCode})`,
562
+ ),
563
+ description: err.message,
564
+ type: "error",
565
+ });
566
+ }
567
+ },
568
+ mutationKey: keys().data().mutation("update").get(preferLegacyKeys),
569
+ ...mutationOptions,
570
+ meta: {
571
+ ...mutationOptions?.meta,
572
+ ...getXRay("useUpdate", preferLegacyKeys),
573
+ },
574
+ });
575
+
576
+ const { elapsedTime } = useLoadingOvertime({
577
+ isLoading: mutation.isLoading,
578
+ interval: overtimeOptions?.interval,
579
+ onInterval: overtimeOptions?.onInterval,
580
+ });
581
+
582
+ return { ...mutation, overtime: { elapsedTime } };
610
583
  };