newspack-components 2.1.0 → 2.2.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 (268) hide show
  1. package/dist/cjs/accordion/index.js +46 -0
  2. package/dist/cjs/accordion/style.scss +27 -0
  3. package/dist/cjs/action-card/index.js +48 -25
  4. package/dist/cjs/action-card/style.scss +100 -23
  5. package/dist/cjs/autocomplete-tokenfield/index.js +13 -41
  6. package/dist/cjs/autocomplete-tokenfield/style.scss +2 -2
  7. package/dist/cjs/autocomplete-with-suggestions/index.js +30 -51
  8. package/dist/cjs/autocomplete-with-suggestions/style.scss +16 -15
  9. package/dist/cjs/button/index.js +5 -13
  10. package/dist/cjs/button-card/index.js +1 -10
  11. package/dist/cjs/button-card/style.scss +13 -13
  12. package/dist/cjs/card/index.js +1 -8
  13. package/dist/cjs/card/style.scss +25 -8
  14. package/dist/cjs/category-autocomplete/index.js +18 -38
  15. package/dist/cjs/category-autocomplete/style.scss +0 -2
  16. package/dist/cjs/color-picker/index.js +1 -15
  17. package/dist/cjs/color-picker/style.scss +0 -3
  18. package/dist/cjs/consts.js +5 -3
  19. package/dist/cjs/custom-select-control/index.js +1 -9
  20. package/dist/cjs/custom-select-control/style.scss +6 -7
  21. package/dist/cjs/date-range-picker/index.js +1 -10
  22. package/dist/cjs/date-range-picker/style.scss +12 -12
  23. package/dist/cjs/footer/index.js +5 -17
  24. package/dist/cjs/footer/style.scss +5 -5
  25. package/dist/cjs/form-token-field/index.js +1 -9
  26. package/dist/cjs/form-token-field/style.scss +2 -3
  27. package/dist/cjs/global-notices/index.js +1 -8
  28. package/dist/cjs/grid/index.js +1 -8
  29. package/dist/cjs/grid/style.scss +5 -5
  30. package/dist/cjs/handoff/index.js +8 -17
  31. package/dist/cjs/handoff-message/index.js +50 -0
  32. package/dist/cjs/hooks/index.js +1 -7
  33. package/dist/cjs/hooks/useObjectState.js +7 -13
  34. package/dist/cjs/hooks/useObjectState.test.js +0 -14
  35. package/dist/cjs/hooks/useOnClickOutside.js +3 -6
  36. package/dist/cjs/hooks/usePrompt.js +1 -13
  37. package/dist/cjs/image-upload/index.js +21 -19
  38. package/dist/cjs/image-upload/index.test.js +0 -5
  39. package/dist/cjs/image-upload/style.scss +5 -9
  40. package/dist/cjs/index.js +28 -44
  41. package/dist/cjs/info-button/index.js +3 -11
  42. package/dist/cjs/info-button/style.scss +1 -3
  43. package/dist/cjs/modal/index.js +1 -9
  44. package/dist/cjs/modal/style.scss +8 -8
  45. package/dist/cjs/newspack-icon/index.js +1 -9
  46. package/dist/cjs/newspack-icon/style.scss +4 -4
  47. package/dist/cjs/newspack-logo/index.js +1 -9
  48. package/dist/cjs/newspack-logo/style.scss +3 -3
  49. package/dist/cjs/notice/index.js +8 -15
  50. package/dist/cjs/notice/style.scss +28 -15
  51. package/dist/cjs/patrons-logo/index.js +3 -11
  52. package/dist/cjs/plugin-installer/index.js +36 -36
  53. package/dist/cjs/plugin-installer/style.scss +5 -5
  54. package/dist/cjs/plugin-settings/SettingsSection.js +9 -28
  55. package/dist/cjs/plugin-settings/index.js +39 -22
  56. package/dist/cjs/plugin-toggle/index.js +40 -33
  57. package/dist/cjs/plugin-toggle/style.scss +2 -2
  58. package/dist/cjs/popover/index.js +1 -11
  59. package/dist/cjs/popover/style.scss +19 -16
  60. package/dist/cjs/position-control/index.js +113 -0
  61. package/dist/cjs/position-control/style.scss +66 -0
  62. package/dist/cjs/progress-bar/index.js +2 -9
  63. package/dist/cjs/progress-bar/index.test.js +2 -7
  64. package/dist/cjs/progress-bar/style.scss +4 -4
  65. package/dist/cjs/proxied-imports/router.js +0 -3
  66. package/dist/cjs/radio-control/index.js +1 -11
  67. package/dist/cjs/radio-control/style.scss +9 -9
  68. package/dist/cjs/section-header/index.js +44 -29
  69. package/dist/cjs/section-header/style.scss +2 -2
  70. package/dist/cjs/select-control/ButtonGroupControl.js +4 -13
  71. package/dist/cjs/select-control/GroupedSelectControl.js +9 -15
  72. package/dist/cjs/select-control/index.js +5 -12
  73. package/dist/cjs/select-control/style.scss +2 -2
  74. package/dist/cjs/settings/MinMaxSetting.js +3 -7
  75. package/dist/cjs/settings/SettingsCard.js +3 -7
  76. package/dist/cjs/settings/SettingsSection.js +1 -4
  77. package/dist/cjs/settings/index.js +0 -6
  78. package/dist/cjs/settings/style.scss +1 -1
  79. package/dist/cjs/steps-list/index.js +52 -0
  80. package/dist/cjs/steps-list/style.scss +11 -0
  81. package/dist/cjs/steps-list-item/index.js +56 -0
  82. package/dist/cjs/steps-list-item/style.scss +47 -0
  83. package/dist/cjs/style-card/index.js +6 -13
  84. package/dist/cjs/style-card/style.scss +9 -12
  85. package/dist/cjs/style.scss +5 -6
  86. package/dist/cjs/tabbed-navigation/index.js +19 -16
  87. package/dist/cjs/tabbed-navigation/style.scss +3 -4
  88. package/dist/cjs/text-control/index.js +6 -16
  89. package/dist/cjs/utils/index.js +10 -5
  90. package/dist/cjs/waiting/index.js +1 -9
  91. package/dist/cjs/web-preview/index.js +13 -28
  92. package/dist/cjs/web-preview/style.scss +14 -14
  93. package/dist/cjs/with-wizard/index.js +51 -31
  94. package/dist/cjs/with-wizard/style.scss +35 -37
  95. package/dist/cjs/with-wizard-screen/index.js +11 -17
  96. package/dist/cjs/with-wizard-screen/style.scss +14 -17
  97. package/dist/cjs/wizard/components/WizardError.js +3 -15
  98. package/dist/cjs/wizard/index.js +10 -24
  99. package/dist/cjs/wizard/store/index.js +42 -55
  100. package/dist/cjs/wizard/store/utils.js +1 -6
  101. package/dist/esm/accordion/index.js +38 -0
  102. package/dist/esm/accordion/style.scss +27 -0
  103. package/dist/esm/action-card/index.js +50 -21
  104. package/dist/esm/action-card/style.scss +100 -23
  105. package/dist/esm/autocomplete-tokenfield/index.js +14 -37
  106. package/dist/esm/autocomplete-tokenfield/style.scss +2 -2
  107. package/dist/esm/autocomplete-with-suggestions/index.js +28 -41
  108. package/dist/esm/autocomplete-with-suggestions/style.scss +16 -15
  109. package/dist/esm/button/index.js +5 -7
  110. package/dist/esm/button-card/index.js +2 -5
  111. package/dist/esm/button-card/style.scss +13 -13
  112. package/dist/esm/card/index.js +2 -5
  113. package/dist/esm/card/style.scss +25 -8
  114. package/dist/esm/category-autocomplete/index.js +17 -30
  115. package/dist/esm/category-autocomplete/style.scss +0 -2
  116. package/dist/esm/color-picker/index.js +2 -4
  117. package/dist/esm/color-picker/style.scss +0 -3
  118. package/dist/esm/consts.js +3 -2
  119. package/dist/esm/custom-select-control/index.js +2 -5
  120. package/dist/esm/custom-select-control/style.scss +6 -7
  121. package/dist/esm/date-range-picker/index.js +1 -3
  122. package/dist/esm/date-range-picker/style.scss +12 -12
  123. package/dist/esm/footer/index.js +3 -11
  124. package/dist/esm/footer/style.scss +5 -5
  125. package/dist/esm/form-token-field/index.js +2 -5
  126. package/dist/esm/form-token-field/style.scss +2 -3
  127. package/dist/esm/global-notices/index.js +1 -6
  128. package/dist/esm/grid/index.js +2 -5
  129. package/dist/esm/grid/style.scss +5 -5
  130. package/dist/esm/handoff/index.js +3 -14
  131. package/dist/esm/handoff-message/index.js +45 -0
  132. package/dist/esm/hooks/index.js +0 -2
  133. package/dist/esm/hooks/useObjectState.js +3 -8
  134. package/dist/esm/hooks/useObjectState.test.js +0 -3
  135. package/dist/esm/hooks/useOnClickOutside.js +2 -5
  136. package/dist/esm/hooks/usePrompt.js +1 -8
  137. package/dist/esm/image-upload/index.js +17 -16
  138. package/dist/esm/image-upload/style.scss +5 -9
  139. package/dist/esm/index.js +4 -0
  140. package/dist/esm/info-button/index.js +4 -6
  141. package/dist/esm/info-button/style.scss +1 -3
  142. package/dist/esm/modal/index.js +2 -5
  143. package/dist/esm/modal/style.scss +8 -8
  144. package/dist/esm/newspack-icon/index.js +2 -5
  145. package/dist/esm/newspack-icon/style.scss +4 -4
  146. package/dist/esm/newspack-logo/index.js +2 -5
  147. package/dist/esm/newspack-logo/style.scss +3 -3
  148. package/dist/esm/notice/index.js +4 -8
  149. package/dist/esm/notice/style.scss +28 -15
  150. package/dist/esm/patrons-logo/index.js +3 -5
  151. package/dist/esm/plugin-installer/index.js +35 -39
  152. package/dist/esm/plugin-installer/style.scss +5 -5
  153. package/dist/esm/plugin-settings/SettingsSection.js +8 -21
  154. package/dist/esm/plugin-settings/index.js +38 -24
  155. package/dist/esm/plugin-toggle/index.js +39 -36
  156. package/dist/esm/plugin-toggle/style.scss +2 -2
  157. package/dist/esm/popover/index.js +3 -6
  158. package/dist/esm/popover/style.scss +19 -16
  159. package/dist/esm/position-control/index.js +109 -0
  160. package/dist/esm/position-control/style.scss +66 -0
  161. package/dist/esm/progress-bar/index.js +2 -7
  162. package/dist/esm/progress-bar/index.test.js +2 -1
  163. package/dist/esm/progress-bar/style.scss +4 -4
  164. package/dist/esm/proxied-imports/router.js +1 -0
  165. package/dist/esm/radio-control/index.js +3 -6
  166. package/dist/esm/radio-control/style.scss +9 -9
  167. package/dist/esm/section-header/index.js +44 -25
  168. package/dist/esm/section-header/style.scss +2 -2
  169. package/dist/esm/select-control/ButtonGroupControl.js +5 -7
  170. package/dist/esm/select-control/GroupedSelectControl.js +5 -6
  171. package/dist/esm/select-control/index.js +6 -6
  172. package/dist/esm/select-control/style.scss +2 -2
  173. package/dist/esm/settings/MinMaxSetting.js +1 -3
  174. package/dist/esm/settings/SettingsCard.js +3 -4
  175. package/dist/esm/settings/SettingsSection.js +0 -2
  176. package/dist/esm/settings/style.scss +1 -1
  177. package/dist/esm/steps-list/index.js +43 -0
  178. package/dist/esm/steps-list/style.scss +11 -0
  179. package/dist/esm/steps-list-item/index.js +48 -0
  180. package/dist/esm/steps-list-item/style.scss +47 -0
  181. package/dist/esm/style-card/index.js +2 -5
  182. package/dist/esm/style-card/style.scss +9 -12
  183. package/dist/esm/style.scss +5 -6
  184. package/dist/esm/tabbed-navigation/index.js +20 -10
  185. package/dist/esm/tabbed-navigation/style.scss +3 -4
  186. package/dist/esm/text-control/index.js +2 -9
  187. package/dist/esm/utils/index.js +9 -3
  188. package/dist/esm/waiting/index.js +2 -5
  189. package/dist/esm/web-preview/index.js +9 -24
  190. package/dist/esm/web-preview/style.scss +14 -14
  191. package/dist/esm/with-wizard/index.js +49 -34
  192. package/dist/esm/with-wizard/style.scss +35 -37
  193. package/dist/esm/with-wizard-screen/index.js +9 -11
  194. package/dist/esm/with-wizard-screen/style.scss +14 -17
  195. package/dist/esm/wizard/components/WizardError.js +1 -10
  196. package/dist/esm/wizard/index.js +10 -12
  197. package/dist/esm/wizard/store/index.js +40 -46
  198. package/dist/esm/wizard/store/utils.js +1 -1
  199. package/package.json +4 -4
  200. package/shared/js/button-props.js +3 -1
  201. package/shared/scss/_mixins.scss +12 -0
  202. package/src/accordion/index.js +32 -0
  203. package/src/accordion/style.scss +27 -0
  204. package/src/action-card/index.js +43 -8
  205. package/src/action-card/style.scss +100 -23
  206. package/src/autocomplete-tokenfield/index.js +1 -1
  207. package/src/autocomplete-tokenfield/style.scss +2 -2
  208. package/src/autocomplete-with-suggestions/style.scss +16 -15
  209. package/src/button-card/style.scss +13 -13
  210. package/src/card/style.scss +25 -8
  211. package/src/category-autocomplete/index.js +3 -1
  212. package/src/category-autocomplete/style.scss +0 -2
  213. package/src/color-picker/style.scss +0 -3
  214. package/src/consts.js +2 -1
  215. package/src/custom-select-control/style.scss +6 -7
  216. package/src/date-range-picker/style.scss +12 -12
  217. package/src/footer/index.js +2 -2
  218. package/src/footer/style.scss +5 -5
  219. package/src/form-token-field/index.js +2 -7
  220. package/src/form-token-field/style.scss +2 -3
  221. package/src/grid/style.scss +5 -5
  222. package/src/handoff/index.js +3 -8
  223. package/src/handoff-message/index.js +39 -0
  224. package/src/hooks/useObjectState.js +2 -1
  225. package/src/image-upload/index.js +9 -3
  226. package/src/image-upload/style.scss +5 -9
  227. package/src/index.js +4 -0
  228. package/src/info-button/style.scss +1 -3
  229. package/src/modal/style.scss +8 -8
  230. package/src/newspack-icon/style.scss +4 -4
  231. package/src/newspack-logo/style.scss +3 -3
  232. package/src/notice/index.js +2 -0
  233. package/src/notice/style.scss +28 -15
  234. package/src/plugin-installer/index.js +15 -2
  235. package/src/plugin-installer/style.scss +5 -5
  236. package/src/plugin-settings/SettingsSection.js +7 -13
  237. package/src/plugin-settings/index.js +7 -2
  238. package/src/plugin-toggle/index.js +2 -3
  239. package/src/plugin-toggle/style.scss +2 -2
  240. package/src/popover/style.scss +19 -16
  241. package/src/position-control/index.js +122 -0
  242. package/src/position-control/style.scss +66 -0
  243. package/src/progress-bar/style.scss +4 -4
  244. package/src/radio-control/style.scss +9 -9
  245. package/src/section-header/index.js +32 -15
  246. package/src/section-header/style.scss +2 -2
  247. package/src/select-control/ButtonGroupControl.js +3 -0
  248. package/src/select-control/GroupedSelectControl.js +2 -1
  249. package/src/select-control/index.js +6 -2
  250. package/src/select-control/style.scss +2 -2
  251. package/src/settings/style.scss +1 -1
  252. package/src/steps-list/index.js +39 -0
  253. package/src/steps-list/style.scss +11 -0
  254. package/src/steps-list-item/index.js +40 -0
  255. package/src/steps-list-item/style.scss +47 -0
  256. package/src/style-card/index.js +2 -11
  257. package/src/style-card/style.scss +9 -12
  258. package/src/style.scss +5 -6
  259. package/src/tabbed-navigation/index.js +12 -4
  260. package/src/tabbed-navigation/style.scss +3 -4
  261. package/src/utils/index.js +9 -0
  262. package/src/web-preview/index.js +1 -1
  263. package/src/web-preview/style.scss +14 -14
  264. package/src/with-wizard/style.scss +35 -37
  265. package/src/with-wizard-screen/index.js +4 -1
  266. package/src/with-wizard-screen/style.scss +14 -17
  267. package/src/wizard/index.js +15 -3
  268. package/src/wizard/store/index.js +8 -2
@@ -1,42 +1,34 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
9
  var _apiFetch = _interopRequireDefault(require("@wordpress/api-fetch"));
13
-
14
10
  var _element = require("@wordpress/element");
15
-
16
11
  var _i18n = require("@wordpress/i18n");
17
-
18
12
  var _icons = require("@wordpress/icons");
19
-
20
13
  var _ = require("../");
21
-
22
14
  require("./style.scss");
23
-
24
15
  var _classnames = _interopRequireDefault(require("classnames"));
25
-
26
16
  var _jsxRuntime = require("@emotion/react/jsx-runtime");
27
-
28
17
  /**
29
18
  * Plugin Installer
30
19
  */
31
-
32
20
  /**
33
21
  * WordPress dependencies.
34
22
  */
35
23
  const __ = _i18n.__;
24
+ /**
25
+ * Internal dependencies.
26
+ */
36
27
  const PLUGIN_STATE_NONE = 0;
37
28
  const PLUGIN_STATE_ACTIVE = 1;
38
29
  const PLUGIN_STATE_INSTALLING = 2;
39
30
  const PLUGIN_STATE_ERROR = 3;
31
+
40
32
  /**
41
33
  * External dependencies.
42
34
  */
@@ -47,7 +39,6 @@ const PLUGIN_STATE_ERROR = 3;
47
39
  class PluginInstaller extends _element.Component {
48
40
  constructor() {
49
41
  var _this;
50
-
51
42
  super(...arguments);
52
43
  _this = this;
53
44
  (0, _defineProperty2.default)(this, "componentDidMount", () => {
@@ -68,11 +59,9 @@ class PluginInstaller extends _element.Component {
68
59
  const {
69
60
  installationInitialized
70
61
  } = this.state;
71
-
72
62
  if (plugins !== prevProps.plugins) {
73
63
  this.retrievePluginInfo(plugins);
74
64
  }
75
-
76
65
  if (autoInstall && !installationInitialized) {
77
66
  this.installAllPlugins();
78
67
  }
@@ -86,8 +75,8 @@ class PluginInstaller extends _element.Component {
86
75
  if (plugins.indexOf(slug) === -1) {
87
76
  return result;
88
77
  }
89
-
90
- result[slug] = { ...response[slug],
78
+ result[slug] = {
79
+ ...response[slug],
91
80
  installationStatus: response[slug].Status === 'active' ? PLUGIN_STATE_ACTIVE : PLUGIN_STATE_NONE
92
81
  };
93
82
  return result;
@@ -117,8 +106,10 @@ class PluginInstaller extends _element.Component {
117
106
  pluginInfo
118
107
  } = this.state;
119
108
  this.props.onInstalled(slug);
120
- this.updatePluginInfo({ ...pluginInfo,
121
- [slug]: { ...response,
109
+ this.updatePluginInfo({
110
+ ...pluginInfo,
111
+ [slug]: {
112
+ ...response,
122
113
  installationStatus: PLUGIN_STATE_ACTIVE
123
114
  }
124
115
  });
@@ -130,8 +121,10 @@ class PluginInstaller extends _element.Component {
130
121
  const {
131
122
  pluginInfo
132
123
  } = this.state;
133
- this.updatePluginInfo({ ...pluginInfo,
134
- [slug]: { ...pluginInfo[slug],
124
+ this.updatePluginInfo({
125
+ ...pluginInfo,
126
+ [slug]: {
127
+ ...pluginInfo[slug],
135
128
  checked
136
129
  }
137
130
  });
@@ -141,9 +134,10 @@ class PluginInstaller extends _element.Component {
141
134
  const {
142
135
  pluginInfo
143
136
  } = _this.state;
144
-
145
- _this.updatePluginInfo({ ...pluginInfo,
146
- [slug]: { ...pluginInfo[slug],
137
+ _this.updatePluginInfo({
138
+ ...pluginInfo,
139
+ [slug]: {
140
+ ...pluginInfo[slug],
147
141
  installationStatus,
148
142
  notification
149
143
  }
@@ -172,13 +166,10 @@ class PluginInstaller extends _element.Component {
172
166
  switch (status) {
173
167
  case PLUGIN_STATE_ACTIVE:
174
168
  return 'newspack-plugin-installer__status-active';
175
-
176
169
  case PLUGIN_STATE_INSTALLING:
177
170
  return 'newspack-plugin-installer__status-installing';
178
-
179
171
  case PLUGIN_STATE_ERROR:
180
172
  return 'newspack-plugin-installer__status-error';
181
-
182
173
  default:
183
174
  return 'newspack-plugin-installer__status-none';
184
175
  }
@@ -188,7 +179,6 @@ class PluginInstaller extends _element.Component {
188
179
  installationInitialized: false
189
180
  };
190
181
  }
191
-
192
182
  /**
193
183
  * Render.
194
184
  */
@@ -201,16 +191,20 @@ class PluginInstaller extends _element.Component {
201
191
  const {
202
192
  pluginInfo
203
193
  } = this.state;
204
- const slugs = Object.keys(pluginInfo); // Store all plugin status info for installer button text value based on current status.
194
+ const {
195
+ is_atomic: isAtomic
196
+ } = window;
197
+ const slugs = Object.keys(pluginInfo);
205
198
 
199
+ // Store all plugin status info for installer button text value based on current status.
206
200
  const currentPluginStatuses = [];
207
201
  slugs.forEach(slug => {
208
202
  const plugin = pluginInfo[slug];
209
203
  currentPluginStatuses.push(plugin.Status);
210
- }); // Make sure plugin status falls in either one of these, to handle button text.
204
+ });
211
205
 
206
+ // Make sure plugin status falls in either one of these, to handle button text.
212
207
  const pluginInstalled = currentStatus => currentStatus === 'active' || currentStatus === 'inactive';
213
-
214
208
  const buttonText = currentPluginStatuses.every(pluginInstalled) ? __('Activate', 'newspack') : __('Install', 'newspack');
215
209
  const needsInstall = slugs.some(slug => {
216
210
  const plugin = pluginInfo[slug];
@@ -227,16 +221,24 @@ class PluginInstaller extends _element.Component {
227
221
  const {
228
222
  Name,
229
223
  Description,
224
+ Download,
230
225
  Status,
231
226
  installationStatus,
232
227
  notification
233
228
  } = plugin;
234
229
  const isWaiting = installationStatus === PLUGIN_STATE_INSTALLING;
235
230
  const isButton = !isWaiting && Status !== 'active';
231
+ const installable = Download || pluginInstalled(Status);
236
232
  let actionText;
237
-
238
233
  if (installationStatus === PLUGIN_STATE_INSTALLING) {
239
- actionText = __('Installing…');
234
+ actionText = 'inactive' === Status ? __('Activating…') : __('Installing…');
235
+ } else if (!installable) {
236
+ actionText = (0, _jsxRuntime.jsxs)("span", {
237
+ className: "newspack-plugin-installer__status",
238
+ children: [isAtomic ? __('Contact Newspack support to install', 'newspack') : __('Plugin must be installed manually', 'newspack'), (0, _jsxRuntime.jsx)("span", {
239
+ className: "newspack-checkbox-icon"
240
+ })]
241
+ });
240
242
  } else if (Status === 'uninstalled') {
241
243
  actionText = (0, _jsxRuntime.jsxs)("span", {
242
244
  className: "newspack-plugin-installer__status",
@@ -262,12 +264,12 @@ class PluginInstaller extends _element.Component {
262
264
  })]
263
265
  });
264
266
  }
265
-
266
267
  const classes = (0, _classnames.default)('newspack-action-card__plugin-installer', this.classForInstallationStatus(installationStatus));
267
268
  const onClick = isButton ? () => this.installPlugin(slug) : null;
268
269
  return (0, _jsxRuntime.jsx)(_.ActionCard, {
269
270
  title: Name,
270
271
  description: Description,
272
+ disabled: !installable,
271
273
  actionText: actionText,
272
274
  isSmall: isSmall,
273
275
  isWaiting: isWaiting,
@@ -288,9 +290,7 @@ class PluginInstaller extends _element.Component {
288
290
  })]
289
291
  });
290
292
  }
291
-
292
293
  }
293
-
294
294
  PluginInstaller.defaultProps = {
295
295
  onStatus: () => {},
296
296
  onInstalled: () => {}
@@ -2,7 +2,7 @@
2
2
  * Plugin Installer
3
3
  */
4
4
 
5
- @import '~@wordpress/base-styles/colors';
5
+ @use '~@wordpress/base-styles/colors' as wp-colors;
6
6
 
7
7
  .newspack-card {
8
8
  .newspack-plugin-installer__status {
@@ -35,10 +35,10 @@
35
35
  }
36
36
 
37
37
  &.newspack-plugin-installer__status-active {
38
- box-shadow: inset 4px 0 0 $alert-green;
38
+ box-shadow: inset 4px 0 0 wp-colors.$alert-green;
39
39
 
40
40
  .newspack-plugin-installer__checkbox {
41
- background: $alert-green;
41
+ background: wp-colors.$alert-green;
42
42
  box-shadow: none;
43
43
  }
44
44
 
@@ -48,12 +48,12 @@
48
48
  }
49
49
 
50
50
  &.newspack-plugin-installer__status-error {
51
- box-shadow: inset 4px 0 0 $alert-red;
51
+ box-shadow: inset 4px 0 0 wp-colors.$alert-red;
52
52
  }
53
53
 
54
54
  &.newspack-plugin-installer__status-installing,
55
55
  &.newspack-plugin-installer__status-none {
56
- box-shadow: inset 4px 0 0 $gray-100;
56
+ box-shadow: inset 4px 0 0 wp-colors.$gray-100;
57
57
  }
58
58
 
59
59
  // Is Small
@@ -4,49 +4,38 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _element = require("@wordpress/element");
9
-
10
8
  var _hooks = require("@wordpress/hooks");
11
-
12
9
  var _i18n = require("@wordpress/i18n");
13
-
14
10
  var _components = require("@wordpress/components");
15
-
16
11
  var _ = require("../");
17
-
18
12
  require("./style.scss");
19
-
20
13
  var _jsxRuntime = require("@emotion/react/jsx-runtime");
21
-
22
14
  /**
23
15
  * Ads Settings Section.
24
16
  */
25
-
26
17
  /**
27
18
  * WordPress dependencies
28
19
  */
29
20
  const __ = _i18n.__;
30
-
21
+ /**
22
+ * Internal dependencies
23
+ */
31
24
  const isSelectControl = setting => {
32
25
  return Array.isArray(setting.options) && setting.options.length;
33
26
  };
34
-
35
27
  const getControlComponent = setting => {
36
28
  if (isSelectControl(setting)) {
37
29
  return _.SelectControl;
38
30
  }
39
-
40
31
  switch (setting.type) {
41
32
  case 'checkbox':
42
33
  case 'boolean':
43
34
  return _components.CheckboxControl;
44
-
45
35
  default:
46
36
  return _.TextControl;
47
37
  }
48
38
  };
49
-
50
39
  const getControlType = setting => {
51
40
  switch (setting.type) {
52
41
  case 'int':
@@ -54,24 +43,20 @@ const getControlType = setting => {
54
43
  case 'float':
55
44
  case 'number':
56
45
  return 'number';
57
-
58
46
  case 'string':
59
47
  case 'text':
60
48
  return 'text';
61
-
62
49
  case 'password':
63
50
  return 'password';
64
-
65
51
  case 'boolean':
66
52
  case 'checkbox':
67
53
  return 'checkbox';
68
-
69
54
  default:
70
55
  return null;
71
56
  }
72
57
  };
73
-
74
58
  const SettingsSection = props => {
59
+ const [saveDisabled, setSaveDisabled] = (0, _element.useState)(true);
75
60
  const {
76
61
  error,
77
62
  sectionKey,
@@ -83,7 +68,6 @@ const SettingsSection = props => {
83
68
  onChange,
84
69
  onUpdate
85
70
  } = props;
86
-
87
71
  const getControlProps = setting => ({
88
72
  disabled,
89
73
  name: `${setting.section}_${setting.key}`,
@@ -99,22 +83,19 @@ const SettingsSection = props => {
99
83
  checked: setting.type === 'boolean' ? !!setting.value : null,
100
84
  onChange: value => {
101
85
  onChange(setting.key, value);
86
+ setSaveDisabled(false);
102
87
  }
103
88
  });
104
-
105
89
  const createFilter = function (name) {
106
90
  let defaultComponent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
107
91
  return (0, _hooks.applyFilters)(`newspack.settingSection.${sectionKey}.${name}`, defaultComponent, props);
108
92
  };
109
-
110
93
  let columns = 2;
111
-
112
94
  if (fields.length % 3 === 0) {
113
95
  columns = 3;
114
96
  } else if (fields.length === 1) {
115
97
  columns = 1;
116
98
  }
117
-
118
99
  return (0, _jsxRuntime.jsx)(_.ActionCard, {
119
100
  isMedium: true,
120
101
  disabled: disabled,
@@ -127,9 +108,10 @@ const SettingsSection = props => {
127
108
  }) : null,
128
109
  actionContent: (active || null === active) && createFilter('buttons', (0, _jsxRuntime.jsx)(_.Button, {
129
110
  variant: "primary",
130
- disabled: disabled,
111
+ disabled: disabled || saveDisabled,
131
112
  onClick: () => {
132
113
  onUpdate();
114
+ setSaveDisabled(true);
133
115
  },
134
116
  children: __('Save Settings', 'newspack')
135
117
  })),
@@ -142,8 +124,8 @@ const SettingsSection = props => {
142
124
  gutter: 32,
143
125
  children: fields.map(setting => {
144
126
  const Control = getControlComponent(setting); // eslint-disable-line @wordpress/no-unused-vars-before-return, no-unused-vars
145
-
146
- return (0, _hooks.applyFilters)(`newspack.settingsSection.${sectionKey}.control`, (0, _jsxRuntime.jsx)(Control, { ...getControlProps(setting)
127
+ return (0, _hooks.applyFilters)(`newspack.settingsSection.${sectionKey}.control`, (0, _jsxRuntime.jsx)(Control, {
128
+ ...getControlProps(setting)
147
129
  }, setting.key), {
148
130
  sectionKey,
149
131
  setting,
@@ -154,6 +136,5 @@ const SettingsSection = props => {
154
136
  })
155
137
  });
156
138
  };
157
-
158
139
  var _default = SettingsSection;
159
140
  exports.default = _default;
@@ -1,37 +1,28 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
9
  var _classnames = _interopRequireDefault(require("classnames"));
13
-
14
10
  var _apiFetch = _interopRequireDefault(require("@wordpress/api-fetch"));
15
-
16
11
  var _element = require("@wordpress/element");
17
-
18
12
  var _i18n = require("@wordpress/i18n");
19
-
20
13
  var _ = require("../");
21
-
22
14
  var _SettingsSection = _interopRequireDefault(require("./SettingsSection"));
23
-
24
15
  var _jsxRuntime = require("@emotion/react/jsx-runtime");
25
-
26
16
  /**
27
17
  * External dependencies
28
18
  */
29
-
30
19
  /**
31
20
  * WordPress dependencies.
32
21
  */
22
+ /**
23
+ * Internal dependencies.
24
+ */
33
25
  const __ = _i18n.__;
34
-
35
26
  class PluginSettings extends _element.Component {
36
27
  constructor() {
37
28
  super(...arguments);
@@ -51,7 +42,6 @@ class PluginSettings extends _element.Component {
51
42
  settings,
52
43
  error: null
53
44
  });
54
-
55
45
  if ('function' === typeof afterFetch) {
56
46
  afterFetch(settings);
57
47
  }
@@ -79,7 +69,8 @@ class PluginSettings extends _element.Component {
79
69
  }
80
70
  });
81
71
  this.setState({
82
- settings: { ...this.state.settings,
72
+ settings: {
73
+ ...this.state.settings,
83
74
  [sectionKey]: sectionSettings
84
75
  }
85
76
  });
@@ -102,10 +93,12 @@ class PluginSettings extends _element.Component {
102
93
  }
103
94
  }).then(settings => {
104
95
  this.setState({
105
- settings,
96
+ settings: {
97
+ ...this.state.settings,
98
+ [sectionKey]: settings[sectionKey]
99
+ },
106
100
  error: null
107
101
  });
108
-
109
102
  if ('function' === typeof afterUpdate) {
110
103
  afterUpdate(settings);
111
104
  }
@@ -119,27 +112,55 @@ class PluginSettings extends _element.Component {
119
112
  });
120
113
  });
121
114
  });
115
+ /**
116
+ * Get the section setting containing section information.
117
+ *
118
+ * @param {string} sectionKey The section name.
119
+ * @return {Object} The section setting.
120
+ */
122
121
  (0, _defineProperty2.default)(this, "getSectionInfo", sectionKey => {
123
122
  return this.state.settings[sectionKey]?.find(setting => !setting.key || setting.key === 'active');
124
123
  });
124
+ /**
125
+ * Get the section title.
126
+ *
127
+ * @param {string} sectionKey The section name.
128
+ * @return {string} The section title.
129
+ */
125
130
  (0, _defineProperty2.default)(this, "getSectionTitle", sectionKey => {
126
131
  return this.getSectionInfo(sectionKey)?.description;
127
132
  });
133
+ /**
134
+ * Get the section description.
135
+ *
136
+ * @param {string} sectionKey The section name.
137
+ * @return {string} The section description.
138
+ */
128
139
  (0, _defineProperty2.default)(this, "getSectionDescription", sectionKey => {
129
140
  return this.getSectionInfo(sectionKey)?.help;
130
141
  });
142
+ /**
143
+ * Get whether a section is active.
144
+ *
145
+ * @param {string} sectionKey The section name.
146
+ * @return {?boolean} Whether the section is active or not. Null if the section is not found or does not support activation.
147
+ */
131
148
  (0, _defineProperty2.default)(this, "isSectionActive", sectionKey => {
132
149
  const {
133
150
  settings
134
151
  } = this.state;
135
152
  const activation = settings[sectionKey]?.find(setting => setting.key === 'active');
136
-
137
153
  if (!activation) {
138
154
  return null;
139
155
  }
140
-
141
156
  return activation.value;
142
157
  });
158
+ /**
159
+ * Get list of section field settings.
160
+ *
161
+ * @param {string} sectionKey The section name.
162
+ * @return {?Array} List of section fields.
163
+ */
143
164
  (0, _defineProperty2.default)(this, "getSectionFields", sectionKey => {
144
165
  return this.state.settings[sectionKey]?.filter(setting => setting.key && setting.key !== 'active');
145
166
  });
@@ -149,11 +170,9 @@ class PluginSettings extends _element.Component {
149
170
  error: null
150
171
  };
151
172
  }
152
-
153
173
  componentDidMount() {
154
174
  this.fetchSettings();
155
175
  }
156
-
157
176
  /**
158
177
  * Render.
159
178
  */
@@ -194,9 +213,7 @@ class PluginSettings extends _element.Component {
194
213
  })]
195
214
  });
196
215
  }
197
-
198
216
  }
199
-
200
217
  PluginSettings.defaultProps = {
201
218
  title: __('General Settings', 'newspack')
202
219
  };