@automattic/data-stores 3.1.0-rc.6 → 3.1.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 (682) hide show
  1. package/dist/cjs/add-ons/add-ons-list.js +92 -0
  2. package/dist/cjs/add-ons/add-ons-list.js.map +1 -0
  3. package/dist/cjs/add-ons/constants.js +21 -3
  4. package/dist/cjs/add-ons/constants.js.map +1 -1
  5. package/dist/cjs/add-ons/hooks/use-add-on-prices.js +55 -54
  6. package/dist/cjs/add-ons/hooks/use-add-on-prices.js.map +1 -1
  7. package/dist/cjs/add-ons/hooks/use-add-on-purchase-status.js +14 -6
  8. package/dist/cjs/add-ons/hooks/use-add-on-purchase-status.js.map +1 -1
  9. package/dist/cjs/add-ons/hooks/use-add-ons.js +35 -193
  10. package/dist/cjs/add-ons/hooks/use-add-ons.js.map +1 -1
  11. package/dist/cjs/add-ons/hooks/use-available-storage-add-ons.js +19 -12
  12. package/dist/cjs/add-ons/hooks/use-available-storage-add-ons.js.map +1 -1
  13. package/dist/cjs/add-ons/hooks/use-get-purchased-storage-add-on.js +21 -0
  14. package/dist/cjs/add-ons/hooks/use-get-purchased-storage-add-on.js.map +1 -0
  15. package/dist/cjs/add-ons/hooks/use-storage-add-on-availability.js +30 -0
  16. package/dist/cjs/add-ons/hooks/use-storage-add-on-availability.js.map +1 -0
  17. package/dist/cjs/add-ons/index.js +6 -1
  18. package/dist/cjs/add-ons/index.js.map +1 -1
  19. package/dist/cjs/add-ons/mocks.js +31 -0
  20. package/dist/cjs/add-ons/mocks.js.map +1 -0
  21. package/dist/cjs/analyzer/actions.js +1 -3
  22. package/dist/cjs/analyzer/actions.js.map +1 -1
  23. package/dist/cjs/contextual-help/admin-sections.js +4 -5
  24. package/dist/cjs/contextual-help/admin-sections.js.map +1 -1
  25. package/dist/cjs/contextual-help/contextual-help.js +6 -4
  26. package/dist/cjs/contextual-help/contextual-help.js.map +1 -1
  27. package/dist/cjs/domain-suggestions/index.js +9 -16
  28. package/dist/cjs/domain-suggestions/index.js.map +1 -1
  29. package/dist/cjs/domain-suggestions/queries.js +3 -4
  30. package/dist/cjs/domain-suggestions/queries.js.map +1 -1
  31. package/dist/cjs/domain-suggestions/resolvers.js +3 -3
  32. package/dist/cjs/domain-suggestions/resolvers.js.map +1 -1
  33. package/dist/cjs/domain-suggestions/utils.js +5 -8
  34. package/dist/cjs/domain-suggestions/utils.js.map +1 -1
  35. package/dist/cjs/help-center/actions.js +97 -17
  36. package/dist/cjs/help-center/actions.js.map +1 -1
  37. package/dist/cjs/help-center/index.js +27 -2
  38. package/dist/cjs/help-center/index.js.map +1 -1
  39. package/dist/cjs/help-center/reducer.js +46 -0
  40. package/dist/cjs/help-center/reducer.js.map +1 -1
  41. package/dist/cjs/help-center/resolvers.js +28 -0
  42. package/dist/cjs/help-center/resolvers.js.map +1 -0
  43. package/dist/cjs/help-center/selectors.js +13 -1
  44. package/dist/cjs/help-center/selectors.js.map +1 -1
  45. package/dist/cjs/index.js +3 -6
  46. package/dist/cjs/index.js.map +1 -1
  47. package/dist/cjs/mutations/use-domains-bulk-actions-mutation.js +1 -2
  48. package/dist/cjs/mutations/use-domains-bulk-actions-mutation.js.map +1 -1
  49. package/dist/cjs/newsletter-categories/index.js +36 -0
  50. package/dist/cjs/newsletter-categories/index.js.map +1 -0
  51. package/dist/cjs/onboard/actions.js +14 -79
  52. package/dist/cjs/onboard/actions.js.map +1 -1
  53. package/dist/cjs/onboard/constants.js +18 -7
  54. package/dist/cjs/onboard/constants.js.map +1 -1
  55. package/dist/cjs/onboard/index.js +6 -4
  56. package/dist/cjs/onboard/index.js.map +1 -1
  57. package/dist/cjs/onboard/reducer.js +31 -23
  58. package/dist/cjs/onboard/reducer.js.map +1 -1
  59. package/dist/cjs/onboard/selectors.js +5 -3
  60. package/dist/cjs/onboard/selectors.js.map +1 -1
  61. package/dist/cjs/onboard/utils.js +12 -11
  62. package/dist/cjs/onboard/utils.js.map +1 -1
  63. package/dist/cjs/plans/constants.js +1 -0
  64. package/dist/cjs/plans/constants.js.map +1 -1
  65. package/dist/cjs/plans/hooks/use-current-plan.js +1 -1
  66. package/dist/cjs/plans/hooks/use-current-plan.js.map +1 -1
  67. package/dist/cjs/plans/hooks/use-intro-offers.js +1 -1
  68. package/dist/cjs/plans/hooks/use-intro-offers.js.map +1 -1
  69. package/dist/cjs/plans/hooks/use-pricing-meta-for-grid-plans.js +52 -9
  70. package/dist/cjs/plans/hooks/use-pricing-meta-for-grid-plans.js.map +1 -1
  71. package/dist/cjs/plans/index.js +2 -2
  72. package/dist/cjs/plans/index.js.map +1 -1
  73. package/dist/cjs/plans/mock/next/store/plans.js +12 -6
  74. package/dist/cjs/plans/mock/next/store/plans.js.map +1 -1
  75. package/dist/cjs/plans/queries/lib/unpack-cost-overrides.js +1 -1
  76. package/dist/cjs/plans/queries/lib/unpack-cost-overrides.js.map +1 -1
  77. package/dist/cjs/plans/queries/lib/unpack-intro-offer.js +16 -3
  78. package/dist/cjs/plans/queries/lib/unpack-intro-offer.js.map +1 -1
  79. package/dist/cjs/plans/queries/lib/use-query-keys-factory.js +5 -1
  80. package/dist/cjs/plans/queries/lib/use-query-keys-factory.js.map +1 -1
  81. package/dist/cjs/plans/queries/use-plans.js +1 -1
  82. package/dist/cjs/plans/queries/use-site-plans.js +6 -2
  83. package/dist/cjs/plans/queries/use-site-plans.js.map +1 -1
  84. package/dist/cjs/plans/resolvers.js +5 -7
  85. package/dist/cjs/plans/resolvers.js.map +1 -1
  86. package/dist/cjs/products-list/queries/use-products.js +1 -1
  87. package/dist/cjs/purchases/lib/assembler.js +4 -3
  88. package/dist/cjs/purchases/lib/assembler.js.map +1 -1
  89. package/dist/cjs/purchases/queries/use-site-purchases.js +1 -2
  90. package/dist/cjs/purchases/queries/use-site-purchases.js.map +1 -1
  91. package/dist/cjs/queries/use-all-domains-query.js +2 -2
  92. package/dist/cjs/queries/use-all-domains-query.js.map +1 -1
  93. package/dist/cjs/queries/use-bulk-domain-update-status-query.js +7 -7
  94. package/dist/cjs/queries/use-bulk-domain-update-status-query.js.map +1 -1
  95. package/dist/cjs/queries/use-launchpad.js +13 -8
  96. package/dist/cjs/queries/use-launchpad.js.map +1 -1
  97. package/dist/cjs/queries/use-site-domains-query.js +3 -3
  98. package/dist/cjs/queries/use-site-domains-query.js.map +1 -1
  99. package/dist/cjs/queries/use-site-intent.js +1 -2
  100. package/dist/cjs/queries/use-site-intent.js.map +1 -1
  101. package/dist/cjs/queries/use-site-query.js +2 -3
  102. package/dist/cjs/queries/use-site-query.js.map +1 -1
  103. package/dist/cjs/reader/contexts/site-subscriptions-query-props.js +11 -10
  104. package/dist/cjs/reader/contexts/site-subscriptions-query-props.js.map +1 -1
  105. package/dist/cjs/reader/helpers/index.js +2 -2
  106. package/dist/cjs/reader/helpers/index.js.map +1 -1
  107. package/dist/cjs/reader/hooks/index.js +5 -4
  108. package/dist/cjs/reader/hooks/index.js.map +1 -1
  109. package/dist/cjs/reader/hooks/use-is-logged-in.js +10 -8
  110. package/dist/cjs/reader/hooks/use-is-logged-in.js.map +1 -1
  111. package/dist/cjs/reader/mutations/index.js +14 -13
  112. package/dist/cjs/reader/mutations/index.js.map +1 -1
  113. package/dist/cjs/reader/queries/index.js +11 -10
  114. package/dist/cjs/reader/queries/index.js.map +1 -1
  115. package/dist/cjs/reader/queries/use-read-feed-query.js +2 -2
  116. package/dist/cjs/reader/queries/use-read-feed-query.js.map +1 -1
  117. package/dist/cjs/reader/queries/use-read-feed-site-query.js +1 -1
  118. package/dist/cjs/reader/queries/use-read-feed-site-query.js.map +1 -1
  119. package/dist/cjs/site/actions.js +37 -11
  120. package/dist/cjs/site/actions.js.map +1 -1
  121. package/dist/cjs/site/constants.js +1 -4
  122. package/dist/cjs/site/constants.js.map +1 -1
  123. package/dist/cjs/site/index.js +2 -2
  124. package/dist/cjs/site/index.js.map +1 -1
  125. package/dist/cjs/site/queries/use-site-media-storage.js +1 -0
  126. package/dist/cjs/site/queries/use-site-media-storage.js.map +1 -1
  127. package/dist/cjs/site/queries/use-site-user-query.js +1 -2
  128. package/dist/cjs/site/queries/use-site-user-query.js.map +1 -1
  129. package/dist/cjs/site/selectors.js +2 -2
  130. package/dist/cjs/site/selectors.js.map +1 -1
  131. package/dist/cjs/site/types.js.map +1 -1
  132. package/dist/cjs/starter-designs-queries/use-starter-design-by-slug.js +1 -2
  133. package/dist/cjs/starter-designs-queries/use-starter-design-by-slug.js.map +1 -1
  134. package/dist/cjs/starter-designs-queries/use-starter-designs-query.js +3 -3
  135. package/dist/cjs/starter-designs-queries/use-starter-designs-query.js.map +1 -1
  136. package/dist/cjs/stepper-internal/index.js +1 -2
  137. package/dist/cjs/stepper-internal/index.js.map +1 -1
  138. package/dist/cjs/stepper-internal/reducer.js.map +1 -1
  139. package/dist/cjs/subscriber/actions.js +39 -31
  140. package/dist/cjs/subscriber/actions.js.map +1 -1
  141. package/dist/cjs/subscriber/index.js +0 -2
  142. package/dist/cjs/subscriber/index.js.map +1 -1
  143. package/dist/cjs/subscriber/selectors.js +5 -0
  144. package/dist/cjs/subscriber/selectors.js.map +1 -1
  145. package/dist/cjs/templates/index.js +2 -1
  146. package/dist/cjs/templates/index.js.map +1 -1
  147. package/dist/cjs/user/actions.js +1 -7
  148. package/dist/cjs/user/actions.js.map +1 -1
  149. package/dist/cjs/user/index.js +1 -2
  150. package/dist/cjs/user/index.js.map +1 -1
  151. package/dist/cjs/user/reducer.js +1 -8
  152. package/dist/cjs/user/reducer.js.map +1 -1
  153. package/dist/cjs/user/resolvers.js +1 -2
  154. package/dist/cjs/user/resolvers.js.map +1 -1
  155. package/dist/cjs/user/selectors.js +1 -3
  156. package/dist/cjs/user/selectors.js.map +1 -1
  157. package/dist/cjs/users/use-send-invites.js +2 -4
  158. package/dist/cjs/users/use-send-invites.js.map +1 -1
  159. package/dist/esm/add-ons/add-ons-list.js +86 -0
  160. package/dist/esm/add-ons/add-ons-list.js.map +1 -0
  161. package/dist/esm/add-ons/constants.js +20 -2
  162. package/dist/esm/add-ons/constants.js.map +1 -1
  163. package/dist/esm/add-ons/hooks/use-add-on-prices.js +51 -53
  164. package/dist/esm/add-ons/hooks/use-add-on-prices.js.map +1 -1
  165. package/dist/esm/add-ons/hooks/use-add-on-purchase-status.js +14 -6
  166. package/dist/esm/add-ons/hooks/use-add-on-purchase-status.js.map +1 -1
  167. package/dist/esm/add-ons/hooks/use-add-ons.js +36 -194
  168. package/dist/esm/add-ons/hooks/use-add-ons.js.map +1 -1
  169. package/dist/esm/add-ons/hooks/use-available-storage-add-ons.js +18 -12
  170. package/dist/esm/add-ons/hooks/use-available-storage-add-ons.js.map +1 -1
  171. package/dist/esm/add-ons/hooks/use-get-purchased-storage-add-on.js +17 -0
  172. package/dist/esm/add-ons/hooks/use-get-purchased-storage-add-on.js.map +1 -0
  173. package/dist/esm/add-ons/hooks/use-storage-add-on-availability.js +26 -0
  174. package/dist/esm/add-ons/hooks/use-storage-add-on-availability.js.map +1 -0
  175. package/dist/esm/add-ons/index.js +2 -0
  176. package/dist/esm/add-ons/index.js.map +1 -1
  177. package/dist/esm/add-ons/mocks.js +27 -0
  178. package/dist/esm/add-ons/mocks.js.map +1 -0
  179. package/dist/esm/analyzer/actions.js +0 -1
  180. package/dist/esm/analyzer/actions.js.map +1 -1
  181. package/dist/esm/contextual-help/admin-sections.js +3 -3
  182. package/dist/esm/contextual-help/contextual-help.js +3 -2
  183. package/dist/esm/contextual-help/contextual-help.js.map +1 -1
  184. package/dist/esm/domain-suggestions/index.js +9 -15
  185. package/dist/esm/domain-suggestions/index.js.map +1 -1
  186. package/dist/esm/domain-suggestions/utils.js +1 -4
  187. package/dist/esm/domain-suggestions/utils.js.map +1 -1
  188. package/dist/esm/help-center/actions.js +86 -13
  189. package/dist/esm/help-center/actions.js.map +1 -1
  190. package/dist/esm/help-center/index.js +23 -0
  191. package/dist/esm/help-center/index.js.map +1 -1
  192. package/dist/esm/help-center/reducer.js +46 -0
  193. package/dist/esm/help-center/reducer.js.map +1 -1
  194. package/dist/esm/help-center/resolvers.js +25 -0
  195. package/dist/esm/help-center/resolvers.js.map +1 -0
  196. package/dist/esm/help-center/selectors.js +6 -0
  197. package/dist/esm/help-center/selectors.js.map +1 -1
  198. package/dist/esm/index.js +2 -4
  199. package/dist/esm/index.js.map +1 -1
  200. package/dist/esm/newsletter-categories/index.js +31 -0
  201. package/dist/esm/newsletter-categories/index.js.map +1 -0
  202. package/dist/esm/onboard/actions.js +8 -70
  203. package/dist/esm/onboard/actions.js.map +1 -1
  204. package/dist/esm/onboard/constants.js +18 -7
  205. package/dist/esm/onboard/constants.js.map +1 -1
  206. package/dist/esm/onboard/index.js +4 -2
  207. package/dist/esm/onboard/index.js.map +1 -1
  208. package/dist/esm/onboard/reducer.js +31 -23
  209. package/dist/esm/onboard/reducer.js.map +1 -1
  210. package/dist/esm/onboard/selectors.js +2 -1
  211. package/dist/esm/onboard/selectors.js.map +1 -1
  212. package/dist/esm/onboard/utils.js +12 -11
  213. package/dist/esm/onboard/utils.js.map +1 -1
  214. package/dist/esm/plans/constants.js +1 -0
  215. package/dist/esm/plans/constants.js.map +1 -1
  216. package/dist/esm/plans/hooks/use-current-plan.js +1 -1
  217. package/dist/esm/plans/hooks/use-current-plan.js.map +1 -1
  218. package/dist/esm/plans/hooks/use-intro-offers.js +1 -1
  219. package/dist/esm/plans/hooks/use-intro-offers.js.map +1 -1
  220. package/dist/esm/plans/hooks/use-pricing-meta-for-grid-plans.js +52 -9
  221. package/dist/esm/plans/hooks/use-pricing-meta-for-grid-plans.js.map +1 -1
  222. package/dist/esm/plans/mock/next/store/plans.js +12 -6
  223. package/dist/esm/plans/mock/next/store/plans.js.map +1 -1
  224. package/dist/esm/plans/queries/lib/unpack-intro-offer.js +16 -3
  225. package/dist/esm/plans/queries/lib/unpack-intro-offer.js.map +1 -1
  226. package/dist/esm/plans/queries/lib/use-query-keys-factory.js +5 -1
  227. package/dist/esm/plans/queries/lib/use-query-keys-factory.js.map +1 -1
  228. package/dist/esm/plans/queries/use-plans.js +1 -1
  229. package/dist/esm/plans/queries/use-site-plans.js +6 -2
  230. package/dist/esm/plans/queries/use-site-plans.js.map +1 -1
  231. package/dist/esm/plans/resolvers.js +1 -1
  232. package/dist/esm/plans/resolvers.js.map +1 -1
  233. package/dist/esm/products-list/queries/use-products.js +1 -1
  234. package/dist/esm/purchases/lib/assembler.js +2 -0
  235. package/dist/esm/purchases/lib/assembler.js.map +1 -1
  236. package/dist/esm/queries/use-all-domains-query.js.map +1 -1
  237. package/dist/esm/queries/use-bulk-domain-update-status-query.js +5 -5
  238. package/dist/esm/queries/use-bulk-domain-update-status-query.js.map +1 -1
  239. package/dist/esm/queries/use-launchpad.js +11 -6
  240. package/dist/esm/queries/use-launchpad.js.map +1 -1
  241. package/dist/esm/queries/use-site-domains-query.js.map +1 -1
  242. package/dist/esm/reader/contexts/site-subscriptions-query-props.js +12 -11
  243. package/dist/esm/reader/contexts/site-subscriptions-query-props.js.map +1 -1
  244. package/dist/esm/reader/hooks/use-is-logged-in.js +9 -8
  245. package/dist/esm/reader/hooks/use-is-logged-in.js.map +1 -1
  246. package/dist/esm/reader/queries/use-read-feed-query.js +2 -2
  247. package/dist/esm/reader/queries/use-read-feed-query.js.map +1 -1
  248. package/dist/esm/reader/queries/use-read-feed-site-query.js +1 -1
  249. package/dist/esm/reader/queries/use-read-feed-site-query.js.map +1 -1
  250. package/dist/esm/site/actions.js +36 -9
  251. package/dist/esm/site/actions.js.map +1 -1
  252. package/dist/esm/site/constants.js +1 -4
  253. package/dist/esm/site/constants.js.map +1 -1
  254. package/dist/esm/site/queries/use-site-media-storage.js +1 -0
  255. package/dist/esm/site/queries/use-site-media-storage.js.map +1 -1
  256. package/dist/esm/site/types.js.map +1 -1
  257. package/dist/esm/starter-designs-queries/use-starter-designs-query.js +2 -1
  258. package/dist/esm/starter-designs-queries/use-starter-designs-query.js.map +1 -1
  259. package/dist/esm/stepper-internal/reducer.js.map +1 -1
  260. package/dist/esm/subscriber/actions.js +38 -29
  261. package/dist/esm/subscriber/actions.js.map +1 -1
  262. package/dist/esm/subscriber/index.js +0 -2
  263. package/dist/esm/subscriber/index.js.map +1 -1
  264. package/dist/esm/subscriber/selectors.js +4 -0
  265. package/dist/esm/subscriber/selectors.js.map +1 -1
  266. package/dist/esm/user/actions.js +0 -5
  267. package/dist/esm/user/actions.js.map +1 -1
  268. package/dist/esm/user/reducer.js +1 -8
  269. package/dist/esm/user/reducer.js.map +1 -1
  270. package/dist/esm/user/selectors.js +0 -1
  271. package/dist/esm/user/selectors.js.map +1 -1
  272. package/dist/esm/users/use-send-invites.js +1 -2
  273. package/dist/esm/users/use-send-invites.js.map +1 -1
  274. package/dist/tsconfig-cjs.tsbuildinfo +1 -1
  275. package/dist/tsconfig.tsbuildinfo +1 -1
  276. package/dist/types/add-ons/add-ons-list.d.ts +4 -0
  277. package/dist/types/add-ons/add-ons-list.d.ts.map +1 -0
  278. package/dist/types/add-ons/constants.d.ts +8 -3
  279. package/dist/types/add-ons/constants.d.ts.map +1 -1
  280. package/dist/types/add-ons/hooks/use-add-on-checkout-link.d.ts +1 -1
  281. package/dist/types/add-ons/hooks/use-add-on-checkout-link.d.ts.map +1 -1
  282. package/dist/types/add-ons/hooks/use-add-on-prices.d.ts +12 -7
  283. package/dist/types/add-ons/hooks/use-add-on-prices.d.ts.map +1 -1
  284. package/dist/types/add-ons/hooks/use-add-on-purchase-status.d.ts +7 -8
  285. package/dist/types/add-ons/hooks/use-add-on-purchase-status.d.ts.map +1 -1
  286. package/dist/types/add-ons/hooks/use-add-ons.d.ts +1 -2
  287. package/dist/types/add-ons/hooks/use-add-ons.d.ts.map +1 -1
  288. package/dist/types/add-ons/hooks/use-available-storage-add-ons.d.ts +9 -2
  289. package/dist/types/add-ons/hooks/use-available-storage-add-ons.d.ts.map +1 -1
  290. package/dist/types/add-ons/hooks/use-get-purchased-storage-add-on.d.ts +5 -0
  291. package/dist/types/add-ons/hooks/use-get-purchased-storage-add-on.d.ts.map +1 -0
  292. package/dist/types/add-ons/hooks/use-storage-add-on-availability.d.ts +17 -0
  293. package/dist/types/add-ons/hooks/use-storage-add-on-availability.d.ts.map +1 -0
  294. package/dist/types/add-ons/hooks/use-storage-add-ons.d.ts.map +1 -1
  295. package/dist/types/add-ons/index.d.ts +2 -0
  296. package/dist/types/add-ons/index.d.ts.map +1 -1
  297. package/dist/types/add-ons/mocks.d.ts +4 -0
  298. package/dist/types/add-ons/mocks.d.ts.map +1 -0
  299. package/dist/types/add-ons/types.d.ts +6 -7
  300. package/dist/types/add-ons/types.d.ts.map +1 -1
  301. package/dist/types/analyzer/actions.d.ts.map +1 -1
  302. package/dist/types/analyzer/reducers.d.ts +4 -2
  303. package/dist/types/analyzer/reducers.d.ts.map +1 -1
  304. package/dist/types/analyzer/selectors.d.ts +2 -2
  305. package/dist/types/analyzer/selectors.d.ts.map +1 -1
  306. package/dist/types/contextual-help/contextual-help.d.ts.map +1 -1
  307. package/dist/types/domain-suggestions/actions.d.ts.map +1 -1
  308. package/dist/types/domain-suggestions/index.d.ts +3 -2
  309. package/dist/types/domain-suggestions/index.d.ts.map +1 -1
  310. package/dist/types/domain-suggestions/queries.d.ts +24 -24
  311. package/dist/types/domain-suggestions/reducer.d.ts +6 -2
  312. package/dist/types/domain-suggestions/reducer.d.ts.map +1 -1
  313. package/dist/types/domain-suggestions/resolvers.d.ts.map +1 -1
  314. package/dist/types/domain-suggestions/selectors.d.ts.map +1 -1
  315. package/dist/types/domain-suggestions/types.d.ts +0 -3
  316. package/dist/types/domain-suggestions/types.d.ts.map +1 -1
  317. package/dist/types/domain-suggestions/utils.d.ts +0 -3
  318. package/dist/types/domain-suggestions/utils.d.ts.map +1 -1
  319. package/dist/types/help-center/actions.d.ts +46 -47
  320. package/dist/types/help-center/actions.d.ts.map +1 -1
  321. package/dist/types/help-center/index.d.ts +2 -0
  322. package/dist/types/help-center/index.d.ts.map +1 -1
  323. package/dist/types/help-center/reducer.d.ts +30 -2
  324. package/dist/types/help-center/reducer.d.ts.map +1 -1
  325. package/dist/types/help-center/resolvers.d.ts +13 -0
  326. package/dist/types/help-center/resolvers.d.ts.map +1 -0
  327. package/dist/types/help-center/selectors.d.ts +6 -0
  328. package/dist/types/help-center/selectors.d.ts.map +1 -1
  329. package/dist/types/help-center/types.d.ts +8 -0
  330. package/dist/types/help-center/types.d.ts.map +1 -1
  331. package/dist/types/index.d.ts +105 -110
  332. package/dist/types/index.d.ts.map +1 -1
  333. package/dist/types/mutations/use-domains-bulk-actions-mutation.d.ts +4 -4
  334. package/dist/types/mutations/use-domains-bulk-actions-mutation.d.ts.map +1 -1
  335. package/dist/types/newsletter-categories/index.d.ts +21 -0
  336. package/dist/types/newsletter-categories/index.d.ts.map +1 -0
  337. package/dist/types/onboard/actions.d.ts +23 -77
  338. package/dist/types/onboard/actions.d.ts.map +1 -1
  339. package/dist/types/onboard/constants.d.ts +16 -7
  340. package/dist/types/onboard/constants.d.ts.map +1 -1
  341. package/dist/types/onboard/index.d.ts.map +1 -1
  342. package/dist/types/onboard/reducer.d.ts +56 -5
  343. package/dist/types/onboard/reducer.d.ts.map +1 -1
  344. package/dist/types/onboard/selectors.d.ts +8 -7
  345. package/dist/types/onboard/selectors.d.ts.map +1 -1
  346. package/dist/types/onboard/utils.d.ts +5 -1
  347. package/dist/types/onboard/utils.d.ts.map +1 -1
  348. package/dist/types/plans/actions.d.ts.map +1 -1
  349. package/dist/types/plans/constants.d.ts +1 -0
  350. package/dist/types/plans/constants.d.ts.map +1 -1
  351. package/dist/types/plans/hooks/use-current-plan-expiry-date.d.ts.map +1 -1
  352. package/dist/types/plans/hooks/use-current-plan-term.d.ts +1 -1
  353. package/dist/types/plans/hooks/use-current-plan-term.d.ts.map +1 -1
  354. package/dist/types/plans/hooks/use-current-plan.d.ts.map +1 -1
  355. package/dist/types/plans/hooks/use-intro-offers-for-woo-express.d.ts.map +1 -1
  356. package/dist/types/plans/hooks/use-intro-offers.d.ts.map +1 -1
  357. package/dist/types/plans/hooks/use-pricing-meta-for-grid-plans.d.ts +7 -6
  358. package/dist/types/plans/hooks/use-pricing-meta-for-grid-plans.d.ts.map +1 -1
  359. package/dist/types/plans/mock/next/store/plans.d.ts.map +1 -1
  360. package/dist/types/plans/queries/lib/unpack-intro-offer.d.ts.map +1 -1
  361. package/dist/types/plans/queries/lib/use-query-keys-factory.d.ts +1 -1
  362. package/dist/types/plans/queries/lib/use-query-keys-factory.d.ts.map +1 -1
  363. package/dist/types/plans/queries/use-site-plans.d.ts +6 -1
  364. package/dist/types/plans/queries/use-site-plans.d.ts.map +1 -1
  365. package/dist/types/plans/reducer.d.ts +7 -2
  366. package/dist/types/plans/reducer.d.ts.map +1 -1
  367. package/dist/types/plans/resolvers.d.ts +1 -1
  368. package/dist/types/plans/selectors.d.ts +1 -1
  369. package/dist/types/plans/selectors.d.ts.map +1 -1
  370. package/dist/types/plans/test-utils/index.d.ts.map +1 -1
  371. package/dist/types/plans/types.d.ts +24 -2
  372. package/dist/types/plans/types.d.ts.map +1 -1
  373. package/dist/types/products-list/actions.d.ts.map +1 -1
  374. package/dist/types/products-list/reducer.d.ts +5 -2
  375. package/dist/types/products-list/reducer.d.ts.map +1 -1
  376. package/dist/types/products-list/resolvers.d.ts.map +1 -1
  377. package/dist/types/products-list/selectors.d.ts +2 -2
  378. package/dist/types/products-list/selectors.d.ts.map +1 -1
  379. package/dist/types/products-list/types.d.ts +1 -0
  380. package/dist/types/products-list/types.d.ts.map +1 -1
  381. package/dist/types/purchases/hooks/use-site-purchase-by-id.d.ts.map +1 -1
  382. package/dist/types/purchases/hooks/use-site-purchases-by-product-slug.d.ts.map +1 -1
  383. package/dist/types/purchases/lib/assembler.d.ts.map +1 -1
  384. package/dist/types/purchases/queries/use-site-purchases.d.ts +1 -1
  385. package/dist/types/purchases/queries/use-site-purchases.d.ts.map +1 -1
  386. package/dist/types/purchases/types.d.ts +5 -0
  387. package/dist/types/purchases/types.d.ts.map +1 -1
  388. package/dist/types/queries/use-all-domains-query.d.ts +3 -2
  389. package/dist/types/queries/use-all-domains-query.d.ts.map +1 -1
  390. package/dist/types/queries/use-bulk-domain-update-status-query.d.ts +6 -1
  391. package/dist/types/queries/use-bulk-domain-update-status-query.d.ts.map +1 -1
  392. package/dist/types/queries/use-happiness-engineers-query.d.ts +1 -1
  393. package/dist/types/queries/use-launchpad.d.ts +3 -3
  394. package/dist/types/queries/use-launchpad.d.ts.map +1 -1
  395. package/dist/types/queries/use-site-domains-query.d.ts +8 -2
  396. package/dist/types/queries/use-site-domains-query.d.ts.map +1 -1
  397. package/dist/types/queries/use-site-intent.d.ts +2 -2
  398. package/dist/types/queries/use-site-query.d.ts +1 -1
  399. package/dist/types/queries/use-site-query.d.ts.map +1 -1
  400. package/dist/types/reader/contexts/site-subscriptions-query-props.d.ts +4 -2
  401. package/dist/types/reader/contexts/site-subscriptions-query-props.d.ts.map +1 -1
  402. package/dist/types/reader/helpers/index.d.ts +1 -1
  403. package/dist/types/reader/helpers/index.d.ts.map +1 -1
  404. package/dist/types/reader/helpers/optimistic-update.d.ts.map +1 -1
  405. package/dist/types/reader/helpers/query-key.d.ts.map +1 -1
  406. package/dist/types/reader/helpers/type-guards.d.ts.map +1 -1
  407. package/dist/types/reader/helpers/validators.d.ts +1 -1
  408. package/dist/types/reader/helpers/validators.d.ts.map +1 -1
  409. package/dist/types/reader/hooks/use-cache-key.d.ts.map +1 -1
  410. package/dist/types/reader/hooks/use-is-logged-in.d.ts +1 -2
  411. package/dist/types/reader/hooks/use-is-logged-in.d.ts.map +1 -1
  412. package/dist/types/reader/index.d.ts +103 -106
  413. package/dist/types/reader/index.d.ts.map +1 -1
  414. package/dist/types/reader/mutations/use-pending-post-confirm-mutation.d.ts +1 -1
  415. package/dist/types/reader/mutations/use-pending-post-delete-mutation.d.ts +1 -1
  416. package/dist/types/reader/mutations/use-pending-site-confirm-mutation.d.ts +1 -1
  417. package/dist/types/reader/mutations/use-pending-site-delete-mutation.d.ts +1 -1
  418. package/dist/types/reader/mutations/use-post-notify-me-of-new-comments-mutation.d.ts +1 -1
  419. package/dist/types/reader/mutations/use-post-unsubscribe-mutation.d.ts +1 -1
  420. package/dist/types/reader/mutations/use-site-delivery-frequency-mutation.d.ts +1 -1
  421. package/dist/types/reader/mutations/use-site-email-me-new-comments-mutation.d.ts +1 -1
  422. package/dist/types/reader/mutations/use-site-email-me-new-posts-mutation.d.ts +1 -1
  423. package/dist/types/reader/mutations/use-site-notify-me-of-new-posts-mutation.d.ts +1 -1
  424. package/dist/types/reader/mutations/use-site-subscribe-mutation.d.ts +1 -1
  425. package/dist/types/reader/mutations/use-site-unsubscribe-mutation.d.ts +1 -1
  426. package/dist/types/reader/mutations/use-user-settings-mutation.d.ts +1 -1
  427. package/dist/types/reader/queries/use-pending-post-subscriptions-query.d.ts +8 -8
  428. package/dist/types/reader/queries/use-pending-post-subscriptions-query.d.ts.map +1 -1
  429. package/dist/types/reader/queries/use-pending-site-subscriptions-query.d.ts +8 -8
  430. package/dist/types/reader/queries/use-pending-site-subscriptions-query.d.ts.map +1 -1
  431. package/dist/types/reader/queries/use-post-subscriptions-query.d.ts +16 -16
  432. package/dist/types/reader/queries/use-post-subscriptions-query.d.ts.map +1 -1
  433. package/dist/types/reader/queries/use-read-feed-query.d.ts +3 -1
  434. package/dist/types/reader/queries/use-read-feed-query.d.ts.map +1 -1
  435. package/dist/types/reader/queries/use-read-feed-search-query.d.ts +1 -1
  436. package/dist/types/reader/queries/use-read-feed-search-query.d.ts.map +1 -1
  437. package/dist/types/reader/queries/use-read-feed-site-query.d.ts +1 -1
  438. package/dist/types/reader/queries/use-read-feed-site-query.d.ts.map +1 -1
  439. package/dist/types/reader/queries/use-site-subscription-details-query.d.ts +1 -1
  440. package/dist/types/reader/queries/use-site-subscription-details-query.d.ts.map +1 -1
  441. package/dist/types/reader/queries/use-site-subscriptions-query.d.ts +12 -12
  442. package/dist/types/reader/queries/use-site-subscriptions-query.d.ts.map +1 -1
  443. package/dist/types/reader/queries/use-subscriptions-count-query.d.ts +1 -1
  444. package/dist/types/reader/queries/use-subscriptions-count-query.d.ts.map +1 -1
  445. package/dist/types/reader/queries/use-user-settings-query.d.ts +1 -1
  446. package/dist/types/site/actions.d.ts +11 -11
  447. package/dist/types/site/actions.d.ts.map +1 -1
  448. package/dist/types/site/constants.d.ts +1 -1
  449. package/dist/types/site/constants.d.ts.map +1 -1
  450. package/dist/types/site/queries/use-site-media-storage.d.ts.map +1 -1
  451. package/dist/types/site/queries/use-site-user-query.d.ts +1 -1
  452. package/dist/types/site/queries/use-site-user-query.d.ts.map +1 -1
  453. package/dist/types/site/reducer.d.ts +28 -9
  454. package/dist/types/site/reducer.d.ts.map +1 -1
  455. package/dist/types/site/resolvers.d.ts.map +1 -1
  456. package/dist/types/site/selectors.d.ts +8 -8
  457. package/dist/types/site/selectors.d.ts.map +1 -1
  458. package/dist/types/site/types.d.ts +16 -37
  459. package/dist/types/site/types.d.ts.map +1 -1
  460. package/dist/types/site/utils.d.ts.map +1 -1
  461. package/dist/types/site-reset/use-site-reset-content-summary-query.d.ts.map +1 -1
  462. package/dist/types/site-reset/use-site-reset-mutation.d.ts +4 -4
  463. package/dist/types/site-reset/use-site-reset-mutation.d.ts.map +1 -1
  464. package/dist/types/site-reset/use-site-reset-status-query.d.ts.map +1 -1
  465. package/dist/types/starter-designs-queries/types.d.ts +1 -10
  466. package/dist/types/starter-designs-queries/types.d.ts.map +1 -1
  467. package/dist/types/starter-designs-queries/use-starter-designs-query.d.ts +2 -0
  468. package/dist/types/starter-designs-queries/use-starter-designs-query.d.ts.map +1 -1
  469. package/dist/types/stepper-internal/actions.d.ts.map +1 -1
  470. package/dist/types/stepper-internal/reducer.d.ts +5 -2
  471. package/dist/types/stepper-internal/reducer.d.ts.map +1 -1
  472. package/dist/types/stepper-internal/selectors.d.ts +4 -2
  473. package/dist/types/stepper-internal/selectors.d.ts.map +1 -1
  474. package/dist/types/subscriber/actions.d.ts +11 -53
  475. package/dist/types/subscriber/actions.d.ts.map +1 -1
  476. package/dist/types/subscriber/index.d.ts +14 -52
  477. package/dist/types/subscriber/index.d.ts.map +1 -1
  478. package/dist/types/subscriber/reducers.d.ts +4 -2
  479. package/dist/types/subscriber/reducers.d.ts.map +1 -1
  480. package/dist/types/subscriber/selectors.d.ts +7 -5
  481. package/dist/types/subscriber/selectors.d.ts.map +1 -1
  482. package/dist/types/subscriber/types.d.ts +17 -1
  483. package/dist/types/subscriber/types.d.ts.map +1 -1
  484. package/dist/types/templates/use-template.d.ts +1 -1
  485. package/dist/types/templates/use-template.d.ts.map +1 -1
  486. package/dist/types/theme/utils.d.ts.map +1 -1
  487. package/dist/types/user/actions.d.ts +1 -5
  488. package/dist/types/user/actions.d.ts.map +1 -1
  489. package/dist/types/user/reducer.d.ts +4 -3
  490. package/dist/types/user/reducer.d.ts.map +1 -1
  491. package/dist/types/user/selectors.d.ts +2 -4
  492. package/dist/types/user/selectors.d.ts.map +1 -1
  493. package/dist/types/users/use-send-invites.d.ts +1 -1
  494. package/dist/types/users/use-send-invites.d.ts.map +1 -1
  495. package/dist/types/wpcom-plans-ui/actions.d.ts +2 -2
  496. package/dist/types/wpcom-plans-ui/actions.d.ts.map +1 -1
  497. package/dist/types/wpcom-plans-ui/reducer.d.ts +5 -2
  498. package/dist/types/wpcom-plans-ui/reducer.d.ts.map +1 -1
  499. package/dist/types/wpcom-plans-ui/selectors.d.ts.map +1 -1
  500. package/dist/types/wpcom-request-controls/index.d.ts +2 -2
  501. package/dist/types/wpcom-request-controls/index.d.ts.map +1 -1
  502. package/package.json +20 -21
  503. package/src/add-ons/add-ons-list.ts +109 -0
  504. package/src/add-ons/constants.ts +20 -2
  505. package/src/add-ons/hooks/use-add-on-prices.ts +67 -54
  506. package/src/add-ons/hooks/use-add-on-purchase-status.ts +21 -10
  507. package/src/add-ons/hooks/use-add-ons.ts +53 -251
  508. package/src/add-ons/hooks/use-available-storage-add-ons.ts +26 -16
  509. package/src/add-ons/hooks/use-get-purchased-storage-add-on.ts +24 -0
  510. package/src/add-ons/hooks/use-storage-add-on-availability.ts +38 -0
  511. package/src/add-ons/index.ts +5 -0
  512. package/src/add-ons/mocks.ts +29 -0
  513. package/src/add-ons/types.ts +6 -6
  514. package/src/analyzer/actions.ts +0 -1
  515. package/src/contextual-help/admin-sections.ts +3 -3
  516. package/src/contextual-help/contextual-help.tsx +4 -2
  517. package/src/domain-suggestions/index.ts +9 -16
  518. package/src/domain-suggestions/test/selectors.ts +12 -12
  519. package/src/domain-suggestions/types.ts +0 -4
  520. package/src/domain-suggestions/utils.ts +1 -4
  521. package/src/help-center/actions.ts +130 -16
  522. package/src/help-center/index.ts +32 -0
  523. package/src/help-center/reducer.ts +63 -0
  524. package/src/help-center/resolvers.ts +28 -0
  525. package/src/help-center/selectors.ts +7 -0
  526. package/src/help-center/types.ts +9 -1
  527. package/src/index.ts +1 -5
  528. package/src/newsletter-categories/index.ts +54 -0
  529. package/src/newsletter-categories/test/index.tsx +105 -0
  530. package/src/onboard/actions.ts +13 -103
  531. package/src/onboard/constants.ts +19 -7
  532. package/src/onboard/index.ts +4 -2
  533. package/src/onboard/reducer.ts +48 -24
  534. package/src/onboard/selectors.ts +2 -1
  535. package/src/onboard/test/utils.ts +36 -3
  536. package/src/onboard/utils.ts +21 -15
  537. package/src/plans/constants.ts +1 -0
  538. package/src/plans/hooks/test/use-pricing-meta-for-grid-plans.ts +241 -122
  539. package/src/plans/hooks/use-current-plan.ts +1 -1
  540. package/src/plans/hooks/use-intro-offers.ts +1 -1
  541. package/src/plans/hooks/use-pricing-meta-for-grid-plans.ts +69 -18
  542. package/src/plans/mock/next/store/plans.ts +12 -6
  543. package/src/plans/queries/lib/unpack-intro-offer.ts +23 -4
  544. package/src/plans/queries/lib/use-query-keys-factory.ts +5 -1
  545. package/src/plans/queries/use-plans.ts +1 -1
  546. package/src/plans/queries/use-site-plans.ts +11 -2
  547. package/src/plans/resolvers.ts +1 -1
  548. package/src/plans/types.ts +24 -2
  549. package/src/products-list/queries/use-products.ts +1 -1
  550. package/src/products-list/types.ts +1 -0
  551. package/src/purchases/lib/assembler.ts +2 -0
  552. package/src/purchases/types.ts +5 -0
  553. package/src/queries/use-all-domains-query.ts +3 -0
  554. package/src/queries/use-bulk-domain-update-status-query.ts +10 -5
  555. package/src/queries/use-launchpad.ts +15 -8
  556. package/src/queries/use-site-domains-query.ts +7 -1
  557. package/src/reader/contexts/site-subscriptions-query-props.tsx +23 -14
  558. package/src/reader/hooks/use-is-logged-in.ts +9 -16
  559. package/src/reader/queries/use-read-feed-query.ts +4 -2
  560. package/src/reader/queries/use-read-feed-site-query.ts +2 -2
  561. package/src/site/actions.ts +44 -15
  562. package/src/site/constants.ts +1 -7
  563. package/src/site/queries/use-site-media-storage.ts +1 -0
  564. package/src/site/test/actions.ts +73 -7
  565. package/src/site/types.ts +16 -41
  566. package/src/starter-designs-queries/types.ts +1 -12
  567. package/src/starter-designs-queries/use-starter-designs-query.ts +4 -0
  568. package/src/stepper-internal/reducer.ts +1 -0
  569. package/src/subscriber/actions.ts +111 -79
  570. package/src/subscriber/index.ts +0 -2
  571. package/src/subscriber/selectors.ts +6 -0
  572. package/src/subscriber/types.ts +18 -1
  573. package/src/user/actions.ts +1 -9
  574. package/src/user/reducer.ts +1 -9
  575. package/src/user/selectors.ts +0 -1
  576. package/src/users/use-send-invites.ts +1 -2
  577. package/dist/cjs/add-ons/hooks/use-add-on-display-cost.js +0 -29
  578. package/dist/cjs/add-ons/hooks/use-add-on-display-cost.js.map +0 -1
  579. package/dist/cjs/add-ons/lib/is-storage-addon-enabled.js +0 -11
  580. package/dist/cjs/add-ons/lib/is-storage-addon-enabled.js.map +0 -1
  581. package/dist/cjs/automated-transfer-eligibility/actions.js +0 -10
  582. package/dist/cjs/automated-transfer-eligibility/actions.js.map +0 -1
  583. package/dist/cjs/automated-transfer-eligibility/constants.js +0 -43
  584. package/dist/cjs/automated-transfer-eligibility/constants.js.map +0 -1
  585. package/dist/cjs/automated-transfer-eligibility/index.js +0 -27
  586. package/dist/cjs/automated-transfer-eligibility/index.js.map +0 -1
  587. package/dist/cjs/automated-transfer-eligibility/reducer.js +0 -17
  588. package/dist/cjs/automated-transfer-eligibility/reducer.js.map +0 -1
  589. package/dist/cjs/automated-transfer-eligibility/resolvers.js +0 -18
  590. package/dist/cjs/automated-transfer-eligibility/resolvers.js.map +0 -1
  591. package/dist/cjs/automated-transfer-eligibility/selectors.js +0 -60
  592. package/dist/cjs/automated-transfer-eligibility/selectors.js.map +0 -1
  593. package/dist/cjs/automated-transfer-eligibility/types.js +0 -3
  594. package/dist/cjs/automated-transfer-eligibility/types.js.map +0 -1
  595. package/dist/cjs/launchpad-navigator/actions.js +0 -71
  596. package/dist/cjs/launchpad-navigator/actions.js.map +0 -1
  597. package/dist/cjs/launchpad-navigator/constants.js +0 -7
  598. package/dist/cjs/launchpad-navigator/constants.js.map +0 -1
  599. package/dist/cjs/launchpad-navigator/index.js +0 -19
  600. package/dist/cjs/launchpad-navigator/index.js.map +0 -1
  601. package/dist/cjs/launchpad-navigator/reducer.js +0 -24
  602. package/dist/cjs/launchpad-navigator/reducer.js.map +0 -1
  603. package/dist/cjs/launchpad-navigator/selectors.js +0 -8
  604. package/dist/cjs/launchpad-navigator/selectors.js.map +0 -1
  605. package/dist/cjs/queries/use-launchpad-navigator.js +0 -39
  606. package/dist/cjs/queries/use-launchpad-navigator.js.map +0 -1
  607. package/dist/esm/add-ons/hooks/use-add-on-display-cost.js +0 -26
  608. package/dist/esm/add-ons/hooks/use-add-on-display-cost.js.map +0 -1
  609. package/dist/esm/add-ons/lib/is-storage-addon-enabled.js +0 -8
  610. package/dist/esm/add-ons/lib/is-storage-addon-enabled.js.map +0 -1
  611. package/dist/esm/automated-transfer-eligibility/actions.js +0 -6
  612. package/dist/esm/automated-transfer-eligibility/actions.js.map +0 -1
  613. package/dist/esm/automated-transfer-eligibility/constants.js +0 -40
  614. package/dist/esm/automated-transfer-eligibility/constants.js.map +0 -1
  615. package/dist/esm/automated-transfer-eligibility/index.js +0 -22
  616. package/dist/esm/automated-transfer-eligibility/index.js.map +0 -1
  617. package/dist/esm/automated-transfer-eligibility/reducer.js +0 -13
  618. package/dist/esm/automated-transfer-eligibility/reducer.js.map +0 -1
  619. package/dist/esm/automated-transfer-eligibility/resolvers.js +0 -13
  620. package/dist/esm/automated-transfer-eligibility/resolvers.js.map +0 -1
  621. package/dist/esm/automated-transfer-eligibility/selectors.js +0 -56
  622. package/dist/esm/automated-transfer-eligibility/selectors.js.map +0 -1
  623. package/dist/esm/automated-transfer-eligibility/types.js +0 -2
  624. package/dist/esm/automated-transfer-eligibility/types.js.map +0 -1
  625. package/dist/esm/launchpad-navigator/actions.js +0 -63
  626. package/dist/esm/launchpad-navigator/actions.js.map +0 -1
  627. package/dist/esm/launchpad-navigator/constants.js +0 -4
  628. package/dist/esm/launchpad-navigator/constants.js.map +0 -1
  629. package/dist/esm/launchpad-navigator/index.js +0 -15
  630. package/dist/esm/launchpad-navigator/index.js.map +0 -1
  631. package/dist/esm/launchpad-navigator/reducer.js +0 -22
  632. package/dist/esm/launchpad-navigator/reducer.js.map +0 -1
  633. package/dist/esm/launchpad-navigator/selectors.js +0 -3
  634. package/dist/esm/launchpad-navigator/selectors.js.map +0 -1
  635. package/dist/esm/queries/use-launchpad-navigator.js +0 -33
  636. package/dist/esm/queries/use-launchpad-navigator.js.map +0 -1
  637. package/dist/types/add-ons/hooks/use-add-on-display-cost.d.ts +0 -5
  638. package/dist/types/add-ons/hooks/use-add-on-display-cost.d.ts.map +0 -1
  639. package/dist/types/add-ons/lib/is-storage-addon-enabled.d.ts +0 -7
  640. package/dist/types/add-ons/lib/is-storage-addon-enabled.d.ts.map +0 -1
  641. package/dist/types/automated-transfer-eligibility/actions.d.ts +0 -10
  642. package/dist/types/automated-transfer-eligibility/actions.d.ts.map +0 -1
  643. package/dist/types/automated-transfer-eligibility/constants.d.ts +0 -11
  644. package/dist/types/automated-transfer-eligibility/constants.d.ts.map +0 -1
  645. package/dist/types/automated-transfer-eligibility/index.d.ts +0 -7
  646. package/dist/types/automated-transfer-eligibility/index.d.ts.map +0 -1
  647. package/dist/types/automated-transfer-eligibility/reducer.d.ts +0 -6
  648. package/dist/types/automated-transfer-eligibility/reducer.d.ts.map +0 -1
  649. package/dist/types/automated-transfer-eligibility/resolvers.d.ts +0 -7
  650. package/dist/types/automated-transfer-eligibility/resolvers.d.ts.map +0 -1
  651. package/dist/types/automated-transfer-eligibility/selectors.d.ts +0 -7
  652. package/dist/types/automated-transfer-eligibility/selectors.d.ts.map +0 -1
  653. package/dist/types/automated-transfer-eligibility/types.d.ts +0 -36
  654. package/dist/types/automated-transfer-eligibility/types.d.ts.map +0 -1
  655. package/dist/types/launchpad-navigator/actions.d.ts +0 -22
  656. package/dist/types/launchpad-navigator/actions.d.ts.map +0 -1
  657. package/dist/types/launchpad-navigator/constants.d.ts +0 -4
  658. package/dist/types/launchpad-navigator/constants.d.ts.map +0 -1
  659. package/dist/types/launchpad-navigator/index.d.ts +0 -4
  660. package/dist/types/launchpad-navigator/index.d.ts.map +0 -1
  661. package/dist/types/launchpad-navigator/reducer.d.ts +0 -9
  662. package/dist/types/launchpad-navigator/reducer.d.ts.map +0 -1
  663. package/dist/types/launchpad-navigator/selectors.d.ts +0 -4
  664. package/dist/types/launchpad-navigator/selectors.d.ts.map +0 -1
  665. package/dist/types/queries/use-launchpad-navigator.d.ts +0 -15
  666. package/dist/types/queries/use-launchpad-navigator.d.ts.map +0 -1
  667. package/src/add-ons/hooks/use-add-on-display-cost.ts +0 -28
  668. package/src/add-ons/lib/is-storage-addon-enabled.ts +0 -9
  669. package/src/automated-transfer-eligibility/actions.ts +0 -15
  670. package/src/automated-transfer-eligibility/constants.ts +0 -44
  671. package/src/automated-transfer-eligibility/index.ts +0 -25
  672. package/src/automated-transfer-eligibility/reducer.ts +0 -18
  673. package/src/automated-transfer-eligibility/resolvers.ts +0 -16
  674. package/src/automated-transfer-eligibility/selectors.ts +0 -94
  675. package/src/automated-transfer-eligibility/test/reducer.ts +0 -60
  676. package/src/automated-transfer-eligibility/types.ts +0 -45
  677. package/src/launchpad-navigator/actions.ts +0 -85
  678. package/src/launchpad-navigator/constants.ts +0 -4
  679. package/src/launchpad-navigator/index.ts +0 -16
  680. package/src/launchpad-navigator/reducer.ts +0 -35
  681. package/src/launchpad-navigator/selectors.ts +0 -6
  682. package/src/queries/use-launchpad-navigator.ts +0 -56
@@ -1,68 +1,81 @@
1
- import formatCurrency from '@automattic/format-currency';
2
1
  import { useMemo } from '@wordpress/element';
2
+ import { formatCurrency } from 'i18n-calypso';
3
3
  import * as ProductsList from '../../products-list';
4
+ import type { AddOnMeta } from '../types';
4
5
 
5
- const useAddOnPrices = ( productSlug: ProductsList.StoreProductSlug, quantity?: number ) => {
6
- const productsList = ProductsList.useProducts( [ productSlug ] );
7
- const product = productsList.data?.[ productSlug ];
6
+ type AddOnPrices = {
7
+ [ key in string ]?: {
8
+ monthlyPrice: number;
9
+ yearlyPrice: number;
10
+ formattedMonthlyPrice: string;
11
+ formattedYearlyPrice: string;
12
+ currencyCode: string;
13
+ } | null;
14
+ };
15
+
16
+ export const createAddOnPriceKey = ( { productSlug, quantity }: AddOnMeta ) => {
17
+ return `${ productSlug }_${ quantity ?? 0 }`;
18
+ };
19
+
20
+ export const useAddOnPrices = ( addOnMetas: AddOnMeta[] ) => {
21
+ const productSlugs = useMemo(
22
+ () => addOnMetas.map( ( { productSlug } ) => productSlug ),
23
+ [ addOnMetas ]
24
+ );
25
+ const productsList = ProductsList.useProducts( productSlugs );
8
26
 
9
27
  return useMemo( () => {
10
- let cost = product?.costSmallestUnit;
28
+ return addOnMetas.reduce< AddOnPrices >( ( accum, addOnMeta ) => {
29
+ const { productSlug, quantity } = addOnMeta;
30
+ const product = productsList.data?.[ productSlug ];
31
+ let cost = product?.costSmallestUnit;
11
32
 
12
- if ( ! cost || ! product?.currencyCode ) {
13
- return null;
14
- }
33
+ if ( ! cost || ! product?.currencyCode ) {
34
+ return {
35
+ [ productSlug ]: null,
36
+ ...accum,
37
+ };
38
+ }
15
39
 
16
- // Finds the applicable tiered price for the quantity.
17
- const priceTier =
18
- quantity &&
19
- product?.priceTierList.find( ( tier ) => {
20
- if ( quantity >= tier.minimumUnits && quantity <= ( tier.maximumUnits ?? 0 ) ) {
21
- return tier;
22
- }
23
- } );
40
+ // Finds the applicable tiered price for the quantity.
41
+ const priceTier =
42
+ quantity &&
43
+ product?.priceTierList.find( ( tier ) => {
44
+ if ( quantity >= tier.minimumUnits && quantity <= ( tier.maximumUnits ?? 0 ) ) {
45
+ return tier;
46
+ }
47
+ } );
24
48
 
25
- if ( priceTier ) {
26
- cost = priceTier?.maximumPrice;
27
- }
49
+ if ( priceTier ) {
50
+ cost = priceTier?.maximumPrice;
51
+ }
28
52
 
29
- // Although memoized, it appears that add-on prices are unnecessarily recalculated dozens of
30
- // times when invoked as part of the PlansFeaturesMain component.
31
- //
32
- // When we format the cost before displaying it to the end user, the formatting library warns us
33
- // that it will round decimal values for smallest currency unit calculations. Because of the
34
- // unnecessary recalculations, this warning is repeated and floods the console.
35
- //
36
- // The ideal answer is to trace the root cause of the recalculations and prevent them, but after
37
- // taking a cursory look, it seems as if this will require deeper investigation. For now, because
38
- // we are always working with smallest currency units for add-ons, we explicitly round decimal add-on
39
- // monthly prices to suppress the warnings ( something that was already happening in the library ).
40
- //
41
- // Once https://github.com/Automattic/wp-calypso/issues/95416 is resolved, we can remove this rounding.
42
- const initialMonthlyPrice = cost / 12;
43
- let monthlyPrice = Number.isInteger( initialMonthlyPrice )
44
- ? initialMonthlyPrice
45
- : Math.round( initialMonthlyPrice );
46
- let yearlyPrice = cost;
53
+ let monthlyPrice = cost / 12;
54
+ let yearlyPrice = cost;
47
55
 
48
- if ( product?.term === 'month' ) {
49
- monthlyPrice = cost;
50
- yearlyPrice = cost * 12;
51
- }
56
+ if ( product?.term === 'month' ) {
57
+ monthlyPrice = cost;
58
+ yearlyPrice = cost * 12;
59
+ }
52
60
 
53
- return {
54
- monthlyPrice,
55
- yearlyPrice,
56
- formattedMonthlyPrice: formatCurrency( monthlyPrice, product?.currencyCode, {
57
- stripZeros: true,
58
- isSmallestUnit: true,
59
- } ),
60
- formattedYearlyPrice: formatCurrency( yearlyPrice, product?.currencyCode, {
61
- stripZeros: true,
62
- isSmallestUnit: true,
63
- } ),
64
- };
65
- }, [ product, quantity ] );
61
+ return {
62
+ [ createAddOnPriceKey( addOnMeta ) ]: {
63
+ monthlyPrice,
64
+ yearlyPrice,
65
+ formattedMonthlyPrice: formatCurrency( monthlyPrice, product?.currencyCode, {
66
+ stripZeros: true,
67
+ isSmallestUnit: true,
68
+ } ),
69
+ formattedYearlyPrice: formatCurrency( yearlyPrice, product?.currencyCode, {
70
+ stripZeros: true,
71
+ isSmallestUnit: true,
72
+ } ),
73
+ currencyCode: product?.currencyCode,
74
+ },
75
+ ...accum,
76
+ };
77
+ }, {} );
78
+ }, [ addOnMetas, productsList.data ] );
66
79
  };
67
80
 
68
81
  export default useAddOnPrices;
@@ -1,17 +1,22 @@
1
- import { useTranslate } from 'i18n-calypso';
1
+ import i18n, { useTranslate } from 'i18n-calypso';
2
2
  import * as Purchases from '../../purchases';
3
3
  import * as Site from '../../site';
4
4
  import type { AddOnMeta } from '../types';
5
5
 
6
6
  interface Props {
7
7
  addOnMeta: AddOnMeta;
8
- selectedSiteId?: number | null | undefined;
8
+ selectedSiteId?: number | null;
9
9
  }
10
10
 
11
+ type AddOnPurchaseStatus = {
12
+ available: boolean;
13
+ text?: ReturnType< typeof i18n.translate >;
14
+ };
15
+
11
16
  /**
12
17
  * Returns whether add-on product has been purchased or included in site plan.
13
18
  */
14
- const useAddOnPurchaseStatus = ( { addOnMeta, selectedSiteId }: Props ) => {
19
+ const useAddOnPurchaseStatus = ( { addOnMeta, selectedSiteId }: Props ): AddOnPurchaseStatus => {
15
20
  const translate = useTranslate();
16
21
  const matchingPurchases = Purchases.useSitePurchasesByProductSlug( {
17
22
  siteId: selectedSiteId,
@@ -22,15 +27,21 @@ const useAddOnPurchaseStatus = ( { addOnMeta, selectedSiteId }: Props ) => {
22
27
  ( slug ) => siteFeatures.data?.active?.includes( slug )
23
28
  );
24
29
 
25
- /*
26
- * Order matters below:
27
- * 1. Check if purchased first.
28
- * 2. Check if site feature next.
29
- * Reason: `siteFeatures.active` involves both purchases and plan features.
30
+ /**
31
+ * First, check if the add-on has a matching purchase. If storage add-on, check matching
32
+ * quantity. Secondly, check if the feature is active on the site. If there's no matching
33
+ * purchase but `siteFeatures.active` still contains the feature, it's because the feature is
34
+ * included in the plan.
30
35
  */
31
-
32
36
  if ( matchingPurchases ) {
33
- return { available: false, text: translate( 'Purchased' ) };
37
+ if ( addOnMeta.quantity ) {
38
+ const purchase: Purchases.Purchase = Object.values( matchingPurchases )[ 0 ];
39
+ if ( purchase.purchaseRenewalQuantity === addOnMeta.quantity ) {
40
+ return { available: false, text: translate( 'Purchased' ) };
41
+ }
42
+ } else {
43
+ return { available: false, text: translate( 'Purchased' ) };
44
+ }
34
45
  }
35
46
 
36
47
  if ( isSiteFeature ) {
@@ -1,274 +1,76 @@
1
- import {
2
- PRODUCT_JETPACK_AI_MONTHLY,
3
- PRODUCT_WPCOM_CUSTOM_DESIGN,
4
- PRODUCT_WPCOM_UNLIMITED_THEMES,
5
- PRODUCT_1GB_SPACE,
6
- WPCOM_FEATURES_AI_ASSISTANT,
7
- WPCOM_FEATURES_PREMIUM_THEMES_UNLIMITED,
8
- WPCOM_FEATURES_CUSTOM_DESIGN,
9
- } from '@automattic/calypso-products';
1
+ import { PRODUCT_1GB_SPACE } from '@automattic/calypso-products';
10
2
  import { useMemo } from '@wordpress/element';
11
3
  import { useTranslate } from 'i18n-calypso';
12
4
  import * as ProductsList from '../../products-list';
13
- import * as Purchases from '../../purchases';
14
5
  import * as Site from '../../site';
15
- import {
16
- ADD_ON_100GB_STORAGE,
17
- ADD_ON_50GB_STORAGE,
18
- ADD_ON_CUSTOM_DESIGN,
19
- ADD_ON_JETPACK_AI_MONTHLY,
20
- ADD_ON_UNLIMITED_THEMES,
21
- STORAGE_LIMIT,
22
- } from '../constants';
23
- import customDesignIcon from '../icons/custom-design';
24
- import jetpackAIIcon from '../icons/jetpack-ai';
25
- import spaceUpgradeIcon from '../icons/space-upgrade';
26
- import unlimitedThemesIcon from '../icons/unlimited-themes';
27
- import isStorageAddonEnabled from '../lib/is-storage-addon-enabled';
6
+ import { getAddOnsList } from '../add-ons-list';
28
7
  import useAddOnCheckoutLink from './use-add-on-checkout-link';
29
- import useAddOnDisplayCost from './use-add-on-display-cost';
30
- import useAddOnPrices from './use-add-on-prices';
8
+ import { createAddOnPriceKey, useAddOnPrices } from './use-add-on-prices';
31
9
  import type { AddOnMeta } from '../types';
32
10
 
33
- const useActiveAddOnsDefs = ( selectedSiteId: Props[ 'selectedSiteId' ] ) => {
34
- const translate = useTranslate();
35
- const checkoutLink = useAddOnCheckoutLink();
36
-
37
- /*
38
- * TODO: `useAddOnDisplayCost` be refactored instead to return an index of `{ [ slug ]: "display cost" }`
39
- */
40
- const displayCostJetpackAIMonthly = useAddOnDisplayCost( PRODUCT_JETPACK_AI_MONTHLY );
41
- const displayCostUnlimitedThemes = useAddOnDisplayCost( PRODUCT_WPCOM_UNLIMITED_THEMES );
42
- const displayCostCustomDesign = useAddOnDisplayCost( PRODUCT_WPCOM_CUSTOM_DESIGN );
43
- const displayCost1GBSpace50 = useAddOnDisplayCost( PRODUCT_1GB_SPACE, 50 );
44
- const displayCost1GBSpace100 = useAddOnDisplayCost( PRODUCT_1GB_SPACE, 100 );
45
-
46
- /*
47
- * TODO: `useAddOnPrices` be refactored instead to return an index of `{ [ slug ]: AddOnPrice }`
48
- */
49
- const addOnPrices1GBSpace50 = useAddOnPrices( PRODUCT_1GB_SPACE, 50 );
50
- const addOnPrices1GBSpace100 = useAddOnPrices( PRODUCT_1GB_SPACE, 100 );
51
-
52
- return useMemo(
53
- () =>
54
- [
55
- {
56
- addOnSlug: ADD_ON_JETPACK_AI_MONTHLY,
57
- productSlug: PRODUCT_JETPACK_AI_MONTHLY,
58
- featureSlugs: null,
59
- icon: jetpackAIIcon,
60
- overrides: null,
61
- displayCost: displayCostJetpackAIMonthly,
62
- featured: true,
63
- description: translate(
64
- 'Elevate your content with Jetpack AI, your AI assistant in the WordPress Editor. Save time writing with effortless content crafting, tone adjustment, title generation, grammar checks, translation, and more.'
65
- ),
66
- name: undefined,
67
- },
68
- {
69
- addOnSlug: ADD_ON_UNLIMITED_THEMES,
70
- productSlug: PRODUCT_WPCOM_UNLIMITED_THEMES,
71
- featureSlugs: [ WPCOM_FEATURES_PREMIUM_THEMES_UNLIMITED ] as string[],
72
- icon: unlimitedThemesIcon,
73
- overrides: null,
74
- displayCost: displayCostUnlimitedThemes,
75
- featured: true,
76
- name: undefined,
77
- description: undefined,
78
- },
79
- {
80
- addOnSlug: ADD_ON_CUSTOM_DESIGN,
81
- productSlug: PRODUCT_WPCOM_CUSTOM_DESIGN,
82
- featureSlugs: [ WPCOM_FEATURES_CUSTOM_DESIGN ] as string[],
83
- icon: customDesignIcon,
84
- overrides: null,
85
- displayCost: displayCostCustomDesign,
86
- featured: false,
87
- name: undefined,
88
- description: undefined,
89
- },
90
- {
91
- addOnSlug: ADD_ON_50GB_STORAGE,
92
- productSlug: PRODUCT_1GB_SPACE,
93
- featureSlugs: null,
94
- icon: spaceUpgradeIcon,
95
- quantity: 50,
96
- name: translate( '50 GB Storage' ),
97
- displayCost: displayCost1GBSpace50,
98
- prices: addOnPrices1GBSpace50,
99
- description: translate(
100
- 'Make more space for high-quality photos, videos, and other media. '
101
- ),
102
- featured: false,
103
- purchased: false,
104
- checkoutLink: checkoutLink( selectedSiteId ?? null, PRODUCT_1GB_SPACE, 50 ),
105
- },
106
- {
107
- addOnSlug: ADD_ON_100GB_STORAGE,
108
- productSlug: PRODUCT_1GB_SPACE,
109
- featureSlugs: null,
110
- icon: spaceUpgradeIcon,
111
- quantity: 100,
112
- name: translate( '100 GB Storage' ),
113
- displayCost: displayCost1GBSpace100,
114
- prices: addOnPrices1GBSpace100,
115
- description: translate(
116
- 'Take your site to the next level. Store all your media in one place without worrying about running out of space.'
117
- ),
118
- featured: false,
119
- purchased: false,
120
- checkoutLink: checkoutLink( selectedSiteId ?? null, PRODUCT_1GB_SPACE, 100 ),
121
- },
122
- ] as const,
123
- [
124
- addOnPrices1GBSpace100,
125
- addOnPrices1GBSpace50,
126
- checkoutLink,
127
- displayCost1GBSpace100,
128
- displayCost1GBSpace50,
129
- displayCostCustomDesign,
130
- displayCostJetpackAIMonthly,
131
- displayCostUnlimitedThemes,
132
- selectedSiteId,
133
- translate,
134
- ]
135
- );
136
- };
137
-
138
11
  interface Props {
139
12
  selectedSiteId?: number | null | undefined;
140
- enableStorageAddOns?: boolean;
141
13
  }
142
14
 
143
- const useAddOns = ( {
144
- selectedSiteId,
145
- enableStorageAddOns,
146
- }: Props = {} ): ( AddOnMeta | null )[] => {
147
- const activeAddOns = useActiveAddOnsDefs( selectedSiteId );
148
- const productSlugs = activeAddOns.map( ( item ) => item.productSlug );
15
+ const useAddOns = ( { selectedSiteId }: Props = {} ): ( AddOnMeta | null )[] => {
16
+ const translate = useTranslate();
17
+ const checkoutLink = useAddOnCheckoutLink();
18
+ const addOns = getAddOnsList();
19
+ const addOnPrices = useAddOnPrices( addOns );
20
+ const productSlugs = addOns.map( ( item ) => item.productSlug );
149
21
  const productsList = ProductsList.useProducts( productSlugs );
150
22
  const mediaStorage = Site.useSiteMediaStorage( { siteIdOrSlug: selectedSiteId } );
151
- const siteFeatures = Site.useSiteFeatures( { siteIdOrSlug: selectedSiteId } );
152
- const sitePurchases = Purchases.useSitePurchases( { siteId: selectedSiteId } );
153
- const spaceUpgradesPurchased = Purchases.useSitePurchasesByProductSlug( {
154
- siteId: selectedSiteId,
155
- productSlug: PRODUCT_1GB_SPACE,
156
- } );
157
23
 
158
24
  return useMemo(
159
25
  () =>
160
- activeAddOns
161
- .filter( ( addOn ) => {
162
- /**
163
- * Remove the Jetpack AI add-on if the site already supports the feature.
164
- * TODO: Potentially another candidate for migrating to `use-add-on-purchase-status`.
165
- * The intention is to have a single source of truth. The add-on can be removed from display
166
- * instead with an appropriate flag, but kept in list of add-ons.
167
- */
168
- if (
169
- addOn.productSlug === PRODUCT_JETPACK_AI_MONTHLY &&
170
- siteFeatures.data?.active?.includes( WPCOM_FEATURES_AI_ASSISTANT )
171
- ) {
172
- return false;
173
- }
174
-
175
- return true;
176
- } )
177
- .map( ( addOn ) => {
178
- const product = productsList.data?.[ addOn.productSlug ];
179
- const name = addOn.name ? addOn.name : product?.name || '';
180
- const description = addOn.description ?? ( product?.description || '' );
181
-
182
- /**
183
- * If siteFeatures, sitePurchases, or productsList are still loading, show the add-on as loading.
184
- * TODO: Potentially another candidate for migrating to `use-add-on-purchase-status`, and attach
185
- * that to the add-on's meta if need to.
186
- */
187
- if ( siteFeatures.isLoading || sitePurchases.isLoading || productsList.isLoading ) {
188
- return {
189
- ...addOn,
190
- name,
191
- description,
192
- isLoading: true,
193
- };
194
- }
195
-
196
- /**
197
- * If the product is not found in the products list, remove the add-on.
198
- * This should signal a wrong slug or a product that doesn't exist i.e. some sort of Bug.
199
- * (not sure if add-on without a connected product is a valid use case)
200
- */
201
- if ( ! product ) {
202
- return null;
203
- }
26
+ addOns.map( ( addOnMeta ) => {
27
+ const { productSlug, quantity } = addOnMeta;
28
+ const key = createAddOnPriceKey( addOnMeta );
204
29
 
205
- /**
206
- * If it's a storage add-on.
207
- */
208
- if ( addOn.productSlug === PRODUCT_1GB_SPACE ) {
209
- // if storage add-ons are not enabled in the config or disabled via hook prop, remove them
210
- if (
211
- ( 'boolean' === typeof enableStorageAddOns && ! enableStorageAddOns ) ||
212
- ( ! isStorageAddonEnabled() && 'boolean' !== typeof enableStorageAddOns )
213
- ) {
214
- return null;
215
- }
30
+ // TODO: can we not specify the product slug here for the storage add-on?
31
+ const isLoading =
32
+ productsList.isLoading || ( productSlug === PRODUCT_1GB_SPACE && mediaStorage.isLoading );
33
+ const product = productsList.data?.[ productSlug ];
34
+ const name = addOnMeta.name ? addOnMeta.name : product?.name || '';
35
+ const description = addOnMeta.description ?? ( product?.description || '' );
216
36
 
217
- /**
218
- * If storage add-on is already purchased.
219
- * TODO: Consider migrating this part to `use-add-on-purchase-status` and attach
220
- * that to the add-on's meta if need to. The intention is to have a single source of truth.
221
- */
222
- const isStorageAddOnPurchased = Object.values( spaceUpgradesPurchased ?? [] ).some(
223
- ( purchase ) => purchase.purchaseRenewalQuantity === addOn.quantity
224
- );
225
- if ( isStorageAddOnPurchased ) {
226
- return {
227
- ...addOn,
228
- name,
229
- description,
230
- purchased: true,
231
- };
232
- }
37
+ /**
38
+ * If the product is not found in the products list, remove the add-on.
39
+ * This should signal a wrong slug or a product that doesn't exist i.e. some sort of Bug.
40
+ * (not sure if add-on without a connected product is a valid use case)
41
+ */
42
+ if ( ! product ) {
43
+ return null;
44
+ }
233
45
 
234
- /**
235
- * If the current storage add-on option is greater than the available upgrade.
236
- * TODO: This is also potentially a candidate for `use-add-on-purchase-status`.
237
- */
238
- const currentMaxStorage = mediaStorage.data?.maxStorageBytes
239
- ? mediaStorage.data.maxStorageBytes / Math.pow( 1024, 3 )
240
- : 0;
241
- const availableStorageUpgrade = STORAGE_LIMIT - currentMaxStorage;
242
- if ( ( addOn.quantity ?? 0 ) > availableStorageUpgrade ) {
243
- return {
244
- ...addOn,
245
- name,
246
- description,
247
- exceedsSiteStorageLimits: true,
248
- };
249
- }
250
- }
46
+ const prices = addOnPrices[ key ];
47
+ const formattedCost = prices?.formattedMonthlyPrice || '';
48
+ const displayCost =
49
+ product.term === 'month'
50
+ ? /* Translators: %(formattedCost)s: monthly price formatted with currency */
51
+ translate( '%(formattedCost)s/month, billed monthly', {
52
+ args: {
53
+ formattedCost,
54
+ },
55
+ } )
56
+ : /* Translators: %(monthlyCost)s: monthly price formatted with currency */
57
+ translate( '%(monthlyCost)s/month, billed yearly', {
58
+ args: {
59
+ monthlyCost: formattedCost,
60
+ },
61
+ } );
251
62
 
252
- /**
253
- * Regular product add-ons.
254
- */
255
- return {
256
- ...addOn,
257
- name,
258
- description,
259
- };
260
- } ),
261
- [
262
- activeAddOns,
263
- enableStorageAddOns,
264
- mediaStorage.data?.maxStorageBytes,
265
- productsList.data,
266
- productsList.isLoading,
267
- siteFeatures.data?.active,
268
- siteFeatures.isLoading,
269
- sitePurchases.isLoading,
270
- spaceUpgradesPurchased,
271
- ]
63
+ return {
64
+ ...addOnMeta,
65
+ name,
66
+ description,
67
+ isLoading,
68
+ prices,
69
+ displayCost,
70
+ checkoutLink: checkoutLink( selectedSiteId ?? null, productSlug, quantity ),
71
+ };
72
+ } ),
73
+ [ addOnPrices, productsList.data, productsList.isLoading, checkoutLink, selectedSiteId ]
272
74
  );
273
75
  };
274
76
 
@@ -1,38 +1,48 @@
1
1
  import { useMemo } from '@wordpress/element';
2
- import { useSiteMediaStorage } from '../../site';
2
+ import { SiteMediaStorage, useSiteMediaStorage } from '../../site';
3
3
  import { STORAGE_LIMIT } from '../constants';
4
+ import { AddOnMeta } from '../types';
4
5
  import useStorageAddOns from './use-storage-add-ons';
5
6
 
6
7
  interface Props {
7
8
  siteId?: number | null;
8
9
  }
9
10
 
11
+ /**
12
+ * Check if the quantity for a storage add-on is available for purchase.
13
+ * @param quantity The number of gigabytes the given add-on adds to the site's storage
14
+ * @param storage Data returned from
15
+ */
16
+ export function isStorageQuantityAvailable( quantity: number, storage: SiteMediaStorage ): boolean {
17
+ const existingAddOnStorage = storage.maxStorageBytesFromAddOns / Math.pow( 1024, 3 );
18
+ const currentMaxStorage = storage.maxStorageBytes / Math.pow( 1024, 3 );
19
+ const isWithinStorageLimit = STORAGE_LIMIT >= currentMaxStorage - existingAddOnStorage + quantity;
20
+
21
+ return existingAddOnStorage < quantity && isWithinStorageLimit;
22
+ }
23
+
10
24
  /**
11
25
  * Returns the storage add-ons that are available for purchase considering the current site when present.
12
26
  * Conditions:
13
- * - If the user has not purchased the storage add-on.
14
27
  * - If the storage add-on does not exceed the site storage limits.
15
28
  * - If the quantity of the storage add-on is less than or equal to the available storage upgrade.
16
29
  */
17
- const useAvailableStorageAddOns = ( { siteId }: Props ) => {
30
+ const useAvailableStorageAddOns = ( { siteId }: Props ): AddOnMeta[] => {
18
31
  const storageAddOns = useStorageAddOns( { siteId } );
19
32
  const siteMediaStorage = useSiteMediaStorage( { siteIdOrSlug: siteId } );
20
- const currentMaxStorage = siteMediaStorage.data?.maxStorageBytes
21
- ? siteMediaStorage.data.maxStorageBytes / Math.pow( 1024, 3 )
22
- : 0;
23
- const availableStorageUpgrade = STORAGE_LIMIT - currentMaxStorage;
24
33
 
25
34
  return useMemo( () => {
26
- const availableStorageAddOns = storageAddOns.filter( ( addOn ) =>
27
- addOn
28
- ? ! addOn.purchased &&
29
- ! addOn.exceedsSiteStorageLimits &&
30
- ( addOn.quantity ?? 0 ) <= availableStorageUpgrade
31
- : false
32
- );
35
+ const nonNullAddOns = storageAddOns.filter( ( addOn ): addOn is AddOnMeta => addOn !== null );
36
+ const siteMediaStorageData = siteMediaStorage.data;
33
37
 
34
- return availableStorageAddOns?.length ? availableStorageAddOns : null;
35
- }, [ availableStorageUpgrade, storageAddOns ] );
38
+ if ( ! siteMediaStorageData ) {
39
+ return nonNullAddOns;
40
+ }
41
+
42
+ return nonNullAddOns.filter( ( addOn ) =>
43
+ isStorageQuantityAvailable( addOn?.quantity ?? 0, siteMediaStorageData )
44
+ );
45
+ }, [ siteMediaStorage.data, storageAddOns ] );
36
46
  };
37
47
 
38
48
  export default useAvailableStorageAddOns;
@@ -0,0 +1,24 @@
1
+ import { PRODUCT_1GB_SPACE } from '@automattic/calypso-products';
2
+ import * as Purchases from '../../purchases';
3
+ import useStorageAddOns from './use-storage-add-ons';
4
+ import type { AddOnMeta } from '../..';
5
+
6
+ export default function useGetPurchasedStorageAddOn( {
7
+ siteId,
8
+ }: {
9
+ siteId?: number | null;
10
+ } ): AddOnMeta | null {
11
+ const storageAddOns = useStorageAddOns( { siteId } );
12
+ const matchingPurchases = Purchases.useSitePurchasesByProductSlug( {
13
+ siteId,
14
+ productSlug: PRODUCT_1GB_SPACE,
15
+ } );
16
+
17
+ if ( ! matchingPurchases ) {
18
+ return null;
19
+ }
20
+
21
+ const purchase: Purchases.Purchase = Object.values( matchingPurchases )[ 0 ];
22
+ const storageAddOnQuantity = purchase.purchaseRenewalQuantity;
23
+ return storageAddOns.find( ( addOn ) => addOn?.quantity === storageAddOnQuantity ) ?? null;
24
+ }
@@ -0,0 +1,38 @@
1
+ import { PRODUCT_1GB_SPACE } from '@automattic/calypso-products';
2
+ import { useSiteMediaStorage } from '../../site';
3
+ import { AddOnMeta } from '../types';
4
+ import { isStorageQuantityAvailable } from './use-available-storage-add-ons';
5
+
6
+ interface Props {
7
+ addOnMeta: AddOnMeta;
8
+ selectedSiteId?: number | null;
9
+ }
10
+
11
+ export enum StorageAddOnAvailability {
12
+ NotAStorageAddOn,
13
+ DataLoading,
14
+ Unavailable,
15
+ Available,
16
+ }
17
+
18
+ /**
19
+ * Check if an add-on is a storage add-on, and if so, if the quantity is available for purchase.
20
+ */
21
+ export default function useStorageAddOnAvailability( {
22
+ addOnMeta,
23
+ selectedSiteId,
24
+ }: Props ): StorageAddOnAvailability {
25
+ const mediaStorage = useSiteMediaStorage( { siteIdOrSlug: selectedSiteId } );
26
+
27
+ if ( addOnMeta.productSlug !== PRODUCT_1GB_SPACE ) {
28
+ return StorageAddOnAvailability.NotAStorageAddOn;
29
+ }
30
+
31
+ if ( ! mediaStorage.data ) {
32
+ return StorageAddOnAvailability.DataLoading;
33
+ }
34
+
35
+ return isStorageQuantityAvailable( addOnMeta.quantity ?? 0, mediaStorage.data )
36
+ ? StorageAddOnAvailability.Available
37
+ : StorageAddOnAvailability.Unavailable;
38
+ }
@@ -4,6 +4,11 @@ export { default as useAddOnCheckoutLink } from './hooks/use-add-on-checkout-lin
4
4
  export { default as useAddOnPurchaseStatus } from './hooks/use-add-on-purchase-status';
5
5
  export { default as useStorageAddOns } from './hooks/use-storage-add-ons';
6
6
  export { default as useAvailableStorageAddOns } from './hooks/use-available-storage-add-ons';
7
+ export {
8
+ default as useStorageAddOnAvailability,
9
+ StorageAddOnAvailability,
10
+ } from './hooks/use-storage-add-on-availability';
11
+ export { default as useGetPurchasedStorageAddOn } from './hooks/use-get-purchased-storage-add-on';
7
12
  export * from './constants';
8
13
 
9
14
  /** Types */