@gravity-ui/data-source 0.6.1 → 0.8.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 (278) hide show
  1. package/README.md +752 -15
  2. package/build/cjs/core/index.d.ts +3 -1
  3. package/build/cjs/core/index.js +7 -0
  4. package/build/cjs/core/index.js.map +1 -1
  5. package/build/cjs/core/types/DataManager.d.ts +5 -0
  6. package/build/cjs/core/types/DataManager.js.map +1 -1
  7. package/build/cjs/core/types/DataSource.d.ts +15 -19
  8. package/build/cjs/core/types/DataSource.js.map +1 -1
  9. package/build/cjs/core/types/Normalizer.d.ts +29 -0
  10. package/build/cjs/core/types/Normalizer.js +6 -0
  11. package/build/cjs/core/types/Normalizer.js.map +1 -0
  12. package/build/cjs/core/utils/__tests__/composeFullKey.test.js +34 -0
  13. package/build/cjs/core/utils/__tests__/composeFullKey.test.js.map +1 -0
  14. package/build/cjs/core/utils/__tests__/composeKey.test.js +32 -0
  15. package/build/cjs/core/utils/__tests__/composeKey.test.js.map +1 -0
  16. package/build/cjs/core/utils/__tests__/getError.test.js +31 -0
  17. package/build/cjs/core/utils/__tests__/getError.test.js.map +1 -0
  18. package/build/cjs/core/utils/__tests__/getStatus.test.js +49 -0
  19. package/build/cjs/core/utils/__tests__/getStatus.test.js.map +1 -0
  20. package/build/cjs/core/utils/__tests__/hasTag.test.js +31 -0
  21. package/build/cjs/core/utils/__tests__/hasTag.test.js.map +1 -0
  22. package/build/cjs/core/utils/__tests__/mergeStatuses.test.js +25 -0
  23. package/build/cjs/core/utils/__tests__/mergeStatuses.test.js.map +1 -0
  24. package/build/cjs/core/utils/__tests__/skipContext.test.js +70 -0
  25. package/build/cjs/core/utils/__tests__/skipContext.test.js.map +1 -0
  26. package/build/cjs/core/utils/__tests__/withCancellation.test.js +106 -0
  27. package/build/cjs/core/utils/__tests__/withCancellation.test.js.map +1 -0
  28. package/build/cjs/core/utils/__tests__/withCatch.test.js +208 -0
  29. package/build/cjs/core/utils/__tests__/withCatch.test.js.map +1 -0
  30. package/build/cjs/core/utils/withCatch.d.ts +26 -0
  31. package/build/cjs/core/utils/withCatch.js +37 -0
  32. package/build/cjs/core/utils/withCatch.js.map +1 -0
  33. package/build/cjs/react/DataManagerProvider.d.ts +7 -0
  34. package/build/cjs/react/DataManagerProvider.js +19 -0
  35. package/build/cjs/react/DataManagerProvider.js.map +1 -0
  36. package/build/cjs/react/__tests__/DataManagerContext.test.js +47 -0
  37. package/build/cjs/react/__tests__/DataManagerContext.test.js.map +1 -0
  38. package/build/cjs/react/__tests__/withDataManager.test.js +61 -0
  39. package/build/cjs/react/__tests__/withDataManager.test.js.map +1 -0
  40. package/build/cjs/react/components/DataInfiniteLoader/__tests__/DataInfiniteLoader.test.js +187 -0
  41. package/build/cjs/react/components/DataInfiniteLoader/__tests__/DataInfiniteLoader.test.js.map +1 -0
  42. package/build/cjs/react/components/DataLoader/__tests__/DataLoader.test.js +119 -0
  43. package/build/cjs/react/components/DataLoader/__tests__/DataLoader.test.js.map +1 -0
  44. package/build/cjs/react/index.d.ts +2 -0
  45. package/build/cjs/react/index.js +8 -0
  46. package/build/cjs/react/index.js.map +1 -1
  47. package/build/cjs/react/withDataManager.d.ts +1 -1
  48. package/build/cjs/react/withDataManager.js +3 -3
  49. package/build/cjs/react/withDataManager.js.map +1 -1
  50. package/build/cjs/react-query/ClientDataManager.d.ts +11 -2
  51. package/build/cjs/react-query/ClientDataManager.js +76 -9
  52. package/build/cjs/react-query/ClientDataManager.js.map +1 -1
  53. package/build/cjs/react-query/DataSourceProvider.d.ts +7 -0
  54. package/build/cjs/react-query/DataSourceProvider.js +35 -0
  55. package/build/cjs/react-query/DataSourceProvider.js.map +1 -0
  56. package/build/cjs/react-query/__tests__/createQueryNormalizer.test.js +177 -0
  57. package/build/cjs/react-query/__tests__/createQueryNormalizer.test.js.map +1 -0
  58. package/build/cjs/react-query/__tests__/normalizationEdgeCases.test.js +100 -0
  59. package/build/cjs/react-query/__tests__/normalizationEdgeCases.test.js.map +1 -0
  60. package/build/cjs/react-query/__tests__/subscriptions.test.js +1180 -0
  61. package/build/cjs/react-query/__tests__/subscriptions.test.js.map +1 -0
  62. package/build/cjs/react-query/__tests__/threeLevelIntegration.test.js +514 -0
  63. package/build/cjs/react-query/__tests__/threeLevelIntegration.test.js.map +1 -0
  64. package/build/cjs/react-query/__tests__/updateQueriesFromMutationData.test.js +229 -0
  65. package/build/cjs/react-query/__tests__/updateQueriesFromMutationData.test.js.map +1 -0
  66. package/build/cjs/react-query/constants.d.ts +2 -0
  67. package/build/cjs/react-query/constants.js +9 -0
  68. package/build/cjs/react-query/constants.js.map +1 -0
  69. package/build/cjs/react-query/hooks/__tests__/useQueryContext.test.js +55 -0
  70. package/build/cjs/react-query/hooks/__tests__/useQueryContext.test.js.map +1 -0
  71. package/build/cjs/react-query/hooks/__tests__/useQueryData.refetch.test.js +195 -0
  72. package/build/cjs/react-query/hooks/__tests__/useQueryData.refetch.test.js.map +1 -0
  73. package/build/cjs/react-query/hooks/__tests__/useQueryData.test.js +97 -0
  74. package/build/cjs/react-query/hooks/__tests__/useQueryData.test.js.map +1 -0
  75. package/build/cjs/react-query/hooks/__tests__/useQueryResponses.test.js +77 -0
  76. package/build/cjs/react-query/hooks/__tests__/useQueryResponses.test.js.map +1 -0
  77. package/build/cjs/react-query/hooks/__tests__/useRefetchAll.test.js +79 -0
  78. package/build/cjs/react-query/hooks/__tests__/useRefetchAll.test.js.map +1 -0
  79. package/build/cjs/react-query/hooks/__tests__/useRefetchErrored.test.js +117 -0
  80. package/build/cjs/react-query/hooks/__tests__/useRefetchErrored.test.js.map +1 -0
  81. package/build/cjs/react-query/hooks/__tests__/useRefetchInterval.test.js +156 -0
  82. package/build/cjs/react-query/hooks/__tests__/useRefetchInterval.test.js.map +1 -0
  83. package/build/cjs/react-query/hooks/useRefetchInterval.d.ts +1 -1
  84. package/build/cjs/react-query/impl/infinite/factory.d.ts +1 -1
  85. package/build/cjs/react-query/impl/infinite/factory.js.map +1 -1
  86. package/build/cjs/react-query/impl/infinite/hooks.js +4 -1
  87. package/build/cjs/react-query/impl/infinite/hooks.js.map +1 -1
  88. package/build/cjs/react-query/impl/infinite/types.d.ts +9 -9
  89. package/build/cjs/react-query/impl/infinite/types.js.map +1 -1
  90. package/build/cjs/react-query/impl/infinite/utils.js +11 -22
  91. package/build/cjs/react-query/impl/infinite/utils.js.map +1 -1
  92. package/build/cjs/react-query/impl/plain/factory.d.ts +1 -1
  93. package/build/cjs/react-query/impl/plain/factory.js.map +1 -1
  94. package/build/cjs/react-query/impl/plain/hooks.js +4 -1
  95. package/build/cjs/react-query/impl/plain/hooks.js.map +1 -1
  96. package/build/cjs/react-query/impl/plain/types.d.ts +6 -6
  97. package/build/cjs/react-query/impl/plain/types.js.map +1 -1
  98. package/build/cjs/react-query/impl/plain/utils.js +12 -23
  99. package/build/cjs/react-query/impl/plain/utils.js.map +1 -1
  100. package/build/cjs/react-query/index.d.ts +2 -0
  101. package/build/cjs/react-query/index.js +7 -0
  102. package/build/cjs/react-query/index.js.map +1 -1
  103. package/build/cjs/react-query/types/normalizer.d.ts +21 -0
  104. package/build/cjs/react-query/types/normalizer.js +6 -0
  105. package/build/cjs/react-query/types/normalizer.js.map +1 -0
  106. package/build/cjs/react-query/types/options.d.ts +12 -0
  107. package/build/cjs/react-query/types/options.js.map +1 -1
  108. package/build/cjs/react-query/utils/__tests__/formatNullableValue.test.js +27 -0
  109. package/build/cjs/react-query/utils/__tests__/formatNullableValue.test.js.map +1 -0
  110. package/build/cjs/react-query/utils/__tests__/getProgressiveRefetch.test.js +76 -0
  111. package/build/cjs/react-query/utils/__tests__/getProgressiveRefetch.test.js.map +1 -0
  112. package/build/cjs/react-query/utils/__tests__/normalizeStatus.test.js +30 -0
  113. package/build/cjs/react-query/utils/__tests__/normalizeStatus.test.js.map +1 -0
  114. package/build/cjs/react-query/utils/__tests__/notReachable.test.js +35 -0
  115. package/build/cjs/react-query/utils/__tests__/notReachable.test.js.map +1 -0
  116. package/build/cjs/react-query/utils/__tests__/parseNullableValue.test.js +27 -0
  117. package/build/cjs/react-query/utils/__tests__/parseNullableValue.test.js.map +1 -0
  118. package/build/cjs/react-query/utils/formatNullableValue.d.ts +2 -0
  119. package/build/cjs/react-query/utils/formatNullableValue.js +17 -0
  120. package/build/cjs/react-query/utils/formatNullableValue.js.map +1 -0
  121. package/build/cjs/react-query/utils/getProgressiveRefetch.d.ts +2 -2
  122. package/build/cjs/react-query/utils/normalize.d.ts +22 -0
  123. package/build/cjs/react-query/utils/normalize.js +150 -0
  124. package/build/cjs/react-query/utils/normalize.js.map +1 -0
  125. package/build/cjs/react-query/utils/parseNullableValue.d.ts +2 -0
  126. package/build/cjs/react-query/utils/parseNullableValue.js +17 -0
  127. package/build/cjs/react-query/utils/parseNullableValue.js.map +1 -0
  128. package/build/cjs/react-query/utils/warn.d.ts +1 -0
  129. package/build/cjs/react-query/utils/warn.js +15 -0
  130. package/build/cjs/react-query/utils/warn.js.map +1 -0
  131. package/build/cjs/react-query/utils/warnDisabledRefetch.d.ts +1 -0
  132. package/build/cjs/react-query/utils/warnDisabledRefetch.js +11 -0
  133. package/build/cjs/react-query/utils/warnDisabledRefetch.js.map +1 -0
  134. package/build/cjs/setupTests.d.ts +1 -0
  135. package/build/cjs/setupTests.js +4 -0
  136. package/build/cjs/setupTests.js.map +1 -0
  137. package/build/esm/core/index.d.ts +3 -1
  138. package/build/esm/core/index.js +1 -0
  139. package/build/esm/core/index.js.map +1 -1
  140. package/build/esm/core/types/DataManager.d.ts +5 -0
  141. package/build/esm/core/types/DataManager.js.map +1 -1
  142. package/build/esm/core/types/DataSource.d.ts +15 -19
  143. package/build/esm/core/types/DataSource.js.map +1 -1
  144. package/build/esm/core/types/Normalizer.d.ts +29 -0
  145. package/build/esm/core/types/Normalizer.js +2 -0
  146. package/build/esm/core/types/Normalizer.js.map +1 -0
  147. package/build/esm/core/utils/__tests__/composeFullKey.test.js +32 -0
  148. package/build/esm/core/utils/__tests__/composeFullKey.test.js.map +1 -0
  149. package/build/esm/core/utils/__tests__/composeKey.test.js +30 -0
  150. package/build/esm/core/utils/__tests__/composeKey.test.js.map +1 -0
  151. package/build/esm/core/utils/__tests__/getError.test.js +29 -0
  152. package/build/esm/core/utils/__tests__/getError.test.js.map +1 -0
  153. package/build/esm/core/utils/__tests__/getStatus.test.js +47 -0
  154. package/build/esm/core/utils/__tests__/getStatus.test.js.map +1 -0
  155. package/build/esm/core/utils/__tests__/hasTag.test.js +29 -0
  156. package/build/esm/core/utils/__tests__/hasTag.test.js.map +1 -0
  157. package/build/esm/core/utils/__tests__/mergeStatuses.test.js +23 -0
  158. package/build/esm/core/utils/__tests__/mergeStatuses.test.js.map +1 -0
  159. package/build/esm/core/utils/__tests__/skipContext.test.js +67 -0
  160. package/build/esm/core/utils/__tests__/skipContext.test.js.map +1 -0
  161. package/build/esm/core/utils/__tests__/withCancellation.test.js +104 -0
  162. package/build/esm/core/utils/__tests__/withCancellation.test.js.map +1 -0
  163. package/build/esm/core/utils/__tests__/withCatch.test.js +205 -0
  164. package/build/esm/core/utils/__tests__/withCatch.test.js.map +1 -0
  165. package/build/esm/core/utils/withCatch.d.ts +26 -0
  166. package/build/esm/core/utils/withCatch.js +31 -0
  167. package/build/esm/core/utils/withCatch.js.map +1 -0
  168. package/build/esm/react/DataManagerProvider.d.ts +7 -0
  169. package/build/esm/react/DataManagerProvider.js +12 -0
  170. package/build/esm/react/DataManagerProvider.js.map +1 -0
  171. package/build/esm/react/__tests__/DataManagerContext.test.js +44 -0
  172. package/build/esm/react/__tests__/DataManagerContext.test.js.map +1 -0
  173. package/build/esm/react/__tests__/withDataManager.test.js +58 -0
  174. package/build/esm/react/__tests__/withDataManager.test.js.map +1 -0
  175. package/build/esm/react/components/DataInfiniteLoader/__tests__/DataInfiniteLoader.test.js +184 -0
  176. package/build/esm/react/components/DataInfiniteLoader/__tests__/DataInfiniteLoader.test.js.map +1 -0
  177. package/build/esm/react/components/DataLoader/__tests__/DataLoader.test.js +116 -0
  178. package/build/esm/react/components/DataLoader/__tests__/DataLoader.test.js.map +1 -0
  179. package/build/esm/react/index.d.ts +2 -0
  180. package/build/esm/react/index.js +1 -0
  181. package/build/esm/react/index.js.map +1 -1
  182. package/build/esm/react/withDataManager.d.ts +1 -1
  183. package/build/esm/react/withDataManager.js +3 -3
  184. package/build/esm/react/withDataManager.js.map +1 -1
  185. package/build/esm/react-query/ClientDataManager.d.ts +11 -2
  186. package/build/esm/react-query/ClientDataManager.js +70 -3
  187. package/build/esm/react-query/ClientDataManager.js.map +1 -1
  188. package/build/esm/react-query/DataSourceProvider.d.ts +7 -0
  189. package/build/esm/react-query/DataSourceProvider.js +28 -0
  190. package/build/esm/react-query/DataSourceProvider.js.map +1 -0
  191. package/build/esm/react-query/__tests__/createQueryNormalizer.test.js +174 -0
  192. package/build/esm/react-query/__tests__/createQueryNormalizer.test.js.map +1 -0
  193. package/build/esm/react-query/__tests__/normalizationEdgeCases.test.js +98 -0
  194. package/build/esm/react-query/__tests__/normalizationEdgeCases.test.js.map +1 -0
  195. package/build/esm/react-query/__tests__/subscriptions.test.js +1176 -0
  196. package/build/esm/react-query/__tests__/subscriptions.test.js.map +1 -0
  197. package/build/esm/react-query/__tests__/threeLevelIntegration.test.js +511 -0
  198. package/build/esm/react-query/__tests__/threeLevelIntegration.test.js.map +1 -0
  199. package/build/esm/react-query/__tests__/updateQueriesFromMutationData.test.js +227 -0
  200. package/build/esm/react-query/__tests__/updateQueriesFromMutationData.test.js.map +1 -0
  201. package/build/esm/react-query/constants.d.ts +2 -0
  202. package/build/esm/react-query/constants.js +3 -0
  203. package/build/esm/react-query/constants.js.map +1 -0
  204. package/build/esm/react-query/hooks/__tests__/useQueryContext.test.js +52 -0
  205. package/build/esm/react-query/hooks/__tests__/useQueryContext.test.js.map +1 -0
  206. package/build/esm/react-query/hooks/__tests__/useQueryData.refetch.test.js +192 -0
  207. package/build/esm/react-query/hooks/__tests__/useQueryData.refetch.test.js.map +1 -0
  208. package/build/esm/react-query/hooks/__tests__/useQueryData.test.js +95 -0
  209. package/build/esm/react-query/hooks/__tests__/useQueryData.test.js.map +1 -0
  210. package/build/esm/react-query/hooks/__tests__/useQueryResponses.test.js +74 -0
  211. package/build/esm/react-query/hooks/__tests__/useQueryResponses.test.js.map +1 -0
  212. package/build/esm/react-query/hooks/__tests__/useRefetchAll.test.js +77 -0
  213. package/build/esm/react-query/hooks/__tests__/useRefetchAll.test.js.map +1 -0
  214. package/build/esm/react-query/hooks/__tests__/useRefetchErrored.test.js +115 -0
  215. package/build/esm/react-query/hooks/__tests__/useRefetchErrored.test.js.map +1 -0
  216. package/build/esm/react-query/hooks/__tests__/useRefetchInterval.test.js +154 -0
  217. package/build/esm/react-query/hooks/__tests__/useRefetchInterval.test.js.map +1 -0
  218. package/build/esm/react-query/hooks/useRefetchInterval.d.ts +1 -1
  219. package/build/esm/react-query/impl/infinite/factory.d.ts +1 -1
  220. package/build/esm/react-query/impl/infinite/factory.js.map +1 -1
  221. package/build/esm/react-query/impl/infinite/hooks.js +5 -2
  222. package/build/esm/react-query/impl/infinite/hooks.js.map +1 -1
  223. package/build/esm/react-query/impl/infinite/types.d.ts +9 -9
  224. package/build/esm/react-query/impl/infinite/types.js.map +1 -1
  225. package/build/esm/react-query/impl/infinite/utils.js +9 -20
  226. package/build/esm/react-query/impl/infinite/utils.js.map +1 -1
  227. package/build/esm/react-query/impl/plain/factory.d.ts +1 -1
  228. package/build/esm/react-query/impl/plain/factory.js.map +1 -1
  229. package/build/esm/react-query/impl/plain/hooks.js +5 -2
  230. package/build/esm/react-query/impl/plain/hooks.js.map +1 -1
  231. package/build/esm/react-query/impl/plain/types.d.ts +6 -6
  232. package/build/esm/react-query/impl/plain/types.js.map +1 -1
  233. package/build/esm/react-query/impl/plain/utils.js +10 -21
  234. package/build/esm/react-query/impl/plain/utils.js.map +1 -1
  235. package/build/esm/react-query/index.d.ts +2 -0
  236. package/build/esm/react-query/index.js +1 -0
  237. package/build/esm/react-query/index.js.map +1 -1
  238. package/build/esm/react-query/types/normalizer.d.ts +21 -0
  239. package/build/esm/react-query/types/normalizer.js +2 -0
  240. package/build/esm/react-query/types/normalizer.js.map +1 -0
  241. package/build/esm/react-query/types/options.d.ts +12 -0
  242. package/build/esm/react-query/types/options.js.map +1 -1
  243. package/build/esm/react-query/utils/__tests__/formatNullableValue.test.js +25 -0
  244. package/build/esm/react-query/utils/__tests__/formatNullableValue.test.js.map +1 -0
  245. package/build/esm/react-query/utils/__tests__/getProgressiveRefetch.test.js +74 -0
  246. package/build/esm/react-query/utils/__tests__/getProgressiveRefetch.test.js.map +1 -0
  247. package/build/esm/react-query/utils/__tests__/normalizeStatus.test.js +28 -0
  248. package/build/esm/react-query/utils/__tests__/normalizeStatus.test.js.map +1 -0
  249. package/build/esm/react-query/utils/__tests__/notReachable.test.js +33 -0
  250. package/build/esm/react-query/utils/__tests__/notReachable.test.js.map +1 -0
  251. package/build/esm/react-query/utils/__tests__/parseNullableValue.test.js +25 -0
  252. package/build/esm/react-query/utils/__tests__/parseNullableValue.test.js.map +1 -0
  253. package/build/esm/react-query/utils/formatNullableValue.d.ts +2 -0
  254. package/build/esm/react-query/utils/formatNullableValue.js +11 -0
  255. package/build/esm/react-query/utils/formatNullableValue.js.map +1 -0
  256. package/build/esm/react-query/utils/getProgressiveRefetch.d.ts +2 -2
  257. package/build/esm/react-query/utils/normalize.d.ts +22 -0
  258. package/build/esm/react-query/utils/normalize.js +143 -0
  259. package/build/esm/react-query/utils/normalize.js.map +1 -0
  260. package/build/esm/react-query/utils/parseNullableValue.d.ts +2 -0
  261. package/build/esm/react-query/utils/parseNullableValue.js +11 -0
  262. package/build/esm/react-query/utils/parseNullableValue.js.map +1 -0
  263. package/build/esm/react-query/utils/warn.d.ts +1 -0
  264. package/build/esm/react-query/utils/warn.js +9 -0
  265. package/build/esm/react-query/utils/warn.js.map +1 -0
  266. package/build/esm/react-query/utils/warnDisabledRefetch.d.ts +1 -0
  267. package/build/esm/react-query/utils/warnDisabledRefetch.js +5 -0
  268. package/build/esm/react-query/utils/warnDisabledRefetch.js.map +1 -0
  269. package/build/esm/setupTests.d.ts +1 -0
  270. package/build/esm/setupTests.js +2 -0
  271. package/build/esm/setupTests.js.map +1 -0
  272. package/package.json +18 -13
  273. package/build/cjs/react-query/impl/utils.d.ts +0 -4
  274. package/build/cjs/react-query/impl/utils.js +0 -27
  275. package/build/cjs/react-query/impl/utils.js.map +0 -1
  276. package/build/esm/react-query/impl/utils.d.ts +0 -4
  277. package/build/esm/react-query/impl/utils.js +0 -21
  278. package/build/esm/react-query/impl/utils.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","fireEvent","render","screen","DataInfiniteLoader","jsx","_jsx","jsxs","_jsxs","MockLoadingView","children","MockErrorView","_ref","error","action","concat","message","onClick","handler","MockMoreView","_ref2","isLoading","describe","renderDataInfiniteLoader","props","arguments","length","undefined","fetchNextPage","jest","fn","defaultProps","status","hasNextPage","isFetchingNextPage","LoadingView","ErrorView","MoreView","_objectSpread","it","expect","getByTestId","toBeInTheDocument","queryByTestId","not","Error","getByText","_renderDataInfiniteLo","click","toHaveBeenCalledTimes","errorAction","loadingViewProps","customProp","toHaveBeenCalledWith","objectContaining","errorViewProps","moreViewProps"],"sources":["DataInfiniteLoader.test.tsx"],"sourcesContent":["import React from 'react';\n\nimport {fireEvent, render, screen} from '@testing-library/react';\n\nimport type {ErrorViewProps} from '../../types';\nimport {DataInfiniteLoader} from '../DataInfiniteLoader';\nimport type {DataInfiniteLoaderProps, MoreViewProps} from '../types';\n\nconst MockLoadingView = () => <div data-testid=\"loading-view\">Loading...</div>;\nconst MockErrorView: React.FC<ErrorViewProps<Error>> = ({error, action}) => (\n <div data-testid=\"error-view\">\n {error ? `Error: ${error.message}` : 'No error'}\n {action ? (\n <button data-testid=\"error-action\" onClick={action.handler}>\n {action.children || 'Retry'}\n </button>\n ) : null}\n </div>\n);\nconst MockMoreView: React.FC<MoreViewProps> = ({isLoading, onClick}) => (\n <div data-testid=\"more-view\">\n {isLoading ? (\n <span data-testid=\"more-view-loading\">Loading more...</span>\n ) : (\n <button data-testid=\"more-view-button\" onClick={onClick}>\n Load more\n </button>\n )}\n </div>\n);\n\ndescribe('DataInfiniteLoader', () => {\n const renderDataInfiniteLoader = (props: Partial<DataInfiniteLoaderProps<Error>> = {}) => {\n const fetchNextPage = jest.fn();\n const defaultProps: DataInfiniteLoaderProps<Error> = {\n status: 'success',\n error: null,\n hasNextPage: true,\n fetchNextPage,\n isFetchingNextPage: false,\n LoadingView: MockLoadingView,\n ErrorView: MockErrorView,\n MoreView: MockMoreView,\n children: <div data-testid=\"content\">Content</div>,\n };\n\n return {\n ...render(<DataInfiniteLoader {...defaultProps} {...props} />),\n fetchNextPage,\n };\n };\n\n it('should render children and MoreView when status is success and hasNextPage is true', () => {\n renderDataInfiniteLoader({status: 'success', hasNextPage: true});\n expect(screen.getByTestId('content')).toBeInTheDocument();\n expect(screen.getByTestId('more-view')).toBeInTheDocument();\n expect(screen.queryByTestId('loading-view')).not.toBeInTheDocument();\n expect(screen.queryByTestId('error-view')).not.toBeInTheDocument();\n });\n\n it('should render only children when status is success and hasNextPage is false', () => {\n renderDataInfiniteLoader({status: 'success', hasNextPage: false});\n expect(screen.getByTestId('content')).toBeInTheDocument();\n expect(screen.queryByTestId('more-view')).not.toBeInTheDocument();\n expect(screen.queryByTestId('loading-view')).not.toBeInTheDocument();\n expect(screen.queryByTestId('error-view')).not.toBeInTheDocument();\n });\n\n it('should render LoadingView when status is loading', () => {\n renderDataInfiniteLoader({status: 'loading'});\n expect(screen.getByTestId('loading-view')).toBeInTheDocument();\n expect(screen.queryByTestId('content')).not.toBeInTheDocument();\n expect(screen.queryByTestId('more-view')).not.toBeInTheDocument();\n expect(screen.queryByTestId('error-view')).not.toBeInTheDocument();\n });\n\n it('should render ErrorView when status is error', () => {\n const error = new Error('Test error');\n renderDataInfiniteLoader({status: 'error', error});\n expect(screen.getByTestId('error-view')).toBeInTheDocument();\n expect(screen.queryByTestId('content')).not.toBeInTheDocument();\n expect(screen.queryByTestId('more-view')).not.toBeInTheDocument();\n expect(screen.queryByTestId('loading-view')).not.toBeInTheDocument();\n expect(screen.getByText(/Test error/)).toBeInTheDocument();\n });\n\n it('should call fetchNextPage when clicking on load more button', () => {\n const {fetchNextPage} = renderDataInfiniteLoader({\n status: 'success',\n hasNextPage: true,\n isFetchingNextPage: false,\n });\n fireEvent.click(screen.getByTestId('more-view-button'));\n expect(fetchNextPage).toHaveBeenCalledTimes(1);\n });\n\n it('should show loading state in MoreView when isFetchingNextPage is true', () => {\n renderDataInfiniteLoader({\n status: 'success',\n hasNextPage: true,\n isFetchingNextPage: true,\n });\n expect(screen.getByTestId('more-view-loading')).toBeInTheDocument();\n expect(screen.queryByTestId('more-view-button')).not.toBeInTheDocument();\n });\n\n it('should pass errorAction to ErrorView', () => {\n const error = new Error('Test error');\n const errorAction = jest.fn();\n renderDataInfiniteLoader({\n status: 'error',\n error,\n errorAction,\n });\n expect(screen.getByTestId('error-action')).toBeInTheDocument();\n });\n\n it('should pass errorAction with custom children to ErrorView', () => {\n const error = new Error('Test error');\n const errorAction = {\n handler: jest.fn(),\n children: 'Custom action',\n };\n renderDataInfiniteLoader({\n status: 'error',\n error,\n errorAction,\n });\n expect(screen.getByText('Custom action')).toBeInTheDocument();\n });\n\n it('should pass loadingViewProps to LoadingView', () => {\n const LoadingView = jest.fn(MockLoadingView);\n const loadingViewProps = {customProp: 'test'};\n renderDataInfiniteLoader({\n status: 'loading',\n LoadingView,\n loadingViewProps,\n });\n expect(LoadingView).toHaveBeenCalledWith(\n expect.objectContaining(loadingViewProps),\n undefined,\n );\n });\n\n it('should pass errorViewProps to ErrorView', () => {\n const ErrorView = jest.fn(MockErrorView);\n const errorViewProps = {customProp: 'test'};\n const error = new Error('Test error');\n renderDataInfiniteLoader({\n status: 'error',\n error,\n ErrorView,\n errorViewProps,\n });\n expect(ErrorView).toHaveBeenCalledWith(expect.objectContaining(errorViewProps), undefined);\n });\n\n it('should pass moreViewProps to MoreView', () => {\n const MoreView = jest.fn(MockMoreView);\n const moreViewProps = {customProp: 'test'};\n renderDataInfiniteLoader({\n status: 'success',\n hasNextPage: true,\n MoreView,\n moreViewProps,\n });\n expect(MoreView).toHaveBeenCalledWith(expect.objectContaining(moreViewProps), undefined);\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,116 @@
1
+ import _objectSpread from "@babel/runtime/helpers/objectSpread2";
2
+ import React from 'react';
3
+ import { render, screen } from '@testing-library/react';
4
+ import { DataLoader } from '../DataLoader';
5
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
+ var MockLoadingView = function MockLoadingView() {
7
+ return /*#__PURE__*/_jsx("div", {
8
+ "data-testid": "loading-view",
9
+ children: "Loading..."
10
+ });
11
+ };
12
+ var MockErrorView = function MockErrorView(_ref) {
13
+ var error = _ref.error,
14
+ action = _ref.action;
15
+ return /*#__PURE__*/_jsxs("div", {
16
+ "data-testid": "error-view",
17
+ children: [error ? "Error: ".concat(error.message) : 'No error', action ? /*#__PURE__*/_jsx("button", {
18
+ "data-testid": "error-action",
19
+ onClick: action.handler,
20
+ children: action.children || 'Retry'
21
+ }) : null]
22
+ });
23
+ };
24
+ describe('DataLoader', function () {
25
+ var renderDataLoader = function renderDataLoader() {
26
+ var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
27
+ var defaultProps = {
28
+ status: 'success',
29
+ error: null,
30
+ LoadingView: MockLoadingView,
31
+ ErrorView: MockErrorView,
32
+ children: /*#__PURE__*/_jsx("div", {
33
+ "data-testid": "content",
34
+ children: "Content"
35
+ })
36
+ };
37
+ return render(/*#__PURE__*/_jsx(DataLoader, _objectSpread(_objectSpread({}, defaultProps), props)));
38
+ };
39
+ it('should render children when status is success', function () {
40
+ renderDataLoader({
41
+ status: 'success'
42
+ });
43
+ expect(screen.getByTestId('content')).toBeInTheDocument();
44
+ expect(screen.queryByTestId('loading-view')).not.toBeInTheDocument();
45
+ expect(screen.queryByTestId('error-view')).not.toBeInTheDocument();
46
+ });
47
+ it('should render LoadingView when status is loading', function () {
48
+ renderDataLoader({
49
+ status: 'loading'
50
+ });
51
+ expect(screen.getByTestId('loading-view')).toBeInTheDocument();
52
+ expect(screen.queryByTestId('content')).not.toBeInTheDocument();
53
+ expect(screen.queryByTestId('error-view')).not.toBeInTheDocument();
54
+ });
55
+ it('should render ErrorView when status is error', function () {
56
+ var error = new Error('Test error');
57
+ renderDataLoader({
58
+ status: 'error',
59
+ error: error
60
+ });
61
+ expect(screen.getByTestId('error-view')).toBeInTheDocument();
62
+ expect(screen.queryByTestId('content')).not.toBeInTheDocument();
63
+ expect(screen.queryByTestId('loading-view')).not.toBeInTheDocument();
64
+ expect(screen.getByText(/Test error/)).toBeInTheDocument();
65
+ });
66
+ it('should pass errorAction to ErrorView', function () {
67
+ var error = new Error('Test error');
68
+ var errorAction = jest.fn();
69
+ renderDataLoader({
70
+ status: 'error',
71
+ error: error,
72
+ errorAction: errorAction
73
+ });
74
+ expect(screen.getByTestId('error-action')).toBeInTheDocument();
75
+ });
76
+ it('should pass errorAction with custom children to ErrorView', function () {
77
+ var error = new Error('Test error');
78
+ var errorAction = {
79
+ handler: jest.fn(),
80
+ children: 'Custom action'
81
+ };
82
+ renderDataLoader({
83
+ status: 'error',
84
+ error: error,
85
+ errorAction: errorAction
86
+ });
87
+ expect(screen.getByText('Custom action')).toBeInTheDocument();
88
+ });
89
+ it('should pass loadingViewProps to LoadingView', function () {
90
+ var LoadingView = jest.fn(MockLoadingView);
91
+ var loadingViewProps = {
92
+ customProp: 'test'
93
+ };
94
+ renderDataLoader({
95
+ status: 'loading',
96
+ LoadingView: LoadingView,
97
+ loadingViewProps: loadingViewProps
98
+ });
99
+ expect(LoadingView).toHaveBeenCalledWith(expect.objectContaining(loadingViewProps), undefined);
100
+ });
101
+ it('should pass errorViewProps to ErrorView', function () {
102
+ var ErrorView = jest.fn(MockErrorView);
103
+ var errorViewProps = {
104
+ customProp: 'test'
105
+ };
106
+ var error = new Error('Test error');
107
+ renderDataLoader({
108
+ status: 'error',
109
+ error: error,
110
+ ErrorView: ErrorView,
111
+ errorViewProps: errorViewProps
112
+ });
113
+ expect(ErrorView).toHaveBeenCalledWith(expect.objectContaining(errorViewProps), undefined);
114
+ });
115
+ });
116
+ // #sourceMappingURL=DataLoader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","render","screen","DataLoader","jsx","_jsx","jsxs","_jsxs","MockLoadingView","children","MockErrorView","_ref","error","action","concat","message","onClick","handler","describe","renderDataLoader","props","arguments","length","undefined","defaultProps","status","LoadingView","ErrorView","_objectSpread","it","expect","getByTestId","toBeInTheDocument","queryByTestId","not","Error","getByText","errorAction","jest","fn","loadingViewProps","customProp","toHaveBeenCalledWith","objectContaining","errorViewProps"],"sources":["DataLoader.test.tsx"],"sourcesContent":["import React from 'react';\n\nimport {render, screen} from '@testing-library/react';\n\nimport type {ErrorViewProps} from '../../types';\nimport {DataLoader} from '../DataLoader';\nimport type {DataLoaderProps} from '../types';\n\nconst MockLoadingView = () => <div data-testid=\"loading-view\">Loading...</div>;\nconst MockErrorView: React.FC<ErrorViewProps<Error>> = ({error, action}) => (\n <div data-testid=\"error-view\">\n {error ? `Error: ${error.message}` : 'No error'}\n {action ? (\n <button data-testid=\"error-action\" onClick={action.handler}>\n {action.children || 'Retry'}\n </button>\n ) : null}\n </div>\n);\n\ndescribe('DataLoader', () => {\n const renderDataLoader = (props: Partial<DataLoaderProps<Error>> = {}) => {\n const defaultProps: DataLoaderProps<Error> = {\n status: 'success',\n error: null,\n LoadingView: MockLoadingView,\n ErrorView: MockErrorView,\n children: <div data-testid=\"content\">Content</div>,\n };\n\n return render(<DataLoader {...defaultProps} {...props} />);\n };\n\n it('should render children when status is success', () => {\n renderDataLoader({status: 'success'});\n expect(screen.getByTestId('content')).toBeInTheDocument();\n expect(screen.queryByTestId('loading-view')).not.toBeInTheDocument();\n expect(screen.queryByTestId('error-view')).not.toBeInTheDocument();\n });\n\n it('should render LoadingView when status is loading', () => {\n renderDataLoader({status: 'loading'});\n expect(screen.getByTestId('loading-view')).toBeInTheDocument();\n expect(screen.queryByTestId('content')).not.toBeInTheDocument();\n expect(screen.queryByTestId('error-view')).not.toBeInTheDocument();\n });\n\n it('should render ErrorView when status is error', () => {\n const error = new Error('Test error');\n renderDataLoader({status: 'error', error});\n expect(screen.getByTestId('error-view')).toBeInTheDocument();\n expect(screen.queryByTestId('content')).not.toBeInTheDocument();\n expect(screen.queryByTestId('loading-view')).not.toBeInTheDocument();\n expect(screen.getByText(/Test error/)).toBeInTheDocument();\n });\n\n it('should pass errorAction to ErrorView', () => {\n const error = new Error('Test error');\n const errorAction = jest.fn();\n renderDataLoader({\n status: 'error',\n error,\n errorAction,\n });\n expect(screen.getByTestId('error-action')).toBeInTheDocument();\n });\n\n it('should pass errorAction with custom children to ErrorView', () => {\n const error = new Error('Test error');\n const errorAction = {\n handler: jest.fn(),\n children: 'Custom action',\n };\n renderDataLoader({\n status: 'error',\n error,\n errorAction,\n });\n expect(screen.getByText('Custom action')).toBeInTheDocument();\n });\n\n it('should pass loadingViewProps to LoadingView', () => {\n const LoadingView = jest.fn(MockLoadingView);\n const loadingViewProps = {customProp: 'test'};\n renderDataLoader({\n status: 'loading',\n LoadingView,\n loadingViewProps,\n });\n expect(LoadingView).toHaveBeenCalledWith(\n expect.objectContaining(loadingViewProps),\n undefined,\n );\n });\n\n it('should pass errorViewProps to ErrorView', () => {\n const ErrorView = jest.fn(MockErrorView);\n const errorViewProps = {customProp: 'test'};\n const error = new Error('Test error');\n renderDataLoader({\n status: 'error',\n error,\n ErrorView,\n errorViewProps,\n });\n expect(ErrorView).toHaveBeenCalledWith(expect.objectContaining(errorViewProps), undefined);\n });\n});\n"],"mappings":";AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAAQC,MAAM,EAAEC,MAAM,QAAO,wBAAwB;AAGrD,SAAQC,UAAU,QAAO,eAAe;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAGzC,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,CAAA;EAAA,oBAASH,IAAA;IAAK,eAAY,cAAc;IAAAI,QAAA,EAAC;EAAU,CAAK,CAAC;AAAA;AAC9E,IAAMC,aAA8C,GAAG,SAAjDA,aAA8CA,CAAAC,IAAA;EAAA,IAAKC,KAAK,GAAAD,IAAA,CAALC,KAAK;IAAEC,MAAM,GAAAF,IAAA,CAANE,MAAM;EAAA,oBAClEN,KAAA;IAAK,eAAY,YAAY;IAAAE,QAAA,GACxBG,KAAK,aAAAE,MAAA,CAAaF,KAAK,CAACG,OAAO,IAAK,UAAU,EAC9CF,MAAM,gBACHR,IAAA;MAAQ,eAAY,cAAc;MAACW,OAAO,EAAEH,MAAM,CAACI,OAAQ;MAAAR,QAAA,EACtDI,MAAM,CAACJ,QAAQ,IAAI;IAAO,CACvB,CAAC,GACT,IAAI;EAAA,CACP,CAAC;AAAA,CACT;AAEDS,QAAQ,CAAC,YAAY,EAAE,YAAM;EACzB,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAA,EAAoD;IAAA,IAAhDC,KAAsC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IACjE,IAAMG,YAAoC,GAAG;MACzCC,MAAM,EAAE,SAAS;MACjBb,KAAK,EAAE,IAAI;MACXc,WAAW,EAAElB,eAAe;MAC5BmB,SAAS,EAAEjB,aAAa;MACxBD,QAAQ,eAAEJ,IAAA;QAAK,eAAY,SAAS;QAAAI,QAAA,EAAC;MAAO,CAAK;IACrD,CAAC;IAED,OAAOR,MAAM,cAACI,IAAA,CAACF,UAAU,EAAAyB,aAAA,CAAAA,aAAA,KAAKJ,YAAY,GAAMJ,KAAK,CAAG,CAAC,CAAC;EAC9D,CAAC;EAEDS,EAAE,CAAC,+CAA+C,EAAE,YAAM;IACtDV,gBAAgB,CAAC;MAACM,MAAM,EAAE;IAAS,CAAC,CAAC;IACrCK,MAAM,CAAC5B,MAAM,CAAC6B,WAAW,CAAC,SAAS,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;IACzDF,MAAM,CAAC5B,MAAM,CAAC+B,aAAa,CAAC,cAAc,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;IACpEF,MAAM,CAAC5B,MAAM,CAAC+B,aAAa,CAAC,YAAY,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;EACtE,CAAC,CAAC;EAEFH,EAAE,CAAC,kDAAkD,EAAE,YAAM;IACzDV,gBAAgB,CAAC;MAACM,MAAM,EAAE;IAAS,CAAC,CAAC;IACrCK,MAAM,CAAC5B,MAAM,CAAC6B,WAAW,CAAC,cAAc,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;IAC9DF,MAAM,CAAC5B,MAAM,CAAC+B,aAAa,CAAC,SAAS,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;IAC/DF,MAAM,CAAC5B,MAAM,CAAC+B,aAAa,CAAC,YAAY,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;EACtE,CAAC,CAAC;EAEFH,EAAE,CAAC,8CAA8C,EAAE,YAAM;IACrD,IAAMjB,KAAK,GAAG,IAAIuB,KAAK,CAAC,YAAY,CAAC;IACrChB,gBAAgB,CAAC;MAACM,MAAM,EAAE,OAAO;MAAEb,KAAK,EAALA;IAAK,CAAC,CAAC;IAC1CkB,MAAM,CAAC5B,MAAM,CAAC6B,WAAW,CAAC,YAAY,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;IAC5DF,MAAM,CAAC5B,MAAM,CAAC+B,aAAa,CAAC,SAAS,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;IAC/DF,MAAM,CAAC5B,MAAM,CAAC+B,aAAa,CAAC,cAAc,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;IACpEF,MAAM,CAAC5B,MAAM,CAACkC,SAAS,CAAC,YAAY,CAAC,CAAC,CAACJ,iBAAiB,CAAC,CAAC;EAC9D,CAAC,CAAC;EAEFH,EAAE,CAAC,sCAAsC,EAAE,YAAM;IAC7C,IAAMjB,KAAK,GAAG,IAAIuB,KAAK,CAAC,YAAY,CAAC;IACrC,IAAME,WAAW,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;IAC7BpB,gBAAgB,CAAC;MACbM,MAAM,EAAE,OAAO;MACfb,KAAK,EAALA,KAAK;MACLyB,WAAW,EAAXA;IACJ,CAAC,CAAC;IACFP,MAAM,CAAC5B,MAAM,CAAC6B,WAAW,CAAC,cAAc,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;EAClE,CAAC,CAAC;EAEFH,EAAE,CAAC,2DAA2D,EAAE,YAAM;IAClE,IAAMjB,KAAK,GAAG,IAAIuB,KAAK,CAAC,YAAY,CAAC;IACrC,IAAME,WAAW,GAAG;MAChBpB,OAAO,EAAEqB,IAAI,CAACC,EAAE,CAAC,CAAC;MAClB9B,QAAQ,EAAE;IACd,CAAC;IACDU,gBAAgB,CAAC;MACbM,MAAM,EAAE,OAAO;MACfb,KAAK,EAALA,KAAK;MACLyB,WAAW,EAAXA;IACJ,CAAC,CAAC;IACFP,MAAM,CAAC5B,MAAM,CAACkC,SAAS,CAAC,eAAe,CAAC,CAAC,CAACJ,iBAAiB,CAAC,CAAC;EACjE,CAAC,CAAC;EAEFH,EAAE,CAAC,6CAA6C,EAAE,YAAM;IACpD,IAAMH,WAAW,GAAGY,IAAI,CAACC,EAAE,CAAC/B,eAAe,CAAC;IAC5C,IAAMgC,gBAAgB,GAAG;MAACC,UAAU,EAAE;IAAM,CAAC;IAC7CtB,gBAAgB,CAAC;MACbM,MAAM,EAAE,SAAS;MACjBC,WAAW,EAAXA,WAAW;MACXc,gBAAgB,EAAhBA;IACJ,CAAC,CAAC;IACFV,MAAM,CAACJ,WAAW,CAAC,CAACgB,oBAAoB,CACpCZ,MAAM,CAACa,gBAAgB,CAACH,gBAAgB,CAAC,EACzCjB,SACJ,CAAC;EACL,CAAC,CAAC;EAEFM,EAAE,CAAC,yCAAyC,EAAE,YAAM;IAChD,IAAMF,SAAS,GAAGW,IAAI,CAACC,EAAE,CAAC7B,aAAa,CAAC;IACxC,IAAMkC,cAAc,GAAG;MAACH,UAAU,EAAE;IAAM,CAAC;IAC3C,IAAM7B,KAAK,GAAG,IAAIuB,KAAK,CAAC,YAAY,CAAC;IACrChB,gBAAgB,CAAC;MACbM,MAAM,EAAE,OAAO;MACfb,KAAK,EAALA,KAAK;MACLe,SAAS,EAATA,SAAS;MACTiB,cAAc,EAAdA;IACJ,CAAC,CAAC;IACFd,MAAM,CAACH,SAAS,CAAC,CAACe,oBAAoB,CAACZ,MAAM,CAACa,gBAAgB,CAACC,cAAc,CAAC,EAAErB,SAAS,CAAC;EAC9F,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
@@ -1,4 +1,6 @@
1
1
  export { DataManagerContext, useDataManager } from './DataManagerContext';
2
+ export { DataManagerProvider } from './DataManagerProvider';
3
+ export type { DataManagerProviderProps } from './DataManagerProvider';
2
4
  export type { WithDataManagerProps } from './withDataManager';
3
5
  export { withDataManager } from './withDataManager';
4
6
  export type { ErrorAction, ErrorViewProps } from './components/types';
@@ -1,4 +1,5 @@
1
1
  export { DataManagerContext, useDataManager } from './DataManagerContext';
2
+ export { DataManagerProvider } from './DataManagerProvider';
2
3
  export { withDataManager } from './withDataManager';
3
4
  export * from './components/DataLoader';
4
5
  export * from './components/DataInfiniteLoader';
@@ -1 +1 @@
1
- {"version":3,"names":["DataManagerContext","useDataManager","withDataManager"],"sources":["index.ts"],"sourcesContent":["export {DataManagerContext, useDataManager} from './DataManagerContext';\n\nexport type {WithDataManagerProps} from './withDataManager';\nexport {withDataManager} from './withDataManager';\n\nexport type {ErrorAction, ErrorViewProps} from './components/types';\nexport * from './components/DataLoader';\nexport * from './components/DataInfiniteLoader';\n"],"mappings":"AAAA,SAAQA,kBAAkB,EAAEC,cAAc,QAAO,sBAAsB;AAGvE,SAAQC,eAAe,QAAO,mBAAmB;AAGjD,cAAc,yBAAyB;AACvC,cAAc,iCAAiC","ignoreList":[]}
1
+ {"version":3,"names":["DataManagerContext","useDataManager","DataManagerProvider","withDataManager"],"sources":["index.ts"],"sourcesContent":["export {DataManagerContext, useDataManager} from './DataManagerContext';\nexport {DataManagerProvider} from './DataManagerProvider';\nexport type {DataManagerProviderProps} from './DataManagerProvider';\n\nexport type {WithDataManagerProps} from './withDataManager';\nexport {withDataManager} from './withDataManager';\n\nexport type {ErrorAction, ErrorViewProps} from './components/types';\nexport * from './components/DataLoader';\nexport * from './components/DataInfiniteLoader';\n"],"mappings":"AAAA,SAAQA,kBAAkB,EAAEC,cAAc,QAAO,sBAAsB;AACvE,SAAQC,mBAAmB,QAAO,uBAAuB;AAIzD,SAAQC,eAAe,QAAO,mBAAmB;AAGjD,cAAc,yBAAyB;AACvC,cAAc,iCAAiC","ignoreList":[]}
@@ -3,4 +3,4 @@ import type { DataManager } from '../core';
3
3
  export interface WithDataManagerProps {
4
4
  dataManager: DataManager;
5
5
  }
6
- export declare const withDataManager: <T extends WithDataManagerProps>(WrappedComponent: React.ComponentType<WithDataManagerProps>) => React.FC<T>;
6
+ export declare const withDataManager: <T>(Component: React.ComponentType<T & WithDataManagerProps>) => React.FC<T>;
@@ -2,14 +2,14 @@ import _objectSpread from "@babel/runtime/helpers/objectSpread2";
2
2
  import React from 'react';
3
3
  import { useDataManager } from './DataManagerContext';
4
4
  import { jsx as _jsx } from "react/jsx-runtime";
5
- export var withDataManager = function withDataManager(WrappedComponent) {
5
+ export var withDataManager = function withDataManager(Component) {
6
6
  var ComponentWithDataManager = function ComponentWithDataManager(props) {
7
7
  var dataManager = useDataManager();
8
- return /*#__PURE__*/_jsx(WrappedComponent, _objectSpread(_objectSpread({}, props), {}, {
8
+ return /*#__PURE__*/_jsx(Component, _objectSpread(_objectSpread({}, props), {}, {
9
9
  dataManager: dataManager
10
10
  }));
11
11
  };
12
- ComponentWithDataManager.displayName = "WithDataManager".concat(WrappedComponent.displayName || WrappedComponent.name || 'Component');
12
+ ComponentWithDataManager.displayName = "WithDataManager".concat(Component.displayName || Component.name || 'Component');
13
13
  return ComponentWithDataManager;
14
14
  };
15
15
  // #sourceMappingURL=withDataManager.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useDataManager","jsx","_jsx","withDataManager","WrappedComponent","ComponentWithDataManager","props","dataManager","_objectSpread","displayName","concat","name"],"sources":["withDataManager.tsx"],"sourcesContent":["import React from 'react';\n\nimport type {DataManager} from '../core';\n\nimport {useDataManager} from './DataManagerContext';\n\nexport interface WithDataManagerProps {\n dataManager: DataManager;\n}\n\nexport const withDataManager = <T extends WithDataManagerProps>(\n WrappedComponent: React.ComponentType<WithDataManagerProps>,\n) => {\n const ComponentWithDataManager: React.FC<T> = (props) => {\n const dataManager = useDataManager();\n\n return <WrappedComponent {...props} dataManager={dataManager} />;\n };\n\n ComponentWithDataManager.displayName = `WithDataManager${\n WrappedComponent.displayName || WrappedComponent.name || 'Component'\n }`;\n\n return ComponentWithDataManager;\n};\n"],"mappings":";AAAA,OAAOA,KAAK,MAAM,OAAO;AAIzB,SAAQC,cAAc,QAAO,sBAAsB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAMpD,OAAO,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,CACxBC,gBAA2D,EAC1D;EACD,IAAMC,wBAAqC,GAAG,SAAxCA,wBAAqCA,CAAIC,KAAK,EAAK;IACrD,IAAMC,WAAW,GAAGP,cAAc,CAAC,CAAC;IAEpC,oBAAOE,IAAA,CAACE,gBAAgB,EAAAI,aAAA,CAAAA,aAAA,KAAKF,KAAK;MAAEC,WAAW,EAAEA;IAAY,EAAE,CAAC;EACpE,CAAC;EAEDF,wBAAwB,CAACI,WAAW,qBAAAC,MAAA,CAChCN,gBAAgB,CAACK,WAAW,IAAIL,gBAAgB,CAACO,IAAI,IAAI,WAAW,CACtE;EAEF,OAAON,wBAAwB;AACnC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","useDataManager","jsx","_jsx","withDataManager","Component","ComponentWithDataManager","props","dataManager","_objectSpread","displayName","concat","name"],"sources":["withDataManager.tsx"],"sourcesContent":["import React from 'react';\n\nimport type {DataManager} from '../core';\n\nimport {useDataManager} from './DataManagerContext';\n\nexport interface WithDataManagerProps {\n dataManager: DataManager;\n}\n\nexport const withDataManager = <T,>(Component: React.ComponentType<T & WithDataManagerProps>) => {\n const ComponentWithDataManager: React.FC<T> = (props) => {\n const dataManager = useDataManager();\n\n return <Component {...props} dataManager={dataManager} />;\n };\n\n ComponentWithDataManager.displayName = `WithDataManager${\n Component.displayName || Component.name || 'Component'\n }`;\n\n return ComponentWithDataManager;\n};\n"],"mappings":";AAAA,OAAOA,KAAK,MAAM,OAAO;AAIzB,SAAQC,cAAc,QAAO,sBAAsB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAMpD,OAAO,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,CAAQC,SAAwD,EAAK;EAC7F,IAAMC,wBAAqC,GAAG,SAAxCA,wBAAqCA,CAAIC,KAAK,EAAK;IACrD,IAAMC,WAAW,GAAGP,cAAc,CAAC,CAAC;IAEpC,oBAAOE,IAAA,CAACE,SAAS,EAAAI,aAAA,CAAAA,aAAA,KAAKF,KAAK;MAAEC,WAAW,EAAEA;IAAY,EAAE,CAAC;EAC7D,CAAC;EAEDF,wBAAwB,CAACI,WAAW,qBAAAC,MAAA,CAChCN,SAAS,CAACK,WAAW,IAAIL,SAAS,CAACO,IAAI,IAAI,WAAW,CACxD;EAEF,OAAON,wBAAwB;AACnC,CAAC","ignoreList":[]}
@@ -1,11 +1,19 @@
1
+ import type { Data } from '@normy/core';
1
2
  import type { InvalidateQueryFilters, QueryClientConfig } from '@tanstack/react-query';
2
3
  import { QueryClient } from '@tanstack/react-query';
3
- import { type AnyDataSource, type DataManager, type DataSourceParams, type DataSourceTag } from '../core';
4
+ import { type AnyDataSource, type DataManager, type DataSourceParams, type DataSourceTag, type Normalizer, type NormalizerConfig } from '../core';
4
5
  import type { InvalidateOptions, InvalidateRepeatOptions } from '../core/types/DataManagerOptions';
5
- export type ClientDataManagerConfig = QueryClientConfig;
6
+ import type { QueryNormalizer } from './types/normalizer';
7
+ export interface ClientDataManagerConfig extends QueryClientConfig {
8
+ normalizerConfig?: NormalizerConfig | boolean;
9
+ }
6
10
  export declare class ClientDataManager implements DataManager {
7
11
  readonly queryClient: QueryClient;
12
+ readonly normalizer?: Normalizer | undefined;
13
+ readonly queryNormalizer?: QueryNormalizer | undefined;
8
14
  constructor(config?: ClientDataManagerConfig);
15
+ optimisticUpdate(mutationData: Data): void;
16
+ invalidateData(data: Data): void;
9
17
  invalidateTag(tag: DataSourceTag, invalidateOptions?: InvalidateOptions): Promise<void>;
10
18
  invalidateTags(tags: DataSourceTag[], invalidateOptions?: InvalidateOptions): Promise<void>;
11
19
  invalidateSource<TDataSource extends AnyDataSource>(dataSource: TDataSource, invalidateOptions?: InvalidateOptions): Promise<void>;
@@ -15,4 +23,5 @@ export declare class ClientDataManager implements DataManager {
15
23
  invalidateSourceTags<TDataSource extends AnyDataSource>(dataSource: TDataSource, params: DataSourceParams<TDataSource>, invalidateOptions?: InvalidateOptions): Promise<void>;
16
24
  protected invalidateQueries(filters: InvalidateQueryFilters, invalidateOptions?: InvalidateOptions): Promise<void>;
17
25
  protected repeatInvalidate(invalidate: () => Promise<void>, repeat?: InvalidateRepeatOptions): void;
26
+ private createNormalize;
18
27
  }
@@ -1,14 +1,20 @@
1
1
  import _objectSpread from "@babel/runtime/helpers/objectSpread2";
2
2
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
3
3
  import _createClass from "@babel/runtime/helpers/createClass";
4
+ import { createNormalizer } from '@normy/core';
4
5
  import { QueryClient } from '@tanstack/react-query';
5
6
  import { composeFullKey, hasTag } from '../core';
7
+ import { createQueryNormalizer } from './utils/normalize';
6
8
  export var ClientDataManager = /*#__PURE__*/function () {
7
9
  function ClientDataManager() {
8
- var _config$defaultOption, _config$defaultOption2;
10
+ var _config$defaultOption,
11
+ _config$defaultOption2,
12
+ _this = this;
9
13
  var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
10
14
  _classCallCheck(this, ClientDataManager);
11
15
  this.queryClient = void 0;
16
+ this.normalizer = void 0;
17
+ this.queryNormalizer = void 0;
12
18
  this.queryClient = new QueryClient(_objectSpread(_objectSpread({}, config), {}, {
13
19
  defaultOptions: _objectSpread(_objectSpread({}, config.defaultOptions), {}, {
14
20
  queries: _objectSpread({
@@ -19,8 +25,58 @@ export var ClientDataManager = /*#__PURE__*/function () {
19
25
  }, (_config$defaultOption2 = config.defaultOptions) === null || _config$defaultOption2 === void 0 ? void 0 : _config$defaultOption2.mutations)
20
26
  })
21
27
  }));
28
+ this.normalizer = this.createNormalize(config.normalizerConfig);
29
+ this.queryNormalizer = createQueryNormalizer(this.normalizer, this.queryClient, config.normalizerConfig, function (data) {
30
+ return _this.optimisticUpdate(data);
31
+ }, function (data) {
32
+ return _this.invalidateData(data);
33
+ });
22
34
  }
23
35
  return _createClass(ClientDataManager, [{
36
+ key: "optimisticUpdate",
37
+ value: function optimisticUpdate(mutationData) {
38
+ var _this2 = this;
39
+ if (!this.normalizer) {
40
+ return;
41
+ }
42
+ var queriesToUpdate = this.normalizer.getQueriesToUpdate(mutationData);
43
+ queriesToUpdate.forEach(function (query) {
44
+ var queryKey = JSON.parse(query.queryKey);
45
+ var cachedQuery = _this2.queryClient.getQueryCache().find({
46
+ queryKey: queryKey
47
+ });
48
+ var dataUpdatedAt = cachedQuery === null || cachedQuery === void 0 ? void 0 : cachedQuery.state.dataUpdatedAt;
49
+ var isInvalidated = cachedQuery === null || cachedQuery === void 0 ? void 0 : cachedQuery.state.isInvalidated;
50
+ var error = cachedQuery === null || cachedQuery === void 0 ? void 0 : cachedQuery.state.error;
51
+ var status = cachedQuery === null || cachedQuery === void 0 ? void 0 : cachedQuery.state.status;
52
+ _this2.queryClient.setQueryData(queryKey, function () {
53
+ return query.data;
54
+ }, {
55
+ updatedAt: dataUpdatedAt
56
+ });
57
+ cachedQuery === null || cachedQuery === void 0 || cachedQuery.setState({
58
+ isInvalidated: isInvalidated,
59
+ error: error,
60
+ status: status
61
+ });
62
+ });
63
+ }
64
+ }, {
65
+ key: "invalidateData",
66
+ value: function invalidateData(data) {
67
+ var _this3 = this;
68
+ if (!this.normalizer) {
69
+ return;
70
+ }
71
+ var queriesToUpdate = this.normalizer.getQueriesToUpdate(data);
72
+ queriesToUpdate.forEach(function (query) {
73
+ var queryKey = JSON.parse(query.queryKey);
74
+ _this3.queryClient.invalidateQueries({
75
+ queryKey: queryKey
76
+ });
77
+ });
78
+ }
79
+ }, {
24
80
  key: "invalidateTag",
25
81
  value: function invalidateTag(tag, invalidateOptions) {
26
82
  return this.invalidateQueries({
@@ -85,9 +141,9 @@ export var ClientDataManager = /*#__PURE__*/function () {
85
141
  }, {
86
142
  key: "invalidateQueries",
87
143
  value: function invalidateQueries(filters, invalidateOptions) {
88
- var _this = this;
144
+ var _this4 = this;
89
145
  var invalidate = function invalidate() {
90
- return _this.queryClient.invalidateQueries(filters);
146
+ return _this4.queryClient.invalidateQueries(filters);
91
147
  };
92
148
  this.repeatInvalidate(invalidate, invalidateOptions === null || invalidateOptions === void 0 ? void 0 : invalidateOptions.repeat);
93
149
  return invalidate();
@@ -102,6 +158,17 @@ export var ClientDataManager = /*#__PURE__*/function () {
102
158
  setTimeout(invalidate, repeat.interval * i);
103
159
  }
104
160
  }
161
+ }, {
162
+ key: "createNormalize",
163
+ value: function createNormalize(config) {
164
+ if (!config) {
165
+ return undefined;
166
+ }
167
+ if (config === true) {
168
+ return createNormalizer({});
169
+ }
170
+ return createNormalizer(config);
171
+ }
105
172
  }]);
106
173
  }();
107
174
  // #sourceMappingURL=ClientDataManager.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["QueryClient","composeFullKey","hasTag","ClientDataManager","_config$defaultOption","_config$defaultOption2","config","arguments","length","undefined","_classCallCheck","queryClient","_objectSpread","defaultOptions","queries","networkMode","mutations","_createClass","key","value","invalidateTag","tag","invalidateOptions","invalidateQueries","predicate","_ref","queryKey","invalidateTags","tags","_ref2","every","invalidateSource","dataSource","name","resetSource","resetQueries","invalidateParams","params","exact","resetParams","invalidateSourceTags","slice","filters","_this","invalidate","repeatInvalidate","repeat","i","count","setTimeout","interval"],"sources":["ClientDataManager.ts"],"sourcesContent":["import type {InvalidateQueryFilters, QueryClientConfig} from '@tanstack/react-query';\nimport {QueryClient} from '@tanstack/react-query';\n\nimport {\n type AnyDataSource,\n type DataManager,\n type DataSourceParams,\n type DataSourceTag,\n composeFullKey,\n hasTag,\n} from '../core';\nimport type {InvalidateOptions, InvalidateRepeatOptions} from '../core/types/DataManagerOptions';\n\nexport type ClientDataManagerConfig = QueryClientConfig;\n\nexport class ClientDataManager implements DataManager {\n readonly queryClient: QueryClient;\n\n constructor(config: ClientDataManagerConfig = {}) {\n this.queryClient = new QueryClient({\n ...config,\n defaultOptions: {\n ...config.defaultOptions,\n queries: {\n networkMode: 'always',\n ...config.defaultOptions?.queries,\n },\n mutations: {\n networkMode: 'always',\n ...config.defaultOptions?.mutations,\n },\n },\n });\n }\n\n invalidateTag(tag: DataSourceTag, invalidateOptions?: InvalidateOptions) {\n return this.invalidateQueries(\n {\n predicate: ({queryKey}) => hasTag(queryKey, tag),\n },\n invalidateOptions,\n );\n }\n\n invalidateTags(tags: DataSourceTag[], invalidateOptions?: InvalidateOptions) {\n return this.invalidateQueries(\n {\n predicate: ({queryKey}) => tags.every((tag) => hasTag(queryKey, tag)),\n },\n invalidateOptions,\n );\n }\n\n invalidateSource<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n invalidateOptions?: InvalidateOptions,\n ) {\n return this.invalidateQueries(\n {\n // First element is a data source name\n queryKey: [dataSource.name],\n },\n invalidateOptions,\n );\n }\n\n resetSource<TDataSource extends AnyDataSource>(dataSource: TDataSource) {\n return this.queryClient.resetQueries({\n // First element is a data source name\n queryKey: [dataSource.name],\n });\n }\n\n invalidateParams<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n invalidateOptions?: InvalidateOptions,\n ) {\n return this.invalidateQueries(\n {\n queryKey: composeFullKey(dataSource, params),\n exact: true,\n },\n invalidateOptions,\n );\n }\n\n resetParams<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n ) {\n return this.queryClient.resetQueries({\n queryKey: composeFullKey(dataSource, params),\n exact: true,\n });\n }\n\n invalidateSourceTags<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n invalidateOptions?: InvalidateOptions,\n ) {\n return this.invalidateQueries(\n {\n // Last element is a full key\n queryKey: composeFullKey(dataSource, params).slice(0, -1),\n },\n invalidateOptions,\n );\n }\n\n protected invalidateQueries(\n filters: InvalidateQueryFilters,\n invalidateOptions?: InvalidateOptions,\n ) {\n const invalidate = () => this.queryClient.invalidateQueries(filters);\n\n this.repeatInvalidate(invalidate, invalidateOptions?.repeat);\n\n return invalidate();\n }\n\n protected repeatInvalidate(invalidate: () => Promise<void>, repeat?: InvalidateRepeatOptions) {\n if (!repeat) {\n return;\n }\n\n for (let i = 1; i <= repeat.count; i++) {\n setTimeout(invalidate, repeat.interval * i);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createNormalizer","QueryClient","composeFullKey","hasTag","createQueryNormalizer","ClientDataManager","_config$defaultOption","_config$defaultOption2","_this","config","arguments","length","undefined","_classCallCheck","queryClient","normalizer","queryNormalizer","_objectSpread","defaultOptions","queries","networkMode","mutations","createNormalize","normalizerConfig","data","optimisticUpdate","invalidateData","_createClass","key","value","mutationData","_this2","queriesToUpdate","getQueriesToUpdate","forEach","query","queryKey","JSON","parse","cachedQuery","getQueryCache","find","dataUpdatedAt","state","isInvalidated","error","status","setQueryData","updatedAt","setState","_this3","invalidateQueries","invalidateTag","tag","invalidateOptions","predicate","_ref","invalidateTags","tags","_ref2","every","invalidateSource","dataSource","name","resetSource","resetQueries","invalidateParams","params","exact","resetParams","invalidateSourceTags","slice","filters","_this4","invalidate","repeatInvalidate","repeat","i","count","setTimeout","interval"],"sources":["ClientDataManager.ts"],"sourcesContent":["import type {Data} from '@normy/core';\nimport {createNormalizer} from '@normy/core';\nimport type {InvalidateQueryFilters, QueryClientConfig, QueryKey} from '@tanstack/react-query';\nimport {QueryClient} from '@tanstack/react-query';\n\nimport {\n type AnyDataSource,\n type DataManager,\n type DataSourceParams,\n type DataSourceTag,\n type Normalizer,\n type NormalizerConfig,\n composeFullKey,\n hasTag,\n} from '../core';\nimport type {InvalidateOptions, InvalidateRepeatOptions} from '../core/types/DataManagerOptions';\n\nimport type {QueryNormalizer} from './types/normalizer';\nimport {createQueryNormalizer} from './utils/normalize';\n\nexport interface ClientDataManagerConfig extends QueryClientConfig {\n normalizerConfig?: NormalizerConfig | boolean;\n}\n\nexport class ClientDataManager implements DataManager {\n readonly queryClient: QueryClient;\n readonly normalizer?: Normalizer | undefined;\n readonly queryNormalizer?: QueryNormalizer | undefined;\n\n constructor(config: ClientDataManagerConfig = {}) {\n this.queryClient = new QueryClient({\n ...config,\n defaultOptions: {\n ...config.defaultOptions,\n queries: {\n networkMode: 'always',\n ...config.defaultOptions?.queries,\n },\n mutations: {\n networkMode: 'always',\n ...config.defaultOptions?.mutations,\n },\n },\n });\n\n this.normalizer = this.createNormalize(config.normalizerConfig);\n this.queryNormalizer = createQueryNormalizer(\n this.normalizer,\n this.queryClient,\n config.normalizerConfig,\n (data) => this.optimisticUpdate(data),\n (data) => this.invalidateData(data),\n );\n }\n\n optimisticUpdate(mutationData: Data) {\n if (!this.normalizer) {\n return;\n }\n\n const queriesToUpdate = this.normalizer.getQueriesToUpdate(mutationData);\n\n queriesToUpdate.forEach((query) => {\n const queryKey = JSON.parse(query.queryKey) as QueryKey;\n\n const cachedQuery = this.queryClient.getQueryCache().find({queryKey});\n\n const dataUpdatedAt = cachedQuery?.state.dataUpdatedAt;\n const isInvalidated = cachedQuery?.state.isInvalidated;\n const error = cachedQuery?.state.error;\n const status = cachedQuery?.state.status;\n\n this.queryClient.setQueryData(queryKey, () => query.data, {\n updatedAt: dataUpdatedAt,\n });\n\n cachedQuery?.setState({isInvalidated, error, status});\n });\n }\n\n invalidateData(data: Data): void {\n if (!this.normalizer) {\n return;\n }\n\n const queriesToUpdate = this.normalizer.getQueriesToUpdate(data);\n\n queriesToUpdate.forEach((query) => {\n const queryKey = JSON.parse(query.queryKey) as QueryKey;\n this.queryClient.invalidateQueries({queryKey});\n });\n }\n\n invalidateTag(tag: DataSourceTag, invalidateOptions?: InvalidateOptions) {\n return this.invalidateQueries(\n {\n predicate: ({queryKey}) => hasTag(queryKey, tag),\n },\n invalidateOptions,\n );\n }\n\n invalidateTags(tags: DataSourceTag[], invalidateOptions?: InvalidateOptions) {\n return this.invalidateQueries(\n {\n predicate: ({queryKey}) => tags.every((tag) => hasTag(queryKey, tag)),\n },\n invalidateOptions,\n );\n }\n\n invalidateSource<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n invalidateOptions?: InvalidateOptions,\n ) {\n return this.invalidateQueries(\n {\n // First element is a data source name\n queryKey: [dataSource.name],\n },\n invalidateOptions,\n );\n }\n\n resetSource<TDataSource extends AnyDataSource>(dataSource: TDataSource) {\n return this.queryClient.resetQueries({\n // First element is a data source name\n queryKey: [dataSource.name],\n });\n }\n\n invalidateParams<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n invalidateOptions?: InvalidateOptions,\n ) {\n return this.invalidateQueries(\n {\n queryKey: composeFullKey(dataSource, params),\n exact: true,\n },\n invalidateOptions,\n );\n }\n\n resetParams<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n ) {\n return this.queryClient.resetQueries({\n queryKey: composeFullKey(dataSource, params),\n exact: true,\n });\n }\n\n invalidateSourceTags<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n invalidateOptions?: InvalidateOptions,\n ) {\n return this.invalidateQueries(\n {\n // Last element is a full key\n queryKey: composeFullKey(dataSource, params).slice(0, -1),\n },\n invalidateOptions,\n );\n }\n\n protected invalidateQueries(\n filters: InvalidateQueryFilters,\n invalidateOptions?: InvalidateOptions,\n ) {\n const invalidate = () => this.queryClient.invalidateQueries(filters);\n\n this.repeatInvalidate(invalidate, invalidateOptions?.repeat);\n\n return invalidate();\n }\n\n protected repeatInvalidate(invalidate: () => Promise<void>, repeat?: InvalidateRepeatOptions) {\n if (!repeat) {\n return;\n }\n\n for (let i = 1; i <= repeat.count; i++) {\n setTimeout(invalidate, repeat.interval * i);\n }\n }\n\n private createNormalize(\n config: boolean | NormalizerConfig | undefined,\n ): Normalizer | undefined {\n if (!config) {\n return undefined;\n }\n\n if (config === true) {\n return createNormalizer({});\n }\n\n return createNormalizer(config);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import type { ClientDataManager } from './ClientDataManager';
3
+ export interface DataSourceProviderProps {
4
+ dataManager: ClientDataManager;
5
+ children: React.ReactNode;
6
+ }
7
+ export declare const DataSourceProvider: React.FC<DataSourceProviderProps>;
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ import { QueryClientProvider } from '@tanstack/react-query';
3
+ import { DataManagerProvider } from '../react/DataManagerProvider';
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ export var DataSourceProvider = function DataSourceProvider(_ref) {
6
+ var children = _ref.children,
7
+ dataManager = _ref.dataManager;
8
+ React.useEffect(function () {
9
+ if (!dataManager.queryNormalizer) {
10
+ return undefined;
11
+ }
12
+ dataManager.queryNormalizer.subscribe();
13
+ return function () {
14
+ var _dataManager$queryNor, _dataManager$queryNor2;
15
+ (_dataManager$queryNor = dataManager.queryNormalizer) === null || _dataManager$queryNor === void 0 || _dataManager$queryNor.unsubscribe();
16
+ (_dataManager$queryNor2 = dataManager.queryNormalizer) === null || _dataManager$queryNor2 === void 0 || _dataManager$queryNor2.clear();
17
+ };
18
+ // eslint-disable-next-line react-hooks/exhaustive-deps
19
+ }, []);
20
+ return /*#__PURE__*/_jsx(QueryClientProvider, {
21
+ client: dataManager.queryClient,
22
+ children: /*#__PURE__*/_jsx(DataManagerProvider, {
23
+ dataManager: dataManager,
24
+ children: children
25
+ })
26
+ });
27
+ };
28
+ // #sourceMappingURL=DataSourceProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","QueryClientProvider","DataManagerProvider","jsx","_jsx","DataSourceProvider","_ref","children","dataManager","useEffect","queryNormalizer","undefined","subscribe","_dataManager$queryNor","_dataManager$queryNor2","unsubscribe","clear","client","queryClient"],"sources":["DataSourceProvider.tsx"],"sourcesContent":["import React from 'react';\n\nimport {QueryClientProvider} from '@tanstack/react-query';\n\nimport {DataManagerProvider} from '../react/DataManagerProvider';\n\nimport type {ClientDataManager} from './ClientDataManager';\n\nexport interface DataSourceProviderProps {\n dataManager: ClientDataManager;\n children: React.ReactNode;\n}\n\nexport const DataSourceProvider: React.FC<DataSourceProviderProps> = ({children, dataManager}) => {\n React.useEffect(() => {\n if (!dataManager.queryNormalizer) {\n return undefined;\n }\n\n dataManager.queryNormalizer.subscribe();\n\n return () => {\n dataManager.queryNormalizer?.unsubscribe();\n dataManager.queryNormalizer?.clear();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <QueryClientProvider client={dataManager.queryClient}>\n <DataManagerProvider dataManager={dataManager}>{children}</DataManagerProvider>\n </QueryClientProvider>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAAQC,mBAAmB,QAAO,uBAAuB;AAEzD,SAAQC,mBAAmB,QAAO,8BAA8B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AASjE,OAAO,IAAMC,kBAAqD,GAAG,SAAxDA,kBAAqDA,CAAAC,IAAA,EAAgC;EAAA,IAA3BC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IAAEC,WAAW,GAAAF,IAAA,CAAXE,WAAW;EACxFR,KAAK,CAACS,SAAS,CAAC,YAAM;IAClB,IAAI,CAACD,WAAW,CAACE,eAAe,EAAE;MAC9B,OAAOC,SAAS;IACpB;IAEAH,WAAW,CAACE,eAAe,CAACE,SAAS,CAAC,CAAC;IAEvC,OAAO,YAAM;MAAA,IAAAC,qBAAA,EAAAC,sBAAA;MACT,CAAAD,qBAAA,GAAAL,WAAW,CAACE,eAAe,cAAAG,qBAAA,eAA3BA,qBAAA,CAA6BE,WAAW,CAAC,CAAC;MAC1C,CAAAD,sBAAA,GAAAN,WAAW,CAACE,eAAe,cAAAI,sBAAA,eAA3BA,sBAAA,CAA6BE,KAAK,CAAC,CAAC;IACxC,CAAC;IACD;EACJ,CAAC,EAAE,EAAE,CAAC;EAEN,oBACIZ,IAAA,CAACH,mBAAmB;IAACgB,MAAM,EAAET,WAAW,CAACU,WAAY;IAAAX,QAAA,eACjDH,IAAA,CAACF,mBAAmB;MAACM,WAAW,EAAEA,WAAY;MAAAD,QAAA,EAAEA;IAAQ,CAAsB;EAAC,CAC9D,CAAC;AAE9B,CAAC","ignoreList":[]}