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.
Files changed (263) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/DEVELOPMENT.md +868 -0
  3. package/colors/colors.module.scss +52 -2
  4. package/copy-styles.js +3 -2
  5. package/dist/cjs/accordion/index.js +17 -12
  6. package/dist/cjs/action-card/index.js +176 -139
  7. package/dist/cjs/autocomplete-tokenfield/index.js +254 -234
  8. package/dist/cjs/autocomplete-with-latest-posts/index.js +172 -110
  9. package/dist/cjs/autocomplete-with-suggestions/index.js +229 -126
  10. package/dist/cjs/badge/index.js +7 -7
  11. package/dist/cjs/box-contrast/index.js +19 -15
  12. package/dist/cjs/button/index.js +41 -26
  13. package/dist/cjs/button-props/button-props.js +5 -5
  14. package/dist/cjs/button-props/index.js +2 -2
  15. package/dist/cjs/card/core-card.js +110 -52
  16. package/dist/cjs/card/index.js +74 -67
  17. package/dist/cjs/card/style-core.scss +93 -25
  18. package/dist/cjs/card/style.scss +2 -2
  19. package/dist/cjs/card-feature/index.js +141 -0
  20. package/dist/cjs/card-feature/style.scss +75 -0
  21. package/dist/cjs/card-form/index.js +144 -0
  22. package/dist/cjs/card-form/style.scss +20 -0
  23. package/dist/cjs/card-settings-group/index.js +36 -16
  24. package/dist/cjs/card-sortable-list/index.js +176 -140
  25. package/dist/cjs/category-autocomplete/index.js +175 -155
  26. package/dist/cjs/color-picker/index.js +41 -23
  27. package/dist/cjs/color-picker/index.test.js +82 -0
  28. package/dist/cjs/color-picker/style.scss +11 -13
  29. package/dist/cjs/confirm-dialog/index.js +86 -22
  30. package/dist/cjs/consts.js +1 -1
  31. package/dist/cjs/custom-select-control/index.js +39 -28
  32. package/dist/cjs/dataviews/index.js +38 -0
  33. package/dist/cjs/dataviews/style.scss +9 -0
  34. package/dist/cjs/divider/index.js +26 -21
  35. package/dist/cjs/footer/index.js +36 -30
  36. package/dist/cjs/form-token-field/index.js +51 -40
  37. package/dist/cjs/global-notices/index.js +5 -5
  38. package/dist/cjs/grid/index.js +25 -19
  39. package/dist/cjs/grid/style.scss +6 -1
  40. package/dist/cjs/handoff/index.js +204 -156
  41. package/dist/cjs/handoff-message/index.js +12 -7
  42. package/dist/cjs/hooks/index.js +10 -8
  43. package/dist/cjs/hooks/use-confirm-dialog.js +79 -0
  44. package/dist/cjs/hooks/use-unsaved-changes-dialog.js +144 -0
  45. package/dist/cjs/hooks/useObjectState.js +21 -12
  46. package/dist/cjs/hooks/useObjectState.test.js +55 -33
  47. package/dist/cjs/hooks/useOnClickOutside.js +6 -6
  48. package/dist/cjs/hooks/usePrompt.js +10 -13
  49. package/dist/cjs/image-upload/index.js +114 -123
  50. package/dist/cjs/image-upload/index.test.js +11 -13
  51. package/dist/cjs/image-upload/style.scss +12 -40
  52. package/dist/cjs/index.js +136 -104
  53. package/dist/cjs/info-button/index.js +43 -32
  54. package/dist/cjs/integration-icons/active-campaign.js +22 -0
  55. package/dist/cjs/integration-icons/constant-contact.js +28 -0
  56. package/dist/cjs/integration-icons/fundraise-up.js +25 -0
  57. package/dist/cjs/integration-icons/index.js +48 -0
  58. package/dist/cjs/integration-icons/mailchimp.js +19 -0
  59. package/dist/cjs/integration-icons/salesforce.js +17 -0
  60. package/dist/cjs/integration-icons/wisepops.js +20 -0
  61. package/dist/cjs/modal/index.js +22 -19
  62. package/dist/cjs/modal/style.scss +4 -0
  63. package/dist/cjs/newspack-icon/index.js +45 -38
  64. package/dist/cjs/notice/index.js +64 -55
  65. package/dist/cjs/plugin-installer/index.js +259 -253
  66. package/dist/cjs/plugin-settings/SettingsSection.js +66 -60
  67. package/dist/cjs/plugin-settings/index.js +217 -200
  68. package/dist/cjs/plugin-toggle/index.js +192 -199
  69. package/dist/cjs/popover/index.js +41 -28
  70. package/dist/cjs/position-control/index.js +24 -23
  71. package/dist/cjs/progress-bar/index.js +71 -59
  72. package/dist/cjs/progress-bar/index.test.js +62 -68
  73. package/dist/cjs/proxied-imports/router.js +3 -3
  74. package/dist/cjs/radio-control/index.js +40 -27
  75. package/dist/cjs/section-header/index.js +103 -58
  76. package/dist/cjs/section-header/style.scss +31 -11
  77. package/dist/cjs/select-control/ButtonGroupControl.js +26 -21
  78. package/dist/cjs/select-control/GroupedSelectControl.js +41 -35
  79. package/dist/cjs/select-control/index.js +52 -40
  80. package/dist/cjs/settings/MinMaxSetting.js +30 -20
  81. package/dist/cjs/settings/SettingsCard.js +20 -17
  82. package/dist/cjs/settings/SettingsSection.js +22 -21
  83. package/dist/cjs/settings/index.js +5 -5
  84. package/dist/cjs/sortable-newsletter-list-control/index.js +78 -57
  85. package/dist/cjs/steps-list/index.js +44 -34
  86. package/dist/cjs/steps-list-item/index.js +47 -39
  87. package/dist/cjs/style-card/index.js +70 -63
  88. package/dist/cjs/tabbed-navigation/index.js +38 -36
  89. package/dist/cjs/text-control/index.js +27 -25
  90. package/dist/cjs/utils/color.js +4 -4
  91. package/dist/cjs/utils/editor-toolbar-back-button.js +61 -0
  92. package/dist/cjs/utils/index.js +31 -19
  93. package/dist/cjs/utils/style.scss +8 -0
  94. package/dist/cjs/waiting/index.js +48 -37
  95. package/dist/cjs/web-preview/index.js +217 -211
  96. package/dist/cjs/with-wizard/index.js +362 -364
  97. package/dist/cjs/with-wizard/style.scss +4 -54
  98. package/dist/cjs/with-wizard-screen/index.js +54 -58
  99. package/dist/cjs/with-wizard-screen/style.scss +41 -3
  100. package/dist/cjs/wizard/components/WizardError.js +20 -18
  101. package/dist/cjs/wizard/components/WizardSnackbar.js +26 -23
  102. package/dist/cjs/wizard/index.js +176 -114
  103. package/dist/cjs/wizard/store/index.js +171 -123
  104. package/dist/cjs/wizard/store/utils.js +13 -8
  105. package/dist/esm/accordion/index.js +14 -9
  106. package/dist/esm/action-card/index.js +168 -123
  107. package/dist/esm/autocomplete-tokenfield/index.js +248 -222
  108. package/dist/esm/autocomplete-with-latest-posts/index.js +169 -103
  109. package/dist/esm/autocomplete-with-suggestions/index.js +226 -119
  110. package/dist/esm/badge/index.js +5 -5
  111. package/dist/esm/box-contrast/index.js +15 -11
  112. package/dist/esm/button/index.js +39 -21
  113. package/dist/esm/button-props/button-props.js +1 -1
  114. package/dist/esm/card/core-card.js +109 -47
  115. package/dist/esm/card/index.js +69 -54
  116. package/dist/esm/card/style-core.scss +93 -25
  117. package/dist/esm/card/style.scss +2 -2
  118. package/dist/esm/card-feature/index.js +131 -0
  119. package/dist/esm/card-feature/style.scss +75 -0
  120. package/dist/esm/card-form/index.js +134 -0
  121. package/dist/esm/card-form/style.scss +20 -0
  122. package/dist/esm/card-settings-group/index.js +33 -14
  123. package/dist/esm/card-sortable-list/index.js +170 -126
  124. package/dist/esm/category-autocomplete/index.js +168 -140
  125. package/dist/esm/color-picker/index.js +39 -21
  126. package/dist/esm/color-picker/index.test.js +78 -0
  127. package/dist/esm/color-picker/style.scss +11 -13
  128. package/dist/esm/confirm-dialog/index.js +85 -18
  129. package/dist/esm/consts.js +1 -1
  130. package/dist/esm/custom-select-control/index.js +34 -15
  131. package/dist/esm/dataviews/index.js +34 -0
  132. package/dist/esm/dataviews/style.scss +9 -0
  133. package/dist/esm/divider/index.js +24 -16
  134. package/dist/esm/footer/index.js +34 -28
  135. package/dist/esm/form-token-field/index.js +46 -27
  136. package/dist/esm/global-notices/index.js +3 -3
  137. package/dist/esm/grid/index.js +23 -14
  138. package/dist/esm/grid/style.scss +6 -1
  139. package/dist/esm/handoff/index.js +199 -143
  140. package/dist/esm/handoff-message/index.js +10 -6
  141. package/dist/esm/hooks/index.js +8 -6
  142. package/dist/esm/hooks/use-confirm-dialog.js +73 -0
  143. package/dist/esm/hooks/use-unsaved-changes-dialog.js +136 -0
  144. package/dist/esm/hooks/useObjectState.js +19 -9
  145. package/dist/esm/hooks/useObjectState.test.js +54 -32
  146. package/dist/esm/hooks/useOnClickOutside.js +4 -4
  147. package/dist/esm/hooks/usePrompt.js +9 -11
  148. package/dist/esm/image-upload/index.js +110 -111
  149. package/dist/esm/image-upload/index.test.js +11 -13
  150. package/dist/esm/image-upload/style.scss +12 -40
  151. package/dist/esm/index.js +7 -1
  152. package/dist/esm/info-button/index.js +38 -19
  153. package/dist/esm/integration-icons/active-campaign.js +16 -0
  154. package/dist/esm/integration-icons/constant-contact.js +22 -0
  155. package/dist/esm/integration-icons/fundraise-up.js +19 -0
  156. package/dist/esm/integration-icons/index.js +6 -0
  157. package/dist/esm/integration-icons/mailchimp.js +13 -0
  158. package/dist/esm/integration-icons/salesforce.js +11 -0
  159. package/dist/esm/integration-icons/wisepops.js +14 -0
  160. package/dist/esm/modal/index.js +20 -13
  161. package/dist/esm/modal/style.scss +4 -0
  162. package/dist/esm/newspack-icon/index.js +40 -25
  163. package/dist/esm/notice/index.js +59 -42
  164. package/dist/esm/plugin-installer/index.js +255 -243
  165. package/dist/esm/plugin-settings/SettingsSection.js +61 -50
  166. package/dist/esm/plugin-settings/index.js +212 -189
  167. package/dist/esm/plugin-toggle/index.js +187 -190
  168. package/dist/esm/popover/index.js +35 -16
  169. package/dist/esm/position-control/index.js +22 -18
  170. package/dist/esm/progress-bar/index.js +66 -49
  171. package/dist/esm/progress-bar/index.test.js +61 -67
  172. package/dist/esm/radio-control/index.js +34 -15
  173. package/dist/esm/section-header/index.js +102 -57
  174. package/dist/esm/section-header/style.scss +31 -11
  175. package/dist/esm/select-control/ButtonGroupControl.js +23 -18
  176. package/dist/esm/select-control/GroupedSelectControl.js +38 -30
  177. package/dist/esm/select-control/index.js +47 -27
  178. package/dist/esm/settings/MinMaxSetting.js +27 -16
  179. package/dist/esm/settings/SettingsCard.js +18 -13
  180. package/dist/esm/settings/SettingsSection.js +20 -19
  181. package/dist/esm/settings/index.js +3 -3
  182. package/dist/esm/sortable-newsletter-list-control/index.js +74 -53
  183. package/dist/esm/steps-list/index.js +39 -21
  184. package/dist/esm/steps-list-item/index.js +42 -26
  185. package/dist/esm/style-card/index.js +65 -50
  186. package/dist/esm/tabbed-navigation/index.js +35 -33
  187. package/dist/esm/text-control/index.js +25 -19
  188. package/dist/esm/utils/color.js +4 -4
  189. package/dist/esm/utils/editor-toolbar-back-button.js +53 -0
  190. package/dist/esm/utils/index.js +29 -16
  191. package/dist/esm/utils/style.scss +8 -0
  192. package/dist/esm/waiting/index.js +43 -24
  193. package/dist/esm/web-preview/index.js +213 -201
  194. package/dist/esm/with-wizard/index.js +360 -358
  195. package/dist/esm/with-wizard/style.scss +4 -54
  196. package/dist/esm/with-wizard-screen/index.js +48 -46
  197. package/dist/esm/with-wizard-screen/style.scss +41 -3
  198. package/dist/esm/wizard/components/WizardError.js +18 -16
  199. package/dist/esm/wizard/components/WizardSnackbar.js +23 -17
  200. package/dist/esm/wizard/index.js +171 -103
  201. package/dist/esm/wizard/store/index.js +169 -116
  202. package/dist/esm/wizard/store/utils.js +13 -6
  203. package/package.json +30 -16
  204. package/release.config.js +1 -0
  205. package/shared/hooks/use-coauthors.js +195 -27
  206. package/shared/hooks/use-coauthors.test.js +232 -6
  207. package/shared/scss/_mixins.scss +13 -5
  208. package/src/accordion/index.js +8 -7
  209. package/src/action-card/index.js +15 -1
  210. package/src/badge/index.tsx +3 -1
  211. package/src/card/core-card.js +95 -18
  212. package/src/card/index.js +1 -0
  213. package/src/card/style-core.scss +93 -25
  214. package/src/card/style.scss +2 -2
  215. package/src/card-feature/README.md +188 -0
  216. package/src/card-feature/index.tsx +186 -0
  217. package/src/card-feature/style.scss +75 -0
  218. package/src/card-form/README.md +113 -0
  219. package/src/card-form/index.tsx +128 -0
  220. package/src/card-form/style.scss +20 -0
  221. package/src/card-settings-group/index.tsx +28 -3
  222. package/src/card-sortable-list/index.tsx +27 -4
  223. package/src/color-picker/index.js +15 -8
  224. package/src/color-picker/index.test.js +52 -0
  225. package/src/color-picker/style.scss +11 -13
  226. package/src/confirm-dialog/README.md +128 -0
  227. package/src/confirm-dialog/index.tsx +74 -6
  228. package/src/dataviews/index.tsx +34 -0
  229. package/src/dataviews/style.scss +9 -0
  230. package/src/grid/style.scss +6 -1
  231. package/src/handoff/README.md +93 -0
  232. package/src/handoff/index.js +46 -8
  233. package/src/hooks/index.ts +2 -1
  234. package/src/hooks/use-confirm-dialog.tsx +80 -0
  235. package/src/hooks/use-unsaved-changes-dialog.tsx +140 -0
  236. package/src/image-upload/index.js +10 -15
  237. package/src/image-upload/style.scss +12 -40
  238. package/src/index.js +7 -1
  239. package/src/integration-icons/active-campaign.js +14 -0
  240. package/src/integration-icons/constant-contact.js +22 -0
  241. package/src/integration-icons/fundraise-up.js +18 -0
  242. package/src/integration-icons/index.js +6 -0
  243. package/src/integration-icons/mailchimp.js +10 -0
  244. package/src/integration-icons/salesforce.js +10 -0
  245. package/src/integration-icons/wisepops.js +14 -0
  246. package/src/modal/style.scss +4 -0
  247. package/src/plugin-installer/index.js +30 -19
  248. package/src/section-header/index.js +56 -24
  249. package/src/section-header/style.scss +31 -11
  250. package/src/select-control/index.js +4 -0
  251. package/src/utils/editor-toolbar-back-button.tsx +48 -0
  252. package/src/utils/index.js +6 -0
  253. package/src/utils/style.scss +8 -0
  254. package/src/with-wizard/style.scss +4 -54
  255. package/src/with-wizard-screen/style.scss +41 -3
  256. package/src/wizard/index.js +90 -53
  257. package/src/wizard/store/index.js +2 -2
  258. package/dist/cjs/button-card/index.js +0 -72
  259. package/dist/cjs/button-card/style.scss +0 -180
  260. package/dist/esm/button-card/index.js +0 -64
  261. package/dist/esm/button-card/style.scss +0 -180
  262. package/src/button-card/index.js +0 -52
  263. 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.default = void 0;
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
- */class AutocompleteTokenField extends _element.Component {
28
- constructor(props) {
29
- super(props);
30
- this.state = {
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: this.isFetchingInfoOnLoad()
47
+ loading: _this.isFetchingInfoOnLoad()
34
48
  };
35
- this.debouncedUpdateSuggestions = (0, _debounce.default)(this.updateSuggestions, 500);
49
+ _this.debouncedUpdateSuggestions = (0, _debounce["default"])(_this.updateSuggestions, 500);
50
+ return _this;
36
51
  }
37
-
38
- /**
39
- * If the component has tokens passed in props, it should fetch info after it mounts.
40
- */
41
- isFetchingInfoOnLoad = () => {
42
- const {
43
- tokens,
44
- fetchSavedInfo
45
- } = this.props;
46
- return Boolean(tokens.length && fetchSavedInfo);
47
- };
48
-
49
- /**
50
- * When the component loads, fetch information about the tokens so we can populate
51
- * the tokens with the correct labels.
52
- */
53
- componentDidMount() {
54
- if (this.isFetchingInfoOnLoad()) {
55
- const {
56
- tokens,
57
- fetchSavedInfo
58
- } = this.props;
59
- fetchSavedInfo(tokens).then(results => {
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
- * When the component updates, fetch information about the tokens so we can populate
76
- * the tokens with the correct labels.
77
- */
78
- componentDidUpdate(prevProps) {
79
- const {
80
- tokens,
81
- fetchSavedInfo
82
- } = this.props;
83
- if (tokens !== prevProps.tokens && this.isFetchingInfoOnLoad()) {
84
- fetchSavedInfo(tokens).then(results => {
85
- const {
86
- validValues
87
- } = this.state;
88
- results.forEach(suggestion => {
89
- validValues[suggestion.value] = suggestion.label;
90
- });
91
- this.setState({
92
- validValues,
93
- loading: false
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
- * Clean up any unfinished autocomplete api call requests.
101
- */
102
- componentWillUnmount() {
103
- delete this.suggestionsRequest;
104
- this.debouncedUpdateSuggestions.cancel();
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
- * Get a list of values for input labels.
130
- *
131
- * @param {Array} labels Array of labels from the tokens.
132
- * @return {Array} Array of valid values corresponding to the labels.
133
- */
134
- getValuesForLabels(labels) {
135
- const {
136
- returnFullObjects
137
- } = this.props; // If this prop is passed, return both the value and label. Otherwise, return just the label.
138
- const {
139
- validValues
140
- } = this.state;
141
- if (returnFullObjects) {
142
- return labels.reduce((acc, label) => {
143
- Object.keys(validValues).forEach(key => {
144
- if (validValues[key] === label) {
145
- // Preserve numeric or string type of values. Object.keys will convert numbers to strings.
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
- * Refresh the autocomplete dropdown.
161
- *
162
- * @param {string} input Input to fetch suggestions for
163
- */
164
- updateSuggestions(input) {
165
- const {
166
- fetchSuggestions
167
- } = this.props;
168
- if (!fetchSuggestions) {
169
- return;
170
- }
171
- this.setState({
172
- loading: true
173
- }, () => {
174
- const request = fetchSuggestions(input);
175
- request.then(suggestions => {
176
- // A fetch Promise doesn't have an abort option. It's mimicked by
177
- // comparing the request reference in on the instance, which is
178
- // reset or deleted on subsequent requests or unmounting.
179
- if (this.suggestionsRequest !== request) {
180
- return;
181
- }
182
- const {
183
- validValues
184
- } = this.state;
185
- const currentSuggestions = [...suggestions];
186
- suggestions.forEach(suggestion => {
187
- validValues[suggestion.value] = suggestion.label;
188
- });
189
- this.setState({
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
- }).catch(() => {
195
- if (this.suggestionsRequest === request) {
196
- this.setState({
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
- this.suggestionsRequest = request;
202
- });
203
- }
213
+ }
204
214
 
205
- /**
206
- * When a token is selected, we need to convert the string label into a recognized value suitable for saving as an attribute.
207
- *
208
- * @param {Array} tokenStrings An array of token label strings.
209
- */
210
- handleOnChange(tokenStrings) {
211
- const {
212
- onChange
213
- } = this.props;
214
- onChange(this.getValuesForLabels(tokenStrings));
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
- * To populate the tokens, we need to convert the values into a human-readable label.
219
- *
220
- * @return {Array} An array of token label strings.
221
- */
222
- getTokens() {
223
- const {
224
- tokens
225
- } = this.props;
226
- return this.getLabelsForValues(tokens);
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
- * Render.
231
- */
232
- render() {
233
- const {
234
- help,
235
- label = '',
236
- placeholder = '',
237
- maxLength,
238
- style,
239
- __next40pxDefaultSize
240
- } = this.props;
241
- const {
242
- suggestions,
243
- loading
244
- } = this.state;
245
- const classNames = ['newspack-autocomplete-tokenfield__input-container'];
246
- if (label) {
247
- classNames.push('has-label');
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
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
250
- className: "newspack-autocomplete-tokenfield",
251
- style: style,
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;