@automattic/data-stores 3.1.2 → 3.2.1

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 (601) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/dist/cjs/agents-manager/actions.js +116 -0
  3. package/dist/cjs/agents-manager/actions.js.map +1 -0
  4. package/dist/cjs/agents-manager/constants.js +5 -0
  5. package/dist/cjs/agents-manager/constants.js.map +1 -0
  6. package/dist/cjs/agents-manager/index.js +37 -0
  7. package/dist/cjs/agents-manager/index.js.map +1 -0
  8. package/dist/cjs/agents-manager/persist-state.js +58 -0
  9. package/dist/cjs/agents-manager/persist-state.js.map +1 -0
  10. package/dist/cjs/agents-manager/reducer.js +87 -0
  11. package/dist/cjs/agents-manager/reducer.js.map +1 -0
  12. package/dist/cjs/agents-manager/resolvers.js +60 -0
  13. package/dist/cjs/agents-manager/resolvers.js.map +1 -0
  14. package/dist/cjs/agents-manager/selectors.js +44 -0
  15. package/dist/cjs/agents-manager/selectors.js.map +1 -0
  16. package/dist/cjs/{domain-suggestions → agents-manager}/types.js.map +1 -1
  17. package/dist/cjs/contextual-help/admin-sections.js +2 -2
  18. package/dist/cjs/contextual-help/admin-sections.js.map +1 -1
  19. package/dist/cjs/help-center/actions.js +103 -69
  20. package/dist/cjs/help-center/actions.js.map +1 -1
  21. package/dist/cjs/help-center/constants.js +2 -1
  22. package/dist/cjs/help-center/constants.js.map +1 -1
  23. package/dist/cjs/help-center/index.js +14 -27
  24. package/dist/cjs/help-center/index.js.map +1 -1
  25. package/dist/cjs/help-center/reducer.js +36 -12
  26. package/dist/cjs/help-center/reducer.js.map +1 -1
  27. package/dist/cjs/help-center/resolvers.js +45 -24
  28. package/dist/cjs/help-center/resolvers.js.map +1 -1
  29. package/dist/cjs/help-center/selectors.js +13 -5
  30. package/dist/cjs/help-center/selectors.js.map +1 -1
  31. package/dist/cjs/help-center/utils.js +136 -0
  32. package/dist/cjs/help-center/utils.js.map +1 -0
  33. package/dist/cjs/index.js +8 -6
  34. package/dist/cjs/index.js.map +1 -1
  35. package/dist/cjs/mutations/use-domains-bulk-actions-mutation.js +3 -3
  36. package/dist/cjs/mutations/use-domains-bulk-actions-mutation.js.map +1 -1
  37. package/dist/cjs/newsletter-categories/index.js +2 -2
  38. package/dist/cjs/newsletter-categories/index.js.map +1 -1
  39. package/dist/cjs/onboard/actions.js +16 -1
  40. package/dist/cjs/onboard/actions.js.map +1 -1
  41. package/dist/cjs/onboard/reducer.js +34 -1
  42. package/dist/cjs/onboard/reducer.js.map +1 -1
  43. package/dist/cjs/onboard/selectors.js +7 -1
  44. package/dist/cjs/onboard/selectors.js.map +1 -1
  45. package/dist/cjs/plans/constants.js +3 -1
  46. package/dist/cjs/plans/constants.js.map +1 -1
  47. package/dist/cjs/plans/hooks/use-pricing-meta-for-grid-plans.js +35 -18
  48. package/dist/cjs/plans/hooks/use-pricing-meta-for-grid-plans.js.map +1 -1
  49. package/dist/cjs/plans/index.js +2 -1
  50. package/dist/cjs/plans/index.js.map +1 -1
  51. package/dist/cjs/plans/queries/use-plans.js +21 -2
  52. package/dist/cjs/plans/queries/use-plans.js.map +1 -1
  53. package/dist/cjs/plans/queries/use-site-plans.js +2 -2
  54. package/dist/cjs/plans/queries/use-site-plans.js.map +1 -1
  55. package/dist/cjs/plans/resolvers.js +0 -1
  56. package/dist/cjs/plans/resolvers.js.map +1 -1
  57. package/dist/cjs/plans/selectors.js.map +1 -1
  58. package/dist/cjs/products-list/queries/use-products.js +2 -2
  59. package/dist/cjs/products-list/queries/use-products.js.map +1 -1
  60. package/dist/cjs/products-list/resolvers.js +2 -2
  61. package/dist/cjs/products-list/resolvers.js.map +1 -1
  62. package/dist/cjs/purchases/lib/assembler.js +15 -20
  63. package/dist/cjs/purchases/lib/assembler.js.map +1 -1
  64. package/dist/cjs/purchases/queries/use-get-jetpack-transferred-license-purchases.js +2 -2
  65. package/dist/cjs/purchases/queries/use-get-jetpack-transferred-license-purchases.js.map +1 -1
  66. package/dist/cjs/purchases/queries/use-site-purchases.js +3 -3
  67. package/dist/cjs/purchases/queries/use-site-purchases.js.map +1 -1
  68. package/dist/cjs/queries/use-all-domains-query.js +2 -2
  69. package/dist/cjs/queries/use-all-domains-query.js.map +1 -1
  70. package/dist/cjs/queries/use-bulk-domain-update-status-query.js +3 -57
  71. package/dist/cjs/queries/use-bulk-domain-update-status-query.js.map +1 -1
  72. package/dist/cjs/queries/use-happiness-engineers-query.js +2 -2
  73. package/dist/cjs/queries/use-happiness-engineers-query.js.map +1 -1
  74. package/dist/cjs/queries/use-launchpad.js +5 -5
  75. package/dist/cjs/queries/use-launchpad.js.map +1 -1
  76. package/dist/cjs/queries/use-site-domains-query.js +2 -2
  77. package/dist/cjs/queries/use-site-domains-query.js.map +1 -1
  78. package/dist/cjs/queries/use-site-intent.js +2 -2
  79. package/dist/cjs/queries/use-site-intent.js.map +1 -1
  80. package/dist/cjs/queries/use-site-query.js +2 -2
  81. package/dist/cjs/queries/use-site-query.js.map +1 -1
  82. package/dist/cjs/reader/contexts/index.js +1 -4
  83. package/dist/cjs/reader/contexts/index.js.map +1 -1
  84. package/dist/cjs/reader/helpers/index.js +4 -3
  85. package/dist/cjs/reader/helpers/index.js.map +1 -1
  86. package/dist/cjs/reader/helpers/optimistic-update.js +2 -1
  87. package/dist/cjs/reader/helpers/optimistic-update.js.map +1 -1
  88. package/dist/cjs/reader/index.js +2 -8
  89. package/dist/cjs/reader/index.js.map +1 -1
  90. package/dist/cjs/reader/mutations/use-pending-site-confirm-mutation.js +2 -2
  91. package/dist/cjs/reader/mutations/use-pending-site-confirm-mutation.js.map +1 -1
  92. package/dist/cjs/reader/mutations/use-site-delivery-frequency-mutation.js +26 -20
  93. package/dist/cjs/reader/mutations/use-site-delivery-frequency-mutation.js.map +1 -1
  94. package/dist/cjs/reader/mutations/use-site-email-me-new-comments-mutation.js +4 -3
  95. package/dist/cjs/reader/mutations/use-site-email-me-new-comments-mutation.js.map +1 -1
  96. package/dist/cjs/reader/mutations/use-site-email-me-new-posts-mutation.js +4 -3
  97. package/dist/cjs/reader/mutations/use-site-email-me-new-posts-mutation.js.map +1 -1
  98. package/dist/cjs/reader/mutations/use-site-notify-me-of-new-posts-mutation.js +4 -3
  99. package/dist/cjs/reader/mutations/use-site-notify-me-of-new-posts-mutation.js.map +1 -1
  100. package/dist/cjs/reader/mutations/use-site-subscribe-mutation.js +10 -4
  101. package/dist/cjs/reader/mutations/use-site-subscribe-mutation.js.map +1 -1
  102. package/dist/cjs/reader/mutations/use-site-unsubscribe-mutation.js +11 -4
  103. package/dist/cjs/reader/mutations/use-site-unsubscribe-mutation.js.map +1 -1
  104. package/dist/cjs/reader/queries/index.js +2 -8
  105. package/dist/cjs/reader/queries/index.js.map +1 -1
  106. package/dist/cjs/reader/queries/use-site-subscriptions-query.js +27 -26
  107. package/dist/cjs/reader/queries/use-site-subscriptions-query.js.map +1 -1
  108. package/dist/cjs/site/queries/use-site-features.js +2 -2
  109. package/dist/cjs/site/queries/use-site-features.js.map +1 -1
  110. package/dist/cjs/site/queries/use-site-media-storage.js +2 -2
  111. package/dist/cjs/site/queries/use-site-media-storage.js.map +1 -1
  112. package/dist/cjs/site/queries/use-site-user-query.js +2 -2
  113. package/dist/cjs/site/queries/use-site-user-query.js.map +1 -1
  114. package/dist/cjs/site/queries/use-site.js +2 -2
  115. package/dist/cjs/site/queries/use-site.js.map +1 -1
  116. package/dist/cjs/site/resolvers.js +5 -5
  117. package/dist/cjs/site/resolvers.js.map +1 -1
  118. package/dist/cjs/site/selectors.js +5 -3
  119. package/dist/cjs/site/selectors.js.map +1 -1
  120. package/dist/cjs/site/types.js.map +1 -1
  121. package/dist/cjs/site-reset/use-site-reset-content-summary-query.js +2 -2
  122. package/dist/cjs/site-reset/use-site-reset-content-summary-query.js.map +1 -1
  123. package/dist/cjs/site-reset/use-site-reset-mutation.js +2 -2
  124. package/dist/cjs/site-reset/use-site-reset-mutation.js.map +1 -1
  125. package/dist/cjs/site-reset/use-site-reset-status-query.js +2 -2
  126. package/dist/cjs/site-reset/use-site-reset-status-query.js.map +1 -1
  127. package/dist/cjs/starter-designs-queries/use-starter-design-by-slug.js +2 -2
  128. package/dist/cjs/starter-designs-queries/use-starter-design-by-slug.js.map +1 -1
  129. package/dist/cjs/starter-designs-queries/use-starter-designs-query.js +2 -2
  130. package/dist/cjs/starter-designs-queries/use-starter-designs-query.js.map +1 -1
  131. package/dist/cjs/subscriber/actions.js +5 -5
  132. package/dist/cjs/subscriber/actions.js.map +1 -1
  133. package/dist/cjs/templates/use-template.js +2 -2
  134. package/dist/cjs/templates/use-template.js.map +1 -1
  135. package/dist/cjs/users/use-send-invites.js +2 -2
  136. package/dist/cjs/users/use-send-invites.js.map +1 -1
  137. package/dist/cjs/utils.js +26 -0
  138. package/dist/cjs/utils.js.map +1 -0
  139. package/dist/cjs/wpcom-request-controls/index.js +3 -2
  140. package/dist/cjs/wpcom-request-controls/index.js.map +1 -1
  141. package/dist/cjs/wpcom-request.js +24 -0
  142. package/dist/cjs/wpcom-request.js.map +1 -0
  143. package/dist/esm/agents-manager/actions.js +104 -0
  144. package/dist/esm/agents-manager/actions.js.map +1 -0
  145. package/dist/esm/agents-manager/constants.js +2 -0
  146. package/dist/esm/agents-manager/constants.js.map +1 -0
  147. package/dist/esm/agents-manager/index.js +31 -0
  148. package/dist/esm/agents-manager/index.js.map +1 -0
  149. package/dist/esm/agents-manager/persist-state.js +54 -0
  150. package/dist/esm/agents-manager/persist-state.js.map +1 -0
  151. package/dist/esm/agents-manager/reducer.js +82 -0
  152. package/dist/esm/agents-manager/reducer.js.map +1 -0
  153. package/dist/esm/agents-manager/resolvers.js +57 -0
  154. package/dist/esm/agents-manager/resolvers.js.map +1 -0
  155. package/dist/esm/agents-manager/selectors.js +31 -0
  156. package/dist/esm/agents-manager/selectors.js.map +1 -0
  157. package/dist/esm/{domain-suggestions → agents-manager}/types.js.map +1 -1
  158. package/dist/esm/contextual-help/admin-sections.js +2 -2
  159. package/dist/esm/contextual-help/admin-sections.js.map +1 -1
  160. package/dist/esm/help-center/actions.js +95 -65
  161. package/dist/esm/help-center/actions.js.map +1 -1
  162. package/dist/esm/help-center/constants.js +1 -0
  163. package/dist/esm/help-center/constants.js.map +1 -1
  164. package/dist/esm/help-center/index.js +11 -23
  165. package/dist/esm/help-center/index.js.map +1 -1
  166. package/dist/esm/help-center/reducer.js +36 -12
  167. package/dist/esm/help-center/reducer.js.map +1 -1
  168. package/dist/esm/help-center/resolvers.js +43 -24
  169. package/dist/esm/help-center/resolvers.js.map +1 -1
  170. package/dist/esm/help-center/selectors.js +6 -2
  171. package/dist/esm/help-center/selectors.js.map +1 -1
  172. package/dist/esm/help-center/utils.js +127 -0
  173. package/dist/esm/help-center/utils.js.map +1 -0
  174. package/dist/esm/index.js +4 -4
  175. package/dist/esm/index.js.map +1 -1
  176. package/dist/esm/mutations/use-domains-bulk-actions-mutation.js +1 -1
  177. package/dist/esm/mutations/use-domains-bulk-actions-mutation.js.map +1 -1
  178. package/dist/esm/newsletter-categories/index.js +1 -1
  179. package/dist/esm/newsletter-categories/index.js.map +1 -1
  180. package/dist/esm/onboard/actions.js +12 -0
  181. package/dist/esm/onboard/actions.js.map +1 -1
  182. package/dist/esm/onboard/reducer.js +30 -0
  183. package/dist/esm/onboard/reducer.js.map +1 -1
  184. package/dist/esm/onboard/selectors.js +3 -0
  185. package/dist/esm/onboard/selectors.js.map +1 -1
  186. package/dist/esm/plans/constants.js +2 -0
  187. package/dist/esm/plans/constants.js.map +1 -1
  188. package/dist/esm/plans/hooks/use-pricing-meta-for-grid-plans.js +35 -18
  189. package/dist/esm/plans/hooks/use-pricing-meta-for-grid-plans.js.map +1 -1
  190. package/dist/esm/plans/index.js +1 -1
  191. package/dist/esm/plans/index.js.map +1 -1
  192. package/dist/esm/plans/queries/use-plans.js +21 -2
  193. package/dist/esm/plans/queries/use-plans.js.map +1 -1
  194. package/dist/esm/plans/queries/use-site-plans.js +1 -1
  195. package/dist/esm/plans/resolvers.js +0 -1
  196. package/dist/esm/plans/resolvers.js.map +1 -1
  197. package/dist/esm/plans/selectors.js.map +1 -1
  198. package/dist/esm/products-list/queries/use-products.js +1 -1
  199. package/dist/esm/products-list/queries/use-products.js.map +1 -1
  200. package/dist/esm/products-list/resolvers.js +1 -1
  201. package/dist/esm/products-list/resolvers.js.map +1 -1
  202. package/dist/esm/purchases/lib/assembler.js +15 -20
  203. package/dist/esm/purchases/lib/assembler.js.map +1 -1
  204. package/dist/esm/purchases/queries/use-get-jetpack-transferred-license-purchases.js +1 -1
  205. package/dist/esm/purchases/queries/use-site-purchases.js +2 -2
  206. package/dist/esm/queries/use-all-domains-query.js +1 -1
  207. package/dist/esm/queries/use-all-domains-query.js.map +1 -1
  208. package/dist/esm/queries/use-bulk-domain-update-status-query.js +3 -56
  209. package/dist/esm/queries/use-bulk-domain-update-status-query.js.map +1 -1
  210. package/dist/esm/queries/use-happiness-engineers-query.js +1 -1
  211. package/dist/esm/queries/use-happiness-engineers-query.js.map +1 -1
  212. package/dist/esm/queries/use-launchpad.js +1 -1
  213. package/dist/esm/queries/use-launchpad.js.map +1 -1
  214. package/dist/esm/queries/use-site-domains-query.js +1 -1
  215. package/dist/esm/queries/use-site-domains-query.js.map +1 -1
  216. package/dist/esm/queries/use-site-intent.js +1 -1
  217. package/dist/esm/queries/use-site-intent.js.map +1 -1
  218. package/dist/esm/queries/use-site-query.js +1 -1
  219. package/dist/esm/queries/use-site-query.js.map +1 -1
  220. package/dist/esm/reader/contexts/index.js +0 -1
  221. package/dist/esm/reader/contexts/index.js.map +1 -1
  222. package/dist/esm/reader/helpers/index.js +3 -2
  223. package/dist/esm/reader/helpers/index.js.map +1 -1
  224. package/dist/esm/reader/helpers/optimistic-update.js +2 -1
  225. package/dist/esm/reader/helpers/optimistic-update.js.map +1 -1
  226. package/dist/esm/reader/index.js +2 -3
  227. package/dist/esm/reader/index.js.map +1 -1
  228. package/dist/esm/reader/mutations/use-pending-site-confirm-mutation.js +2 -2
  229. package/dist/esm/reader/mutations/use-pending-site-confirm-mutation.js.map +1 -1
  230. package/dist/esm/reader/mutations/use-site-delivery-frequency-mutation.js +27 -21
  231. package/dist/esm/reader/mutations/use-site-delivery-frequency-mutation.js.map +1 -1
  232. package/dist/esm/reader/mutations/use-site-email-me-new-comments-mutation.js +5 -4
  233. package/dist/esm/reader/mutations/use-site-email-me-new-comments-mutation.js.map +1 -1
  234. package/dist/esm/reader/mutations/use-site-email-me-new-posts-mutation.js +5 -4
  235. package/dist/esm/reader/mutations/use-site-email-me-new-posts-mutation.js.map +1 -1
  236. package/dist/esm/reader/mutations/use-site-notify-me-of-new-posts-mutation.js +5 -4
  237. package/dist/esm/reader/mutations/use-site-notify-me-of-new-posts-mutation.js.map +1 -1
  238. package/dist/esm/reader/mutations/use-site-subscribe-mutation.js +10 -4
  239. package/dist/esm/reader/mutations/use-site-subscribe-mutation.js.map +1 -1
  240. package/dist/esm/reader/mutations/use-site-unsubscribe-mutation.js +11 -4
  241. package/dist/esm/reader/mutations/use-site-unsubscribe-mutation.js.map +1 -1
  242. package/dist/esm/reader/queries/index.js +1 -4
  243. package/dist/esm/reader/queries/index.js.map +1 -1
  244. package/dist/esm/reader/queries/use-site-subscriptions-query.js +28 -27
  245. package/dist/esm/reader/queries/use-site-subscriptions-query.js.map +1 -1
  246. package/dist/esm/site/queries/use-site-features.js +1 -1
  247. package/dist/esm/site/queries/use-site-media-storage.js +1 -1
  248. package/dist/esm/site/queries/use-site-user-query.js +1 -1
  249. package/dist/esm/site/queries/use-site-user-query.js.map +1 -1
  250. package/dist/esm/site/queries/use-site.js +1 -1
  251. package/dist/esm/site/resolvers.js +1 -1
  252. package/dist/esm/site/resolvers.js.map +1 -1
  253. package/dist/esm/site/selectors.js +5 -3
  254. package/dist/esm/site/selectors.js.map +1 -1
  255. package/dist/esm/site/types.js.map +1 -1
  256. package/dist/esm/site-reset/use-site-reset-content-summary-query.js +1 -1
  257. package/dist/esm/site-reset/use-site-reset-content-summary-query.js.map +1 -1
  258. package/dist/esm/site-reset/use-site-reset-mutation.js +1 -1
  259. package/dist/esm/site-reset/use-site-reset-mutation.js.map +1 -1
  260. package/dist/esm/site-reset/use-site-reset-status-query.js +1 -1
  261. package/dist/esm/site-reset/use-site-reset-status-query.js.map +1 -1
  262. package/dist/esm/starter-designs-queries/use-starter-design-by-slug.js +1 -1
  263. package/dist/esm/starter-designs-queries/use-starter-design-by-slug.js.map +1 -1
  264. package/dist/esm/starter-designs-queries/use-starter-designs-query.js +1 -1
  265. package/dist/esm/starter-designs-queries/use-starter-designs-query.js.map +1 -1
  266. package/dist/esm/subscriber/actions.js +1 -1
  267. package/dist/esm/subscriber/actions.js.map +1 -1
  268. package/dist/esm/templates/use-template.js +1 -1
  269. package/dist/esm/templates/use-template.js.map +1 -1
  270. package/dist/esm/users/use-send-invites.js +1 -1
  271. package/dist/esm/users/use-send-invites.js.map +1 -1
  272. package/dist/esm/utils.js +21 -0
  273. package/dist/esm/utils.js.map +1 -0
  274. package/dist/esm/wpcom-request-controls/index.js +2 -1
  275. package/dist/esm/wpcom-request-controls/index.js.map +1 -1
  276. package/dist/esm/wpcom-request.js +18 -0
  277. package/dist/esm/wpcom-request.js.map +1 -0
  278. package/dist/tsconfig-cjs.tsbuildinfo +1 -1
  279. package/dist/tsconfig.tsbuildinfo +1 -1
  280. package/dist/types/add-ons/types.d.ts +1 -0
  281. package/dist/types/add-ons/types.d.ts.map +1 -1
  282. package/dist/types/agents-manager/actions.d.ts +77 -0
  283. package/dist/types/agents-manager/actions.d.ts.map +1 -0
  284. package/dist/types/agents-manager/constants.d.ts +2 -0
  285. package/dist/types/agents-manager/constants.d.ts.map +1 -0
  286. package/dist/types/agents-manager/index.d.ts +6 -0
  287. package/dist/types/agents-manager/index.d.ts.map +1 -0
  288. package/dist/types/agents-manager/persist-state.d.ts +6 -0
  289. package/dist/types/agents-manager/persist-state.d.ts.map +1 -0
  290. package/dist/types/agents-manager/reducer.d.ts +29 -0
  291. package/dist/types/agents-manager/reducer.d.ts.map +1 -0
  292. package/dist/types/agents-manager/resolvers.d.ts +54 -0
  293. package/dist/types/agents-manager/resolvers.d.ts.map +1 -0
  294. package/dist/types/agents-manager/selectors.d.ts +22 -0
  295. package/dist/types/agents-manager/selectors.d.ts.map +1 -0
  296. package/dist/types/agents-manager/types.d.ts +20 -0
  297. package/dist/types/agents-manager/types.d.ts.map +1 -0
  298. package/dist/types/contextual-help/admin-sections.d.ts +330 -6
  299. package/dist/types/contextual-help/admin-sections.d.ts.map +1 -1
  300. package/dist/types/contextual-help/contextual-help.d.ts +410 -30
  301. package/dist/types/contextual-help/contextual-help.d.ts.map +1 -1
  302. package/dist/types/help-center/actions.d.ts +249 -28
  303. package/dist/types/help-center/actions.d.ts.map +1 -1
  304. package/dist/types/help-center/constants.d.ts +1 -0
  305. package/dist/types/help-center/constants.d.ts.map +1 -1
  306. package/dist/types/help-center/index.d.ts +1 -2
  307. package/dist/types/help-center/index.d.ts.map +1 -1
  308. package/dist/types/help-center/reducer.d.ts +19 -7
  309. package/dist/types/help-center/reducer.d.ts.map +1 -1
  310. package/dist/types/help-center/resolvers.d.ts +4 -23
  311. package/dist/types/help-center/resolvers.d.ts.map +1 -1
  312. package/dist/types/help-center/selectors.d.ts +14 -3
  313. package/dist/types/help-center/selectors.d.ts.map +1 -1
  314. package/dist/types/help-center/types.d.ts +21 -12
  315. package/dist/types/help-center/types.d.ts.map +1 -1
  316. package/dist/types/help-center/utils.d.ts +13 -0
  317. package/dist/types/help-center/utils.d.ts.map +1 -0
  318. package/dist/types/index.d.ts +347 -197
  319. package/dist/types/index.d.ts.map +1 -1
  320. package/dist/types/onboard/actions.d.ts +32 -4
  321. package/dist/types/onboard/actions.d.ts.map +1 -1
  322. package/dist/types/onboard/reducer.d.ts +11 -2
  323. package/dist/types/onboard/reducer.d.ts.map +1 -1
  324. package/dist/types/onboard/selectors.d.ts +14 -8
  325. package/dist/types/onboard/selectors.d.ts.map +1 -1
  326. package/dist/types/onboard/types.d.ts +1 -1
  327. package/dist/types/onboard/types.d.ts.map +1 -1
  328. package/dist/types/plans/constants.d.ts +3 -2
  329. package/dist/types/plans/constants.d.ts.map +1 -1
  330. package/dist/types/plans/hooks/use-pricing-meta-for-grid-plans.d.ts +6 -1
  331. package/dist/types/plans/hooks/use-pricing-meta-for-grid-plans.d.ts.map +1 -1
  332. package/dist/types/plans/index.d.ts +1 -1
  333. package/dist/types/plans/index.d.ts.map +1 -1
  334. package/dist/types/plans/queries/use-plans.d.ts.map +1 -1
  335. package/dist/types/plans/resolvers.d.ts.map +1 -1
  336. package/dist/types/plans/types.d.ts +6 -0
  337. package/dist/types/plans/types.d.ts.map +1 -1
  338. package/dist/types/products-list/index.d.ts +1 -1
  339. package/dist/types/products-list/index.d.ts.map +1 -1
  340. package/dist/types/products-list/queries/use-products.d.ts.map +1 -1
  341. package/dist/types/purchases/lib/assembler.d.ts +3 -3
  342. package/dist/types/purchases/lib/assembler.d.ts.map +1 -1
  343. package/dist/types/purchases/types.d.ts +40 -109
  344. package/dist/types/purchases/types.d.ts.map +1 -1
  345. package/dist/types/queries/use-all-domains-query.d.ts +3 -3
  346. package/dist/types/queries/use-all-domains-query.d.ts.map +1 -1
  347. package/dist/types/queries/use-bulk-domain-update-status-query.d.ts +5 -48
  348. package/dist/types/queries/use-bulk-domain-update-status-query.d.ts.map +1 -1
  349. package/dist/types/queries/use-site-domains-query.d.ts +1 -1
  350. package/dist/types/queries/use-site-domains-query.d.ts.map +1 -1
  351. package/dist/types/queries/use-site-intent.d.ts.map +1 -1
  352. package/dist/types/queries/use-site-query.d.ts +1 -1
  353. package/dist/types/queries/use-site-query.d.ts.map +1 -1
  354. package/dist/types/reader/contexts/index.d.ts +0 -1
  355. package/dist/types/reader/contexts/index.d.ts.map +1 -1
  356. package/dist/types/reader/helpers/index.d.ts.map +1 -1
  357. package/dist/types/reader/helpers/optimistic-update.d.ts.map +1 -1
  358. package/dist/types/reader/index.d.ts +342 -196
  359. package/dist/types/reader/index.d.ts.map +1 -1
  360. package/dist/types/reader/mutations/use-site-delivery-frequency-mutation.d.ts +3 -2
  361. package/dist/types/reader/mutations/use-site-delivery-frequency-mutation.d.ts.map +1 -1
  362. package/dist/types/reader/mutations/use-site-email-me-new-comments-mutation.d.ts +3 -2
  363. package/dist/types/reader/mutations/use-site-email-me-new-comments-mutation.d.ts.map +1 -1
  364. package/dist/types/reader/mutations/use-site-email-me-new-posts-mutation.d.ts +3 -2
  365. package/dist/types/reader/mutations/use-site-email-me-new-posts-mutation.d.ts.map +1 -1
  366. package/dist/types/reader/mutations/use-site-notify-me-of-new-posts-mutation.d.ts +3 -2
  367. package/dist/types/reader/mutations/use-site-notify-me-of-new-posts-mutation.d.ts.map +1 -1
  368. package/dist/types/reader/mutations/use-site-subscribe-mutation.d.ts +3 -2
  369. package/dist/types/reader/mutations/use-site-subscribe-mutation.d.ts.map +1 -1
  370. package/dist/types/reader/mutations/use-site-unsubscribe-mutation.d.ts +3 -2
  371. package/dist/types/reader/mutations/use-site-unsubscribe-mutation.d.ts.map +1 -1
  372. package/dist/types/reader/queries/index.d.ts +1 -5
  373. package/dist/types/reader/queries/index.d.ts.map +1 -1
  374. package/dist/types/reader/queries/use-pending-post-subscriptions-query.d.ts +75 -7
  375. package/dist/types/reader/queries/use-pending-post-subscriptions-query.d.ts.map +1 -1
  376. package/dist/types/reader/queries/use-pending-site-subscriptions-query.d.ts +75 -7
  377. package/dist/types/reader/queries/use-pending-site-subscriptions-query.d.ts.map +1 -1
  378. package/dist/types/reader/queries/use-post-subscriptions-query.d.ts +143 -13
  379. package/dist/types/reader/queries/use-post-subscriptions-query.d.ts.map +1 -1
  380. package/dist/types/reader/queries/use-site-subscriptions-query.d.ts +6 -135
  381. package/dist/types/reader/queries/use-site-subscriptions-query.d.ts.map +1 -1
  382. package/dist/types/reader/types/index.d.ts +32 -44
  383. package/dist/types/reader/types/index.d.ts.map +1 -1
  384. package/dist/types/shared-types.d.ts +11 -0
  385. package/dist/types/shared-types.d.ts.map +1 -1
  386. package/dist/types/site/actions.d.ts +1 -1
  387. package/dist/types/site/actions.d.ts.map +1 -1
  388. package/dist/types/site/queries/use-site-user-query.d.ts.map +1 -1
  389. package/dist/types/site/selectors.d.ts.map +1 -1
  390. package/dist/types/site/types.d.ts +5 -0
  391. package/dist/types/site/types.d.ts.map +1 -1
  392. package/dist/types/starter-designs-queries/types.d.ts +1 -1
  393. package/dist/types/starter-designs-queries/types.d.ts.map +1 -1
  394. package/dist/types/starter-designs-queries/use-starter-design-by-slug.d.ts +1 -1
  395. package/dist/types/starter-designs-queries/use-starter-design-by-slug.d.ts.map +1 -1
  396. package/dist/types/starter-designs-queries/use-starter-designs-query.d.ts +1 -1
  397. package/dist/types/starter-designs-queries/use-starter-designs-query.d.ts.map +1 -1
  398. package/dist/types/subscriber/index.d.ts +1 -1
  399. package/dist/types/subscriber/index.d.ts.map +1 -1
  400. package/dist/types/user/actions.d.ts +1 -1
  401. package/dist/types/user/reducer.d.ts +1 -1
  402. package/dist/types/user/resolvers.d.ts +2 -2
  403. package/dist/types/user/selectors.d.ts +2 -2
  404. package/dist/types/user/selectors.d.ts.map +1 -1
  405. package/dist/types/user/types.d.ts +2 -33
  406. package/dist/types/user/types.d.ts.map +1 -1
  407. package/dist/types/utils.d.ts +3 -0
  408. package/dist/types/utils.d.ts.map +1 -0
  409. package/dist/types/wpcom-plans-ui/actions.d.ts +1 -1
  410. package/dist/types/wpcom-plans-ui/index.d.ts +1 -1
  411. package/dist/types/wpcom-plans-ui/index.d.ts.map +1 -1
  412. package/dist/types/wpcom-request-controls/index.d.ts +1 -1
  413. package/dist/types/wpcom-request-controls/index.d.ts.map +1 -1
  414. package/dist/types/wpcom-request.d.ts +7 -0
  415. package/dist/types/wpcom-request.d.ts.map +1 -0
  416. package/package.json +26 -29
  417. package/src/add-ons/types.ts +1 -0
  418. package/src/agents-manager/actions.ts +151 -0
  419. package/src/agents-manager/constants.ts +1 -0
  420. package/src/agents-manager/index.ts +38 -0
  421. package/src/agents-manager/persist-state.ts +60 -0
  422. package/src/agents-manager/reducer.ts +106 -0
  423. package/src/agents-manager/resolvers.ts +87 -0
  424. package/src/agents-manager/selectors.ts +32 -0
  425. package/src/agents-manager/test/persist-state.test.ts +81 -0
  426. package/src/agents-manager/test/reducer.test.ts +69 -0
  427. package/src/agents-manager/types.ts +24 -0
  428. package/src/contextual-help/admin-sections.ts +2 -2
  429. package/src/help-center/actions.ts +139 -79
  430. package/src/help-center/constants.ts +1 -0
  431. package/src/help-center/index.ts +11 -32
  432. package/src/help-center/reducer.ts +55 -19
  433. package/src/help-center/resolvers.ts +47 -32
  434. package/src/help-center/selectors.ts +7 -2
  435. package/src/help-center/test/utils.ts +99 -0
  436. package/src/help-center/types.ts +23 -13
  437. package/src/help-center/utils.ts +156 -0
  438. package/src/index.ts +11 -4
  439. package/src/mutations/use-domains-bulk-actions-mutation.ts +1 -1
  440. package/src/newsletter-categories/index.ts +1 -1
  441. package/src/newsletter-categories/test/index.tsx +5 -2
  442. package/src/onboard/actions.ts +20 -3
  443. package/src/onboard/reducer.ts +38 -3
  444. package/src/onboard/selectors.ts +3 -0
  445. package/src/onboard/types.ts +1 -1
  446. package/src/plans/constants.ts +2 -0
  447. package/src/plans/hooks/test/use-pricing-meta-for-grid-plans.ts +120 -0
  448. package/src/plans/hooks/use-pricing-meta-for-grid-plans.ts +48 -18
  449. package/src/plans/index.ts +1 -0
  450. package/src/plans/queries/use-plans.ts +30 -2
  451. package/src/plans/queries/use-site-plans.ts +1 -1
  452. package/src/plans/resolvers.ts +0 -1
  453. package/src/plans/selectors.ts +9 -9
  454. package/src/plans/types.ts +6 -0
  455. package/src/products-list/queries/use-products.ts +1 -1
  456. package/src/products-list/resolvers.ts +1 -1
  457. package/src/products-list/selectors.ts +1 -1
  458. package/src/products-list/test/selectors.ts +2 -2
  459. package/src/purchases/lib/assembler.ts +20 -29
  460. package/src/purchases/queries/use-get-jetpack-transferred-license-purchases.tsx +1 -1
  461. package/src/purchases/queries/use-site-purchases.ts +2 -2
  462. package/src/purchases/types.ts +47 -116
  463. package/src/queries/use-all-domains-query.ts +3 -3
  464. package/src/queries/use-bulk-domain-update-status-query.ts +14 -115
  465. package/src/queries/use-happiness-engineers-query.ts +1 -1
  466. package/src/queries/use-launchpad.ts +1 -1
  467. package/src/queries/use-site-domains-query.ts +1 -1
  468. package/src/queries/use-site-intent.ts +1 -1
  469. package/src/queries/use-site-query.ts +1 -1
  470. package/src/reader/contexts/index.ts +0 -4
  471. package/src/reader/helpers/index.ts +3 -2
  472. package/src/reader/helpers/optimistic-update.ts +2 -1
  473. package/src/reader/index.ts +2 -4
  474. package/src/reader/mutations/test/use-site-subscription-mutations.test.tsx +208 -0
  475. package/src/reader/mutations/use-pending-site-confirm-mutation.ts +2 -2
  476. package/src/reader/mutations/use-site-delivery-frequency-mutation.ts +32 -36
  477. package/src/reader/mutations/use-site-email-me-new-comments-mutation.ts +10 -10
  478. package/src/reader/mutations/use-site-email-me-new-posts-mutation.ts +10 -10
  479. package/src/reader/mutations/use-site-notify-me-of-new-posts-mutation.ts +10 -10
  480. package/src/reader/mutations/use-site-subscribe-mutation.ts +21 -10
  481. package/src/reader/mutations/use-site-unsubscribe-mutation.ts +20 -10
  482. package/src/reader/queries/index.ts +4 -6
  483. package/src/reader/queries/test/use-site-subscriptions-query.tsx +158 -52
  484. package/src/reader/queries/use-site-subscriptions-query.ts +53 -55
  485. package/src/reader/types/index.ts +34 -48
  486. package/src/shared-types.ts +13 -0
  487. package/src/site/actions.ts +1 -1
  488. package/src/site/queries/use-site-features.ts +1 -1
  489. package/src/site/queries/use-site-media-storage.ts +1 -1
  490. package/src/site/queries/use-site-user-query.ts +1 -1
  491. package/src/site/queries/use-site.ts +1 -1
  492. package/src/site/resolvers.ts +1 -1
  493. package/src/site/selectors.ts +18 -10
  494. package/src/site/test/selectors.ts +3 -3
  495. package/src/site/types.ts +5 -0
  496. package/src/site-reset/test/use-site-reset-mutation.tsx +3 -4
  497. package/src/site-reset/use-site-reset-content-summary-query.ts +1 -1
  498. package/src/site-reset/use-site-reset-mutation.ts +1 -1
  499. package/src/site-reset/use-site-reset-status-query.ts +1 -1
  500. package/src/starter-designs-queries/types.ts +1 -1
  501. package/src/starter-designs-queries/use-starter-design-by-slug.ts +2 -2
  502. package/src/starter-designs-queries/use-starter-designs-query.ts +2 -2
  503. package/src/subscriber/actions.ts +1 -1
  504. package/src/templates/use-template.ts +1 -1
  505. package/src/user/types.ts +2 -38
  506. package/src/users/use-send-invites.ts +1 -1
  507. package/src/utils.ts +33 -0
  508. package/src/wpcom-request-controls/index.ts +2 -1
  509. package/src/wpcom-request.ts +26 -0
  510. package/dist/cjs/domain-suggestions/actions.js +0 -33
  511. package/dist/cjs/domain-suggestions/actions.js.map +0 -1
  512. package/dist/cjs/domain-suggestions/constants.js +0 -12
  513. package/dist/cjs/domain-suggestions/constants.js.map +0 -1
  514. package/dist/cjs/domain-suggestions/index.js +0 -25
  515. package/dist/cjs/domain-suggestions/index.js.map +0 -1
  516. package/dist/cjs/domain-suggestions/queries.js +0 -78
  517. package/dist/cjs/domain-suggestions/queries.js.map +0 -1
  518. package/dist/cjs/domain-suggestions/reducer.js +0 -65
  519. package/dist/cjs/domain-suggestions/reducer.js.map +0 -1
  520. package/dist/cjs/domain-suggestions/resolvers.js +0 -91
  521. package/dist/cjs/domain-suggestions/resolvers.js.map +0 -1
  522. package/dist/cjs/domain-suggestions/selectors.js +0 -58
  523. package/dist/cjs/domain-suggestions/selectors.js.map +0 -1
  524. package/dist/cjs/domain-suggestions/utils.js +0 -47
  525. package/dist/cjs/domain-suggestions/utils.js.map +0 -1
  526. package/dist/cjs/reader/contexts/unsubscribed-feeds-search.js +0 -26
  527. package/dist/cjs/reader/contexts/unsubscribed-feeds-search.js.map +0 -1
  528. package/dist/cjs/reader/queries/use-read-feed-query.js +0 -21
  529. package/dist/cjs/reader/queries/use-read-feed-query.js.map +0 -1
  530. package/dist/cjs/reader/queries/use-read-feed-search-query.js +0 -39
  531. package/dist/cjs/reader/queries/use-read-feed-search-query.js.map +0 -1
  532. package/dist/cjs/reader/queries/use-read-feed-site-query.js +0 -26
  533. package/dist/cjs/reader/queries/use-read-feed-site-query.js.map +0 -1
  534. package/dist/esm/domain-suggestions/actions.js +0 -25
  535. package/dist/esm/domain-suggestions/actions.js.map +0 -1
  536. package/dist/esm/domain-suggestions/constants.js +0 -9
  537. package/dist/esm/domain-suggestions/constants.js.map +0 -1
  538. package/dist/esm/domain-suggestions/index.js +0 -20
  539. package/dist/esm/domain-suggestions/index.js.map +0 -1
  540. package/dist/esm/domain-suggestions/queries.js +0 -72
  541. package/dist/esm/domain-suggestions/queries.js.map +0 -1
  542. package/dist/esm/domain-suggestions/reducer.js +0 -61
  543. package/dist/esm/domain-suggestions/reducer.js.map +0 -1
  544. package/dist/esm/domain-suggestions/resolvers.js +0 -84
  545. package/dist/esm/domain-suggestions/resolvers.js.map +0 -1
  546. package/dist/esm/domain-suggestions/selectors.js +0 -47
  547. package/dist/esm/domain-suggestions/selectors.js.map +0 -1
  548. package/dist/esm/domain-suggestions/utils.js +0 -41
  549. package/dist/esm/domain-suggestions/utils.js.map +0 -1
  550. package/dist/esm/reader/contexts/unsubscribed-feeds-search.js +0 -20
  551. package/dist/esm/reader/contexts/unsubscribed-feeds-search.js.map +0 -1
  552. package/dist/esm/reader/queries/use-read-feed-query.js +0 -18
  553. package/dist/esm/reader/queries/use-read-feed-query.js.map +0 -1
  554. package/dist/esm/reader/queries/use-read-feed-search-query.js +0 -35
  555. package/dist/esm/reader/queries/use-read-feed-search-query.js.map +0 -1
  556. package/dist/esm/reader/queries/use-read-feed-site-query.js +0 -23
  557. package/dist/esm/reader/queries/use-read-feed-site-query.js.map +0 -1
  558. package/dist/types/domain-suggestions/actions.d.ts +0 -27
  559. package/dist/types/domain-suggestions/actions.d.ts.map +0 -1
  560. package/dist/types/domain-suggestions/constants.d.ts +0 -8
  561. package/dist/types/domain-suggestions/constants.d.ts.map +0 -1
  562. package/dist/types/domain-suggestions/index.d.ts +0 -10
  563. package/dist/types/domain-suggestions/index.d.ts.map +0 -1
  564. package/dist/types/domain-suggestions/queries.d.ts +0 -323
  565. package/dist/types/domain-suggestions/queries.d.ts.map +0 -1
  566. package/dist/types/domain-suggestions/reducer.d.ts +0 -16
  567. package/dist/types/domain-suggestions/reducer.d.ts.map +0 -1
  568. package/dist/types/domain-suggestions/resolvers.d.ts +0 -39
  569. package/dist/types/domain-suggestions/resolvers.d.ts.map +0 -1
  570. package/dist/types/domain-suggestions/selectors.d.ts +0 -18
  571. package/dist/types/domain-suggestions/selectors.d.ts.map +0 -1
  572. package/dist/types/domain-suggestions/types.d.ts +0 -206
  573. package/dist/types/domain-suggestions/types.d.ts.map +0 -1
  574. package/dist/types/domain-suggestions/utils.d.ts +0 -23
  575. package/dist/types/domain-suggestions/utils.d.ts.map +0 -1
  576. package/dist/types/reader/contexts/unsubscribed-feeds-search.d.ts +0 -12
  577. package/dist/types/reader/contexts/unsubscribed-feeds-search.d.ts.map +0 -1
  578. package/dist/types/reader/queries/use-read-feed-query.d.ts +0 -28
  579. package/dist/types/reader/queries/use-read-feed-query.d.ts.map +0 -1
  580. package/dist/types/reader/queries/use-read-feed-search-query.d.ts +0 -34
  581. package/dist/types/reader/queries/use-read-feed-search-query.d.ts.map +0 -1
  582. package/dist/types/reader/queries/use-read-feed-site-query.d.ts +0 -15
  583. package/dist/types/reader/queries/use-read-feed-site-query.d.ts.map +0 -1
  584. package/src/domain-suggestions/actions.ts +0 -51
  585. package/src/domain-suggestions/constants.ts +0 -8
  586. package/src/domain-suggestions/index.ts +0 -22
  587. package/src/domain-suggestions/queries.ts +0 -85
  588. package/src/domain-suggestions/reducer.ts +0 -77
  589. package/src/domain-suggestions/resolvers.ts +0 -110
  590. package/src/domain-suggestions/selectors.ts +0 -86
  591. package/src/domain-suggestions/test/reducer.ts +0 -105
  592. package/src/domain-suggestions/test/selectors.ts +0 -127
  593. package/src/domain-suggestions/types.ts +0 -254
  594. package/src/domain-suggestions/utils.ts +0 -50
  595. package/src/reader/contexts/unsubscribed-feeds-search.tsx +0 -35
  596. package/src/reader/queries/test/use-read-feed-search-query.tsx +0 -55
  597. package/src/reader/queries/use-read-feed-query.ts +0 -45
  598. package/src/reader/queries/use-read-feed-search-query.ts +0 -72
  599. package/src/reader/queries/use-read-feed-site-query.ts +0 -35
  600. /package/dist/cjs/{domain-suggestions → agents-manager}/types.js +0 -0
  601. /package/dist/esm/{domain-suggestions → agents-manager}/types.js +0 -0
@@ -1,10 +1,13 @@
1
1
  /**
2
2
  * @jest-environment jsdom
3
3
  */
4
+ import {
5
+ getSiteSubscriptionsQueryKey,
6
+ type SiteSubscriptionsInfiniteData,
7
+ } from '@automattic/api-queries';
4
8
  import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
5
9
  import { renderHook, waitFor } from '@testing-library/react';
6
- import React from 'react';
7
- import { act } from 'react-dom/test-utils';
10
+ import React, { act } from 'react';
8
11
  import { SiteSubscriptionsSortBy } from '../../constants';
9
12
  import {
10
13
  SiteSubscriptionsQueryPropsProvider,
@@ -12,8 +15,10 @@ import {
12
15
  } from '../../contexts';
13
16
  import { callApi, getSubkey } from '../../helpers';
14
17
  import useSiteSubscriptionsQuery from '../../queries/use-site-subscriptions-query';
18
+ import type { SiteSubscriptionItem } from '../../types';
15
19
 
16
20
  jest.mock( '../../helpers', () => ( {
21
+ ...jest.requireActual( '../../helpers' ),
17
22
  callApi: jest.fn(),
18
23
  getSubkey: jest.fn(),
19
24
  } ) );
@@ -26,60 +31,140 @@ const wrapper = ( { children } ) => (
26
31
  </QueryClientProvider>
27
32
  );
28
33
 
34
+ const makeFollow = ( overrides: Partial< SiteSubscriptionItem > = {} ): SiteSubscriptionItem => ( {
35
+ ID: '1',
36
+ URL: 'https://site1.example.com',
37
+ feed_URL: 'https://site1.example.com/feed',
38
+ blog_ID: '1',
39
+ feed_ID: '11',
40
+ is_following: true,
41
+ name: 'Site 1',
42
+ date_subscribed: new Date( '2024-01-01T00:00:00Z' ),
43
+ last_updated: new Date( '2024-01-01T00:00:00Z' ),
44
+ ...overrides,
45
+ } );
46
+
47
+ const makeApiSubscription = ( id: number ) => ( {
48
+ ID: String( id ),
49
+ URL: `https://site${ id }.example.com/feed`,
50
+ blog_ID: String( id ),
51
+ feed_ID: String( id + 1000 ),
52
+ name: `Site ${ id }`,
53
+ } );
54
+
55
+ const makeSiteSubscriptionsData = (
56
+ pages: SiteSubscriptionItem[][],
57
+ totalCount = pages.reduce( ( count, page ) => count + page.length, 0 )
58
+ ): SiteSubscriptionsInfiniteData => ( {
59
+ pages: pages.map( ( subscriptions, index ) => ( {
60
+ subscriptions,
61
+ totalCount,
62
+ page: index + 1,
63
+ number: 200,
64
+ } ) ),
65
+ pageParams: pages.map( ( _, index ) => index + 1 ),
66
+ } );
67
+
68
+ const seedSiteSubscriptions = ( pages: SiteSubscriptionItem[][], totalCount?: number ) => {
69
+ queryClient.setQueryData< SiteSubscriptionsInfiniteData >(
70
+ getSiteSubscriptionsQueryKey(),
71
+ makeSiteSubscriptionsData( pages, totalCount )
72
+ );
73
+ };
74
+
29
75
  describe( 'useSiteSubscriptionsQuery hook', () => {
30
76
  beforeEach( () => {
31
77
  queryClient.clear();
32
78
  jest.resetAllMocks();
33
79
 
34
80
  ( getSubkey as jest.Mock ).mockReturnValue( () => 'test-key' );
81
+ ( callApi as jest.Mock ).mockResolvedValue( {
82
+ subscriptions: [],
83
+ total_subscriptions: 0,
84
+ page: 1,
85
+ number: 200,
86
+ } );
35
87
  } );
36
88
 
37
- it( 'fetches subscriptions data with multiple pages', async () => {
38
- ( callApi as jest.Mock ).mockResolvedValueOnce( {
39
- subscriptions: [
40
- { id: '1', name: 'Site 1', URL: 'https://site1.example.com' },
41
- { id: '2', name: 'Site 2', URL: 'https://site2.example.com' },
89
+ it( 'derives subscriptions data from multiple cached pages', async () => {
90
+ seedSiteSubscriptions( [
91
+ [
92
+ makeFollow( { ID: '1', name: 'Site 1', URL: 'https://site1.example.com' } ),
93
+ makeFollow( { ID: '2', name: 'Site 2', URL: 'https://site2.example.com' } ),
42
94
  ],
43
- page: 1,
44
- total_subscriptions: 6,
45
- } );
46
- ( callApi as jest.Mock ).mockResolvedValueOnce( {
47
- subscriptions: [
48
- { id: '3', name: 'Site 3', URL: 'https://site3.example.com' },
49
- { id: '4', name: 'Site 4', URL: 'https://site4.example.com' },
95
+ [
96
+ makeFollow( { ID: '3', name: 'Site 3', URL: 'https://site3.example.com' } ),
97
+ makeFollow( { ID: '4', name: 'Site 4', URL: 'https://site4.example.com' } ),
50
98
  ],
51
- page: 2,
52
- total_subscriptions: 6,
53
- } );
54
- ( callApi as jest.Mock ).mockResolvedValueOnce( {
55
- subscriptions: [
56
- { id: '5', name: 'Site 5', URL: 'https://site5.example.com' },
57
- { id: '6', name: 'Site 6', URL: 'https://site6.example.com' },
99
+ [
100
+ makeFollow( { ID: '5', name: 'Site 5', URL: 'https://site5.example.com' } ),
101
+ makeFollow( { ID: '6', name: 'Site 6', URL: 'https://site6.example.com' } ),
58
102
  ],
59
- page: 3,
60
- total_subscriptions: 6,
61
- } );
103
+ ] );
62
104
 
63
- const { result } = renderHook( () => useSiteSubscriptionsQuery( { number: 2 } ), {
105
+ const { result } = renderHook( () => useSiteSubscriptionsQuery(), {
64
106
  wrapper,
65
107
  } );
66
108
 
67
109
  await waitFor( () => {
68
- expect( callApi ).toHaveBeenCalledTimes( 3 );
69
110
  expect( result.current.data.subscriptions.length ).toBe( 6 );
70
111
  expect( result.current.data.totalCount ).toBe( 6 );
71
112
  } );
72
113
  } );
73
114
 
115
+ it( 'fetches additional pages through the subkey-aware API path', async () => {
116
+ // The server caps each page at 100 rows, so a full page is 100 items.
117
+ const firstPage = Array.from( { length: 100 }, ( _value, index ) =>
118
+ makeApiSubscription( index + 1 )
119
+ );
120
+ const secondPage = [ makeApiSubscription( 101 ) ];
121
+
122
+ ( callApi as jest.Mock ).mockImplementation( ( { path, isLoggedIn } ) => {
123
+ expect( isLoggedIn ).toBe( false );
124
+
125
+ if ( path.includes( 'page=1' ) ) {
126
+ return Promise.resolve( {
127
+ subscriptions: firstPage,
128
+ total_subscriptions: 101,
129
+ page: 1,
130
+ number: 100,
131
+ } );
132
+ }
133
+
134
+ if ( path.includes( 'page=2' ) ) {
135
+ return Promise.resolve( {
136
+ subscriptions: secondPage,
137
+ total_subscriptions: 101,
138
+ page: 2,
139
+ number: 1,
140
+ } );
141
+ }
142
+
143
+ throw new Error( `Unexpected path ${ path }` );
144
+ } );
145
+
146
+ const { result } = renderHook( () => useSiteSubscriptionsQuery(), {
147
+ wrapper,
148
+ } );
149
+
150
+ await waitFor( () => expect( callApi ).toHaveBeenCalledTimes( 2 ) );
151
+ await waitFor( () => expect( result.current.data.subscriptions ).toHaveLength( 101 ) );
152
+ expect( ( callApi as jest.Mock ).mock.calls[ 0 ][ 0 ] ).toMatchObject( {
153
+ apiVersion: '1.2',
154
+ isLoggedIn: false,
155
+ } );
156
+ expect( ( callApi as jest.Mock ).mock.calls[ 0 ][ 0 ].path ).toContain(
157
+ '/read/following/mine'
158
+ );
159
+ } );
160
+
74
161
  it( 'fetches subscriptions data with search term', async () => {
75
- ( callApi as jest.Mock ).mockResolvedValue( {
76
- subscriptions: [
77
- { id: '1', name: 'Site 1', URL: 'https://site1.example.com' },
78
- { id: '2', name: 'Site 2', URL: 'https://site2.example.com' },
162
+ seedSiteSubscriptions( [
163
+ [
164
+ makeFollow( { ID: '1', name: 'Site 1', URL: 'https://site1.example.com' } ),
165
+ makeFollow( { ID: '2', name: 'Site 2', URL: 'https://site2.example.com' } ),
79
166
  ],
80
- page: 1,
81
- total_subscriptions: 2,
82
- } );
167
+ ] );
83
168
 
84
169
  const { result } = renderHook(
85
170
  () => {
@@ -97,12 +182,36 @@ describe( 'useSiteSubscriptionsQuery hook', () => {
97
182
  act( () => result.current.setSearchTerm( 'te 1' ) );
98
183
  await waitFor( () => expect( result.current.searchTerm ).toBe( 'te 1' ) );
99
184
 
100
- expect( callApi ).toHaveBeenCalledTimes( 1 );
101
185
  expect( result.current.data.subscriptions.length ).toBe( 1 );
102
186
  expect( result.current.data.subscriptions[ 0 ].name ).toBe( 'Site 1' );
103
187
  expect( result.current.data.totalCount ).toBe( 2 );
104
188
  } );
105
189
 
190
+ it( 'reuses fresh cached follows when remounted', async () => {
191
+ seedSiteSubscriptions( [
192
+ [ makeFollow( { ID: '1', name: 'Site 1', URL: 'https://site1.example.com' } ) ],
193
+ ] );
194
+
195
+ const firstRender = renderHook( () => useSiteSubscriptionsQuery(), {
196
+ wrapper,
197
+ } );
198
+
199
+ await waitFor( () => expect( firstRender.result.current.isLoading ).toBe( false ) );
200
+ expect( firstRender.result.current.data.subscriptions ).toHaveLength( 1 );
201
+
202
+ firstRender.unmount();
203
+
204
+ const secondRender = renderHook( () => useSiteSubscriptionsQuery(), {
205
+ wrapper,
206
+ } );
207
+
208
+ await waitFor( () =>
209
+ expect( secondRender.result.current.data.subscriptions ).toHaveLength( 1 )
210
+ );
211
+
212
+ expect( secondRender.result.current.data.subscriptions ).toHaveLength( 1 );
213
+ } );
214
+
106
215
  it.each( [
107
216
  {
108
217
  sortTerm: SiteSubscriptionsSortBy.SiteName,
@@ -129,33 +238,31 @@ describe( 'useSiteSubscriptionsQuery hook', () => {
129
238
  ],
130
239
  },
131
240
  ] )( 'Applies sorting to the subscriptions returned', async ( { sortTerm, expectedResult } ) => {
132
- ( callApi as jest.Mock ).mockResolvedValue( {
133
- subscriptions: [
134
- {
241
+ seedSiteSubscriptions( [
242
+ [
243
+ makeFollow( {
135
244
  ID: '1',
136
245
  name: "Zorro's site",
137
246
  URL: 'https://site2.example.com',
138
- date_subscribed: '2022-01-18T00:00:00+00:00',
139
- last_updated: '2023-04-18T19:00:00+00:00',
140
- },
141
- {
247
+ date_subscribed: new Date( '2022-01-18T00:00:00+00:00' ),
248
+ last_updated: new Date( '2023-04-18T19:00:00+00:00' ),
249
+ } ),
250
+ makeFollow( {
142
251
  ID: '3',
143
252
  name: "Maciej's site",
144
253
  URL: 'https://site2.example.com',
145
- date_subscribed: '2023-04-18T17:00:00+00:00',
146
- last_updated: '2023-04-18T17:00:00+00:00',
147
- },
148
- {
254
+ date_subscribed: new Date( '2023-04-18T17:00:00+00:00' ),
255
+ last_updated: new Date( '2023-04-18T17:00:00+00:00' ),
256
+ } ),
257
+ makeFollow( {
149
258
  ID: '2',
150
259
  name: "Arnold's site",
151
260
  URL: 'https://site1.example.com',
152
- date_subscribed: '2023-04-18T12:00:00+00:00',
153
- last_updated: '2023-04-18T12:00:00+00:00',
154
- },
261
+ date_subscribed: new Date( '2023-04-18T12:00:00+00:00' ),
262
+ last_updated: new Date( '2023-04-18T12:00:00+00:00' ),
263
+ } ),
155
264
  ],
156
- page: 1,
157
- total_subscriptions: 3,
158
- } );
265
+ ] );
159
266
 
160
267
  const { result } = renderHook(
161
268
  () => {
@@ -172,7 +279,6 @@ describe( 'useSiteSubscriptionsQuery hook', () => {
172
279
  act( () => result.current.setSortTerm( sortTerm ) );
173
280
  await waitFor( () => expect( result.current.sortTerm ).toBe( sortTerm ) );
174
281
 
175
- expect( callApi ).toHaveBeenCalledTimes( 1 );
176
282
  result.current.data.subscriptions.forEach( ( subscription, index ) => {
177
283
  expect( subscription.ID ).toEqual( expectedResult[ index ].ID );
178
284
  } );
@@ -1,38 +1,38 @@
1
+ import {
2
+ adaptSiteSubscriptionsResponse,
3
+ type SiteSubscriptionsApiResponse,
4
+ } from '@automattic/api-core';
5
+ import { siteSubscriptionsQuery, getSiteSubscriptionsQueryKey } from '@automattic/api-queries';
1
6
  import { useInfiniteQuery } from '@tanstack/react-query';
7
+ import { addQueryArgs } from '@wordpress/url';
2
8
  import { useMemo, useEffect, useCallback } from 'react';
3
9
  import { SiteSubscriptionsFilterBy, SiteSubscriptionsSortBy } from '../constants';
4
10
  import { useSiteSubscriptionsQueryProps } from '../contexts';
5
11
  import { callApi } from '../helpers';
6
- import { useCacheKey, useIsLoggedIn, useIsQueryEnabled } from '../hooks';
7
- import type { SiteSubscriptionsResponseItem } from '../types';
12
+ import { useIsLoggedIn, useIsQueryEnabled } from '../hooks';
13
+ import type { SiteSubscriptionItem } from '../types';
8
14
 
9
- export const siteSubscriptionsQueryKeyPrefix = [ 'read', 'site-subscriptions' ];
15
+ export const siteSubscriptionsQueryKeyPrefix = [ ...getSiteSubscriptionsQueryKey() ];
10
16
 
11
- type SubscriptionManagerSiteSubscriptions = {
12
- subscriptions: SiteSubscriptionsResponseItem[];
13
- page: number;
14
- total_subscriptions: number;
15
- };
16
-
17
- type SubscriptionManagerSiteSubscriptionsQueryProps = {
18
- number?: number;
19
- };
17
+ // Must match the page size the shared `siteSubscriptionsQuery` (in
18
+ // `@automattic/api-queries`) assumes for next-page detection. That query reasons
19
+ // about how much offset it has covered, so requesting a different page size here
20
+ // would make pagination stop early or over-fetch. The value mirrors the server
21
+ // cap (`PER_PAGE_MAX = 100`) on `/read/following/mine`.
22
+ const SITE_SUBSCRIPTIONS_PAGE_SIZE = 100;
20
23
 
21
- const sortByDateSubscribed = (
22
- a: SiteSubscriptionsResponseItem,
23
- b: SiteSubscriptionsResponseItem
24
- ) =>
24
+ const sortByDateSubscribed = ( a: SiteSubscriptionItem, b: SiteSubscriptionItem ) =>
25
25
  a.date_subscribed instanceof Date && b.date_subscribed instanceof Date
26
26
  ? b.date_subscribed.getTime() - a.date_subscribed.getTime()
27
27
  : 0;
28
28
 
29
- const sortByLastUpdated = ( a: SiteSubscriptionsResponseItem, b: SiteSubscriptionsResponseItem ) =>
29
+ const sortByLastUpdated = ( a: SiteSubscriptionItem, b: SiteSubscriptionItem ) =>
30
30
  a.last_updated instanceof Date && b.last_updated instanceof Date
31
31
  ? b.last_updated.getTime() - a.last_updated.getTime()
32
32
  : 0;
33
33
 
34
- const sortBySiteName = ( a: SiteSubscriptionsResponseItem, b: SiteSubscriptionsResponseItem ) =>
35
- a.name.localeCompare( b.name );
34
+ const sortBySiteName = ( a: SiteSubscriptionItem, b: SiteSubscriptionItem ) =>
35
+ ( a.name ?? '' ).localeCompare( b.name ?? '' );
36
36
 
37
37
  const getSortFunction = ( sortTerm: SiteSubscriptionsSortBy ) => {
38
38
  switch ( sortTerm ) {
@@ -47,42 +47,38 @@ const getSortFunction = ( sortTerm: SiteSubscriptionsSortBy ) => {
47
47
  }
48
48
  };
49
49
 
50
- const useSiteSubscriptionsQuery = ( {
51
- number = 100,
52
- }: SubscriptionManagerSiteSubscriptionsQueryProps = {} ) => {
50
+ const useSiteSubscriptionsQuery = () => {
53
51
  const { isLoggedIn } = useIsLoggedIn();
54
52
  const enabled = useIsQueryEnabled();
55
- const cacheKey = useCacheKey( siteSubscriptionsQueryKeyPrefix );
56
53
  const { searchTerm, filterOption, sortTerm } = useSiteSubscriptionsQueryProps();
57
54
 
58
- const { data, fetchNextPage, hasNextPage, isFetchingNextPage, isFetching, ...rest } =
59
- useInfiniteQuery< SubscriptionManagerSiteSubscriptions >( {
60
- queryKey: cacheKey,
61
- queryFn: async ( { pageParam } ) => {
62
- const data = await callApi< SubscriptionManagerSiteSubscriptions >( {
63
- path: `/read/following/mine?number=${ number }&page=${ pageParam }`,
64
- isLoggedIn,
65
- apiVersion: '1.2',
66
- } );
67
-
68
- return {
69
- ...data,
70
- subscriptions: data.subscriptions
71
- ? data.subscriptions.map( ( subscription ) => ( {
72
- ...subscription,
73
- last_updated: new Date( subscription.last_updated ),
74
- date_subscribed: new Date( subscription.date_subscribed ),
75
- } ) )
76
- : [],
77
- };
78
- },
79
- enabled,
80
- initialPageParam: 1,
81
- getNextPageParam: ( lastPage, pages ) => {
82
- return lastPage.page * number < lastPage.total_subscriptions ? pages.length + 1 : undefined;
83
- },
84
- refetchOnWindowFocus: false,
85
- } );
55
+ const query = useInfiniteQuery( {
56
+ ...siteSubscriptionsQuery(),
57
+ queryFn: async ( { pageParam } ) => {
58
+ const response = await callApi< SiteSubscriptionsApiResponse >( {
59
+ path: addQueryArgs( '/read/following/mine', {
60
+ page: pageParam,
61
+ number: SITE_SUBSCRIPTIONS_PAGE_SIZE,
62
+ meta: '',
63
+ } ),
64
+ apiVersion: '1.2',
65
+ isLoggedIn,
66
+ } );
67
+
68
+ return adaptSiteSubscriptionsResponse( response );
69
+ },
70
+ enabled,
71
+ } );
72
+ const {
73
+ data,
74
+ error,
75
+ fetchNextPage,
76
+ hasNextPage,
77
+ isFetchingNextPage,
78
+ isFetching,
79
+ isLoading,
80
+ refetch,
81
+ } = query;
86
82
 
87
83
  const nextPage = hasNextPage && ! isFetching && data ? data.pages.length + 1 : null;
88
84
 
@@ -93,7 +89,7 @@ const useSiteSubscriptionsQuery = ( {
93
89
  }, [ nextPage, fetchNextPage ] );
94
90
 
95
91
  const filterFunction = useCallback(
96
- ( item: SiteSubscriptionsResponseItem ) => {
92
+ ( item: SiteSubscriptionItem ) => {
97
93
  switch ( filterOption ) {
98
94
  case SiteSubscriptionsFilterBy.Paid:
99
95
  return item.is_paid_subscription;
@@ -114,7 +110,7 @@ const useSiteSubscriptionsQuery = ( {
114
110
  const flattenedData = data?.pages?.map( ( page ) => page.subscriptions ).flat();
115
111
 
116
112
  const searchTermLowerCase = searchTerm.toLowerCase();
117
- const searchFilter = ( item: SiteSubscriptionsResponseItem ) => {
113
+ const searchFilter = ( item: SiteSubscriptionItem ) => {
118
114
  if ( searchTerm === '' ) {
119
115
  return true;
120
116
  }
@@ -131,17 +127,19 @@ const useSiteSubscriptionsQuery = ( {
131
127
  flattenedData
132
128
  ?.filter( ( item ) => item !== null && filterFunction( item ) && searchFilter( item ) )
133
129
  .sort( sort ) ?? [],
134
- totalCount: data?.pages?.[ 0 ]?.total_subscriptions ?? 0,
130
+ totalCount: data?.pages?.[ 0 ]?.totalCount ?? 0,
135
131
  };
136
132
  // eslint-disable-next-line react-hooks/exhaustive-deps
137
133
  }, [ data?.pages, filterOption, searchTerm, sortTerm ] );
138
134
 
139
135
  return {
140
136
  data: resultData,
137
+ error,
141
138
  isFetchingNextPage,
142
139
  isFetching,
143
140
  hasNextPage,
144
- ...rest,
141
+ isLoading,
142
+ refetch,
145
143
  };
146
144
  };
147
145
 
@@ -1,4 +1,7 @@
1
1
  import { EmailDeliveryFrequency } from '../constants';
2
+ import type { Railcar } from '@automattic/calypso-analytics';
3
+
4
+ export type { SiteSubscriptionItem } from '@automattic/api-core';
2
5
 
3
6
  export type EmailFormatType = 'html' | 'text';
4
7
 
@@ -27,13 +30,6 @@ export type EmailSettingsAPIResponse = {
27
30
  };
28
31
  };
29
32
 
30
- type SiteSubscriptionMeta = {
31
- links: {
32
- site: string;
33
- feed: string;
34
- };
35
- };
36
-
37
33
  export type SiteSubscriptionDeliveryMethods = {
38
34
  email?: {
39
35
  send_posts: boolean;
@@ -47,46 +43,6 @@ export type SiteSubscriptionDeliveryMethods = {
47
43
  };
48
44
  };
49
45
 
50
- export type PagedQueryResult< TDataType, TKey extends string > = {
51
- pages: {
52
- [ K in TKey ]: TDataType[];
53
- }[];
54
- pageParams: number;
55
- };
56
-
57
- export type SiteSubscriptionsResponseItem = {
58
- ID: string;
59
- blog_ID: string;
60
- feed_ID: string;
61
- URL: string;
62
- date_subscribed: Date;
63
- delivery_methods: SiteSubscriptionDeliveryMethods;
64
- name: string;
65
- organization_id: number;
66
- unseen_count: number;
67
- last_updated: Date;
68
- site_icon: string;
69
- is_owner: boolean;
70
- meta: SiteSubscriptionMeta;
71
- is_wpforteams_site: boolean;
72
- is_paid_subscription: boolean;
73
- is_gift: boolean;
74
- gift_id: number;
75
- is_rss: boolean;
76
- isDeleted: boolean;
77
- resubscribed: boolean;
78
- };
79
-
80
- export type SiteSubscriptionPage = {
81
- subscriptions: SiteSubscriptionsResponseItem[];
82
- total_subscriptions: number;
83
- };
84
-
85
- export type SiteSubscriptionsPages = {
86
- pageParams: [];
87
- pages: SiteSubscriptionPage[];
88
- };
89
-
90
46
  export type PostSubscription = {
91
47
  id: string;
92
48
  blog_id: string;
@@ -166,7 +122,9 @@ export type SiteSubscriptionDetails< DateT = Date > = {
166
122
  };
167
123
 
168
124
  export type SiteSubscriptionPaymentDetails = {
169
- is_gift: boolean;
125
+ is_comp: boolean;
126
+ /** @deprecated Legacy field from the API — plans with is_gift are filtered out. */
127
+ is_gift?: boolean;
170
128
  ID: string;
171
129
  site_id: string;
172
130
  status: string;
@@ -202,3 +160,31 @@ export type SiteSubscriptionDetailsErrorResponse = ErrorResponse<
202
160
  export type SiteSubscriptionDetailsResponse< DateT = Date > =
203
161
  | SiteSubscriptionDetails< DateT >
204
162
  | SiteSubscriptionDetailsErrorResponse;
163
+
164
+ export interface FeedItem {
165
+ ID: string;
166
+ URL: string;
167
+ blog_ID: string;
168
+ description: string;
169
+ feed_ID: string;
170
+ feed_URL: string;
171
+ image: string;
172
+ is_following: boolean;
173
+ last_checked: string;
174
+ last_update: string;
175
+ marked_for_refresh: boolean;
176
+ meta: {
177
+ links?: {
178
+ self: string;
179
+ [ key: string ]: string;
180
+ };
181
+ };
182
+ name: string;
183
+ next_refresh_time: string | null;
184
+ organization_id: number;
185
+ railcar?: Railcar;
186
+ subscribe_URL: string;
187
+ subscribers_count: number;
188
+ unseen_count: number;
189
+ subscription_id?: number; // Only present if the user is subscribed to the feed.
190
+ }
@@ -18,3 +18,16 @@ declare global {
18
18
  _currentSiteId: number;
19
19
  }
20
20
  }
21
+
22
+ export type Location = {
23
+ pathname: string;
24
+ search?: string;
25
+ hash?: string;
26
+ state?: unknown;
27
+ key?: string;
28
+ };
29
+
30
+ export interface APIFetchOptions {
31
+ global: boolean;
32
+ path: string;
33
+ }
@@ -33,7 +33,7 @@ import type {
33
33
  } from './types';
34
34
  import type { WpcomClientCredentials } from '../shared-types';
35
35
  import type { RequestTemplate } from '../templates';
36
- import type { Design, DesignOptions } from '@automattic/design-picker/src/types'; // Import from a specific file directly to avoid the circular dependencies
36
+ import type { Design, DesignOptions } from '@automattic/design-types';
37
37
 
38
38
  export function createActions( clientCreds: WpcomClientCredentials ) {
39
39
  const fetchSite = () => ( {
@@ -1,5 +1,5 @@
1
1
  import { useQuery, type UseQueryResult } from '@tanstack/react-query';
2
- import wpcomRequest from 'wpcom-proxy-request';
2
+ import wpcomRequest from '../../wpcom-request';
3
3
  import useQueryKeysFactory from './lib/use-query-keys-factory';
4
4
  import type { SiteFeatures } from '../types';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { useQuery, type UseQueryResult } from '@tanstack/react-query';
2
- import wpcomRequest from 'wpcom-proxy-request';
2
+ import wpcomRequest from '../../wpcom-request';
3
3
  import useQueryKeysFactory from './lib/use-query-keys-factory';
4
4
  import type { SiteMediaStorage, RawSiteMediaStorage } from '../types';
5
5
 
@@ -1,6 +1,6 @@
1
1
  import { useQuery } from '@tanstack/react-query';
2
- import wpcomRequest from 'wpcom-proxy-request';
3
2
  import { Member } from '../../users/types';
3
+ import wpcomRequest from '../../wpcom-request';
4
4
  import useQueryKeysFactory from './lib/use-query-keys-factory';
5
5
 
6
6
  export function getUseSiteUserQueryOptions(
@@ -1,5 +1,5 @@
1
1
  import { useQuery, type UseQueryResult } from '@tanstack/react-query';
2
- import wpcomRequest from 'wpcom-proxy-request';
2
+ import wpcomRequest from '../../wpcom-request';
3
3
  import useQueryKeysFactory from './lib/use-query-keys-factory';
4
4
  import type { SiteDetails } from '../types';
5
5
 
@@ -1,5 +1,5 @@
1
1
  // wpcomRequest is a temporary rename while we're working on migrating generators to thunks
2
- import wpcomRequest from 'wpcom-proxy-request';
2
+ import wpcomRequest from '../wpcom-request';
3
3
  import type {
4
4
  CurrentTheme,
5
5
  SiteDetails,