@automattic/data-stores 3.2.0 → 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 (516) hide show
  1. package/CHANGELOG.md +4 -0
  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/agents-manager/types.js +3 -0
  17. package/dist/cjs/agents-manager/types.js.map +1 -0
  18. package/dist/cjs/contextual-help/admin-sections.js +1 -1
  19. package/dist/cjs/contextual-help/admin-sections.js.map +1 -1
  20. package/dist/cjs/help-center/actions.js +67 -63
  21. package/dist/cjs/help-center/actions.js.map +1 -1
  22. package/dist/cjs/help-center/constants.js +2 -1
  23. package/dist/cjs/help-center/constants.js.map +1 -1
  24. package/dist/cjs/help-center/index.js +14 -27
  25. package/dist/cjs/help-center/index.js.map +1 -1
  26. package/dist/cjs/help-center/reducer.js +17 -2
  27. package/dist/cjs/help-center/reducer.js.map +1 -1
  28. package/dist/cjs/help-center/resolvers.js +45 -25
  29. package/dist/cjs/help-center/resolvers.js.map +1 -1
  30. package/dist/cjs/help-center/selectors.js +7 -1
  31. package/dist/cjs/help-center/selectors.js.map +1 -1
  32. package/dist/cjs/help-center/utils.js +136 -0
  33. package/dist/cjs/help-center/utils.js.map +1 -0
  34. package/dist/cjs/index.js +8 -3
  35. package/dist/cjs/index.js.map +1 -1
  36. package/dist/cjs/mutations/use-domains-bulk-actions-mutation.js +3 -3
  37. package/dist/cjs/mutations/use-domains-bulk-actions-mutation.js.map +1 -1
  38. package/dist/cjs/newsletter-categories/index.js +2 -2
  39. package/dist/cjs/newsletter-categories/index.js.map +1 -1
  40. package/dist/cjs/onboard/actions.js +6 -1
  41. package/dist/cjs/onboard/actions.js.map +1 -1
  42. package/dist/cjs/onboard/reducer.js +12 -1
  43. package/dist/cjs/onboard/reducer.js.map +1 -1
  44. package/dist/cjs/onboard/selectors.js +3 -1
  45. package/dist/cjs/onboard/selectors.js.map +1 -1
  46. package/dist/cjs/plans/constants.js +3 -1
  47. package/dist/cjs/plans/constants.js.map +1 -1
  48. package/dist/cjs/plans/hooks/use-pricing-meta-for-grid-plans.js +35 -18
  49. package/dist/cjs/plans/hooks/use-pricing-meta-for-grid-plans.js.map +1 -1
  50. package/dist/cjs/plans/index.js +2 -1
  51. package/dist/cjs/plans/index.js.map +1 -1
  52. package/dist/cjs/plans/queries/use-plans.js +2 -2
  53. package/dist/cjs/plans/queries/use-plans.js.map +1 -1
  54. package/dist/cjs/plans/queries/use-site-plans.js +2 -2
  55. package/dist/cjs/plans/queries/use-site-plans.js.map +1 -1
  56. package/dist/cjs/plans/resolvers.js +0 -1
  57. package/dist/cjs/plans/resolvers.js.map +1 -1
  58. package/dist/cjs/plans/selectors.js.map +1 -1
  59. package/dist/cjs/products-list/queries/use-products.js +2 -2
  60. package/dist/cjs/products-list/queries/use-products.js.map +1 -1
  61. package/dist/cjs/products-list/resolvers.js +2 -2
  62. package/dist/cjs/products-list/resolvers.js.map +1 -1
  63. package/dist/cjs/purchases/lib/assembler.js +9 -4
  64. package/dist/cjs/purchases/lib/assembler.js.map +1 -1
  65. package/dist/cjs/purchases/queries/use-get-jetpack-transferred-license-purchases.js +2 -2
  66. package/dist/cjs/purchases/queries/use-get-jetpack-transferred-license-purchases.js.map +1 -1
  67. package/dist/cjs/purchases/queries/use-site-purchases.js +3 -3
  68. package/dist/cjs/purchases/queries/use-site-purchases.js.map +1 -1
  69. package/dist/cjs/queries/use-all-domains-query.js +2 -2
  70. package/dist/cjs/queries/use-all-domains-query.js.map +1 -1
  71. package/dist/cjs/queries/use-bulk-domain-update-status-query.js +3 -57
  72. package/dist/cjs/queries/use-bulk-domain-update-status-query.js.map +1 -1
  73. package/dist/cjs/queries/use-happiness-engineers-query.js +2 -2
  74. package/dist/cjs/queries/use-happiness-engineers-query.js.map +1 -1
  75. package/dist/cjs/queries/use-launchpad.js +5 -5
  76. package/dist/cjs/queries/use-launchpad.js.map +1 -1
  77. package/dist/cjs/queries/use-site-domains-query.js +2 -2
  78. package/dist/cjs/queries/use-site-domains-query.js.map +1 -1
  79. package/dist/cjs/queries/use-site-intent.js +2 -2
  80. package/dist/cjs/queries/use-site-intent.js.map +1 -1
  81. package/dist/cjs/queries/use-site-query.js +2 -2
  82. package/dist/cjs/queries/use-site-query.js.map +1 -1
  83. package/dist/cjs/reader/contexts/index.js +1 -4
  84. package/dist/cjs/reader/contexts/index.js.map +1 -1
  85. package/dist/cjs/reader/helpers/index.js +4 -3
  86. package/dist/cjs/reader/helpers/index.js.map +1 -1
  87. package/dist/cjs/reader/helpers/optimistic-update.js +2 -1
  88. package/dist/cjs/reader/helpers/optimistic-update.js.map +1 -1
  89. package/dist/cjs/reader/index.js +2 -8
  90. package/dist/cjs/reader/index.js.map +1 -1
  91. package/dist/cjs/reader/mutations/use-pending-site-confirm-mutation.js +2 -2
  92. package/dist/cjs/reader/mutations/use-pending-site-confirm-mutation.js.map +1 -1
  93. package/dist/cjs/reader/mutations/use-site-delivery-frequency-mutation.js +26 -20
  94. package/dist/cjs/reader/mutations/use-site-delivery-frequency-mutation.js.map +1 -1
  95. package/dist/cjs/reader/mutations/use-site-email-me-new-comments-mutation.js +4 -3
  96. package/dist/cjs/reader/mutations/use-site-email-me-new-comments-mutation.js.map +1 -1
  97. package/dist/cjs/reader/mutations/use-site-email-me-new-posts-mutation.js +4 -3
  98. package/dist/cjs/reader/mutations/use-site-email-me-new-posts-mutation.js.map +1 -1
  99. package/dist/cjs/reader/mutations/use-site-notify-me-of-new-posts-mutation.js +4 -3
  100. package/dist/cjs/reader/mutations/use-site-notify-me-of-new-posts-mutation.js.map +1 -1
  101. package/dist/cjs/reader/mutations/use-site-subscribe-mutation.js +10 -4
  102. package/dist/cjs/reader/mutations/use-site-subscribe-mutation.js.map +1 -1
  103. package/dist/cjs/reader/mutations/use-site-unsubscribe-mutation.js +11 -4
  104. package/dist/cjs/reader/mutations/use-site-unsubscribe-mutation.js.map +1 -1
  105. package/dist/cjs/reader/queries/index.js +2 -8
  106. package/dist/cjs/reader/queries/index.js.map +1 -1
  107. package/dist/cjs/reader/queries/use-site-subscriptions-query.js +27 -26
  108. package/dist/cjs/reader/queries/use-site-subscriptions-query.js.map +1 -1
  109. package/dist/cjs/site/queries/use-site-features.js +2 -2
  110. package/dist/cjs/site/queries/use-site-features.js.map +1 -1
  111. package/dist/cjs/site/queries/use-site-media-storage.js +2 -2
  112. package/dist/cjs/site/queries/use-site-media-storage.js.map +1 -1
  113. package/dist/cjs/site/queries/use-site-user-query.js +2 -2
  114. package/dist/cjs/site/queries/use-site-user-query.js.map +1 -1
  115. package/dist/cjs/site/queries/use-site.js +2 -2
  116. package/dist/cjs/site/queries/use-site.js.map +1 -1
  117. package/dist/cjs/site/resolvers.js +5 -5
  118. package/dist/cjs/site/resolvers.js.map +1 -1
  119. package/dist/cjs/site/selectors.js +5 -3
  120. package/dist/cjs/site/selectors.js.map +1 -1
  121. package/dist/cjs/site/types.js.map +1 -1
  122. package/dist/cjs/site-reset/use-site-reset-content-summary-query.js +2 -2
  123. package/dist/cjs/site-reset/use-site-reset-content-summary-query.js.map +1 -1
  124. package/dist/cjs/site-reset/use-site-reset-mutation.js +2 -2
  125. package/dist/cjs/site-reset/use-site-reset-mutation.js.map +1 -1
  126. package/dist/cjs/site-reset/use-site-reset-status-query.js +2 -2
  127. package/dist/cjs/site-reset/use-site-reset-status-query.js.map +1 -1
  128. package/dist/cjs/starter-designs-queries/use-starter-design-by-slug.js +2 -2
  129. package/dist/cjs/starter-designs-queries/use-starter-design-by-slug.js.map +1 -1
  130. package/dist/cjs/starter-designs-queries/use-starter-designs-query.js +2 -2
  131. package/dist/cjs/starter-designs-queries/use-starter-designs-query.js.map +1 -1
  132. package/dist/cjs/subscriber/actions.js +5 -5
  133. package/dist/cjs/subscriber/actions.js.map +1 -1
  134. package/dist/cjs/templates/use-template.js +2 -2
  135. package/dist/cjs/templates/use-template.js.map +1 -1
  136. package/dist/cjs/users/use-send-invites.js +2 -2
  137. package/dist/cjs/users/use-send-invites.js.map +1 -1
  138. package/dist/cjs/utils.js +26 -0
  139. package/dist/cjs/utils.js.map +1 -0
  140. package/dist/cjs/wpcom-request-controls/index.js +3 -2
  141. package/dist/cjs/wpcom-request-controls/index.js.map +1 -1
  142. package/dist/cjs/wpcom-request.js +24 -0
  143. package/dist/cjs/wpcom-request.js.map +1 -0
  144. package/dist/esm/agents-manager/actions.js +104 -0
  145. package/dist/esm/agents-manager/actions.js.map +1 -0
  146. package/dist/esm/agents-manager/constants.js +2 -0
  147. package/dist/esm/agents-manager/constants.js.map +1 -0
  148. package/dist/esm/agents-manager/index.js +31 -0
  149. package/dist/esm/agents-manager/index.js.map +1 -0
  150. package/dist/esm/agents-manager/persist-state.js +54 -0
  151. package/dist/esm/agents-manager/persist-state.js.map +1 -0
  152. package/dist/esm/agents-manager/reducer.js +82 -0
  153. package/dist/esm/agents-manager/reducer.js.map +1 -0
  154. package/dist/esm/agents-manager/resolvers.js +57 -0
  155. package/dist/esm/agents-manager/resolvers.js.map +1 -0
  156. package/dist/esm/agents-manager/selectors.js +31 -0
  157. package/dist/esm/agents-manager/selectors.js.map +1 -0
  158. package/dist/esm/agents-manager/types.js +2 -0
  159. package/dist/esm/agents-manager/types.js.map +1 -0
  160. package/dist/esm/contextual-help/admin-sections.js +1 -1
  161. package/dist/esm/contextual-help/admin-sections.js.map +1 -1
  162. package/dist/esm/help-center/actions.js +63 -61
  163. package/dist/esm/help-center/actions.js.map +1 -1
  164. package/dist/esm/help-center/constants.js +1 -0
  165. package/dist/esm/help-center/constants.js.map +1 -1
  166. package/dist/esm/help-center/index.js +11 -23
  167. package/dist/esm/help-center/index.js.map +1 -1
  168. package/dist/esm/help-center/reducer.js +17 -2
  169. package/dist/esm/help-center/reducer.js.map +1 -1
  170. package/dist/esm/help-center/resolvers.js +43 -25
  171. package/dist/esm/help-center/resolvers.js.map +1 -1
  172. package/dist/esm/help-center/selectors.js +3 -0
  173. package/dist/esm/help-center/selectors.js.map +1 -1
  174. package/dist/esm/help-center/utils.js +127 -0
  175. package/dist/esm/help-center/utils.js.map +1 -0
  176. package/dist/esm/index.js +4 -2
  177. package/dist/esm/index.js.map +1 -1
  178. package/dist/esm/mutations/use-domains-bulk-actions-mutation.js +1 -1
  179. package/dist/esm/mutations/use-domains-bulk-actions-mutation.js.map +1 -1
  180. package/dist/esm/newsletter-categories/index.js +1 -1
  181. package/dist/esm/newsletter-categories/index.js.map +1 -1
  182. package/dist/esm/onboard/actions.js +4 -0
  183. package/dist/esm/onboard/actions.js.map +1 -1
  184. package/dist/esm/onboard/reducer.js +10 -0
  185. package/dist/esm/onboard/reducer.js.map +1 -1
  186. package/dist/esm/onboard/selectors.js +1 -0
  187. package/dist/esm/onboard/selectors.js.map +1 -1
  188. package/dist/esm/plans/constants.js +2 -0
  189. package/dist/esm/plans/constants.js.map +1 -1
  190. package/dist/esm/plans/hooks/use-pricing-meta-for-grid-plans.js +35 -18
  191. package/dist/esm/plans/hooks/use-pricing-meta-for-grid-plans.js.map +1 -1
  192. package/dist/esm/plans/index.js +1 -1
  193. package/dist/esm/plans/index.js.map +1 -1
  194. package/dist/esm/plans/queries/use-plans.js +1 -1
  195. package/dist/esm/plans/queries/use-site-plans.js +1 -1
  196. package/dist/esm/plans/resolvers.js +0 -1
  197. package/dist/esm/plans/resolvers.js.map +1 -1
  198. package/dist/esm/plans/selectors.js.map +1 -1
  199. package/dist/esm/products-list/queries/use-products.js +1 -1
  200. package/dist/esm/products-list/queries/use-products.js.map +1 -1
  201. package/dist/esm/products-list/resolvers.js +1 -1
  202. package/dist/esm/products-list/resolvers.js.map +1 -1
  203. package/dist/esm/purchases/lib/assembler.js +9 -4
  204. package/dist/esm/purchases/lib/assembler.js.map +1 -1
  205. package/dist/esm/purchases/queries/use-get-jetpack-transferred-license-purchases.js +1 -1
  206. package/dist/esm/purchases/queries/use-site-purchases.js +2 -2
  207. package/dist/esm/queries/use-all-domains-query.js +1 -1
  208. package/dist/esm/queries/use-all-domains-query.js.map +1 -1
  209. package/dist/esm/queries/use-bulk-domain-update-status-query.js +3 -56
  210. package/dist/esm/queries/use-bulk-domain-update-status-query.js.map +1 -1
  211. package/dist/esm/queries/use-happiness-engineers-query.js +1 -1
  212. package/dist/esm/queries/use-happiness-engineers-query.js.map +1 -1
  213. package/dist/esm/queries/use-launchpad.js +1 -1
  214. package/dist/esm/queries/use-launchpad.js.map +1 -1
  215. package/dist/esm/queries/use-site-domains-query.js +1 -1
  216. package/dist/esm/queries/use-site-domains-query.js.map +1 -1
  217. package/dist/esm/queries/use-site-intent.js +1 -1
  218. package/dist/esm/queries/use-site-intent.js.map +1 -1
  219. package/dist/esm/queries/use-site-query.js +1 -1
  220. package/dist/esm/queries/use-site-query.js.map +1 -1
  221. package/dist/esm/reader/contexts/index.js +0 -1
  222. package/dist/esm/reader/contexts/index.js.map +1 -1
  223. package/dist/esm/reader/helpers/index.js +3 -2
  224. package/dist/esm/reader/helpers/index.js.map +1 -1
  225. package/dist/esm/reader/helpers/optimistic-update.js +2 -1
  226. package/dist/esm/reader/helpers/optimistic-update.js.map +1 -1
  227. package/dist/esm/reader/index.js +2 -3
  228. package/dist/esm/reader/index.js.map +1 -1
  229. package/dist/esm/reader/mutations/use-pending-site-confirm-mutation.js +2 -2
  230. package/dist/esm/reader/mutations/use-pending-site-confirm-mutation.js.map +1 -1
  231. package/dist/esm/reader/mutations/use-site-delivery-frequency-mutation.js +27 -21
  232. package/dist/esm/reader/mutations/use-site-delivery-frequency-mutation.js.map +1 -1
  233. package/dist/esm/reader/mutations/use-site-email-me-new-comments-mutation.js +5 -4
  234. package/dist/esm/reader/mutations/use-site-email-me-new-comments-mutation.js.map +1 -1
  235. package/dist/esm/reader/mutations/use-site-email-me-new-posts-mutation.js +5 -4
  236. package/dist/esm/reader/mutations/use-site-email-me-new-posts-mutation.js.map +1 -1
  237. package/dist/esm/reader/mutations/use-site-notify-me-of-new-posts-mutation.js +5 -4
  238. package/dist/esm/reader/mutations/use-site-notify-me-of-new-posts-mutation.js.map +1 -1
  239. package/dist/esm/reader/mutations/use-site-subscribe-mutation.js +10 -4
  240. package/dist/esm/reader/mutations/use-site-subscribe-mutation.js.map +1 -1
  241. package/dist/esm/reader/mutations/use-site-unsubscribe-mutation.js +11 -4
  242. package/dist/esm/reader/mutations/use-site-unsubscribe-mutation.js.map +1 -1
  243. package/dist/esm/reader/queries/index.js +1 -4
  244. package/dist/esm/reader/queries/index.js.map +1 -1
  245. package/dist/esm/reader/queries/use-site-subscriptions-query.js +28 -27
  246. package/dist/esm/reader/queries/use-site-subscriptions-query.js.map +1 -1
  247. package/dist/esm/site/queries/use-site-features.js +1 -1
  248. package/dist/esm/site/queries/use-site-media-storage.js +1 -1
  249. package/dist/esm/site/queries/use-site-user-query.js +1 -1
  250. package/dist/esm/site/queries/use-site-user-query.js.map +1 -1
  251. package/dist/esm/site/queries/use-site.js +1 -1
  252. package/dist/esm/site/resolvers.js +1 -1
  253. package/dist/esm/site/resolvers.js.map +1 -1
  254. package/dist/esm/site/selectors.js +5 -3
  255. package/dist/esm/site/selectors.js.map +1 -1
  256. package/dist/esm/site/types.js.map +1 -1
  257. package/dist/esm/site-reset/use-site-reset-content-summary-query.js +1 -1
  258. package/dist/esm/site-reset/use-site-reset-content-summary-query.js.map +1 -1
  259. package/dist/esm/site-reset/use-site-reset-mutation.js +1 -1
  260. package/dist/esm/site-reset/use-site-reset-mutation.js.map +1 -1
  261. package/dist/esm/site-reset/use-site-reset-status-query.js +1 -1
  262. package/dist/esm/site-reset/use-site-reset-status-query.js.map +1 -1
  263. package/dist/esm/starter-designs-queries/use-starter-design-by-slug.js +1 -1
  264. package/dist/esm/starter-designs-queries/use-starter-design-by-slug.js.map +1 -1
  265. package/dist/esm/starter-designs-queries/use-starter-designs-query.js +1 -1
  266. package/dist/esm/starter-designs-queries/use-starter-designs-query.js.map +1 -1
  267. package/dist/esm/subscriber/actions.js +1 -1
  268. package/dist/esm/subscriber/actions.js.map +1 -1
  269. package/dist/esm/templates/use-template.js +1 -1
  270. package/dist/esm/templates/use-template.js.map +1 -1
  271. package/dist/esm/users/use-send-invites.js +1 -1
  272. package/dist/esm/users/use-send-invites.js.map +1 -1
  273. package/dist/esm/utils.js +21 -0
  274. package/dist/esm/utils.js.map +1 -0
  275. package/dist/esm/wpcom-request-controls/index.js +2 -1
  276. package/dist/esm/wpcom-request-controls/index.js.map +1 -1
  277. package/dist/esm/wpcom-request.js +18 -0
  278. package/dist/esm/wpcom-request.js.map +1 -0
  279. package/dist/tsconfig-cjs.tsbuildinfo +1 -1
  280. package/dist/tsconfig.tsbuildinfo +1 -1
  281. package/dist/types/add-ons/types.d.ts +1 -0
  282. package/dist/types/add-ons/types.d.ts.map +1 -1
  283. package/dist/types/agents-manager/actions.d.ts +77 -0
  284. package/dist/types/agents-manager/actions.d.ts.map +1 -0
  285. package/dist/types/agents-manager/constants.d.ts +2 -0
  286. package/dist/types/agents-manager/constants.d.ts.map +1 -0
  287. package/dist/types/agents-manager/index.d.ts +6 -0
  288. package/dist/types/agents-manager/index.d.ts.map +1 -0
  289. package/dist/types/agents-manager/persist-state.d.ts +6 -0
  290. package/dist/types/agents-manager/persist-state.d.ts.map +1 -0
  291. package/dist/types/agents-manager/reducer.d.ts +29 -0
  292. package/dist/types/agents-manager/reducer.d.ts.map +1 -0
  293. package/dist/types/agents-manager/resolvers.d.ts +54 -0
  294. package/dist/types/agents-manager/resolvers.d.ts.map +1 -0
  295. package/dist/types/agents-manager/selectors.d.ts +22 -0
  296. package/dist/types/agents-manager/selectors.d.ts.map +1 -0
  297. package/dist/types/agents-manager/types.d.ts +20 -0
  298. package/dist/types/agents-manager/types.d.ts.map +1 -0
  299. package/dist/types/contextual-help/admin-sections.d.ts +330 -6
  300. package/dist/types/contextual-help/admin-sections.d.ts.map +1 -1
  301. package/dist/types/contextual-help/contextual-help.d.ts +410 -30
  302. package/dist/types/contextual-help/contextual-help.d.ts.map +1 -1
  303. package/dist/types/help-center/actions.d.ts +235 -30
  304. package/dist/types/help-center/actions.d.ts.map +1 -1
  305. package/dist/types/help-center/constants.d.ts +1 -0
  306. package/dist/types/help-center/constants.d.ts.map +1 -1
  307. package/dist/types/help-center/index.d.ts +1 -2
  308. package/dist/types/help-center/index.d.ts.map +1 -1
  309. package/dist/types/help-center/reducer.d.ts +13 -2
  310. package/dist/types/help-center/reducer.d.ts.map +1 -1
  311. package/dist/types/help-center/resolvers.d.ts +4 -31
  312. package/dist/types/help-center/resolvers.d.ts.map +1 -1
  313. package/dist/types/help-center/selectors.d.ts +11 -1
  314. package/dist/types/help-center/selectors.d.ts.map +1 -1
  315. package/dist/types/help-center/types.d.ts +20 -12
  316. package/dist/types/help-center/types.d.ts.map +1 -1
  317. package/dist/types/help-center/utils.d.ts +13 -0
  318. package/dist/types/help-center/utils.d.ts.map +1 -0
  319. package/dist/types/index.d.ts +18 -298
  320. package/dist/types/index.d.ts.map +1 -1
  321. package/dist/types/onboard/actions.d.ts +19 -3
  322. package/dist/types/onboard/actions.d.ts.map +1 -1
  323. package/dist/types/onboard/reducer.d.ts +4 -1
  324. package/dist/types/onboard/reducer.d.ts.map +1 -1
  325. package/dist/types/onboard/selectors.d.ts +8 -6
  326. package/dist/types/onboard/selectors.d.ts.map +1 -1
  327. package/dist/types/plans/constants.d.ts +3 -2
  328. package/dist/types/plans/constants.d.ts.map +1 -1
  329. package/dist/types/plans/hooks/use-pricing-meta-for-grid-plans.d.ts +6 -1
  330. package/dist/types/plans/hooks/use-pricing-meta-for-grid-plans.d.ts.map +1 -1
  331. package/dist/types/plans/index.d.ts +1 -1
  332. package/dist/types/plans/index.d.ts.map +1 -1
  333. package/dist/types/plans/resolvers.d.ts.map +1 -1
  334. package/dist/types/plans/types.d.ts +6 -0
  335. package/dist/types/plans/types.d.ts.map +1 -1
  336. package/dist/types/products-list/index.d.ts +1 -1
  337. package/dist/types/products-list/index.d.ts.map +1 -1
  338. package/dist/types/products-list/queries/use-products.d.ts.map +1 -1
  339. package/dist/types/purchases/lib/assembler.d.ts.map +1 -1
  340. package/dist/types/purchases/types.d.ts +37 -0
  341. package/dist/types/purchases/types.d.ts.map +1 -1
  342. package/dist/types/queries/use-all-domains-query.d.ts +2 -2
  343. package/dist/types/queries/use-all-domains-query.d.ts.map +1 -1
  344. package/dist/types/queries/use-bulk-domain-update-status-query.d.ts +5 -48
  345. package/dist/types/queries/use-bulk-domain-update-status-query.d.ts.map +1 -1
  346. package/dist/types/queries/use-site-intent.d.ts.map +1 -1
  347. package/dist/types/reader/contexts/index.d.ts +0 -1
  348. package/dist/types/reader/contexts/index.d.ts.map +1 -1
  349. package/dist/types/reader/helpers/index.d.ts.map +1 -1
  350. package/dist/types/reader/helpers/optimistic-update.d.ts.map +1 -1
  351. package/dist/types/reader/index.d.ts +13 -299
  352. package/dist/types/reader/index.d.ts.map +1 -1
  353. package/dist/types/reader/mutations/use-site-delivery-frequency-mutation.d.ts +3 -2
  354. package/dist/types/reader/mutations/use-site-delivery-frequency-mutation.d.ts.map +1 -1
  355. package/dist/types/reader/mutations/use-site-email-me-new-comments-mutation.d.ts +3 -2
  356. package/dist/types/reader/mutations/use-site-email-me-new-comments-mutation.d.ts.map +1 -1
  357. package/dist/types/reader/mutations/use-site-email-me-new-posts-mutation.d.ts +3 -2
  358. package/dist/types/reader/mutations/use-site-email-me-new-posts-mutation.d.ts.map +1 -1
  359. package/dist/types/reader/mutations/use-site-notify-me-of-new-posts-mutation.d.ts +3 -2
  360. package/dist/types/reader/mutations/use-site-notify-me-of-new-posts-mutation.d.ts.map +1 -1
  361. package/dist/types/reader/mutations/use-site-subscribe-mutation.d.ts +3 -2
  362. package/dist/types/reader/mutations/use-site-subscribe-mutation.d.ts.map +1 -1
  363. package/dist/types/reader/mutations/use-site-unsubscribe-mutation.d.ts +3 -2
  364. package/dist/types/reader/mutations/use-site-unsubscribe-mutation.d.ts.map +1 -1
  365. package/dist/types/reader/queries/index.d.ts +1 -5
  366. package/dist/types/reader/queries/index.d.ts.map +1 -1
  367. package/dist/types/reader/queries/use-site-subscriptions-query.d.ts +6 -225
  368. package/dist/types/reader/queries/use-site-subscriptions-query.d.ts.map +1 -1
  369. package/dist/types/reader/types/index.d.ts +32 -44
  370. package/dist/types/reader/types/index.d.ts.map +1 -1
  371. package/dist/types/shared-types.d.ts +11 -0
  372. package/dist/types/shared-types.d.ts.map +1 -1
  373. package/dist/types/site/actions.d.ts +1 -1
  374. package/dist/types/site/actions.d.ts.map +1 -1
  375. package/dist/types/site/queries/use-site-user-query.d.ts.map +1 -1
  376. package/dist/types/site/selectors.d.ts.map +1 -1
  377. package/dist/types/site/types.d.ts +4 -1
  378. package/dist/types/site/types.d.ts.map +1 -1
  379. package/dist/types/starter-designs-queries/types.d.ts +1 -1
  380. package/dist/types/starter-designs-queries/types.d.ts.map +1 -1
  381. package/dist/types/starter-designs-queries/use-starter-design-by-slug.d.ts +1 -1
  382. package/dist/types/starter-designs-queries/use-starter-design-by-slug.d.ts.map +1 -1
  383. package/dist/types/starter-designs-queries/use-starter-designs-query.d.ts +1 -1
  384. package/dist/types/starter-designs-queries/use-starter-designs-query.d.ts.map +1 -1
  385. package/dist/types/subscriber/index.d.ts +1 -1
  386. package/dist/types/subscriber/index.d.ts.map +1 -1
  387. package/dist/types/utils.d.ts +3 -0
  388. package/dist/types/utils.d.ts.map +1 -0
  389. package/dist/types/wpcom-plans-ui/actions.d.ts +1 -1
  390. package/dist/types/wpcom-plans-ui/index.d.ts +1 -1
  391. package/dist/types/wpcom-plans-ui/index.d.ts.map +1 -1
  392. package/dist/types/wpcom-request-controls/index.d.ts +1 -1
  393. package/dist/types/wpcom-request-controls/index.d.ts.map +1 -1
  394. package/dist/types/wpcom-request.d.ts +7 -0
  395. package/dist/types/wpcom-request.d.ts.map +1 -0
  396. package/package.json +23 -22
  397. package/src/add-ons/types.ts +1 -0
  398. package/src/agents-manager/actions.ts +151 -0
  399. package/src/agents-manager/constants.ts +1 -0
  400. package/src/agents-manager/index.ts +38 -0
  401. package/src/agents-manager/persist-state.ts +60 -0
  402. package/src/agents-manager/reducer.ts +106 -0
  403. package/src/agents-manager/resolvers.ts +87 -0
  404. package/src/agents-manager/selectors.ts +32 -0
  405. package/src/agents-manager/test/persist-state.test.ts +81 -0
  406. package/src/agents-manager/test/reducer.test.ts +69 -0
  407. package/src/agents-manager/types.ts +24 -0
  408. package/src/contextual-help/admin-sections.ts +1 -1
  409. package/src/help-center/actions.ts +101 -76
  410. package/src/help-center/constants.ts +1 -0
  411. package/src/help-center/index.ts +11 -32
  412. package/src/help-center/reducer.ts +29 -5
  413. package/src/help-center/resolvers.ts +46 -38
  414. package/src/help-center/selectors.ts +3 -0
  415. package/src/help-center/test/utils.ts +99 -0
  416. package/src/help-center/types.ts +22 -13
  417. package/src/help-center/utils.ts +156 -0
  418. package/src/index.ts +11 -1
  419. package/src/mutations/use-domains-bulk-actions-mutation.ts +1 -1
  420. package/src/newsletter-categories/index.ts +1 -1
  421. package/src/newsletter-categories/test/index.tsx +5 -2
  422. package/src/onboard/actions.ts +7 -2
  423. package/src/onboard/reducer.ts +12 -2
  424. package/src/onboard/selectors.ts +1 -0
  425. package/src/plans/constants.ts +2 -0
  426. package/src/plans/hooks/test/use-pricing-meta-for-grid-plans.ts +120 -0
  427. package/src/plans/hooks/use-pricing-meta-for-grid-plans.ts +48 -18
  428. package/src/plans/index.ts +1 -0
  429. package/src/plans/queries/use-plans.ts +1 -1
  430. package/src/plans/queries/use-site-plans.ts +1 -1
  431. package/src/plans/resolvers.ts +0 -1
  432. package/src/plans/selectors.ts +9 -9
  433. package/src/plans/types.ts +6 -0
  434. package/src/products-list/queries/use-products.ts +1 -1
  435. package/src/products-list/resolvers.ts +1 -1
  436. package/src/products-list/selectors.ts +1 -1
  437. package/src/products-list/test/selectors.ts +2 -2
  438. package/src/purchases/lib/assembler.ts +10 -4
  439. package/src/purchases/queries/use-get-jetpack-transferred-license-purchases.tsx +1 -1
  440. package/src/purchases/queries/use-site-purchases.ts +2 -2
  441. package/src/purchases/types.ts +43 -0
  442. package/src/queries/use-all-domains-query.ts +3 -3
  443. package/src/queries/use-bulk-domain-update-status-query.ts +14 -115
  444. package/src/queries/use-happiness-engineers-query.ts +1 -1
  445. package/src/queries/use-launchpad.ts +1 -1
  446. package/src/queries/use-site-domains-query.ts +1 -1
  447. package/src/queries/use-site-intent.ts +1 -1
  448. package/src/queries/use-site-query.ts +1 -1
  449. package/src/reader/contexts/index.ts +0 -4
  450. package/src/reader/helpers/index.ts +3 -2
  451. package/src/reader/helpers/optimistic-update.ts +2 -1
  452. package/src/reader/index.ts +2 -4
  453. package/src/reader/mutations/test/use-site-subscription-mutations.test.tsx +208 -0
  454. package/src/reader/mutations/use-pending-site-confirm-mutation.ts +2 -2
  455. package/src/reader/mutations/use-site-delivery-frequency-mutation.ts +32 -36
  456. package/src/reader/mutations/use-site-email-me-new-comments-mutation.ts +10 -10
  457. package/src/reader/mutations/use-site-email-me-new-posts-mutation.ts +10 -10
  458. package/src/reader/mutations/use-site-notify-me-of-new-posts-mutation.ts +10 -10
  459. package/src/reader/mutations/use-site-subscribe-mutation.ts +21 -10
  460. package/src/reader/mutations/use-site-unsubscribe-mutation.ts +20 -10
  461. package/src/reader/queries/index.ts +4 -6
  462. package/src/reader/queries/test/use-site-subscriptions-query.tsx +158 -52
  463. package/src/reader/queries/use-site-subscriptions-query.ts +53 -55
  464. package/src/reader/types/index.ts +34 -48
  465. package/src/shared-types.ts +13 -0
  466. package/src/site/actions.ts +1 -1
  467. package/src/site/queries/use-site-features.ts +1 -1
  468. package/src/site/queries/use-site-media-storage.ts +1 -1
  469. package/src/site/queries/use-site-user-query.ts +1 -1
  470. package/src/site/queries/use-site.ts +1 -1
  471. package/src/site/resolvers.ts +1 -1
  472. package/src/site/selectors.ts +18 -10
  473. package/src/site/test/selectors.ts +3 -3
  474. package/src/site/types.ts +4 -1
  475. package/src/site-reset/test/use-site-reset-mutation.tsx +3 -4
  476. package/src/site-reset/use-site-reset-content-summary-query.ts +1 -1
  477. package/src/site-reset/use-site-reset-mutation.ts +1 -1
  478. package/src/site-reset/use-site-reset-status-query.ts +1 -1
  479. package/src/starter-designs-queries/types.ts +1 -1
  480. package/src/starter-designs-queries/use-starter-design-by-slug.ts +2 -2
  481. package/src/starter-designs-queries/use-starter-designs-query.ts +2 -2
  482. package/src/subscriber/actions.ts +1 -1
  483. package/src/templates/use-template.ts +1 -1
  484. package/src/users/use-send-invites.ts +1 -1
  485. package/src/utils.ts +33 -0
  486. package/src/wpcom-request-controls/index.ts +2 -1
  487. package/src/wpcom-request.ts +26 -0
  488. package/dist/cjs/reader/contexts/unsubscribed-feeds-search.js +0 -26
  489. package/dist/cjs/reader/contexts/unsubscribed-feeds-search.js.map +0 -1
  490. package/dist/cjs/reader/queries/use-read-feed-query.js +0 -21
  491. package/dist/cjs/reader/queries/use-read-feed-query.js.map +0 -1
  492. package/dist/cjs/reader/queries/use-read-feed-search-query.js +0 -39
  493. package/dist/cjs/reader/queries/use-read-feed-search-query.js.map +0 -1
  494. package/dist/cjs/reader/queries/use-read-feed-site-query.js +0 -26
  495. package/dist/cjs/reader/queries/use-read-feed-site-query.js.map +0 -1
  496. package/dist/esm/reader/contexts/unsubscribed-feeds-search.js +0 -20
  497. package/dist/esm/reader/contexts/unsubscribed-feeds-search.js.map +0 -1
  498. package/dist/esm/reader/queries/use-read-feed-query.js +0 -18
  499. package/dist/esm/reader/queries/use-read-feed-query.js.map +0 -1
  500. package/dist/esm/reader/queries/use-read-feed-search-query.js +0 -35
  501. package/dist/esm/reader/queries/use-read-feed-search-query.js.map +0 -1
  502. package/dist/esm/reader/queries/use-read-feed-site-query.js +0 -23
  503. package/dist/esm/reader/queries/use-read-feed-site-query.js.map +0 -1
  504. package/dist/types/reader/contexts/unsubscribed-feeds-search.d.ts +0 -12
  505. package/dist/types/reader/contexts/unsubscribed-feeds-search.d.ts.map +0 -1
  506. package/dist/types/reader/queries/use-read-feed-query.d.ts +0 -28
  507. package/dist/types/reader/queries/use-read-feed-query.d.ts.map +0 -1
  508. package/dist/types/reader/queries/use-read-feed-search-query.d.ts +0 -34
  509. package/dist/types/reader/queries/use-read-feed-search-query.d.ts.map +0 -1
  510. package/dist/types/reader/queries/use-read-feed-site-query.d.ts +0 -15
  511. package/dist/types/reader/queries/use-read-feed-site-query.d.ts.map +0 -1
  512. package/src/reader/contexts/unsubscribed-feeds-search.tsx +0 -35
  513. package/src/reader/queries/test/use-read-feed-search-query.tsx +0 -55
  514. package/src/reader/queries/use-read-feed-query.ts +0 -45
  515. package/src/reader/queries/use-read-feed-search-query.ts +0 -72
  516. package/src/reader/queries/use-read-feed-site-query.ts +0 -35
@@ -1,45 +1,53 @@
1
- import { apiFetch } from '@wordpress/data-controls';
2
- import { canAccessWpcomApis } from 'wpcom-proxy-request';
3
- import { wpcomRequest } from '../wpcom-request-controls';
4
- import { setHelpCenterRouterHistory, setIsMinimized } from './actions';
5
- import type { APIFetchOptions } from './types';
6
- import type { Location } from 'history';
1
+ import { HelpCenterThunkProps } from './types';
2
+ import { getPersistedPreference } from './utils';
7
3
 
8
- type Preferences = {
9
- calypso_preferences: {
10
- help_center_open: boolean;
11
- help_center_minimized: boolean;
12
- help_center_router_history: {
13
- entries: Location[];
14
- index: number;
15
- };
16
- };
17
- };
18
-
19
- export function* isHelpCenterShown() {
20
- try {
21
- const { calypso_preferences: preferences }: Preferences = canAccessWpcomApis()
22
- ? yield wpcomRequest( {
23
- path: '/me/preferences',
24
- apiNamespace: 'wpcom/v2',
25
- } )
26
- : yield apiFetch( {
27
- global: true,
28
- path: '/help-center/open-state',
29
- } as APIFetchOptions );
4
+ export function isHelpCenterShown() {
5
+ return async ( { dispatch }: HelpCenterThunkProps ) => {
6
+ try {
7
+ const helpCenterOpen = await getPersistedPreference( 'help_center_open' );
30
8
 
31
- if ( preferences.help_center_router_history ) {
32
- yield setHelpCenterRouterHistory( preferences.help_center_router_history );
9
+ // We only want to auto-open, we don't want to auto-close (and potentially overrule the user's action).
10
+ if ( helpCenterOpen ) {
11
+ dispatch( {
12
+ type: 'HELP_CENTER_SET_SHOW',
13
+ show: true,
14
+ } as const );
15
+ }
16
+ } catch {
17
+ dispatch( {
18
+ type: 'HELP_CENTER_SET_SHOW',
19
+ show: false,
20
+ } as const );
33
21
  }
22
+ };
23
+ }
34
24
 
35
- yield setIsMinimized( preferences.help_center_minimized );
25
+ export function getHelpCenterRouterHistory() {
26
+ return async ( { dispatch, select }: HelpCenterThunkProps ) => {
27
+ const route = select.getNavigateToRoute()?.route;
36
28
 
37
- // We only want to auto-open, we don't want to auto-close (and potentially overrule the user's action).
38
- if ( preferences.help_center_open ) {
39
- return {
40
- type: 'HELP_CENTER_SET_SHOW',
41
- show: true,
42
- } as const;
29
+ // Don't use the history from the preferences if route is defined to avoid a race condition between restoring
30
+ // persisted data and setting the support doc data. Persisted values could overwrite freshly fetched data.
31
+ if ( typeof route === 'undefined' ) {
32
+ const routerHistory = await getPersistedPreference( 'help_center_router_history' );
33
+
34
+ // We only want to auto-open, we don't want to auto-close (and potentially overrule the user's action).
35
+ if ( routerHistory ) {
36
+ dispatch( {
37
+ type: 'HELP_CENTER_SET_HELP_CENTER_ROUTER_HISTORY',
38
+ history: routerHistory,
39
+ } as const );
40
+ }
43
41
  }
44
- } catch {}
42
+ };
43
+ }
44
+
45
+ export function getIsMinimized() {
46
+ return async ( { dispatch }: HelpCenterThunkProps ) => {
47
+ const minimized = await getPersistedPreference( 'help_center_minimized' );
48
+ dispatch( {
49
+ type: 'HELP_CENTER_SET_MINIMIZED',
50
+ minimized: minimized ?? false,
51
+ } as const );
52
+ };
45
53
  }
@@ -11,6 +11,7 @@ export const getUnreadCount = ( state: State ) => state.unreadCount;
11
11
  export const getZendeskConnectionStatus = ( state: State ) => state.zendeskConnectionStatus;
12
12
  export const getIsMinimized = ( state: State ) => state.isMinimized;
13
13
  export const getIsChatLoaded = ( state: State ) => state.isChatLoaded;
14
+ export const getLoggedOutOdieChat = ( state: State ) => state.loggedOutOdieChat;
14
15
  export const getAreSoundNotificationsEnabled = ( state: State ) =>
15
16
  state.areSoundNotificationsEnabled;
16
17
  export const getZendeskClientId = ( state: State ) => state.zendeskClientId;
@@ -23,3 +24,5 @@ export const getHelpCenterOptions = ( state: State ) => state.helpCenterOptions;
23
24
  export const getContextTerm = ( state: State ) => state.contextTerm;
24
25
  export const getSupportTypingStatus = ( state: State, conversationId: string ) =>
25
26
  state.typingConversationStatus?.[ conversationId ];
27
+ export const getCurrentUser = ( state: State ) => state.currentUser;
28
+ export const getIsLoggedIn = ( state: State ) => !! state.currentUser?.ID;
@@ -0,0 +1,99 @@
1
+ /**
2
+ * @jest-environment jsdom
3
+ */
4
+
5
+ import { PREFERENCES_KEY } from '../constants';
6
+
7
+ jest.mock( '@wordpress/data', () => ( {
8
+ select: jest.fn(),
9
+ } ) );
10
+
11
+ jest.mock( '../../wpcom-request', () => ( {
12
+ __esModule: true,
13
+ default: jest.fn(),
14
+ canAccessWpcomApis: jest.fn(),
15
+ } ) );
16
+
17
+ describe( 'help-center utils — localStorage persistence (logged out)', () => {
18
+ let utils: typeof import('../utils');
19
+
20
+ beforeEach( async () => {
21
+ jest.resetModules();
22
+ window.localStorage.clear();
23
+ utils = await import( '../utils' );
24
+ } );
25
+
26
+ it( 'persists and reads under the unscoped key when no appId is set', () => {
27
+ utils.persistValueSafely( 'help_center_open', true );
28
+
29
+ expect( window.localStorage.getItem( PREFERENCES_KEY + 'help_center_open' ) ).toBe( 'true' );
30
+ expect( utils.retrieveValueSafely( 'help_center_open' ) ).toBe( true );
31
+ } );
32
+
33
+ it( 'persists under the app-scoped key when an appId is set', () => {
34
+ utils.setHelpCenterAppId( 'a4a' );
35
+ utils.persistValueSafely( 'help_center_open', true );
36
+
37
+ expect( window.localStorage.getItem( PREFERENCES_KEY + 'help_center_open_a4a' ) ).toBe(
38
+ 'true'
39
+ );
40
+ // The shared, unscoped field is left untouched.
41
+ expect( window.localStorage.getItem( PREFERENCES_KEY + 'help_center_open' ) ).toBeNull();
42
+ } );
43
+
44
+ it( 'falls back to the shared (unscoped) value when the scoped one is absent', () => {
45
+ // Value written by another, unscoped context.
46
+ window.localStorage.setItem( PREFERENCES_KEY + 'help_center_open', 'true' );
47
+ utils.setHelpCenterAppId( 'a4a' );
48
+
49
+ expect( utils.retrieveValueSafely( 'help_center_open' ) ).toBe( true );
50
+ } );
51
+
52
+ it( 'prefers the scoped value over the shared one once it exists', () => {
53
+ window.localStorage.setItem( PREFERENCES_KEY + 'help_center_open', 'false' );
54
+ window.localStorage.setItem( PREFERENCES_KEY + 'help_center_open_a4a', 'true' );
55
+ utils.setHelpCenterAppId( 'a4a' );
56
+
57
+ expect( utils.retrieveValueSafely( 'help_center_open' ) ).toBe( true );
58
+ } );
59
+ } );
60
+
61
+ describe( 'getPersistedPreference — server preferences (logged in)', () => {
62
+ async function setup(
63
+ preferences: Record< string, unknown >
64
+ ): Promise< typeof import('../utils') > {
65
+ jest.resetModules();
66
+
67
+ const { select } = await import( '@wordpress/data' );
68
+ ( select as jest.Mock ).mockReturnValue( { getIsLoggedIn: () => true } );
69
+
70
+ const wpcomRequest = await import( '../../wpcom-request' );
71
+ ( wpcomRequest.canAccessWpcomApis as jest.Mock ).mockReturnValue( true );
72
+ ( wpcomRequest.default as jest.Mock ).mockResolvedValue( {
73
+ calypso_preferences: preferences,
74
+ } );
75
+
76
+ return import( '../utils' );
77
+ }
78
+
79
+ it( 'returns the scoped value when present', async () => {
80
+ const utils = await setup( { help_center_open: false, help_center_open_a4a: true } );
81
+ utils.setHelpCenterAppId( 'a4a' );
82
+
83
+ await expect( utils.getPersistedPreference( 'help_center_open' ) ).resolves.toBe( true );
84
+ } );
85
+
86
+ it( 'falls back to the unscoped value when the scoped one is absent', async () => {
87
+ const utils = await setup( { help_center_open: true } );
88
+ utils.setHelpCenterAppId( 'a4a' );
89
+
90
+ await expect( utils.getPersistedPreference( 'help_center_open' ) ).resolves.toBe( true );
91
+ } );
92
+
93
+ it( 'reads the unscoped value when no appId is set', async () => {
94
+ const utils = await setup( { help_center_open: true, help_center_open_a4a: false } );
95
+ utils.setHelpCenterAppId( undefined );
96
+
97
+ await expect( utils.getPersistedPreference( 'help_center_open' ) ).resolves.toBe( true );
98
+ } );
99
+ } );
@@ -1,14 +1,8 @@
1
1
  import * as actions from './actions';
2
2
  import * as selectors from './selectors';
3
3
  import type { DispatchFromMap, SelectFromMap } from '../mapped-types';
4
-
5
- export type Location = {
6
- pathname: string;
7
- search?: string;
8
- hash?: string;
9
- state?: unknown;
10
- key?: string;
11
- };
4
+ import type { HelpCenterAction } from './actions';
5
+ import type { Location } from 'history';
12
6
  export interface HelpCenterShowOptions {
13
7
  hasPremiumSupport: boolean;
14
8
  hideBackButton: boolean;
@@ -45,13 +39,28 @@ export interface Dispatch {
45
39
  dispatch: DispatchFromMap< typeof actions >;
46
40
  }
47
41
 
48
- export interface APIFetchOptions {
49
- global: boolean;
50
- path: string;
51
- }
42
+ export type HelpCenterSelect = SelectFromMap< typeof selectors > & {
43
+ isResolving: ( key: string ) => boolean;
44
+ };
52
45
 
53
- export type HelpCenterSelect = SelectFromMap< typeof selectors >;
46
+ export type HelpCenterThunkDispatch = ( action: HelpCenterAction ) => void;
47
+
48
+ export type HelpCenterThunkProps = {
49
+ dispatch: HelpCenterThunkDispatch;
50
+ select: HelpCenterSelect;
51
+ };
54
52
 
55
53
  export interface HelpCenterOptions {
56
54
  hideBackButton?: boolean;
57
55
  }
56
+
57
+ export interface Preferences {
58
+ calypso_preferences: {
59
+ help_center_open: boolean | undefined;
60
+ help_center_minimized: boolean;
61
+ help_center_router_history: {
62
+ entries: Location[];
63
+ index: number;
64
+ } | null;
65
+ };
66
+ }
@@ -0,0 +1,156 @@
1
+ import { default as apiFetchPromise } from '@wordpress/api-fetch';
2
+ import { select } from '@wordpress/data';
3
+ import { isE2ETest } from '../utils';
4
+ import { default as wpcomRequestPromise, canAccessWpcomApis } from '../wpcom-request';
5
+ import { PREFERENCES_KEY, STORE_KEY } from './constants';
6
+ import type { HelpCenterSelect, Preferences } from './types';
7
+ import type { APIFetchOptions } from '../shared-types';
8
+
9
+ const memoryStore: Preferences[ 'calypso_preferences' ] = {
10
+ help_center_open: undefined,
11
+ help_center_minimized: false,
12
+ help_center_router_history: null,
13
+ };
14
+
15
+ let helpCenterAppId: string | undefined;
16
+
17
+ export function setHelpCenterAppId( appId: string | undefined ): void {
18
+ helpCenterAppId = appId;
19
+ }
20
+
21
+ function scopedKey( key: string ): string {
22
+ return helpCenterAppId ? `${ key }_${ helpCenterAppId }` : key;
23
+ }
24
+
25
+ /**
26
+ * Reads the app-scoped preference, falling back to the shared (unscoped) one.
27
+ */
28
+ function readScoped< T extends keyof Preferences[ 'calypso_preferences' ] >(
29
+ preferences: Preferences[ 'calypso_preferences' ],
30
+ key: T
31
+ ): Preferences[ 'calypso_preferences' ][ T ] | undefined {
32
+ // The scoped key is dynamic, so the cast is confined here to keep callers typed.
33
+ const scoped = (
34
+ preferences as unknown as Record< string, Preferences[ 'calypso_preferences' ][ T ] >
35
+ )[ scopedKey( key ) ];
36
+ return scoped ?? preferences[ key ];
37
+ }
38
+
39
+ export function deleteValuesSafely(): void {
40
+ try {
41
+ window.localStorage.removeItem( PREFERENCES_KEY + scopedKey( 'help_center_open' ) );
42
+ window.localStorage.removeItem( PREFERENCES_KEY + scopedKey( 'help_center_minimized' ) );
43
+ window.localStorage.removeItem( PREFERENCES_KEY + scopedKey( 'help_center_router_history' ) );
44
+ } catch ( error ) {
45
+ memoryStore.help_center_open = undefined;
46
+ memoryStore.help_center_minimized = false;
47
+ memoryStore.help_center_router_history = null;
48
+ }
49
+ }
50
+
51
+ export function persistValueSafely< T extends keyof Preferences[ 'calypso_preferences' ] >(
52
+ key: T,
53
+ value: Preferences[ 'calypso_preferences' ][ T ]
54
+ ): void {
55
+ try {
56
+ window.localStorage.setItem( PREFERENCES_KEY + scopedKey( key ), JSON.stringify( value ) );
57
+ } catch ( error ) {
58
+ memoryStore[ key ] = value;
59
+ }
60
+ }
61
+
62
+ export function retrieveValueSafely< T extends keyof Preferences[ 'calypso_preferences' ] >(
63
+ key: T
64
+ ): Preferences[ 'calypso_preferences' ][ T ] | undefined {
65
+ try {
66
+ // Prefer this app's scoped value, falling back to the shared (unscoped)
67
+ // one when it hasn't stored its own yet.
68
+ const value =
69
+ window.localStorage.getItem( PREFERENCES_KEY + scopedKey( key ) ) ??
70
+ window.localStorage.getItem( PREFERENCES_KEY + key );
71
+ return value ? JSON.parse( value ) : undefined;
72
+ } catch ( error ) {
73
+ return memoryStore[ key ];
74
+ }
75
+ }
76
+
77
+ /**
78
+ * Cached promise to avoid multiple requests to the same endpoint. We only need preferences on boot.
79
+ */
80
+ let cachedPreferencesPromise: Promise< Preferences[ 'calypso_preferences' ] > | undefined;
81
+
82
+ function getCalypsoPreferences(): Promise< Preferences[ 'calypso_preferences' ] > {
83
+ // Caching the promise instead of the result allows parallel requests to queue and wait for one result.
84
+ if ( cachedPreferencesPromise ) {
85
+ return cachedPreferencesPromise;
86
+ } else if ( canAccessWpcomApis() ) {
87
+ cachedPreferencesPromise = wpcomRequestPromise< Preferences >( {
88
+ path: '/me/preferences',
89
+ apiNamespace: 'wpcom/v2',
90
+ } ).then( ( preferences ) => preferences.calypso_preferences );
91
+ } else {
92
+ cachedPreferencesPromise = apiFetchPromise< Preferences[ 'calypso_preferences' ] >( {
93
+ global: true,
94
+ path: '/help-center/open-state',
95
+ } as APIFetchOptions );
96
+ }
97
+
98
+ return cachedPreferencesPromise;
99
+ }
100
+
101
+ export async function getPersistedPreference<
102
+ T extends keyof Preferences[ 'calypso_preferences' ],
103
+ >( key: T ): Promise< Preferences[ 'calypso_preferences' ][ T ] | undefined > {
104
+ const isLoggedIn = ( select( STORE_KEY ) as unknown as HelpCenterSelect ).getIsLoggedIn();
105
+
106
+ if ( isLoggedIn ) {
107
+ const preferences = await getCalypsoPreferences();
108
+ return readScoped( preferences, key );
109
+ }
110
+
111
+ return retrieveValueSafely( key );
112
+ }
113
+
114
+ /**
115
+ * Save the open state of the help center to the remote user preferences or localStorage based on logged in status.
116
+ * @param preference - The field to save.
117
+ * @param value - The value to save.
118
+ */
119
+ export function persistPreference< T extends keyof Preferences[ 'calypso_preferences' ] >(
120
+ preference: T,
121
+ value: Preferences[ 'calypso_preferences' ][ T ]
122
+ ) {
123
+ if ( isE2ETest() ) {
124
+ return;
125
+ }
126
+
127
+ const newPreferences = { [ scopedKey( preference ) ]: value };
128
+
129
+ const isLoggedIn = ( select( STORE_KEY ) as unknown as HelpCenterSelect ).getIsLoggedIn();
130
+
131
+ if ( ! isLoggedIn ) {
132
+ // Retrieve the logged out help center preferences from localStorage to coalesce the state.
133
+ persistValueSafely( preference, value );
134
+ } else if ( isLoggedIn ) {
135
+ // Delete local preferences when logged in to avoid conflicts.
136
+ deleteValuesSafely();
137
+
138
+ if ( canAccessWpcomApis() ) {
139
+ // Use the promise version to do that action without waiting for the result.
140
+ wpcomRequestPromise( {
141
+ path: '/me/preferences',
142
+ apiNamespace: 'wpcom/v2',
143
+ method: 'PUT',
144
+ body: { calypso_preferences: newPreferences },
145
+ } ).catch( () => {} );
146
+ } else {
147
+ // Use the promise version to do that action without waiting for the result.
148
+ apiFetchPromise( {
149
+ global: true,
150
+ path: '/help-center/open-state',
151
+ method: 'PUT',
152
+ data: newPreferences,
153
+ } as APIFetchOptions ).catch( () => {} );
154
+ }
155
+ }
156
+ }
package/src/index.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import * as AddOns from './add-ons';
2
+ import * as AgentsManager from './agents-manager';
2
3
  import * as HelpCenter from './help-center';
3
4
  import * as Onboard from './onboard';
4
5
  import * as Plans from './plans';
@@ -35,6 +36,7 @@ const { SubscriptionManager } = Reader;
35
36
 
36
37
  export {
37
38
  AddOns,
39
+ AgentsManager,
38
40
  User,
39
41
  HelpCenter,
40
42
  Site,
@@ -63,9 +65,17 @@ export type {
63
65
  HelpCenterSelect,
64
66
  Dispatch as HelpCenterDispatch,
65
67
  } from './help-center/types';
68
+ export type {
69
+ AgentsManagerSelect,
70
+ AgentsManagerSite,
71
+ Dispatch as AgentsManagerDispatch,
72
+ PerSiteRouterHistory,
73
+ SingleRouterHistory,
74
+ } from './agents-manager/types';
66
75
  export type { OnboardSelect, OnboardActions } from './onboard';
67
76
  export type { StepperInternalSelect } from './stepper-internal';
68
77
  export type { SiteActions } from './site';
69
78
  export type { UserActions } from './user';
70
79
  export type { Member, UseQuery, UsersQuery } from './users/types';
71
- export { isInSupportSession } from './help-center';
80
+ export { isE2ETest, isInSupportSession } from './utils';
81
+ export { setRequester } from './wpcom-request';
@@ -1,9 +1,9 @@
1
1
  import { UseMutationOptions, useMutation, useQueryClient } from '@tanstack/react-query';
2
2
  import { useCallback } from 'react';
3
- import wpcomRequest from 'wpcom-proxy-request';
4
3
  import { getAllDomainsQueryKey } from '../queries/use-all-domains-query';
5
4
  import { getBulkDomainUpdateStatusQueryKey } from '../queries/use-bulk-domain-update-status-query';
6
5
  import { getSiteDomainsQueryKey } from '../queries/use-site-domains-query';
6
+ import wpcomRequest from '../wpcom-request';
7
7
 
8
8
  interface UpdateContactInfoVariables {
9
9
  type: 'update-contact-info';
@@ -1,5 +1,5 @@
1
1
  import { useQuery, UseQueryResult } from '@tanstack/react-query';
2
- import request from 'wpcom-proxy-request';
2
+ import request from '../wpcom-request';
3
3
 
4
4
  export type NewsletterCategory = {
5
5
  id: number;
@@ -4,10 +4,13 @@
4
4
  import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
5
5
  import { renderHook, waitFor } from '@testing-library/react';
6
6
  import React from 'react';
7
- import request from 'wpcom-proxy-request';
7
+ import request from '../../wpcom-request';
8
8
  import { useNewsletterCategories } from '../index';
9
9
 
10
- jest.mock( 'wpcom-proxy-request', () => jest.fn() );
10
+ jest.mock( '../../wpcom-request', () => ( {
11
+ __esModule: true,
12
+ default: jest.fn(),
13
+ } ) );
11
14
 
12
15
  describe( 'useNewsletterCategories', () => {
13
16
  let queryClient: QueryClient;
@@ -8,8 +8,7 @@ import { ProfilerData, ReadymadeTemplate } from './types';
8
8
  import type { DomainTransferData, State } from '.';
9
9
  import type { FeatureId } from '../shared-types';
10
10
  import type { DomainSuggestion } from '@automattic/api-core';
11
- // somewhat hacky, but resolves the circular dependency issue
12
- import type { Design, StyleVariation } from '@automattic/design-picker/src/types';
11
+ import type { Design, StyleVariation } from '@automattic/design-types';
13
12
  import type { MinimalRequestCartProduct } from '@automattic/shopping-cart';
14
13
 
15
14
  // copied from design picker to avoid a circular dependency
@@ -373,6 +372,11 @@ export const setGardenPartnerName = ( gardenPartnerName: string | null ) => ( {
373
372
  gardenPartnerName,
374
373
  } );
375
374
 
375
+ export const setBlueprint = ( blueprint: string | null ) => ( {
376
+ type: 'SET_BLUEPRINT' as const,
377
+ blueprint,
378
+ } );
379
+
376
380
  export type OnboardAction = ReturnType<
377
381
  | typeof addFeature
378
382
  | typeof removeFeature
@@ -434,4 +438,5 @@ export type OnboardAction = ReturnType<
434
438
  | typeof setSignupDomainOrigin
435
439
  | typeof setGardenName
436
440
  | typeof setGardenPartnerName
441
+ | typeof setBlueprint
437
442
  >;
@@ -11,8 +11,7 @@ import type {
11
11
  import type { FeatureId } from '../shared-types';
12
12
  import type { GlobalStyles } from '../site';
13
13
  import type { DomainSuggestion } from '@automattic/api-core';
14
- // somewhat hacky, but resolves the circular dependency issue
15
- import type { Design, StyleVariation } from '@automattic/design-picker/src/types';
14
+ import type { Design, StyleVariation } from '@automattic/design-types';
16
15
  import type { MinimalRequestCartProduct } from '@automattic/shopping-cart';
17
16
  import type { Reducer } from 'redux';
18
17
 
@@ -635,6 +634,16 @@ export const gardenPartnerName: Reducer< string | null, OnboardAction > = (
635
634
  return state;
636
635
  };
637
636
 
637
+ export const blueprint: Reducer< string | null, OnboardAction > = ( state = null, action ) => {
638
+ if ( action.type === 'SET_BLUEPRINT' ) {
639
+ return action.blueprint;
640
+ }
641
+ if ( action.type === 'RESET_ONBOARD_STORE' ) {
642
+ return null;
643
+ }
644
+ return state;
645
+ };
646
+
638
647
  const reducer = combineReducers( {
639
648
  domain,
640
649
  domainCartItem,
@@ -685,6 +694,7 @@ const reducer = combineReducers( {
685
694
  signupDomainOrigin,
686
695
  gardenName,
687
696
  gardenPartnerName,
697
+ blueprint,
688
698
  } );
689
699
 
690
700
  export type State = ReturnType< typeof reducer >;
@@ -83,3 +83,4 @@ export const getPaidSubscribers = ( state: State ) => state.paidSubscribers;
83
83
  export const getPartnerBundle = ( state: State ) => state.partnerBundle;
84
84
  export const getGardenName = ( state: State ) => state.gardenName;
85
85
  export const getGardenPartnerName = ( state: State ) => state.gardenPartnerName;
86
+ export const getBlueprint = ( state: State ) => state.blueprint;
@@ -37,6 +37,7 @@ export const PLAN_BUSINESS_MONTHLY = 'business-bundle-monthly';
37
37
  export const PLAN_ECOMMERCE_MONTHLY = 'ecommerce-bundle-monthly';
38
38
  export const PLAN_ECOMMERCE_TRIAL_MONTHLY = 'ecommerce-trial-bundle-monthly';
39
39
  export const PLAN_MIGRATION_TRIAL_MONTHLY = 'wp_bundle_migration_trial_monthly';
40
+ export const PLAN_PERSONAL_TRIAL_MONTHLY = 'wp-personal-bundle-free-trial-monthly';
40
41
 
41
42
  export const annualSlugs = [ PLAN_PERSONAL, PLAN_PREMIUM, PLAN_BUSINESS, PLAN_ECOMMERCE ] as const;
42
43
 
@@ -47,6 +48,7 @@ export const monthlySlugs = [
47
48
  PLAN_ECOMMERCE_MONTHLY,
48
49
  PLAN_ECOMMERCE_TRIAL_MONTHLY,
49
50
  PLAN_MIGRATION_TRIAL_MONTHLY,
51
+ PLAN_PERSONAL_TRIAL_MONTHLY,
50
52
  ] as const;
51
53
 
52
54
  export const plansProductSlugs = [ PLAN_FREE, ...annualSlugs, ...monthlySlugs ] as const;