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,12 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
+
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
3
|
+
import _createClass from "@babel/runtime/helpers/createClass";
|
|
4
|
+
import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
|
|
5
|
+
import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
|
|
6
|
+
import _inherits from "@babel/runtime/helpers/inherits";
|
|
7
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
8
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
9
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
1
10
|
/**
|
|
2
11
|
* External dependencies
|
|
3
12
|
*/
|
|
@@ -18,248 +27,265 @@ import './style.scss';
|
|
|
18
27
|
* An multi-selecting, api-driven autocomplete input suitable for use in block attributes.
|
|
19
28
|
*/
|
|
20
29
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
this
|
|
30
|
+
var AutocompleteTokenField = /*#__PURE__*/function (_Component) {
|
|
31
|
+
function AutocompleteTokenField(props) {
|
|
32
|
+
var _this;
|
|
33
|
+
_classCallCheck(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
|
+
_defineProperty(_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 = {
|
|
25
45
|
suggestions: [],
|
|
26
46
|
validValues: {},
|
|
27
|
-
loading:
|
|
47
|
+
loading: _this.isFetchingInfoOnLoad()
|
|
28
48
|
};
|
|
29
|
-
|
|
49
|
+
_this.debouncedUpdateSuggestions = debounce(_this.updateSuggestions, 500);
|
|
50
|
+
return _this;
|
|
30
51
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const {
|
|
55
|
-
validValues
|
|
56
|
-
} = this.state;
|
|
57
|
-
results.forEach(suggestion => {
|
|
58
|
-
validValues[suggestion.value] = suggestion.label;
|
|
59
|
-
});
|
|
60
|
-
this.setState({
|
|
61
|
-
validValues,
|
|
62
|
-
loading: false
|
|
52
|
+
_inherits(AutocompleteTokenField, _Component);
|
|
53
|
+
return _createClass(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
|
+
});
|
|
63
75
|
});
|
|
64
|
-
}
|
|
76
|
+
}
|
|
65
77
|
}
|
|
66
|
-
}
|
|
67
78
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
+
});
|
|
88
100
|
});
|
|
89
|
-
}
|
|
101
|
+
}
|
|
90
102
|
}
|
|
91
|
-
}
|
|
92
103
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
* Get a list of labels for input values.
|
|
103
|
-
*
|
|
104
|
-
* @param {Array} values Array of values (ids, etc.).
|
|
105
|
-
* @return {Array} array of valid labels corresponding to the values.
|
|
106
|
-
*/
|
|
107
|
-
getLabelsForValues(values) {
|
|
108
|
-
const {
|
|
109
|
-
validValues
|
|
110
|
-
} = this.state;
|
|
111
|
-
return values.reduce((accumulator, value) => {
|
|
112
|
-
if (!value) {
|
|
113
|
-
return accumulator;
|
|
114
|
-
}
|
|
115
|
-
if (value.label) {
|
|
116
|
-
return [...accumulator, value.label];
|
|
117
|
-
}
|
|
118
|
-
return validValues[value] ? [...accumulator, validValues[value]] : accumulator;
|
|
119
|
-
}, []);
|
|
120
|
-
}
|
|
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
|
+
}
|
|
121
113
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
const value = /^\d+$/.test(key.toString()) ? parseInt(key) : key.toString();
|
|
141
|
-
acc.push({
|
|
142
|
-
value,
|
|
143
|
-
label
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
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(_toConsumableArray(accumulator), [value.label]);
|
|
130
|
+
}
|
|
131
|
+
return validValues[value] ? [].concat(_toConsumableArray(accumulator), [validValues[value]]) : accumulator;
|
|
148
132
|
}, []);
|
|
149
133
|
}
|
|
150
|
-
return labels.map(label => Object.keys(validValues).map(key => /^\d+$/.test(key.toString()) ? parseInt(key) : key.toString()).find(key => validValues[key] === label));
|
|
151
|
-
}
|
|
152
134
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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
|
-
suggestions: currentSuggestions,
|
|
185
|
-
validValues,
|
|
186
|
-
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;
|
|
187
166
|
});
|
|
188
|
-
})
|
|
189
|
-
|
|
190
|
-
|
|
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 = _toConsumableArray(suggestions);
|
|
196
|
+
suggestions.forEach(function (suggestion) {
|
|
197
|
+
validValues[suggestion.value] = suggestion.label;
|
|
198
|
+
});
|
|
199
|
+
_this4.setState({
|
|
200
|
+
suggestions: currentSuggestions,
|
|
201
|
+
validValues: validValues,
|
|
191
202
|
loading: false
|
|
192
203
|
});
|
|
193
|
-
}
|
|
204
|
+
})["catch"](function () {
|
|
205
|
+
if (_this4.suggestionsRequest === request) {
|
|
206
|
+
_this4.setState({
|
|
207
|
+
loading: false
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
_this4.suggestionsRequest = request;
|
|
194
212
|
});
|
|
195
|
-
|
|
196
|
-
});
|
|
197
|
-
}
|
|
213
|
+
}
|
|
198
214
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
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
|
+
}
|
|
210
226
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
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
|
+
}
|
|
222
238
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
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__*/_jsxs("div", {
|
|
263
|
+
className: "newspack-autocomplete-tokenfield",
|
|
264
|
+
style: style,
|
|
265
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
266
|
+
className: classNames.join(' '),
|
|
267
|
+
children: [/*#__PURE__*/_jsx(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__*/_jsx(Spinner, {})]
|
|
283
|
+
}), help && /*#__PURE__*/_jsx("p", {
|
|
284
|
+
className: "newspack-autocomplete-tokenfield__help",
|
|
285
|
+
children: help
|
|
286
|
+
})]
|
|
287
|
+
});
|
|
242
288
|
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
style: style,
|
|
246
|
-
children: [/*#__PURE__*/_jsxs("div", {
|
|
247
|
-
className: classNames.join(' '),
|
|
248
|
-
children: [/*#__PURE__*/_jsx(FormTokenField, {
|
|
249
|
-
value: this.getTokens(),
|
|
250
|
-
suggestions: suggestions.map(suggestion => suggestion.label),
|
|
251
|
-
onChange: tokens => this.handleOnChange(tokens),
|
|
252
|
-
onInputChange: input => this.debouncedUpdateSuggestions(input),
|
|
253
|
-
label: label,
|
|
254
|
-
maxLength: maxLength,
|
|
255
|
-
placeholder: placeholder,
|
|
256
|
-
__next40pxDefaultSize: __next40pxDefaultSize
|
|
257
|
-
}), loading && /*#__PURE__*/_jsx(Spinner, {})]
|
|
258
|
-
}), help && /*#__PURE__*/_jsx("p", {
|
|
259
|
-
className: "newspack-autocomplete-tokenfield__help",
|
|
260
|
-
children: help
|
|
261
|
-
})]
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
}
|
|
289
|
+
}]);
|
|
290
|
+
}(Component);
|
|
265
291
|
export default AutocompleteTokenField;
|