@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
@@ -0,0 +1,81 @@
1
+ import apiFetch from '@wordpress/api-fetch';
2
+ import wpcomRequest, { canAccessWpcomApis } from '../../wpcom-request';
3
+ import { persistAgentsManagerState } from '../persist-state';
4
+
5
+ jest.mock( '@wordpress/api-fetch', () => ( {
6
+ __esModule: true,
7
+ default: jest.fn(),
8
+ } ) );
9
+
10
+ jest.mock( '../../wpcom-request', () => ( {
11
+ __esModule: true,
12
+ default: jest.fn(),
13
+ canAccessWpcomApis: jest.fn(),
14
+ } ) );
15
+
16
+ const mockRequest = wpcomRequest as unknown as jest.Mock;
17
+ const mockApiFetch = apiFetch as unknown as jest.Mock;
18
+ const mockCanAccess = canAccessWpcomApis as unknown as jest.Mock;
19
+
20
+ // Let the queued flush chain (microtasks) run to completion.
21
+ const tick = () => new Promise( ( resolve ) => setTimeout( resolve, 0 ) );
22
+
23
+ describe( 'persistAgentsManagerState', () => {
24
+ beforeEach( () => {
25
+ jest.clearAllMocks();
26
+ mockCanAccess.mockReturnValue( true );
27
+ mockRequest.mockResolvedValue( undefined );
28
+ mockApiFetch.mockResolvedValue( undefined );
29
+ } );
30
+
31
+ it( 'sends a single save as one wpcom request', async () => {
32
+ persistAgentsManagerState( { agents_manager_minimized: false } );
33
+
34
+ expect( mockRequest ).toHaveBeenCalledTimes( 1 );
35
+ expect( mockRequest ).toHaveBeenCalledWith(
36
+ expect.objectContaining( { body: { state: { agents_manager_minimized: false } } } )
37
+ );
38
+ await tick();
39
+ } );
40
+
41
+ it( 'coalesces saves that arrive mid-flight into one merged follow-up request', async () => {
42
+ let finishFirst: () => void = () => {};
43
+ mockRequest.mockReturnValueOnce(
44
+ new Promise< void >( ( resolve ) => ( finishFirst = resolve ) )
45
+ );
46
+
47
+ // First save goes out immediately and stays in flight.
48
+ persistAgentsManagerState( { agents_manager_router_history: 'a' } );
49
+ // These arrive while it's in flight — they must not race; they merge.
50
+ persistAgentsManagerState( { agents_manager_minimized: false } );
51
+ persistAgentsManagerState( { agents_manager_router_history: 'b' } );
52
+
53
+ expect( mockRequest ).toHaveBeenCalledTimes( 1 );
54
+
55
+ finishFirst();
56
+ await tick();
57
+
58
+ // One follow-up carrying the merged state (last value wins per key).
59
+ expect( mockRequest ).toHaveBeenCalledTimes( 2 );
60
+ expect( mockRequest ).toHaveBeenLastCalledWith(
61
+ expect.objectContaining( {
62
+ body: { state: { agents_manager_minimized: false, agents_manager_router_history: 'b' } },
63
+ } )
64
+ );
65
+ } );
66
+
67
+ it( 'falls back to apiFetch when wpcom APIs are unavailable', async () => {
68
+ mockCanAccess.mockReturnValue( false );
69
+
70
+ persistAgentsManagerState( { agents_manager_open: true } );
71
+
72
+ expect( mockRequest ).not.toHaveBeenCalled();
73
+ expect( mockApiFetch ).toHaveBeenCalledWith(
74
+ expect.objectContaining( {
75
+ path: '/agents-manager/open-state',
76
+ data: { agents_manager_open: true },
77
+ } )
78
+ );
79
+ await tick();
80
+ } );
81
+ } );
@@ -0,0 +1,69 @@
1
+ import { isMinimized, isSplitScreen } from '../reducer';
2
+ import { getIsMinimized, getIsSplitScreen } from '../selectors';
3
+ import type { State } from '../reducer';
4
+
5
+ const setSplit = ( isSplit: boolean ) =>
6
+ ( { type: 'AGENTS_MANAGER_SET_SPLIT_SCREEN', isSplitScreen: isSplit } ) as const;
7
+
8
+ const setMinimized = ( minimized: boolean ) =>
9
+ ( { type: 'AGENTS_MANAGER_SET_MINIMIZED', isMinimized: minimized } ) as const;
10
+
11
+ describe( 'isSplitScreen reducer slice', () => {
12
+ it( 'defaults to false', () => {
13
+ expect( isSplitScreen( undefined, { type: '@@INIT' } as never ) ).toBe( false );
14
+ } );
15
+
16
+ it( 'returns the action value on `AGENTS_MANAGER_SET_SPLIT_SCREEN`', () => {
17
+ expect( isSplitScreen( false, setSplit( true ) ) ).toBe( true );
18
+ expect( isSplitScreen( true, setSplit( false ) ) ).toBe( false );
19
+ } );
20
+
21
+ it( 'leaves state untouched on unrelated actions', () => {
22
+ expect(
23
+ isSplitScreen( true, { type: 'AGENTS_MANAGER_SET_OPEN', isOpen: false } as never )
24
+ ).toBe( true );
25
+ } );
26
+
27
+ it( 'resets to false when the sidebar is undocked', () => {
28
+ const undock = { type: 'AGENTS_MANAGER_SET_DOCKED', isDocked: false } as never;
29
+ expect( isSplitScreen( true, undock ) ).toBe( false );
30
+ } );
31
+
32
+ it( 'preserves state when the sidebar is (re-)docked', () => {
33
+ const dock = { type: 'AGENTS_MANAGER_SET_DOCKED', isDocked: true } as never;
34
+ expect( isSplitScreen( true, dock ) ).toBe( true );
35
+ expect( isSplitScreen( false, dock ) ).toBe( false );
36
+ } );
37
+ } );
38
+
39
+ describe( 'getIsSplitScreen selector', () => {
40
+ it( 'returns the slice value', () => {
41
+ const state = { isSplitScreen: true } as State;
42
+ expect( getIsSplitScreen( state ) ).toBe( true );
43
+ expect( getIsSplitScreen( { isSplitScreen: false } as State ) ).toBe( false );
44
+ } );
45
+ } );
46
+
47
+ describe( 'isMinimized reducer slice', () => {
48
+ it( 'defaults to false', () => {
49
+ expect( isMinimized( undefined, { type: '@@INIT' } as never ) ).toBe( false );
50
+ } );
51
+
52
+ it( 'returns the action value on `AGENTS_MANAGER_SET_MINIMIZED`', () => {
53
+ expect( isMinimized( undefined, setMinimized( true ) ) ).toBe( true );
54
+ expect( isMinimized( true, setMinimized( false ) ) ).toBe( false );
55
+ } );
56
+
57
+ it( 'leaves state untouched on unrelated actions', () => {
58
+ expect( isMinimized( true, { type: 'AGENTS_MANAGER_SET_OPEN', isOpen: false } as never ) ).toBe(
59
+ true
60
+ );
61
+ } );
62
+ } );
63
+
64
+ describe( 'getIsMinimized selector', () => {
65
+ it( 'returns the slice value', () => {
66
+ expect( getIsMinimized( { isMinimized: true } as State ) ).toBe( true );
67
+ expect( getIsMinimized( { isMinimized: false } as State ) ).toBe( false );
68
+ } );
69
+ } );
@@ -0,0 +1,24 @@
1
+ import { Location } from 'history';
2
+ import * as actions from './actions';
3
+ import * as selectors from './selectors';
4
+ import type { DispatchFromMap, SelectFromMap } from '../mapped-types';
5
+
6
+ /**
7
+ * Minimal site data needed by AgentsManager.
8
+ */
9
+ export interface AgentsManagerSite {
10
+ ID: number | string;
11
+ domain: string;
12
+ }
13
+
14
+ export type Dispatch = DispatchFromMap< typeof actions >;
15
+ export type AgentsManagerSelect = SelectFromMap< typeof selectors >;
16
+
17
+ export type SingleRouterHistory = {
18
+ entries: Location[];
19
+ index: number;
20
+ };
21
+
22
+ export type PerSiteRouterHistory = Record< string, SingleRouterHistory >;
23
+
24
+ export type PerSiteLastActivity = Record< string, number >;
@@ -150,7 +150,7 @@ export function generateAdminSections(
150
150
  __(
151
151
  "By upgrading to the %s plan, you'll be able to monetize your site through the WordAds program."
152
152
  ),
153
- getPlan( PLAN_PREMIUM )?.getTitle()
153
+ String( getPlan( PLAN_PREMIUM )?.getTitle() ?? '' )
154
154
  ),
155
155
  link: `/earn/${ siteSlug }`,
156
156
  synonyms: [ 'monetize', 'wordads', 'premium', 'explorer' ],
@@ -1,71 +1,42 @@
1
- import { default as apiFetchPromise } from '@wordpress/api-fetch';
2
- import { select } from '@wordpress/data';
1
+ import { controls } from '@wordpress/data';
3
2
  import { addQueryArgs } from '@wordpress/url';
4
- import { default as wpcomRequestPromise, canAccessWpcomApis } from 'wpcom-proxy-request';
3
+ import { Location } from 'history';
5
4
  import { GeneratorReturnType } from '../mapped-types';
6
5
  import { SiteDetails } from '../site';
6
+ import { CurrentUser } from '../user/types';
7
7
  import { STORE_KEY } from './constants';
8
- import { isE2ETest } from '.';
9
- import type {
10
- APIFetchOptions,
11
- HelpCenterOptions,
12
- HelpCenterSelect,
13
- HelpCenterShowOptions,
14
- } from './types';
15
- import type { Location } from 'history';
16
-
17
- /**
18
- * Save the open state of the help center to the remote user preferences.
19
- * @param isShown - Whether the help center is shown.
20
- * @param isMinimized - Whether the help center is minimized.
21
- */
22
- export const saveOpenState = ( isShown: boolean | undefined, isMinimized: boolean | undefined ) => {
23
- const saveState: Record< string, boolean | null > = {};
24
-
25
- if ( typeof isShown === 'boolean' ) {
26
- saveState.help_center_open = isShown;
27
- if ( ! isShown ) {
28
- // Delete the remote version of the navigation history when closing the help center
29
- saveState.help_center_router_history = null;
30
- }
31
- }
32
-
33
- if ( typeof isMinimized === 'boolean' ) {
34
- saveState.help_center_minimized = isMinimized;
35
- }
36
-
37
- if ( canAccessWpcomApis() ) {
38
- // Use the promise version to do that action without waiting for the result.
39
- wpcomRequestPromise( {
40
- path: '/me/preferences',
41
- apiNamespace: 'wpcom/v2',
42
- method: 'PUT',
43
- body: { calypso_preferences: saveState },
44
- } ).catch( () => {} );
45
- } else {
46
- // Use the promise version to do that action without waiting for the result.
47
- apiFetchPromise( {
48
- global: true,
49
- path: '/help-center/open-state',
50
- method: 'PUT',
51
- data: saveState,
52
- } as APIFetchOptions ).catch( () => {} );
8
+ import { persistPreference } from './utils';
9
+ import type { HelpCenterOptions, HelpCenterShowOptions } from './types';
10
+
11
+ declare global {
12
+ interface Window {
13
+ _sva?: {
14
+ closeSurvey?: () => void;
15
+ };
53
16
  }
54
- };
17
+ }
55
18
 
56
19
  export function setHelpCenterRouterHistory(
57
- history: { entries: Location[]; index: number } | undefined
20
+ history: { entries: Location[]; index: number } | null
58
21
  ) {
22
+ persistPreference( 'help_center_router_history', history );
59
23
  return {
60
24
  type: 'HELP_CENTER_SET_HELP_CENTER_ROUTER_HISTORY',
61
25
  history,
62
26
  } as const;
63
27
  }
64
28
 
65
- export const setNavigateToRoute = ( route?: string ) =>
29
+ /**
30
+ * Set the navigate to route action.
31
+ * @param route - The route to navigate to.
32
+ * @param coalesceParams - Whether to coalesce the parameters with the existing parameters.
33
+ * @returns The action object.
34
+ */
35
+ export const setNavigateToRoute = ( route?: string, coalesceParams = false ) =>
66
36
  ( {
67
37
  type: 'HELP_CENTER_SET_NAVIGATE_TO_ROUTE',
68
38
  route,
39
+ coalesceParams,
69
40
  } ) as const;
70
41
 
71
42
  export const setUnreadCount = ( count: number ) =>
@@ -86,14 +57,22 @@ export const setOdieBotNameSlug = ( odieBotNameSlug: string ) =>
86
57
  odieBotNameSlug,
87
58
  } ) as const;
88
59
 
89
- export const setIsMinimized = function* ( minimized: boolean ) {
90
- yield saveOpenState( undefined, minimized );
60
+ export const setIsMinimized = function ( minimized: boolean ) {
61
+ persistPreference( 'help_center_minimized', minimized );
91
62
  return {
92
63
  type: 'HELP_CENTER_SET_MINIMIZED',
93
64
  minimized,
94
65
  } as const;
95
66
  };
96
67
 
68
+ export const setLoggedOutOdieChat = (
69
+ session: { odieId: number; sessionId: string; botSlug: string } | undefined
70
+ ) =>
71
+ ( {
72
+ type: 'HELP_CENTER_SET_LOGGED_OUT_ODIE_CHAT',
73
+ session,
74
+ } ) as const;
75
+
97
76
  export const setIsChatLoaded = ( isChatLoaded: boolean ) =>
98
77
  ( {
99
78
  type: 'HELP_CENTER_SET_IS_CHAT_LOADED',
@@ -162,6 +141,26 @@ export const setHelpCenterOptions = ( options: HelpCenterOptions ) => ( {
162
141
  options,
163
142
  } );
164
143
 
144
+ /**
145
+ * Set the current user in the help center store.
146
+ * This value is needed because the store makes decisions based on the logged in status.
147
+ * @param user - The current user to set.
148
+ * @returns The action object.
149
+ */
150
+ export const setCurrentUser = ( user: CurrentUser | undefined ) =>
151
+ ( {
152
+ type: 'HELP_CENTER_SET_CURRENT_USER',
153
+ user,
154
+ } ) as const;
155
+
156
+ export const showHelpCenter = function ( show: boolean ) {
157
+ persistPreference( 'help_center_open', show );
158
+ return {
159
+ type: 'HELP_CENTER_SET_SHOW',
160
+ show,
161
+ } as const;
162
+ };
163
+
165
164
  export const setShowHelpCenter = function* (
166
165
  show: boolean,
167
166
  options: HelpCenterShowOptions = {
@@ -175,34 +174,28 @@ export const setShowHelpCenter = function* (
175
174
  * `forceClose` listens to the show value always. Which the (x) button sets to true.
176
175
  */
177
176
  forceClose = false
178
- ): Generator< unknown, { type: 'HELP_CENTER_SET_SHOW'; show: boolean }, unknown > {
179
- let isMinimized = ( select( STORE_KEY ) as HelpCenterSelect ).getIsMinimized();
177
+ ) {
178
+ const isMinimized: boolean = yield controls.resolveSelect( STORE_KEY, 'getIsMinimized' );
180
179
 
181
180
  // Opening or closing the Help Center should reset the minimized state.
182
181
  if ( ! show && ! forceClose && isMinimized ) {
183
182
  yield setIsMinimized( false );
184
- isMinimized = false;
185
-
186
- return {
187
- type: 'HELP_CENTER_SET_SHOW',
188
- show: true,
189
- } as const;
190
- }
191
-
192
- if ( ! isE2ETest() ) {
193
- saveOpenState( show, isMinimized );
183
+ return showHelpCenter( true );
194
184
  }
195
185
 
196
186
  if ( ! show ) {
197
187
  yield setNavigateToRoute( undefined );
198
188
  // Reset the local navigation history when closing the help center.
199
- yield setHelpCenterRouterHistory( undefined );
200
- } else {
201
- yield setShowMessagingWidget( false );
189
+ yield setHelpCenterRouterHistory( null );
190
+ return showHelpCenter( false );
202
191
  }
203
192
 
193
+ yield setShowMessagingWidget( false );
204
194
  yield setContextTerm( options?.contextTerm || '' );
205
- yield setIsMinimized( false );
195
+
196
+ if ( isMinimized ) {
197
+ yield setIsMinimized( false );
198
+ }
206
199
 
207
200
  if ( options?.hasPremiumSupport ) {
208
201
  yield setHasPremiumSupport( true );
@@ -212,10 +205,14 @@ export const setShowHelpCenter = function* (
212
205
  yield setHelpCenterOptions( options );
213
206
  }
214
207
 
215
- return {
216
- type: 'HELP_CENTER_SET_SHOW',
217
- show,
218
- } as const;
208
+ // Close any Survicate survey that may already be visible.
209
+ // This covers the case where Survicate loads before the Help Center store
210
+ // is registered, so invokeSurvicateEvent's store-based guard can't catch it.
211
+ if ( typeof window !== 'undefined' ) {
212
+ window._sva?.closeSurvey?.();
213
+ }
214
+
215
+ return showHelpCenter( true );
219
216
  };
220
217
 
221
218
  export const setSubject = ( subject: string ) =>
@@ -271,6 +268,31 @@ export const setNavigateToOdie = function* () {
271
268
  yield setShowHelpCenter( true );
272
269
  };
273
270
 
271
+ /**
272
+ * Open the Help Center on the Odie (AI) assistant with optional context.
273
+ * Does not add provider=zendesk, so the user stays in the AI chat instead of human support.
274
+ */
275
+ export const setOpenOdieWithContext = function* ( {
276
+ initialMessage,
277
+ section,
278
+ siteUrl,
279
+ siteId,
280
+ }: {
281
+ initialMessage: string;
282
+ section?: string;
283
+ siteUrl?: string;
284
+ siteId?: string | number;
285
+ } ) {
286
+ const url = addQueryArgs( '/odie', {
287
+ userFieldMessage: initialMessage,
288
+ section,
289
+ siteUrl,
290
+ siteId: siteId != null ? String( siteId ) : undefined,
291
+ } );
292
+ yield setNavigateToRoute( url );
293
+ yield setShowHelpCenter( true );
294
+ };
295
+
274
296
  export const setShowSupportDoc = function* ( link: string, postId?: number, blogId?: number ) {
275
297
  const params = new URLSearchParams( {
276
298
  link,
@@ -290,21 +312,24 @@ export type HelpCenterAction =
290
312
  | typeof setSubject
291
313
  | typeof resetStore
292
314
  | typeof setMessage
315
+ | typeof setLoggedOutOdieChat
293
316
  | typeof setContextTerm
294
317
  | typeof setUserDeclaredSite
295
318
  | typeof setUserDeclaredSiteUrl
296
319
  | typeof setUnreadCount
297
- | typeof setHelpCenterRouterHistory
298
320
  | typeof setIsChatLoaded
299
321
  | typeof setAreSoundNotificationsEnabled
300
322
  | typeof setZendeskClientId
323
+ | typeof setLoggedOutOdieChat
301
324
  | typeof setSupportTypingStatus
302
325
  | typeof setZendeskConnectionStatus
303
326
  | typeof setNavigateToRoute
304
327
  | typeof setOdieInitialPromptText
328
+ | typeof setHelpCenterRouterHistory
329
+ | typeof setIsMinimized
305
330
  | typeof setOdieBotNameSlug
306
331
  | typeof setHasPremiumSupport
307
332
  | typeof setHelpCenterOptions
333
+ | typeof setCurrentUser
308
334
  >
309
- | GeneratorReturnType< typeof setShowHelpCenter >
310
- | GeneratorReturnType< typeof setIsMinimized >;
335
+ | GeneratorReturnType< typeof setShowHelpCenter >;
@@ -1 +1,2 @@
1
1
  export const STORE_KEY = 'automattic/help-center';
2
+ export const PREFERENCES_KEY = 'logged_out_help_center_preferences_';
@@ -1,45 +1,17 @@
1
1
  import { registerStore } from '@wordpress/data';
2
2
  import { controls } from '@wordpress/data-controls';
3
3
  import { registerPlugins } from '../plugins';
4
+ import { isE2ETest, isInSupportSession } from '../utils';
4
5
  import { controls as wpcomRequestControls } from '../wpcom-request-controls';
5
6
  import * as actions from './actions';
6
7
  import { STORE_KEY } from './constants';
7
8
  import reducer, { State } from './reducer';
8
- import { isHelpCenterShown } from './resolvers';
9
+ import * as resolvers from './resolvers';
9
10
  import * as selectors from './selectors';
10
11
  export type { State };
11
12
 
12
- declare const helpCenterData: { isProxied: boolean; isSU: boolean; isSSP: boolean } | undefined;
13
- declare const isSupportSession: boolean;
14
- declare const isSSP: boolean;
15
-
16
13
  let isRegistered = false;
17
14
 
18
- // All end-to-end tests use a custom user agent containing this string.
19
- const E2E_USER_AGENT = 'wp-e2e-tests';
20
-
21
- export const isE2ETest = () =>
22
- typeof window !== 'undefined' && window.navigator.userAgent.includes( E2E_USER_AGENT );
23
-
24
- export const isInSupportSession = () => {
25
- if ( typeof window !== 'undefined' ) {
26
- return (
27
- // A bit hacky but much easier than passing down data from PHP in Jetpack
28
- // Simple
29
- !! document.querySelector( '#wp-admin-bar-support-session-details' ) ||
30
- !! document.querySelector( '#a8c-support-session-overlay' ) ||
31
- // Atomic
32
- document.body.classList.contains( 'support-session' ) ||
33
- document.querySelector( '#wpcom > .is-support-session' ) ||
34
- ( typeof isSupportSession !== 'undefined' && !! isSupportSession ) ||
35
- ( typeof helpCenterData !== 'undefined' && helpCenterData?.isSU ) ||
36
- ( typeof helpCenterData !== 'undefined' && helpCenterData?.isSSP ) ||
37
- ( typeof isSSP !== 'undefined' && !! isSSP )
38
- );
39
- }
40
- return false;
41
- };
42
-
43
15
  export function register(): typeof STORE_KEY {
44
16
  const enabledPersistedOpenState = ! isE2ETest() && ! isInSupportSession();
45
17
 
@@ -51,9 +23,15 @@ export function register(): typeof STORE_KEY {
51
23
  reducer,
52
24
  controls: { ...controls, ...wpcomRequestControls },
53
25
  selectors,
54
- persist: [ 'message', 'userDeclaredSite', 'userDeclaredSiteUrl', 'subject' ],
26
+ persist: [
27
+ 'message',
28
+ 'userDeclaredSite',
29
+ 'userDeclaredSiteUrl',
30
+ 'subject',
31
+ 'loggedOutOdieChat',
32
+ ],
55
33
  // Don't persist the open state for e2e users, because parallel tests will start interfering with each other.
56
- resolvers: enabledPersistedOpenState ? { isHelpCenterShown } : undefined,
34
+ resolvers: enabledPersistedOpenState ? resolvers : undefined,
57
35
  } );
58
36
  isRegistered = true;
59
37
  }
@@ -61,4 +39,5 @@ export function register(): typeof STORE_KEY {
61
39
  return STORE_KEY;
62
40
  }
63
41
 
42
+ export { setHelpCenterAppId } from './utils';
64
43
  export type { HelpCenterSite } from './types';
@@ -1,8 +1,9 @@
1
1
  import { combineReducers } from '@wordpress/data';
2
+ import { Location } from 'history';
2
3
  import { SiteDetails } from '../site';
4
+ import { CurrentUser } from '../user/types';
3
5
  import type { HelpCenterAction } from './actions';
4
6
  import type { HelpCenterOptions } from './types';
5
- import type { Location } from 'history';
6
7
  import type { Reducer } from 'redux';
7
8
 
8
9
  const showHelpCenter: Reducer< boolean | undefined, HelpCenterAction > = ( state, action ) => {
@@ -47,9 +48,9 @@ const showMessagingLauncher: Reducer< boolean | undefined, HelpCenterAction > =
47
48
  };
48
49
 
49
50
  const helpCenterRouterHistory: Reducer<
50
- { entries: Location[]; index: number } | undefined,
51
+ { entries: Location[]; index: number } | null,
51
52
  HelpCenterAction
52
- > = ( state, action ) => {
53
+ > = ( state = null, action ) => {
53
54
  switch ( action.type ) {
54
55
  case 'HELP_CENTER_SET_HELP_CENTER_ROUTER_HISTORY':
55
56
  return action.history;
@@ -57,6 +58,17 @@ const helpCenterRouterHistory: Reducer<
57
58
  return state;
58
59
  };
59
60
 
61
+ const loggedOutOdieChat: Reducer<
62
+ { odieId: number; sessionId: string; botSlug: string } | undefined,
63
+ HelpCenterAction
64
+ > = ( state = undefined, action ) => {
65
+ switch ( action.type ) {
66
+ case 'HELP_CENTER_SET_LOGGED_OUT_ODIE_CHAT':
67
+ return action.session;
68
+ }
69
+ return state;
70
+ };
71
+
60
72
  const showMessagingWidget: Reducer< boolean | undefined, HelpCenterAction > = ( state, action ) => {
61
73
  switch ( action.type ) {
62
74
  case 'HELP_CENTER_SET_SHOW_MESSAGING_WIDGET':
@@ -148,9 +160,12 @@ const userDeclaredSite: Reducer< SiteDetails | undefined, HelpCenterAction > = (
148
160
  return state;
149
161
  };
150
162
 
151
- const navigateToRoute: Reducer< string | undefined, HelpCenterAction > = ( state, action ) => {
163
+ const navigateToRoute: Reducer<
164
+ { route: string | undefined; coalesceParams: boolean } | undefined,
165
+ HelpCenterAction
166
+ > = ( state, action ) => {
152
167
  if ( action.type === 'HELP_CENTER_SET_NAVIGATE_TO_ROUTE' ) {
153
- return action.route;
168
+ return { route: action.route, coalesceParams: action.coalesceParams };
154
169
  }
155
170
  return state;
156
171
  };
@@ -197,6 +212,13 @@ const helpCenterOptions: Reducer< HelpCenterOptions, HelpCenterAction > = (
197
212
  return state;
198
213
  };
199
214
 
215
+ const currentUser: Reducer< CurrentUser | undefined, HelpCenterAction > = ( state, action ) => {
216
+ if ( action.type === 'HELP_CENTER_SET_CURRENT_USER' ) {
217
+ return action.user;
218
+ }
219
+ return state;
220
+ };
221
+
200
222
  const reducer = combineReducers( {
201
223
  showHelpCenter,
202
224
  showMessagingLauncher,
@@ -216,9 +238,11 @@ const reducer = combineReducers( {
216
238
  odieInitialPromptText,
217
239
  odieBotNameSlug,
218
240
  helpCenterRouterHistory,
241
+ loggedOutOdieChat,
219
242
  hasPremiumSupport,
220
243
  contextTerm,
221
244
  helpCenterOptions,
245
+ currentUser,
222
246
  } );
223
247
 
224
248
  export type State = ReturnType< typeof reducer >;