newspack-components 4.3.0 → 4.4.0-epic-editor-refactor.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 (262) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/DEVELOPMENT.md +868 -0
  3. package/copy-styles.js +3 -2
  4. package/dist/cjs/accordion/index.js +17 -12
  5. package/dist/cjs/action-card/index.js +176 -139
  6. package/dist/cjs/autocomplete-tokenfield/index.js +254 -234
  7. package/dist/cjs/autocomplete-with-latest-posts/index.js +172 -110
  8. package/dist/cjs/autocomplete-with-suggestions/index.js +229 -126
  9. package/dist/cjs/badge/index.js +7 -7
  10. package/dist/cjs/box-contrast/index.js +19 -15
  11. package/dist/cjs/button/index.js +41 -26
  12. package/dist/cjs/button-props/button-props.js +5 -5
  13. package/dist/cjs/button-props/index.js +2 -2
  14. package/dist/cjs/card/core-card.js +110 -52
  15. package/dist/cjs/card/index.js +74 -67
  16. package/dist/cjs/card/style-core.scss +93 -25
  17. package/dist/cjs/card/style.scss +2 -2
  18. package/dist/cjs/card-feature/index.js +141 -0
  19. package/dist/cjs/card-feature/style.scss +75 -0
  20. package/dist/cjs/card-form/index.js +144 -0
  21. package/dist/cjs/card-form/style.scss +20 -0
  22. package/dist/cjs/card-settings-group/index.js +36 -16
  23. package/dist/cjs/card-sortable-list/index.js +176 -140
  24. package/dist/cjs/category-autocomplete/index.js +175 -155
  25. package/dist/cjs/color-picker/index.js +41 -23
  26. package/dist/cjs/color-picker/index.test.js +82 -0
  27. package/dist/cjs/color-picker/style.scss +11 -13
  28. package/dist/cjs/confirm-dialog/index.js +86 -22
  29. package/dist/cjs/consts.js +1 -1
  30. package/dist/cjs/custom-select-control/index.js +39 -28
  31. package/dist/cjs/dataviews/index.js +38 -0
  32. package/dist/cjs/dataviews/style.scss +9 -0
  33. package/dist/cjs/divider/index.js +26 -21
  34. package/dist/cjs/footer/index.js +36 -30
  35. package/dist/cjs/form-token-field/index.js +51 -40
  36. package/dist/cjs/global-notices/index.js +5 -5
  37. package/dist/cjs/grid/index.js +25 -19
  38. package/dist/cjs/grid/style.scss +6 -1
  39. package/dist/cjs/handoff/index.js +204 -156
  40. package/dist/cjs/handoff-message/index.js +12 -7
  41. package/dist/cjs/hooks/index.js +10 -8
  42. package/dist/cjs/hooks/use-confirm-dialog.js +79 -0
  43. package/dist/cjs/hooks/use-unsaved-changes-dialog.js +144 -0
  44. package/dist/cjs/hooks/useObjectState.js +21 -12
  45. package/dist/cjs/hooks/useObjectState.test.js +55 -33
  46. package/dist/cjs/hooks/useOnClickOutside.js +6 -6
  47. package/dist/cjs/hooks/usePrompt.js +10 -13
  48. package/dist/cjs/image-upload/index.js +114 -123
  49. package/dist/cjs/image-upload/index.test.js +11 -13
  50. package/dist/cjs/image-upload/style.scss +12 -40
  51. package/dist/cjs/index.js +136 -104
  52. package/dist/cjs/info-button/index.js +43 -32
  53. package/dist/cjs/integration-icons/active-campaign.js +22 -0
  54. package/dist/cjs/integration-icons/constant-contact.js +28 -0
  55. package/dist/cjs/integration-icons/fundraise-up.js +25 -0
  56. package/dist/cjs/integration-icons/index.js +48 -0
  57. package/dist/cjs/integration-icons/mailchimp.js +19 -0
  58. package/dist/cjs/integration-icons/salesforce.js +17 -0
  59. package/dist/cjs/integration-icons/wisepops.js +20 -0
  60. package/dist/cjs/modal/index.js +22 -19
  61. package/dist/cjs/modal/style.scss +4 -0
  62. package/dist/cjs/newspack-icon/index.js +45 -38
  63. package/dist/cjs/notice/index.js +64 -55
  64. package/dist/cjs/plugin-installer/index.js +259 -253
  65. package/dist/cjs/plugin-settings/SettingsSection.js +66 -60
  66. package/dist/cjs/plugin-settings/index.js +217 -200
  67. package/dist/cjs/plugin-toggle/index.js +192 -199
  68. package/dist/cjs/popover/index.js +41 -28
  69. package/dist/cjs/position-control/index.js +24 -23
  70. package/dist/cjs/progress-bar/index.js +71 -59
  71. package/dist/cjs/progress-bar/index.test.js +62 -68
  72. package/dist/cjs/proxied-imports/router.js +3 -3
  73. package/dist/cjs/radio-control/index.js +40 -27
  74. package/dist/cjs/section-header/index.js +103 -58
  75. package/dist/cjs/section-header/style.scss +31 -11
  76. package/dist/cjs/select-control/ButtonGroupControl.js +26 -21
  77. package/dist/cjs/select-control/GroupedSelectControl.js +41 -35
  78. package/dist/cjs/select-control/index.js +52 -40
  79. package/dist/cjs/settings/MinMaxSetting.js +30 -20
  80. package/dist/cjs/settings/SettingsCard.js +20 -17
  81. package/dist/cjs/settings/SettingsSection.js +22 -21
  82. package/dist/cjs/settings/index.js +5 -5
  83. package/dist/cjs/sortable-newsletter-list-control/index.js +78 -57
  84. package/dist/cjs/steps-list/index.js +44 -34
  85. package/dist/cjs/steps-list-item/index.js +47 -39
  86. package/dist/cjs/style-card/index.js +70 -63
  87. package/dist/cjs/tabbed-navigation/index.js +38 -36
  88. package/dist/cjs/text-control/index.js +27 -25
  89. package/dist/cjs/utils/color.js +4 -4
  90. package/dist/cjs/utils/editor-toolbar-back-button.js +61 -0
  91. package/dist/cjs/utils/index.js +31 -19
  92. package/dist/cjs/utils/style.scss +8 -0
  93. package/dist/cjs/waiting/index.js +48 -37
  94. package/dist/cjs/web-preview/index.js +217 -211
  95. package/dist/cjs/with-wizard/index.js +362 -364
  96. package/dist/cjs/with-wizard/style.scss +4 -54
  97. package/dist/cjs/with-wizard-screen/index.js +54 -58
  98. package/dist/cjs/with-wizard-screen/style.scss +41 -3
  99. package/dist/cjs/wizard/components/WizardError.js +20 -18
  100. package/dist/cjs/wizard/components/WizardSnackbar.js +26 -23
  101. package/dist/cjs/wizard/index.js +176 -114
  102. package/dist/cjs/wizard/store/index.js +171 -123
  103. package/dist/cjs/wizard/store/utils.js +13 -8
  104. package/dist/esm/accordion/index.js +14 -9
  105. package/dist/esm/action-card/index.js +168 -123
  106. package/dist/esm/autocomplete-tokenfield/index.js +248 -222
  107. package/dist/esm/autocomplete-with-latest-posts/index.js +169 -103
  108. package/dist/esm/autocomplete-with-suggestions/index.js +226 -119
  109. package/dist/esm/badge/index.js +5 -5
  110. package/dist/esm/box-contrast/index.js +15 -11
  111. package/dist/esm/button/index.js +39 -21
  112. package/dist/esm/button-props/button-props.js +1 -1
  113. package/dist/esm/card/core-card.js +109 -47
  114. package/dist/esm/card/index.js +69 -54
  115. package/dist/esm/card/style-core.scss +93 -25
  116. package/dist/esm/card/style.scss +2 -2
  117. package/dist/esm/card-feature/index.js +131 -0
  118. package/dist/esm/card-feature/style.scss +75 -0
  119. package/dist/esm/card-form/index.js +134 -0
  120. package/dist/esm/card-form/style.scss +20 -0
  121. package/dist/esm/card-settings-group/index.js +33 -14
  122. package/dist/esm/card-sortable-list/index.js +170 -126
  123. package/dist/esm/category-autocomplete/index.js +168 -140
  124. package/dist/esm/color-picker/index.js +39 -21
  125. package/dist/esm/color-picker/index.test.js +78 -0
  126. package/dist/esm/color-picker/style.scss +11 -13
  127. package/dist/esm/confirm-dialog/index.js +85 -18
  128. package/dist/esm/consts.js +1 -1
  129. package/dist/esm/custom-select-control/index.js +34 -15
  130. package/dist/esm/dataviews/index.js +34 -0
  131. package/dist/esm/dataviews/style.scss +9 -0
  132. package/dist/esm/divider/index.js +24 -16
  133. package/dist/esm/footer/index.js +34 -28
  134. package/dist/esm/form-token-field/index.js +46 -27
  135. package/dist/esm/global-notices/index.js +3 -3
  136. package/dist/esm/grid/index.js +23 -14
  137. package/dist/esm/grid/style.scss +6 -1
  138. package/dist/esm/handoff/index.js +199 -143
  139. package/dist/esm/handoff-message/index.js +10 -6
  140. package/dist/esm/hooks/index.js +8 -6
  141. package/dist/esm/hooks/use-confirm-dialog.js +73 -0
  142. package/dist/esm/hooks/use-unsaved-changes-dialog.js +136 -0
  143. package/dist/esm/hooks/useObjectState.js +19 -9
  144. package/dist/esm/hooks/useObjectState.test.js +54 -32
  145. package/dist/esm/hooks/useOnClickOutside.js +4 -4
  146. package/dist/esm/hooks/usePrompt.js +9 -11
  147. package/dist/esm/image-upload/index.js +110 -111
  148. package/dist/esm/image-upload/index.test.js +11 -13
  149. package/dist/esm/image-upload/style.scss +12 -40
  150. package/dist/esm/index.js +7 -1
  151. package/dist/esm/info-button/index.js +38 -19
  152. package/dist/esm/integration-icons/active-campaign.js +16 -0
  153. package/dist/esm/integration-icons/constant-contact.js +22 -0
  154. package/dist/esm/integration-icons/fundraise-up.js +19 -0
  155. package/dist/esm/integration-icons/index.js +6 -0
  156. package/dist/esm/integration-icons/mailchimp.js +13 -0
  157. package/dist/esm/integration-icons/salesforce.js +11 -0
  158. package/dist/esm/integration-icons/wisepops.js +14 -0
  159. package/dist/esm/modal/index.js +20 -13
  160. package/dist/esm/modal/style.scss +4 -0
  161. package/dist/esm/newspack-icon/index.js +40 -25
  162. package/dist/esm/notice/index.js +59 -42
  163. package/dist/esm/plugin-installer/index.js +255 -243
  164. package/dist/esm/plugin-settings/SettingsSection.js +61 -50
  165. package/dist/esm/plugin-settings/index.js +212 -189
  166. package/dist/esm/plugin-toggle/index.js +187 -190
  167. package/dist/esm/popover/index.js +35 -16
  168. package/dist/esm/position-control/index.js +22 -18
  169. package/dist/esm/progress-bar/index.js +66 -49
  170. package/dist/esm/progress-bar/index.test.js +61 -67
  171. package/dist/esm/radio-control/index.js +34 -15
  172. package/dist/esm/section-header/index.js +102 -57
  173. package/dist/esm/section-header/style.scss +31 -11
  174. package/dist/esm/select-control/ButtonGroupControl.js +23 -18
  175. package/dist/esm/select-control/GroupedSelectControl.js +38 -30
  176. package/dist/esm/select-control/index.js +47 -27
  177. package/dist/esm/settings/MinMaxSetting.js +27 -16
  178. package/dist/esm/settings/SettingsCard.js +18 -13
  179. package/dist/esm/settings/SettingsSection.js +20 -19
  180. package/dist/esm/settings/index.js +3 -3
  181. package/dist/esm/sortable-newsletter-list-control/index.js +74 -53
  182. package/dist/esm/steps-list/index.js +39 -21
  183. package/dist/esm/steps-list-item/index.js +42 -26
  184. package/dist/esm/style-card/index.js +65 -50
  185. package/dist/esm/tabbed-navigation/index.js +35 -33
  186. package/dist/esm/text-control/index.js +25 -19
  187. package/dist/esm/utils/color.js +4 -4
  188. package/dist/esm/utils/editor-toolbar-back-button.js +53 -0
  189. package/dist/esm/utils/index.js +29 -16
  190. package/dist/esm/utils/style.scss +8 -0
  191. package/dist/esm/waiting/index.js +43 -24
  192. package/dist/esm/web-preview/index.js +213 -201
  193. package/dist/esm/with-wizard/index.js +360 -358
  194. package/dist/esm/with-wizard/style.scss +4 -54
  195. package/dist/esm/with-wizard-screen/index.js +48 -46
  196. package/dist/esm/with-wizard-screen/style.scss +41 -3
  197. package/dist/esm/wizard/components/WizardError.js +18 -16
  198. package/dist/esm/wizard/components/WizardSnackbar.js +23 -17
  199. package/dist/esm/wizard/index.js +171 -103
  200. package/dist/esm/wizard/store/index.js +169 -116
  201. package/dist/esm/wizard/store/utils.js +13 -6
  202. package/package.json +30 -16
  203. package/release.config.js +1 -0
  204. package/shared/hooks/use-coauthors.js +195 -27
  205. package/shared/hooks/use-coauthors.test.js +232 -6
  206. package/shared/scss/_mixins.scss +13 -5
  207. package/src/accordion/index.js +8 -7
  208. package/src/action-card/index.js +15 -1
  209. package/src/badge/index.tsx +3 -1
  210. package/src/card/core-card.js +95 -18
  211. package/src/card/index.js +1 -0
  212. package/src/card/style-core.scss +93 -25
  213. package/src/card/style.scss +2 -2
  214. package/src/card-feature/README.md +188 -0
  215. package/src/card-feature/index.tsx +186 -0
  216. package/src/card-feature/style.scss +75 -0
  217. package/src/card-form/README.md +113 -0
  218. package/src/card-form/index.tsx +128 -0
  219. package/src/card-form/style.scss +20 -0
  220. package/src/card-settings-group/index.tsx +28 -3
  221. package/src/card-sortable-list/index.tsx +27 -4
  222. package/src/color-picker/index.js +15 -8
  223. package/src/color-picker/index.test.js +52 -0
  224. package/src/color-picker/style.scss +11 -13
  225. package/src/confirm-dialog/README.md +128 -0
  226. package/src/confirm-dialog/index.tsx +74 -6
  227. package/src/dataviews/index.tsx +34 -0
  228. package/src/dataviews/style.scss +9 -0
  229. package/src/grid/style.scss +6 -1
  230. package/src/handoff/README.md +93 -0
  231. package/src/handoff/index.js +46 -8
  232. package/src/hooks/index.ts +2 -1
  233. package/src/hooks/use-confirm-dialog.tsx +80 -0
  234. package/src/hooks/use-unsaved-changes-dialog.tsx +140 -0
  235. package/src/image-upload/index.js +10 -15
  236. package/src/image-upload/style.scss +12 -40
  237. package/src/index.js +7 -1
  238. package/src/integration-icons/active-campaign.js +14 -0
  239. package/src/integration-icons/constant-contact.js +22 -0
  240. package/src/integration-icons/fundraise-up.js +18 -0
  241. package/src/integration-icons/index.js +6 -0
  242. package/src/integration-icons/mailchimp.js +10 -0
  243. package/src/integration-icons/salesforce.js +10 -0
  244. package/src/integration-icons/wisepops.js +14 -0
  245. package/src/modal/style.scss +4 -0
  246. package/src/plugin-installer/index.js +30 -19
  247. package/src/section-header/index.js +56 -24
  248. package/src/section-header/style.scss +31 -11
  249. package/src/select-control/index.js +4 -0
  250. package/src/utils/editor-toolbar-back-button.tsx +48 -0
  251. package/src/utils/index.js +6 -0
  252. package/src/utils/style.scss +8 -0
  253. package/src/with-wizard/style.scss +4 -54
  254. package/src/with-wizard-screen/style.scss +41 -3
  255. package/src/wizard/index.js +90 -53
  256. package/src/wizard/store/index.js +2 -2
  257. package/dist/cjs/button-card/index.js +0 -72
  258. package/dist/cjs/button-card/style.scss +0 -180
  259. package/dist/esm/button-card/index.js +0 -64
  260. package/dist/esm/button-card/style.scss +0 -180
  261. package/src/button-card/index.js +0 -52
  262. package/src/button-card/style.scss +0 -180
@@ -4,7 +4,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.default = void 0;
7
+ exports["default"] = void 0;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
8
12
  var _debounce = _interopRequireDefault(require("lodash/debounce"));
9
13
  var _apiFetch = _interopRequireDefault(require("@wordpress/api-fetch"));
10
14
  var _components = require("@wordpress/components");
@@ -14,43 +18,66 @@ var _i18n = require("@wordpress/i18n");
14
18
  var _url = require("@wordpress/url");
15
19
  require("./style.scss");
16
20
  var _jsxRuntime = require("react/jsx-runtime");
17
- /**
21
+ function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
22
+ function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
23
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
24
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /**
18
25
  * External dependencies
19
- */
20
-
21
- /**
26
+ */ /**
22
27
  * WordPress dependencies
23
28
  */
24
-
25
- const AutocompleteWithLatestPosts = ({
26
- fetchSuggestions = false,
27
- // If passed, will use this function to fetch suggestions data.
28
- help = (0, _i18n.__)('Begin typing search term, click autocomplete result to select.', 'newspack-plugin'),
29
- hideHelp = true,
30
- // If true, all help text will be hidden.
31
- hideFormTokenHelp = true,
32
- // If true, hides FormTokenField's built-in help text.
33
- label = (0, _i18n.__)('Search', 'newspack-plugin'),
34
- maxItemsToSuggest = 0,
35
- // If passed, will be used to determine "load more" state. Necessary if you want "load more" functionality when using a custom `fetchSuggestions` function.
36
- multiSelect = false,
37
- // If true, component can select multiple values at once.
38
- onChange = false,
39
- // Function to call when selections change.
40
- selectedItems = [],
41
- // Array of saved items.
42
- suggestionsToFetch = 20 // Number of suggestions to fetch per query.
43
- }) => {
44
- const [isLoading, setIsLoading] = (0, _element.useState)(true);
45
- const [isLoadingMore, setIsLoadingMore] = (0, _element.useState)(false);
46
- const [suggestions, setSuggestions] = (0, _element.useState)([]);
47
- const [maxSuggestions, setMaxSuggestions] = (0, _element.useState)(0);
48
- const [searchSuggestions, setSearchSuggestions] = (0, _element.useState)([]);
49
- const [validValues, setValidValues] = (0, _element.useState)({});
50
- const [isSearching, setIsSearching] = (0, _element.useState)(false);
29
+ var AutocompleteWithLatestPosts = function AutocompleteWithLatestPosts(_ref) {
30
+ var _ref$fetchSuggestions = _ref.fetchSuggestions,
31
+ fetchSuggestions = _ref$fetchSuggestions === void 0 ? false : _ref$fetchSuggestions,
32
+ _ref$help = _ref.help,
33
+ help = _ref$help === void 0 ? (0, _i18n.__)('Begin typing search term, click autocomplete result to select.', 'newspack-plugin') : _ref$help,
34
+ _ref$hideHelp = _ref.hideHelp,
35
+ hideHelp = _ref$hideHelp === void 0 ? true : _ref$hideHelp,
36
+ _ref$hideFormTokenHel = _ref.hideFormTokenHelp,
37
+ hideFormTokenHelp = _ref$hideFormTokenHel === void 0 ? true : _ref$hideFormTokenHel,
38
+ _ref$label = _ref.label,
39
+ label = _ref$label === void 0 ? (0, _i18n.__)('Search', 'newspack-plugin') : _ref$label,
40
+ _ref$maxItemsToSugges = _ref.maxItemsToSuggest,
41
+ maxItemsToSuggest = _ref$maxItemsToSugges === void 0 ? 0 : _ref$maxItemsToSugges,
42
+ _ref$multiSelect = _ref.multiSelect,
43
+ multiSelect = _ref$multiSelect === void 0 ? false : _ref$multiSelect,
44
+ _ref$onChange = _ref.onChange,
45
+ onChange = _ref$onChange === void 0 ? false : _ref$onChange,
46
+ _ref$selectedItems = _ref.selectedItems,
47
+ selectedItems = _ref$selectedItems === void 0 ? [] : _ref$selectedItems,
48
+ _ref$suggestionsToFet = _ref.suggestionsToFetch,
49
+ suggestionsToFetch = _ref$suggestionsToFet === void 0 ? 20 : _ref$suggestionsToFet;
50
+ var _useState = (0, _element.useState)(true),
51
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
52
+ isLoading = _useState2[0],
53
+ setIsLoading = _useState2[1];
54
+ var _useState3 = (0, _element.useState)(false),
55
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
56
+ isLoadingMore = _useState4[0],
57
+ setIsLoadingMore = _useState4[1];
58
+ var _useState5 = (0, _element.useState)([]),
59
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
60
+ suggestions = _useState6[0],
61
+ setSuggestions = _useState6[1];
62
+ var _useState7 = (0, _element.useState)(0),
63
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
64
+ maxSuggestions = _useState8[0],
65
+ setMaxSuggestions = _useState8[1];
66
+ var _useState9 = (0, _element.useState)([]),
67
+ _useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
68
+ searchSuggestions = _useState0[0],
69
+ setSearchSuggestions = _useState0[1];
70
+ var _useState1 = (0, _element.useState)({}),
71
+ _useState10 = (0, _slicedToArray2["default"])(_useState1, 2),
72
+ validValues = _useState10[0],
73
+ setValidValues = _useState10[1];
74
+ var _useState11 = (0, _element.useState)(false),
75
+ _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
76
+ isSearching = _useState12[0],
77
+ setIsSearching = _useState12[1];
51
78
  // Leaving this in here so we can expand to use different post types in the future; right now it defaults to 'post'.
52
- const postTypeToSearch = 'post';
53
- const classNames = ['newspack-autocomplete-with-latest-posts'];
79
+ var postTypeToSearch = 'post';
80
+ var classNames = ['newspack-autocomplete-with-latest-posts'];
54
81
  if (hideFormTokenHelp) {
55
82
  classNames.push('hide-form-token-help');
56
83
  }
@@ -61,116 +88,141 @@ const AutocompleteWithLatestPosts = ({
61
88
  /**
62
89
  * Debounced function to update search suggestions.
63
90
  */
64
- const debouncedUpdateSuggestions = (0, _debounce.default)(input => {
91
+ var debouncedUpdateSuggestions = (0, _debounce["default"])(function (input) {
65
92
  if (!input || input.length < 2) {
66
93
  setSearchSuggestions([]);
67
94
  setIsSearching(false);
68
95
  return;
69
96
  }
70
97
  setIsSearching(true);
71
- handleFetchSuggestions(input, 0, postTypeToSearch).then(_suggestions => {
98
+ handleFetchSuggestions(input, 0, postTypeToSearch).then(function (_suggestions) {
72
99
  setSearchSuggestions(_suggestions);
73
100
  // Update valid values for token conversion
74
- const newValidValues = {
75
- ...validValues
76
- };
77
- _suggestions.forEach(suggestion => {
101
+ var newValidValues = _objectSpread({}, validValues);
102
+ _suggestions.forEach(function (suggestion) {
78
103
  newValidValues[suggestion.value] = suggestion.label;
79
104
  });
80
105
  setValidValues(newValidValues);
81
- }).finally(() => setIsSearching(false));
106
+ })["finally"](function () {
107
+ return setIsSearching(false);
108
+ });
82
109
  }, 500);
83
110
 
84
111
  /**
85
112
  * Fetch recent posts to show as suggestions.
86
113
  */
87
- (0, _element.useEffect)(() => {
114
+ (0, _element.useEffect)(function () {
88
115
  setIsLoading(true);
89
- handleFetchSuggestions(null, 0, postTypeToSearch).then(_suggestions => {
116
+ handleFetchSuggestions(null, 0, postTypeToSearch).then(function (_suggestions) {
90
117
  if (0 < _suggestions.length) {
91
118
  setSuggestions(_suggestions);
92
119
  // Update valid values for token conversion
93
- const newValidValues = {
94
- ...validValues
95
- };
96
- _suggestions.forEach(suggestion => {
120
+ var newValidValues = _objectSpread({}, validValues);
121
+ _suggestions.forEach(function (suggestion) {
97
122
  newValidValues[suggestion.value] = suggestion.label;
98
123
  });
99
124
  setValidValues(newValidValues);
100
125
  }
101
- }).finally(() => setIsLoading(false));
126
+ })["finally"](function () {
127
+ return setIsLoading(false);
128
+ });
102
129
  }, []);
103
130
 
104
131
  /**
105
132
  * Fetch more suggestions.
106
133
  */
107
- (0, _element.useEffect)(() => {
134
+ (0, _element.useEffect)(function () {
108
135
  if (isLoadingMore) {
109
- handleFetchSuggestions(null, suggestions.length, postTypeToSearch).then(_suggestions => {
136
+ handleFetchSuggestions(null, suggestions.length, postTypeToSearch).then(function (_suggestions) {
110
137
  if (0 < _suggestions.length) {
111
138
  setSuggestions(suggestions.concat(_suggestions));
112
139
  }
113
- }).finally(() => setIsLoadingMore(false));
140
+ })["finally"](function () {
141
+ return setIsLoadingMore(false);
142
+ });
114
143
  }
115
144
  }, [isLoadingMore]);
116
145
 
117
146
  /**
118
147
  * If passed a `fetchSuggestions` prop, use that, otherwise, build it based on the selected post type.
119
148
  */
120
- const handleFetchSuggestions = fetchSuggestions ? fetchSuggestions : async (search = null, offset = 0, searchSlug = null) => {
121
- const postTypeSlug = searchSlug || postTypeToSearch;
122
- const endpoint = 'post' === postTypeSlug || 'page' === postTypeSlug ? postTypeSlug + 's' // Default post type endpoints are plural.
123
- : postTypeSlug; // Custom post type endpoints are singular.
124
- const response = await (0, _apiFetch.default)({
125
- parse: false,
126
- path: (0, _url.addQueryArgs)('/wp/v2/' + endpoint, {
127
- search,
128
- offset,
129
- per_page: suggestionsToFetch,
130
- _fields: 'id,title'
131
- })
132
- });
133
- const total = parseInt(response.headers.get('x-wp-total') || 0);
134
- const posts = await response.json();
135
- setMaxSuggestions(total);
149
+ var handleFetchSuggestions = fetchSuggestions ? fetchSuggestions : /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee() {
150
+ var search,
151
+ offset,
152
+ searchSlug,
153
+ postTypeSlug,
154
+ endpoint,
155
+ response,
156
+ total,
157
+ posts,
158
+ _args = arguments;
159
+ return _regenerator().w(function (_context) {
160
+ while (1) switch (_context.n) {
161
+ case 0:
162
+ search = _args.length > 0 && _args[0] !== undefined ? _args[0] : null;
163
+ offset = _args.length > 1 && _args[1] !== undefined ? _args[1] : 0;
164
+ searchSlug = _args.length > 2 && _args[2] !== undefined ? _args[2] : null;
165
+ postTypeSlug = searchSlug || postTypeToSearch;
166
+ endpoint = 'post' === postTypeSlug || 'page' === postTypeSlug ? postTypeSlug + 's' // Default post type endpoints are plural.
167
+ : postTypeSlug; // Custom post type endpoints are singular.
168
+ _context.n = 1;
169
+ return (0, _apiFetch["default"])({
170
+ parse: false,
171
+ path: (0, _url.addQueryArgs)('/wp/v2/' + endpoint, {
172
+ search: search,
173
+ offset: offset,
174
+ per_page: suggestionsToFetch,
175
+ _fields: 'id,title'
176
+ })
177
+ });
178
+ case 1:
179
+ response = _context.v;
180
+ total = parseInt(response.headers.get('x-wp-total') || 0);
181
+ _context.n = 2;
182
+ return response.json();
183
+ case 2:
184
+ posts = _context.v;
185
+ setMaxSuggestions(total);
136
186
 
137
- // Format suggestions for FormTokenField display.
138
- return posts.reduce((acc, post) => {
139
- acc.push({
140
- value: parseInt(post.id),
141
- label: (0, _htmlEntities.decodeEntities)(post?.title.rendered) || (0, _i18n.__)('(no title)', 'newspack-plugin')
142
- });
143
- return acc;
144
- }, []);
145
- };
187
+ // Format suggestions for FormTokenField display.
188
+ return _context.a(2, posts.reduce(function (acc, post) {
189
+ acc.push({
190
+ value: parseInt(post.id),
191
+ label: (0, _htmlEntities.decodeEntities)(post === null || post === void 0 ? void 0 : post.title.rendered) || (0, _i18n.__)('(no title)', 'newspack-plugin')
192
+ });
193
+ return acc;
194
+ }, []));
195
+ }
196
+ }, _callee);
197
+ }));
146
198
 
147
199
  /**
148
200
  * Get labels for token values.
149
201
  */
150
- const getLabelsForValues = values => {
151
- return values.reduce((accumulator, value) => {
202
+ var getLabelsForValues = function getLabelsForValues(values) {
203
+ return values.reduce(function (accumulator, value) {
152
204
  if (!value) {
153
205
  return accumulator;
154
206
  }
155
207
  if (value.label) {
156
- return [...accumulator, value.label];
208
+ return [].concat((0, _toConsumableArray2["default"])(accumulator), [value.label]);
157
209
  }
158
- return validValues[value] ? [...accumulator, validValues[value]] : accumulator;
210
+ return validValues[value] ? [].concat((0, _toConsumableArray2["default"])(accumulator), [validValues[value]]) : accumulator;
159
211
  }, []);
160
212
  };
161
213
 
162
214
  /**
163
215
  * Get values for token labels.
164
216
  */
165
- const getValuesForLabels = labels => {
217
+ var getValuesForLabels = function getValuesForLabels(labels) {
166
218
  // eslint-disable-next-line @typescript-eslint/no-shadow
167
- return labels.reduce((acc, label) => {
168
- Object.keys(validValues).forEach(key => {
219
+ return labels.reduce(function (acc, label) {
220
+ Object.keys(validValues).forEach(function (key) {
169
221
  if (validValues[key] === label) {
170
- const value = isNaN(parseInt(key)) ? key.toString() : parseInt(key);
222
+ var value = isNaN(parseInt(key)) ? key.toString() : parseInt(key);
171
223
  acc.push({
172
- value,
173
- label
224
+ value: value,
225
+ label: label
174
226
  });
175
227
  }
176
228
  });
@@ -181,32 +233,32 @@ const AutocompleteWithLatestPosts = ({
181
233
  /**
182
234
  * Handle FormTokenField onChange.
183
235
  */
184
- const handleTokenChange = tokenStrings => {
185
- const newSelections = getValuesForLabels(tokenStrings);
236
+ var handleTokenChange = function handleTokenChange(tokenStrings) {
237
+ var newSelections = getValuesForLabels(tokenStrings);
186
238
 
187
239
  // If only allowing one selection, just return the one selected item.
188
240
  if (!multiSelect) {
189
- const newSelection = newSelections[newSelections.length - 1]; // Get the last selected item
241
+ var newSelection = newSelections[newSelections.length - 1]; // Get the last selected item
190
242
  if (newSelection) {
191
- return onChange([{
192
- ...newSelection,
243
+ return onChange([_objectSpread(_objectSpread({}, newSelection), {}, {
193
244
  postType: postTypeToSearch
194
- }]);
245
+ })]);
195
246
  }
196
247
  return onChange([]);
197
248
  }
198
249
 
199
250
  // For multi-select, include currently selected post type in selection results.
200
- onChange(newSelections.map(selection => ({
201
- ...selection,
202
- postType: postTypeToSearch
203
- })));
251
+ onChange(newSelections.map(function (selection) {
252
+ return _objectSpread(_objectSpread({}, selection), {}, {
253
+ postType: postTypeToSearch
254
+ });
255
+ }));
204
256
  };
205
257
 
206
258
  /**
207
259
  * Get tokens for FormTokenField.
208
260
  */
209
- const getTokens = () => {
261
+ var getTokens = function getTokens() {
210
262
  return getLabelsForValues(selectedItems);
211
263
  };
212
264
 
@@ -215,22 +267,26 @@ const AutocompleteWithLatestPosts = ({
215
267
  *
216
268
  * @param {Object} suggestion Suggestion object with value and label keys.
217
269
  */
218
- const renderSuggestion = suggestion => {
270
+ var renderSuggestion = function renderSuggestion(suggestion) {
219
271
  if (multiSelect) {
220
- const isSelected = !!selectedItems.find(_selection => parseInt(_selection.value) === parseInt(suggestion.value) && _selection.label === suggestion.label);
272
+ var isSelected = !!selectedItems.find(function (_selection) {
273
+ return parseInt(_selection.value) === parseInt(suggestion.value) && _selection.label === suggestion.label;
274
+ });
221
275
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.CheckboxControl, {
222
276
  checked: isSelected,
223
- onChange: () => {
277
+ onChange: function onChange() {
224
278
  // For multi-select, we need to toggle the selection
225
- const currentTokens = getTokens();
226
- const suggestionLabel = suggestion.label;
279
+ var currentTokens = getTokens();
280
+ var suggestionLabel = suggestion.label;
227
281
  if (isSelected) {
228
282
  // Remove the suggestion
229
- const newTokens = currentTokens.filter(token => token !== suggestionLabel);
283
+ var newTokens = currentTokens.filter(function (token) {
284
+ return token !== suggestionLabel;
285
+ });
230
286
  handleTokenChange(newTokens);
231
287
  } else {
232
288
  // Add the suggestion
233
- handleTokenChange([...currentTokens, suggestionLabel]);
289
+ handleTokenChange([].concat((0, _toConsumableArray2["default"])(currentTokens), [suggestionLabel]));
234
290
  }
235
291
  },
236
292
  label: suggestion.label
@@ -238,7 +294,9 @@ const AutocompleteWithLatestPosts = ({
238
294
  }
239
295
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Button, {
240
296
  isLink: true,
241
- onClick: () => handleTokenChange([...getTokens(), suggestion.label]),
297
+ onClick: function onClick() {
298
+ return handleTokenChange([].concat((0, _toConsumableArray2["default"])(getTokens()), [suggestion.label]));
299
+ },
242
300
  children: suggestion.label
243
301
  }, suggestion.value);
244
302
  };
@@ -246,11 +304,11 @@ const AutocompleteWithLatestPosts = ({
246
304
  /**
247
305
  * Render a list of suggestions that can be clicked to select instead of searching by title.
248
306
  */
249
- const renderSuggestions = () => {
307
+ var renderSuggestions = function renderSuggestions() {
250
308
  if (0 === suggestions.length) {
251
309
  return null;
252
310
  }
253
- const className = multiSelect ? 'newspack-autocomplete-with-latest-posts__search-suggestions-multiselect' : 'newspack-autocomplete-with-latest-posts__search-suggestions';
311
+ var className = multiSelect ? 'newspack-autocomplete-with-latest-posts__search-suggestions-multiselect' : 'newspack-autocomplete-with-latest-posts__search-suggestions';
254
312
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
255
313
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
256
314
  className: "newspack-autocomplete-with-latest-posts__search-suggestions-container",
@@ -262,7 +320,9 @@ const AutocompleteWithLatestPosts = ({
262
320
  children: [suggestions.map(renderSuggestion), suggestions.length < (maxItemsToSuggest || maxSuggestions) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Button, {
263
321
  disabled: isLoadingMore,
264
322
  isSecondary: true,
265
- onClick: () => setIsLoadingMore(true),
323
+ onClick: function onClick() {
324
+ return setIsLoadingMore(true);
325
+ },
266
326
  children: isLoadingMore ? (0, _i18n.__)('Loading…', 'newspack-plugin') : (0, _i18n.__)('Load more', 'newspack-plugin')
267
327
  })]
268
328
  })]
@@ -275,7 +335,9 @@ const AutocompleteWithLatestPosts = ({
275
335
  className: "newspack-autocomplete-with-latest-posts__input-container",
276
336
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_components.FormTokenField, {
277
337
  value: getTokens(),
278
- suggestions: searchSuggestions.map(suggestion => suggestion.label),
338
+ suggestions: searchSuggestions.map(function (suggestion) {
339
+ return suggestion.label;
340
+ }),
279
341
  onChange: handleTokenChange,
280
342
  onInputChange: debouncedUpdateSuggestions,
281
343
  label: label,
@@ -286,4 +348,4 @@ const AutocompleteWithLatestPosts = ({
286
348
  }), renderSuggestions()]
287
349
  });
288
350
  };
289
- var _default = exports.default = AutocompleteWithLatestPosts;
351
+ var _default = exports["default"] = AutocompleteWithLatestPosts;