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