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.
- package/CHANGELOG.md +11 -0
- package/DEVELOPMENT.md +868 -0
- 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
|
@@ -4,268 +4,288 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
10
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
11
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
12
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
13
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
14
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
8
15
|
var _debounce = _interopRequireDefault(require("lodash/debounce"));
|
|
9
16
|
var _element = require("@wordpress/element");
|
|
10
17
|
var _components = require("@wordpress/components");
|
|
11
18
|
require("./style.scss");
|
|
12
19
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
13
|
-
|
|
20
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
|
21
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } /**
|
|
14
22
|
* External dependencies
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
/**
|
|
23
|
+
*/ /**
|
|
18
24
|
* WordPress dependencies
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
/**
|
|
25
|
+
*/ /**
|
|
22
26
|
* Internal dependencies
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
/**
|
|
27
|
+
*/ /**
|
|
26
28
|
* An multi-selecting, api-driven autocomplete input suitable for use in block attributes.
|
|
27
|
-
*/
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
*/
|
|
30
|
+
var AutocompleteTokenField = /*#__PURE__*/function (_Component) {
|
|
31
|
+
function AutocompleteTokenField(props) {
|
|
32
|
+
var _this;
|
|
33
|
+
(0, _classCallCheck2["default"])(this, AutocompleteTokenField);
|
|
34
|
+
_this = _callSuper(this, AutocompleteTokenField, [props]);
|
|
35
|
+
/**
|
|
36
|
+
* If the component has tokens passed in props, it should fetch info after it mounts.
|
|
37
|
+
*/
|
|
38
|
+
(0, _defineProperty2["default"])(_this, "isFetchingInfoOnLoad", function () {
|
|
39
|
+
var _this$props = _this.props,
|
|
40
|
+
tokens = _this$props.tokens,
|
|
41
|
+
fetchSavedInfo = _this$props.fetchSavedInfo;
|
|
42
|
+
return Boolean(tokens.length && fetchSavedInfo);
|
|
43
|
+
});
|
|
44
|
+
_this.state = {
|
|
31
45
|
suggestions: [],
|
|
32
46
|
validValues: {},
|
|
33
|
-
loading:
|
|
47
|
+
loading: _this.isFetchingInfoOnLoad()
|
|
34
48
|
};
|
|
35
|
-
|
|
49
|
+
_this.debouncedUpdateSuggestions = (0, _debounce["default"])(_this.updateSuggestions, 500);
|
|
50
|
+
return _this;
|
|
36
51
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const {
|
|
61
|
-
validValues
|
|
62
|
-
} = this.state;
|
|
63
|
-
results.forEach(suggestion => {
|
|
64
|
-
validValues[suggestion.value] = suggestion.label;
|
|
65
|
-
});
|
|
66
|
-
this.setState({
|
|
67
|
-
validValues,
|
|
68
|
-
loading: false
|
|
52
|
+
(0, _inherits2["default"])(AutocompleteTokenField, _Component);
|
|
53
|
+
return (0, _createClass2["default"])(AutocompleteTokenField, [{
|
|
54
|
+
key: "componentDidMount",
|
|
55
|
+
value:
|
|
56
|
+
/**
|
|
57
|
+
* When the component loads, fetch information about the tokens so we can populate
|
|
58
|
+
* the tokens with the correct labels.
|
|
59
|
+
*/
|
|
60
|
+
function componentDidMount() {
|
|
61
|
+
var _this2 = this;
|
|
62
|
+
if (this.isFetchingInfoOnLoad()) {
|
|
63
|
+
var _this$props2 = this.props,
|
|
64
|
+
tokens = _this$props2.tokens,
|
|
65
|
+
fetchSavedInfo = _this$props2.fetchSavedInfo;
|
|
66
|
+
fetchSavedInfo(tokens).then(function (results) {
|
|
67
|
+
var validValues = _this2.state.validValues;
|
|
68
|
+
results.forEach(function (suggestion) {
|
|
69
|
+
validValues[suggestion.value] = suggestion.label;
|
|
70
|
+
});
|
|
71
|
+
_this2.setState({
|
|
72
|
+
validValues: validValues,
|
|
73
|
+
loading: false
|
|
74
|
+
});
|
|
69
75
|
});
|
|
70
|
-
}
|
|
76
|
+
}
|
|
71
77
|
}
|
|
72
|
-
}
|
|
73
78
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
79
|
+
/**
|
|
80
|
+
* When the component updates, fetch information about the tokens so we can populate
|
|
81
|
+
* the tokens with the correct labels.
|
|
82
|
+
*/
|
|
83
|
+
}, {
|
|
84
|
+
key: "componentDidUpdate",
|
|
85
|
+
value: function componentDidUpdate(prevProps) {
|
|
86
|
+
var _this3 = this;
|
|
87
|
+
var _this$props3 = this.props,
|
|
88
|
+
tokens = _this$props3.tokens,
|
|
89
|
+
fetchSavedInfo = _this$props3.fetchSavedInfo;
|
|
90
|
+
if (tokens !== prevProps.tokens && this.isFetchingInfoOnLoad()) {
|
|
91
|
+
fetchSavedInfo(tokens).then(function (results) {
|
|
92
|
+
var validValues = _this3.state.validValues;
|
|
93
|
+
results.forEach(function (suggestion) {
|
|
94
|
+
validValues[suggestion.value] = suggestion.label;
|
|
95
|
+
});
|
|
96
|
+
_this3.setState({
|
|
97
|
+
validValues: validValues,
|
|
98
|
+
loading: false
|
|
99
|
+
});
|
|
94
100
|
});
|
|
95
|
-
}
|
|
101
|
+
}
|
|
96
102
|
}
|
|
97
|
-
}
|
|
98
103
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
* Get a list of labels for input values.
|
|
109
|
-
*
|
|
110
|
-
* @param {Array} values Array of values (ids, etc.).
|
|
111
|
-
* @return {Array} array of valid labels corresponding to the values.
|
|
112
|
-
*/
|
|
113
|
-
getLabelsForValues(values) {
|
|
114
|
-
const {
|
|
115
|
-
validValues
|
|
116
|
-
} = this.state;
|
|
117
|
-
return values.reduce((accumulator, value) => {
|
|
118
|
-
if (!value) {
|
|
119
|
-
return accumulator;
|
|
120
|
-
}
|
|
121
|
-
if (value.label) {
|
|
122
|
-
return [...accumulator, value.label];
|
|
123
|
-
}
|
|
124
|
-
return validValues[value] ? [...accumulator, validValues[value]] : accumulator;
|
|
125
|
-
}, []);
|
|
126
|
-
}
|
|
104
|
+
/**
|
|
105
|
+
* Clean up any unfinished autocomplete api call requests.
|
|
106
|
+
*/
|
|
107
|
+
}, {
|
|
108
|
+
key: "componentWillUnmount",
|
|
109
|
+
value: function componentWillUnmount() {
|
|
110
|
+
delete this.suggestionsRequest;
|
|
111
|
+
this.debouncedUpdateSuggestions.cancel();
|
|
112
|
+
}
|
|
127
113
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
const value = /^\d+$/.test(key.toString()) ? parseInt(key) : key.toString();
|
|
147
|
-
acc.push({
|
|
148
|
-
value,
|
|
149
|
-
label
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
return acc;
|
|
114
|
+
/**
|
|
115
|
+
* Get a list of labels for input values.
|
|
116
|
+
*
|
|
117
|
+
* @param {Array} values Array of values (ids, etc.).
|
|
118
|
+
* @return {Array} array of valid labels corresponding to the values.
|
|
119
|
+
*/
|
|
120
|
+
}, {
|
|
121
|
+
key: "getLabelsForValues",
|
|
122
|
+
value: function getLabelsForValues(values) {
|
|
123
|
+
var validValues = this.state.validValues;
|
|
124
|
+
return values.reduce(function (accumulator, value) {
|
|
125
|
+
if (!value) {
|
|
126
|
+
return accumulator;
|
|
127
|
+
}
|
|
128
|
+
if (value.label) {
|
|
129
|
+
return [].concat((0, _toConsumableArray2["default"])(accumulator), [value.label]);
|
|
130
|
+
}
|
|
131
|
+
return validValues[value] ? [].concat((0, _toConsumableArray2["default"])(accumulator), [validValues[value]]) : accumulator;
|
|
154
132
|
}, []);
|
|
155
133
|
}
|
|
156
|
-
return labels.map(label => Object.keys(validValues).map(key => /^\d+$/.test(key.toString()) ? parseInt(key) : key.toString()).find(key => validValues[key] === label));
|
|
157
|
-
}
|
|
158
134
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
})
|
|
189
|
-
|
|
190
|
-
suggestions: currentSuggestions,
|
|
191
|
-
validValues,
|
|
192
|
-
loading: false
|
|
135
|
+
/**
|
|
136
|
+
* Get a list of values for input labels.
|
|
137
|
+
*
|
|
138
|
+
* @param {Array} labels Array of labels from the tokens.
|
|
139
|
+
* @return {Array} Array of valid values corresponding to the labels.
|
|
140
|
+
*/
|
|
141
|
+
}, {
|
|
142
|
+
key: "getValuesForLabels",
|
|
143
|
+
value: function getValuesForLabels(labels) {
|
|
144
|
+
var returnFullObjects = this.props.returnFullObjects; // If this prop is passed, return both the value and label. Otherwise, return just the label.
|
|
145
|
+
var validValues = this.state.validValues;
|
|
146
|
+
if (returnFullObjects) {
|
|
147
|
+
return labels.reduce(function (acc, label) {
|
|
148
|
+
Object.keys(validValues).forEach(function (key) {
|
|
149
|
+
if (validValues[key] === label) {
|
|
150
|
+
// Preserve numeric or string type of values. Object.keys will convert numbers to strings.
|
|
151
|
+
var value = /^\d+$/.test(key.toString()) ? parseInt(key) : key.toString();
|
|
152
|
+
acc.push({
|
|
153
|
+
value: value,
|
|
154
|
+
label: label
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
return acc;
|
|
159
|
+
}, []);
|
|
160
|
+
}
|
|
161
|
+
return labels.map(function (label) {
|
|
162
|
+
return Object.keys(validValues).map(function (key) {
|
|
163
|
+
return /^\d+$/.test(key.toString()) ? parseInt(key) : key.toString();
|
|
164
|
+
}).find(function (key) {
|
|
165
|
+
return validValues[key] === label;
|
|
193
166
|
});
|
|
194
|
-
})
|
|
195
|
-
|
|
196
|
-
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Refresh the autocomplete dropdown.
|
|
172
|
+
*
|
|
173
|
+
* @param {string} input Input to fetch suggestions for
|
|
174
|
+
*/
|
|
175
|
+
}, {
|
|
176
|
+
key: "updateSuggestions",
|
|
177
|
+
value: function updateSuggestions(input) {
|
|
178
|
+
var _this4 = this;
|
|
179
|
+
var fetchSuggestions = this.props.fetchSuggestions;
|
|
180
|
+
if (!fetchSuggestions) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
this.setState({
|
|
184
|
+
loading: true
|
|
185
|
+
}, function () {
|
|
186
|
+
var request = fetchSuggestions(input);
|
|
187
|
+
request.then(function (suggestions) {
|
|
188
|
+
// A fetch Promise doesn't have an abort option. It's mimicked by
|
|
189
|
+
// comparing the request reference in on the instance, which is
|
|
190
|
+
// reset or deleted on subsequent requests or unmounting.
|
|
191
|
+
if (_this4.suggestionsRequest !== request) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
var validValues = _this4.state.validValues;
|
|
195
|
+
var currentSuggestions = (0, _toConsumableArray2["default"])(suggestions);
|
|
196
|
+
suggestions.forEach(function (suggestion) {
|
|
197
|
+
validValues[suggestion.value] = suggestion.label;
|
|
198
|
+
});
|
|
199
|
+
_this4.setState({
|
|
200
|
+
suggestions: currentSuggestions,
|
|
201
|
+
validValues: validValues,
|
|
197
202
|
loading: false
|
|
198
203
|
});
|
|
199
|
-
}
|
|
204
|
+
})["catch"](function () {
|
|
205
|
+
if (_this4.suggestionsRequest === request) {
|
|
206
|
+
_this4.setState({
|
|
207
|
+
loading: false
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
_this4.suggestionsRequest = request;
|
|
200
212
|
});
|
|
201
|
-
|
|
202
|
-
});
|
|
203
|
-
}
|
|
213
|
+
}
|
|
204
214
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
215
|
+
/**
|
|
216
|
+
* When a token is selected, we need to convert the string label into a recognized value suitable for saving as an attribute.
|
|
217
|
+
*
|
|
218
|
+
* @param {Array} tokenStrings An array of token label strings.
|
|
219
|
+
*/
|
|
220
|
+
}, {
|
|
221
|
+
key: "handleOnChange",
|
|
222
|
+
value: function handleOnChange(tokenStrings) {
|
|
223
|
+
var onChange = this.props.onChange;
|
|
224
|
+
onChange(this.getValuesForLabels(tokenStrings));
|
|
225
|
+
}
|
|
216
226
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
227
|
+
/**
|
|
228
|
+
* To populate the tokens, we need to convert the values into a human-readable label.
|
|
229
|
+
*
|
|
230
|
+
* @return {Array} An array of token label strings.
|
|
231
|
+
*/
|
|
232
|
+
}, {
|
|
233
|
+
key: "getTokens",
|
|
234
|
+
value: function getTokens() {
|
|
235
|
+
var tokens = this.props.tokens;
|
|
236
|
+
return this.getLabelsForValues(tokens);
|
|
237
|
+
}
|
|
228
238
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
239
|
+
/**
|
|
240
|
+
* Render.
|
|
241
|
+
*/
|
|
242
|
+
}, {
|
|
243
|
+
key: "render",
|
|
244
|
+
value: function render() {
|
|
245
|
+
var _this5 = this;
|
|
246
|
+
var _this$props4 = this.props,
|
|
247
|
+
help = _this$props4.help,
|
|
248
|
+
_this$props4$label = _this$props4.label,
|
|
249
|
+
label = _this$props4$label === void 0 ? '' : _this$props4$label,
|
|
250
|
+
_this$props4$placehol = _this$props4.placeholder,
|
|
251
|
+
placeholder = _this$props4$placehol === void 0 ? '' : _this$props4$placehol,
|
|
252
|
+
maxLength = _this$props4.maxLength,
|
|
253
|
+
style = _this$props4.style,
|
|
254
|
+
__next40pxDefaultSize = _this$props4.__next40pxDefaultSize;
|
|
255
|
+
var _this$state = this.state,
|
|
256
|
+
suggestions = _this$state.suggestions,
|
|
257
|
+
loading = _this$state.loading;
|
|
258
|
+
var classNames = ['newspack-autocomplete-tokenfield__input-container'];
|
|
259
|
+
if (label) {
|
|
260
|
+
classNames.push('has-label');
|
|
261
|
+
}
|
|
262
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
263
|
+
className: "newspack-autocomplete-tokenfield",
|
|
264
|
+
style: style,
|
|
265
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
266
|
+
className: classNames.join(' '),
|
|
267
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_components.FormTokenField, {
|
|
268
|
+
value: this.getTokens(),
|
|
269
|
+
suggestions: suggestions.map(function (suggestion) {
|
|
270
|
+
return suggestion.label;
|
|
271
|
+
}),
|
|
272
|
+
onChange: function onChange(tokens) {
|
|
273
|
+
return _this5.handleOnChange(tokens);
|
|
274
|
+
},
|
|
275
|
+
onInputChange: function onInputChange(input) {
|
|
276
|
+
return _this5.debouncedUpdateSuggestions(input);
|
|
277
|
+
},
|
|
278
|
+
label: label,
|
|
279
|
+
maxLength: maxLength,
|
|
280
|
+
placeholder: placeholder,
|
|
281
|
+
__next40pxDefaultSize: __next40pxDefaultSize
|
|
282
|
+
}), loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Spinner, {})]
|
|
283
|
+
}), help && /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
284
|
+
className: "newspack-autocomplete-tokenfield__help",
|
|
285
|
+
children: help
|
|
286
|
+
})]
|
|
287
|
+
});
|
|
248
288
|
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
253
|
-
className: classNames.join(' '),
|
|
254
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_components.FormTokenField, {
|
|
255
|
-
value: this.getTokens(),
|
|
256
|
-
suggestions: suggestions.map(suggestion => suggestion.label),
|
|
257
|
-
onChange: tokens => this.handleOnChange(tokens),
|
|
258
|
-
onInputChange: input => this.debouncedUpdateSuggestions(input),
|
|
259
|
-
label: label,
|
|
260
|
-
maxLength: maxLength,
|
|
261
|
-
placeholder: placeholder,
|
|
262
|
-
__next40pxDefaultSize: __next40pxDefaultSize
|
|
263
|
-
}), loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Spinner, {})]
|
|
264
|
-
}), help && /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
265
|
-
className: "newspack-autocomplete-tokenfield__help",
|
|
266
|
-
children: help
|
|
267
|
-
})]
|
|
268
|
-
});
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
var _default = exports.default = AutocompleteTokenField;
|
|
289
|
+
}]);
|
|
290
|
+
}(_element.Component);
|
|
291
|
+
var _default = exports["default"] = AutocompleteTokenField;
|