newspack-components 2.0.1 → 2.1.0

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 (251) hide show
  1. package/copy-styles.js +1 -1
  2. package/dist/cjs/action-card/index.js +32 -22
  3. package/dist/cjs/action-card/style.scss +52 -27
  4. package/dist/cjs/autocomplete-tokenfield/style.scss +4 -4
  5. package/dist/cjs/autocomplete-with-suggestions/index.js +3 -2
  6. package/dist/cjs/autocomplete-with-suggestions/style.scss +19 -20
  7. package/dist/cjs/button/index.js +2 -13
  8. package/dist/cjs/button/style.scss +3 -344
  9. package/dist/cjs/button-card/index.js +11 -6
  10. package/dist/cjs/button-card/style.scss +69 -35
  11. package/dist/cjs/card/index.js +3 -1
  12. package/dist/cjs/card/style.scss +34 -61
  13. package/dist/cjs/category-autocomplete/index.js +52 -13
  14. package/dist/cjs/category-autocomplete/style.scss +19 -15
  15. package/dist/cjs/color-picker/index.js +17 -35
  16. package/dist/cjs/color-picker/style.scss +20 -160
  17. package/dist/cjs/custom-select-control/style.scss +12 -42
  18. package/dist/cjs/footer/index.js +21 -7
  19. package/dist/cjs/footer/style.scss +9 -10
  20. package/dist/cjs/form-token-field/index.js +2 -2
  21. package/dist/cjs/form-token-field/style.scss +8 -103
  22. package/dist/cjs/global-notices/index.js +2 -1
  23. package/dist/cjs/grid/index.js +1 -1
  24. package/dist/cjs/grid/style.scss +29 -1
  25. package/dist/cjs/handoff/index.js +7 -7
  26. package/dist/cjs/image-upload/index.js +1 -1
  27. package/dist/cjs/image-upload/style.scss +10 -11
  28. package/dist/cjs/index.js +7 -53
  29. package/dist/cjs/modal/index.js +0 -3
  30. package/dist/cjs/modal/style.scss +19 -131
  31. package/dist/cjs/newspack-icon/index.js +4 -2
  32. package/dist/cjs/newspack-icon/style.scss +15 -0
  33. package/dist/cjs/notice/index.js +8 -9
  34. package/dist/cjs/notice/style.scss +38 -10
  35. package/dist/cjs/plugin-installer/index.js +4 -2
  36. package/dist/cjs/plugin-settings/SettingsSection.js +76 -45
  37. package/dist/cjs/plugin-settings/index.js +49 -34
  38. package/dist/cjs/plugin-settings/style.scss +7 -0
  39. package/dist/cjs/plugin-toggle/index.js +22 -1
  40. package/dist/cjs/popover/style.scss +2 -2
  41. package/dist/cjs/radio-control/style.scss +1 -2
  42. package/dist/cjs/section-header/index.js +18 -5
  43. package/dist/cjs/section-header/style.scss +26 -1
  44. package/dist/cjs/select-control/ButtonGroupControl.js +8 -8
  45. package/dist/cjs/select-control/GroupedSelectControl.js +33 -30
  46. package/dist/cjs/select-control/index.js +1 -2
  47. package/dist/cjs/select-control/style.scss +46 -87
  48. package/dist/cjs/settings/MinMaxSetting.js +4 -2
  49. package/dist/cjs/settings/SettingsCard.js +6 -1
  50. package/dist/cjs/settings/SettingsSection.js +4 -4
  51. package/dist/cjs/settings/style.scss +32 -4
  52. package/dist/cjs/style-card/index.js +10 -6
  53. package/dist/cjs/style-card/style.scss +12 -8
  54. package/dist/cjs/style.scss +44 -0
  55. package/dist/cjs/tabbed-navigation/index.js +13 -20
  56. package/dist/cjs/tabbed-navigation/style.scss +56 -34
  57. package/dist/cjs/text-control/index.js +0 -3
  58. package/dist/cjs/text-control/style.scss +0 -126
  59. package/dist/cjs/waiting/index.js +9 -25
  60. package/dist/cjs/waiting/style.scss +9 -20
  61. package/dist/cjs/web-preview/index.js +18 -30
  62. package/dist/cjs/web-preview/style.scss +33 -26
  63. package/dist/cjs/with-wizard/index.js +4 -2
  64. package/dist/cjs/with-wizard/style.scss +77 -89
  65. package/dist/cjs/with-wizard-screen/index.js +17 -21
  66. package/dist/cjs/with-wizard-screen/style.scss +74 -121
  67. package/dist/cjs/wizard/components/WizardError.js +86 -0
  68. package/dist/cjs/wizard/index.js +145 -0
  69. package/dist/cjs/wizard/store/index.js +178 -0
  70. package/dist/cjs/wizard/store/utils.js +31 -0
  71. package/dist/esm/action-card/index.js +33 -23
  72. package/dist/esm/action-card/style.scss +52 -27
  73. package/dist/esm/autocomplete-tokenfield/style.scss +4 -4
  74. package/dist/esm/autocomplete-with-suggestions/index.js +3 -2
  75. package/dist/esm/autocomplete-with-suggestions/style.scss +19 -20
  76. package/dist/esm/button/index.js +2 -12
  77. package/dist/esm/button/style.scss +3 -344
  78. package/dist/esm/button-card/index.js +10 -6
  79. package/dist/esm/button-card/style.scss +69 -35
  80. package/dist/esm/card/index.js +3 -1
  81. package/dist/esm/card/style.scss +34 -61
  82. package/dist/esm/category-autocomplete/index.js +54 -14
  83. package/dist/esm/category-autocomplete/style.scss +19 -15
  84. package/dist/esm/color-picker/index.js +15 -34
  85. package/dist/esm/color-picker/style.scss +20 -160
  86. package/dist/esm/custom-select-control/style.scss +12 -42
  87. package/dist/esm/footer/index.js +21 -7
  88. package/dist/esm/footer/style.scss +9 -10
  89. package/dist/esm/form-token-field/index.js +2 -2
  90. package/dist/esm/form-token-field/style.scss +8 -103
  91. package/dist/esm/global-notices/index.js +2 -1
  92. package/dist/esm/grid/index.js +1 -1
  93. package/dist/esm/grid/style.scss +29 -1
  94. package/dist/esm/handoff/index.js +7 -7
  95. package/dist/esm/image-upload/index.js +1 -1
  96. package/dist/esm/image-upload/style.scss +10 -11
  97. package/dist/esm/index.js +3 -8
  98. package/dist/esm/modal/index.js +0 -3
  99. package/dist/esm/modal/style.scss +19 -131
  100. package/dist/esm/newspack-icon/index.js +4 -2
  101. package/dist/esm/newspack-icon/style.scss +15 -0
  102. package/dist/esm/notice/index.js +8 -3
  103. package/dist/esm/notice/style.scss +38 -10
  104. package/dist/esm/plugin-installer/index.js +5 -2
  105. package/dist/esm/plugin-settings/SettingsSection.js +74 -46
  106. package/dist/esm/plugin-settings/index.js +48 -34
  107. package/dist/esm/plugin-settings/style.scss +7 -0
  108. package/dist/esm/plugin-toggle/index.js +23 -1
  109. package/dist/esm/popover/style.scss +2 -2
  110. package/dist/esm/radio-control/style.scss +1 -2
  111. package/dist/esm/section-header/index.js +17 -5
  112. package/dist/esm/section-header/style.scss +26 -1
  113. package/dist/esm/select-control/ButtonGroupControl.js +8 -8
  114. package/dist/esm/select-control/GroupedSelectControl.js +33 -30
  115. package/dist/esm/select-control/index.js +1 -2
  116. package/dist/esm/select-control/style.scss +46 -87
  117. package/dist/esm/settings/MinMaxSetting.js +3 -2
  118. package/dist/esm/settings/SettingsCard.js +6 -1
  119. package/dist/esm/settings/SettingsSection.js +5 -5
  120. package/dist/esm/settings/style.scss +32 -4
  121. package/dist/esm/style-card/index.js +11 -8
  122. package/dist/esm/style-card/style.scss +12 -8
  123. package/dist/esm/style.scss +44 -0
  124. package/dist/esm/tabbed-navigation/index.js +14 -22
  125. package/dist/esm/tabbed-navigation/style.scss +56 -34
  126. package/dist/esm/text-control/index.js +0 -3
  127. package/dist/esm/text-control/style.scss +0 -126
  128. package/dist/esm/waiting/index.js +9 -22
  129. package/dist/esm/waiting/style.scss +9 -20
  130. package/dist/esm/web-preview/index.js +12 -25
  131. package/dist/esm/web-preview/style.scss +33 -26
  132. package/dist/esm/with-wizard/index.js +4 -2
  133. package/dist/esm/with-wizard/style.scss +77 -89
  134. package/dist/esm/with-wizard-screen/index.js +18 -22
  135. package/dist/esm/with-wizard-screen/style.scss +74 -121
  136. package/dist/esm/wizard/components/WizardError.js +78 -0
  137. package/dist/esm/wizard/index.js +128 -0
  138. package/dist/esm/wizard/store/index.js +161 -0
  139. package/dist/esm/wizard/store/utils.js +17 -0
  140. package/package.json +2 -1
  141. package/shared/scss/_colors.scss +15 -0
  142. package/src/action-card/index.js +31 -19
  143. package/src/action-card/style.scss +52 -27
  144. package/src/autocomplete-tokenfield/style.scss +4 -4
  145. package/src/autocomplete-with-suggestions/index.js +4 -2
  146. package/src/autocomplete-with-suggestions/style.scss +19 -20
  147. package/src/button/index.js +2 -9
  148. package/src/button/style.scss +3 -344
  149. package/src/button-card/index.js +19 -5
  150. package/src/button-card/style.scss +69 -35
  151. package/src/card/index.js +4 -0
  152. package/src/card/style.scss +34 -61
  153. package/src/category-autocomplete/index.js +51 -18
  154. package/src/category-autocomplete/style.scss +19 -15
  155. package/src/color-picker/index.js +16 -22
  156. package/src/color-picker/style.scss +20 -160
  157. package/src/custom-select-control/style.scss +12 -42
  158. package/src/footer/index.js +19 -8
  159. package/src/footer/style.scss +9 -10
  160. package/src/form-token-field/index.js +1 -1
  161. package/src/form-token-field/style.scss +8 -103
  162. package/src/global-notices/index.js +1 -1
  163. package/src/grid/index.js +1 -1
  164. package/src/grid/style.scss +29 -1
  165. package/src/handoff/index.js +7 -7
  166. package/src/image-upload/style.scss +10 -11
  167. package/src/index.js +3 -7
  168. package/src/modal/index.js +2 -5
  169. package/src/modal/style.scss +19 -131
  170. package/src/newspack-icon/index.js +7 -2
  171. package/src/newspack-icon/style.scss +15 -0
  172. package/src/notice/index.js +7 -1
  173. package/src/notice/style.scss +38 -10
  174. package/src/plugin-installer/index.js +4 -2
  175. package/src/plugin-settings/SettingsSection.js +65 -27
  176. package/src/plugin-settings/index.js +45 -18
  177. package/src/plugin-settings/style.scss +7 -0
  178. package/src/plugin-toggle/index.js +35 -9
  179. package/src/popover/style.scss +2 -2
  180. package/src/radio-control/style.scss +1 -2
  181. package/src/section-header/index.js +25 -6
  182. package/src/section-header/style.scss +26 -1
  183. package/src/select-control/ButtonGroupControl.js +13 -6
  184. package/src/select-control/GroupedSelectControl.js +26 -24
  185. package/src/select-control/index.js +1 -2
  186. package/src/select-control/style.scss +46 -87
  187. package/src/settings/MinMaxSetting.js +2 -1
  188. package/src/settings/SettingsCard.js +9 -7
  189. package/src/settings/SettingsSection.js +4 -4
  190. package/src/settings/style.scss +32 -4
  191. package/src/style-card/index.js +14 -16
  192. package/src/style-card/style.scss +12 -8
  193. package/src/style.scss +44 -0
  194. package/src/tabbed-navigation/index.js +12 -24
  195. package/src/tabbed-navigation/style.scss +56 -34
  196. package/src/text-control/index.js +1 -2
  197. package/src/text-control/style.scss +0 -126
  198. package/src/waiting/index.js +7 -18
  199. package/src/waiting/style.scss +9 -20
  200. package/src/web-preview/index.js +12 -33
  201. package/src/web-preview/style.scss +33 -26
  202. package/src/with-wizard/index.js +7 -5
  203. package/src/with-wizard/style.scss +77 -89
  204. package/src/with-wizard-screen/index.js +14 -17
  205. package/src/with-wizard-screen/style.scss +74 -121
  206. package/src/wizard/components/WizardError.js +57 -0
  207. package/src/wizard/index.js +133 -0
  208. package/src/wizard/store/index.js +126 -0
  209. package/src/wizard/store/utils.js +16 -0
  210. package/dist/cjs/button-group/index.js +0 -57
  211. package/dist/cjs/button-group/style.scss +0 -68
  212. package/dist/cjs/checkbox-control/index.js +0 -63
  213. package/dist/cjs/checkbox-control/style.scss +0 -78
  214. package/dist/cjs/preview-box/index.js +0 -36
  215. package/dist/cjs/preview-box/style.scss +0 -18
  216. package/dist/cjs/textarea-control/index.js +0 -54
  217. package/dist/cjs/textarea-control/style.scss +0 -76
  218. package/dist/cjs/toggle-control/index.js +0 -58
  219. package/dist/cjs/toggle-control/style.scss +0 -74
  220. package/dist/cjs/toggle-group/index.js +0 -71
  221. package/dist/cjs/toggle-group/style.scss +0 -28
  222. package/dist/cjs/wizard-pagination/index.js +0 -71
  223. package/dist/cjs/wizard-pagination/style.scss +0 -74
  224. package/dist/esm/button-group/index.js +0 -43
  225. package/dist/esm/button-group/style.scss +0 -68
  226. package/dist/esm/checkbox-control/index.js +0 -49
  227. package/dist/esm/checkbox-control/style.scss +0 -78
  228. package/dist/esm/preview-box/index.js +0 -30
  229. package/dist/esm/preview-box/style.scss +0 -18
  230. package/dist/esm/textarea-control/index.js +0 -40
  231. package/dist/esm/textarea-control/style.scss +0 -76
  232. package/dist/esm/toggle-control/index.js +0 -44
  233. package/dist/esm/toggle-control/style.scss +0 -74
  234. package/dist/esm/toggle-group/index.js +0 -58
  235. package/dist/esm/toggle-group/style.scss +0 -28
  236. package/dist/esm/wizard-pagination/index.js +0 -57
  237. package/dist/esm/wizard-pagination/style.scss +0 -74
  238. package/src/button-group/index.js +0 -35
  239. package/src/button-group/style.scss +0 -68
  240. package/src/checkbox-control/index.js +0 -38
  241. package/src/checkbox-control/style.scss +0 -78
  242. package/src/preview-box/index.js +0 -18
  243. package/src/preview-box/style.scss +0 -18
  244. package/src/textarea-control/index.js +0 -32
  245. package/src/textarea-control/style.scss +0 -76
  246. package/src/toggle-control/index.js +0 -38
  247. package/src/toggle-control/style.scss +0 -74
  248. package/src/toggle-group/index.js +0 -43
  249. package/src/toggle-group/style.scss +0 -28
  250. package/src/wizard-pagination/index.js +0 -59
  251. package/src/wizard-pagination/style.scss +0 -74
@@ -0,0 +1,133 @@
1
+ /**
2
+ * External dependencies.
3
+ */
4
+ import classnames from 'classnames';
5
+
6
+ /**
7
+ * WordPress dependencies.
8
+ */
9
+ import { useSelect } from '@wordpress/data';
10
+ import { useState } from '@wordpress/element';
11
+ import { __ } from '@wordpress/i18n';
12
+ import { category } from '@wordpress/icons';
13
+
14
+ /**
15
+ * Internal dependencies
16
+ */
17
+ import { Footer, Notice, Button, NewspackIcon, TabbedNavigation, PluginInstaller } from '../';
18
+ import Router from '../proxied-imports/router';
19
+ import registerStore, { WIZARD_STORE_NAMESPACE } from './store';
20
+ import { useWizardData } from './store/utils';
21
+ import WizardError from './components/WizardError';
22
+
23
+ registerStore();
24
+
25
+ const { HashRouter, Redirect, Route, Switch } = Router;
26
+
27
+ const Wizard = ( {
28
+ sections = [],
29
+ apiSlug,
30
+ headerText,
31
+ subHeaderText,
32
+ hasSimpleFooter,
33
+ className,
34
+ renderAboveSections,
35
+ requiredPlugins = [],
36
+ } ) => {
37
+ const isLoading = useSelect( select => select( WIZARD_STORE_NAMESPACE ).isLoading() );
38
+ const isQuietLoading = useSelect( select => select( WIZARD_STORE_NAMESPACE ).isQuietLoading() );
39
+
40
+ // Trigger initial data fetch. Some sections might not use the wizard data,
41
+ // but for consistency, fetching is triggered regardless of the section.
42
+ useSelect( select => select( WIZARD_STORE_NAMESPACE ).getWizardAPIData( apiSlug ) );
43
+
44
+ let displayedSections = sections.filter( section => ! section.isHidden );
45
+
46
+ const [ pluginRequirementsSatisfied, setPluginRequirementsSatisfied ] = useState(
47
+ requiredPlugins.length === 0
48
+ );
49
+ if ( ! pluginRequirementsSatisfied ) {
50
+ headerText =
51
+ requiredPlugins.length > 1
52
+ ? __( 'Required plugins', 'newspack' )
53
+ : __( 'Required plugin', 'newspack' );
54
+ displayedSections = [
55
+ {
56
+ path: '/',
57
+ render: () => (
58
+ <PluginInstaller
59
+ plugins={ requiredPlugins }
60
+ onStatus={ ( { complete } ) => setPluginRequirementsSatisfied( complete ) }
61
+ />
62
+ ),
63
+ },
64
+ ];
65
+ }
66
+
67
+ return (
68
+ <>
69
+ <WizardError />
70
+ <div
71
+ className={ classnames(
72
+ isLoading ? 'newspack-wizard__is-loading' : 'newspack-wizard__is-loaded',
73
+ {
74
+ 'newspack-wizard__is-loading-quiet': isQuietLoading,
75
+ }
76
+ ) }
77
+ >
78
+ <HashRouter hashType="slash">
79
+ { newspack_aux_data.is_debug_mode && <Notice debugMode /> }
80
+ <div className="bg-white">
81
+ <div className="newspack-wizard__header__inner">
82
+ <div className="newspack-wizard__title">
83
+ <Button
84
+ isLink
85
+ href={ newspack_urls.dashboard }
86
+ label={ __( 'Return to Dashboard', 'newspack' ) }
87
+ showTooltip={ true }
88
+ icon={ category }
89
+ iconSize={ 36 }
90
+ >
91
+ <NewspackIcon size={ 36 } />
92
+ </Button>
93
+ <div>
94
+ { headerText && <h2>{ headerText }</h2> }
95
+ { subHeaderText && <span>{ subHeaderText }</span> }
96
+ </div>
97
+ </div>
98
+ </div>
99
+ </div>
100
+
101
+ { displayedSections.length > 1 && <TabbedNavigation items={ displayedSections } /> }
102
+
103
+ <Switch>
104
+ { displayedSections.map( ( section, index ) => {
105
+ const SectionComponent = section.render;
106
+ return (
107
+ <Route key={ index } path={ section.path }>
108
+ <div
109
+ className={ classnames(
110
+ 'newspack-wizard newspack-wizard__content',
111
+ className
112
+ ) }
113
+ >
114
+ { 'function' === typeof renderAboveSections ? renderAboveSections() : null }
115
+ <SectionComponent />
116
+ </div>
117
+ </Route>
118
+ );
119
+ } ) }
120
+ <Redirect to={ displayedSections[ 0 ].path } />
121
+ </Switch>
122
+ </HashRouter>
123
+ </div>
124
+ { ! isLoading && <Footer simple={ hasSimpleFooter } /> }
125
+ </>
126
+ );
127
+ };
128
+
129
+ Wizard.useWizardData = useWizardData;
130
+
131
+ Wizard.STORE_NAMESPACE = WIZARD_STORE_NAMESPACE;
132
+
133
+ export default Wizard;
@@ -0,0 +1,126 @@
1
+ /**
2
+ * External dependencies.
3
+ */
4
+ import { set, get, isEmpty } from 'lodash';
5
+
6
+ /**
7
+ * WordPress dependencies.
8
+ */
9
+ import apiFetch from '@wordpress/api-fetch';
10
+ import { createReduxStore, register, dispatch, select } from '@wordpress/data';
11
+
12
+ import { createAction } from './utils.js';
13
+
14
+ export const WIZARD_STORE_NAMESPACE = 'newspack/wizards';
15
+
16
+ const DEFAULT_STATE = {
17
+ isLoading: true,
18
+ isQuietLoading: false,
19
+ apiData: {},
20
+ error: null,
21
+ };
22
+
23
+ /**
24
+ * wordpress/data does not trigger a component re-render
25
+ * on deep state change (via lodash's set function)
26
+ * unless the state was cloned first.
27
+ */
28
+ const clone = objectToClone => JSON.parse( JSON.stringify( objectToClone ) );
29
+
30
+ const reducer = ( state = DEFAULT_STATE, { type, payload = {} } ) => {
31
+ switch ( type ) {
32
+ case 'START_LOADING_DATA':
33
+ if ( payload.isQuietLoading ) {
34
+ return { ...state, isQuietLoading: true };
35
+ }
36
+ return { ...state, isLoading: true };
37
+ case 'FINISH_LOADING_DATA':
38
+ return { ...state, isLoading: false, isQuietLoading: false };
39
+ case 'SET_API_DATA':
40
+ return set( clone( state ), [ 'apiData', payload.slug ], payload.data );
41
+ case 'UPDATE_WIZARD_SETTINGS':
42
+ return set( clone( state ), [ 'apiData', payload.slug, ...payload.path ], payload.value );
43
+ case 'SET_ERROR':
44
+ return { ...state, error: payload };
45
+ default:
46
+ return state;
47
+ }
48
+ };
49
+
50
+ const actions = {
51
+ // Regular actions.
52
+ startLoadingData: createAction( 'START_LOADING_DATA' ),
53
+ finishLoadingData: createAction( 'FINISH_LOADING_DATA' ),
54
+ fetchFromAPI: createAction( 'FETCH_FROM_API' ),
55
+ setAPIDataForWizard: createAction( 'SET_API_DATA' ),
56
+ updateWizardSettings: createAction( 'UPDATE_WIZARD_SETTINGS' ),
57
+ setError: createAction( 'SET_ERROR' ),
58
+
59
+ // Async actions. These will not show up in Redux devtools.
60
+ *saveWizardSettings( { slug, section = '', payloadPath = false, updatePayload = null } ) {
61
+ // Optionally data can be updated before saving - an immediate update case
62
+ // (without an explicit "save" action).
63
+ if ( updatePayload ) {
64
+ yield actions.updateWizardSettings( { slug, ...updatePayload } );
65
+ }
66
+ const wizardState = select( WIZARD_STORE_NAMESPACE ).getWizardAPIData( slug );
67
+ const updatedData = yield actions.fetchFromAPI( {
68
+ path: `/newspack/v1/wizard/${ slug }/${ section }`,
69
+ method: 'POST',
70
+ data: payloadPath ? get( wizardState, payloadPath ) : wizardState,
71
+ isQuietFetch: true,
72
+ } );
73
+ if ( ! isEmpty( updatedData ) ) {
74
+ return actions.setAPIDataForWizard( { slug, data: updatedData } );
75
+ }
76
+ },
77
+ *wizardApiFetch( fetchConfig ) {
78
+ // Just a proxy to fetchFromAPI, but it has to be a generator.
79
+ const result = yield actions.fetchFromAPI( fetchConfig );
80
+ return result;
81
+ },
82
+ };
83
+
84
+ const selectors = {
85
+ isLoading: state => state.isLoading,
86
+ isQuietLoading: state => state.isQuietLoading,
87
+ getWizardAPIData: ( state, slug ) => state.apiData[ slug ] || {},
88
+ getError: state => state.error,
89
+ };
90
+
91
+ const store = createReduxStore( WIZARD_STORE_NAMESPACE, {
92
+ reducer,
93
+ actions,
94
+ selectors,
95
+
96
+ controls: {
97
+ FETCH_FROM_API: action => {
98
+ dispatch( WIZARD_STORE_NAMESPACE ).startLoadingData( {
99
+ isQuietLoading: Boolean( action.payload.isQuietFetch ),
100
+ } );
101
+ return apiFetch( action.payload )
102
+ .catch( error => {
103
+ dispatch( WIZARD_STORE_NAMESPACE ).setError( error );
104
+ return { error };
105
+ } )
106
+ .finally( result => {
107
+ dispatch( WIZARD_STORE_NAMESPACE ).finishLoadingData();
108
+ return result;
109
+ } );
110
+ },
111
+ },
112
+
113
+ resolvers: {
114
+ *getWizardAPIData( slug ) {
115
+ if ( slug ) {
116
+ const data = yield actions.fetchFromAPI( {
117
+ path: `/newspack/v1/wizard/${ slug }`,
118
+ } );
119
+ return actions.setAPIDataForWizard( { slug, data } );
120
+ }
121
+ return actions.finishLoadingData();
122
+ },
123
+ },
124
+ } );
125
+
126
+ export default () => register( store );
@@ -0,0 +1,16 @@
1
+ /**
2
+ * WordPress dependencies.
3
+ */
4
+ import { useSelect } from '@wordpress/data';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { WIZARD_STORE_NAMESPACE } from '.';
10
+
11
+ export const createAction = type => payload => ( { type, payload } );
12
+
13
+ export const useWizardData = ( wizardName, defaultValue = {} ) =>
14
+ useSelect( select =>
15
+ select( WIZARD_STORE_NAMESPACE ).getWizardAPIData( `newspack-${ wizardName }-wizard` )
16
+ ) || defaultValue;
@@ -1,57 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
-
10
- var _element = require("@wordpress/element");
11
-
12
- var _components = require("@wordpress/components");
13
-
14
- require("./style.scss");
15
-
16
- var _classnames = _interopRequireDefault(require("classnames"));
17
-
18
- var _jsxRuntime = require("@emotion/react/jsx-runtime");
19
-
20
- /**
21
- * WordPress dependencies.
22
- */
23
-
24
- /**
25
- * Internal dependencies
26
- */
27
-
28
- /**
29
- * External dependencies
30
- */
31
-
32
- /**
33
- * Button Group.
34
- */
35
- class ButtonGroup extends _element.Component {
36
- /**
37
- * Render.
38
- */
39
- render() {
40
- const {
41
- className,
42
- noMargin,
43
- ...otherProps
44
- } = this.props;
45
- const classes = (0, _classnames.default)('newspack-button-group', {
46
- 'newspack-button-group--no-margin': noMargin
47
- }, className);
48
- return (0, _jsxRuntime.jsx)(_components.ButtonGroup, {
49
- className: classes,
50
- ...otherProps
51
- });
52
- }
53
-
54
- }
55
-
56
- var _default = ButtonGroup;
57
- exports.default = _default;
@@ -1,68 +0,0 @@
1
- /**
2
- * Button Group
3
- */
4
-
5
- @import '../../../shared/scss/colors';
6
- @import '~@wordpress/base-styles/colors';
7
-
8
- .newspack-button-group {
9
- display: block;
10
- &:not( .newspack-button-group--no-margin ) {
11
- margin: 32px 0;
12
- }
13
-
14
- .newspack-button {
15
- padding: 11px 17px !important;
16
- &:active,
17
- &:focus,
18
- &:hover,
19
- &.is-pressed {
20
- position: relative;
21
- }
22
-
23
- &.is-pressed {
24
- position: relative;
25
- z-index: 2;
26
- background-color: $primary-050 !important;
27
- color: $gray-900 !important;
28
- border: none !important;
29
- &:focus {
30
- box-shadow: 0 0 0 1px white, 0 0 0 2px $primary-500 !important;
31
- }
32
- &::after {
33
- content: '';
34
- position: absolute;
35
- top: 0;
36
- left: 0;
37
- width: calc( 100% - 6px );
38
- height: calc( 100% - 6px );
39
- border: 3px solid $primary-500;
40
- }
41
- }
42
- }
43
- }
44
-
45
- body[class*='admin-color-'] {
46
- .newspack-button-group {
47
- .newspack-button {
48
- border-radius: 0;
49
- box-shadow: none;
50
-
51
- &:first-child {
52
- &,
53
- &::after {
54
- border-bottom-left-radius: 3px;
55
- border-top-left-radius: 3px;
56
- }
57
- }
58
-
59
- &:last-child {
60
- &,
61
- &::after {
62
- border-bottom-right-radius: 3px;
63
- border-top-right-radius: 3px;
64
- }
65
- }
66
- }
67
- }
68
- }
@@ -1,63 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
-
10
- var _element = require("@wordpress/element");
11
-
12
- var _components = require("@wordpress/components");
13
-
14
- var _ = require("../");
15
-
16
- require("./style.scss");
17
-
18
- var _classnames = _interopRequireDefault(require("classnames"));
19
-
20
- var _jsxRuntime = require("@emotion/react/jsx-runtime");
21
-
22
- /**
23
- * Checkbox Control
24
- */
25
-
26
- /**
27
- * WordPress dependencies
28
- */
29
-
30
- /**
31
- * Internal dependencies
32
- */
33
-
34
- /**
35
- * External dependencies
36
- */
37
- class CheckboxControl extends _element.Component {
38
- /**
39
- * Render.
40
- */
41
- render() {
42
- const {
43
- className,
44
- checked,
45
- tooltip,
46
- ...otherProps
47
- } = this.props;
48
- const classes = (0, _classnames.default)('newspack-checkbox-control', className);
49
- return (0, _jsxRuntime.jsxs)("div", {
50
- className: classes,
51
- children: [(0, _jsxRuntime.jsx)(_components.CheckboxControl, {
52
- checked: Boolean(checked),
53
- ...otherProps
54
- }), tooltip && (0, _jsxRuntime.jsx)(_.InfoButton, {
55
- text: tooltip
56
- })]
57
- });
58
- }
59
-
60
- }
61
-
62
- var _default = CheckboxControl;
63
- exports.default = _default;
@@ -1,78 +0,0 @@
1
- /**
2
- * Checkbox styles.
3
- */
4
-
5
- @import '../../../shared/scss/colors';
6
- @import '~@wordpress/base-styles/colors';
7
-
8
- .newspack-checkbox-control {
9
- color: $gray-700;
10
- display: flex;
11
- font-size: 14px;
12
- line-height: 24px;
13
- margin: 32px 0;
14
-
15
- label {
16
- color: inherit;
17
- font-size: inherit;
18
- line-height: inherit;
19
- margin: 0;
20
- }
21
-
22
- .components-checkbox-control__input-container {
23
- display: block;
24
- margin: 0;
25
- margin-right: 8px;
26
-
27
- @media screen and ( min-width: 600px ) {
28
- margin-bottom: 2px;
29
- margin-top: 2px;
30
- }
31
- }
32
-
33
- .components-checkbox-control__input[type='checkbox'] {
34
- margin: 0;
35
-
36
- &:checked {
37
- background-color: $primary-500;
38
- border-color: $primary-500;
39
- }
40
-
41
- &:focus {
42
- border-color: $primary-500;
43
- box-shadow: 0 0 0 2px white, 0 0 0 3.5px $primary-500;
44
- }
45
- }
46
-
47
- .components-base-control__help {
48
- color: inherit;
49
- font-size: inherit;
50
- font-style: italic;
51
- line-height: inherit;
52
- margin: 0;
53
- margin-left: 28px;
54
- }
55
-
56
- // Multiple Checkbox Controls
57
-
58
- & + & {
59
- margin-top: -16px;
60
- }
61
-
62
- // Reset
63
-
64
- .components-base-control {
65
- font-size: inherit;
66
- line-height: inherit;
67
- }
68
-
69
- .components-base-control__field {
70
- display: flex;
71
- margin: 0;
72
- }
73
-
74
- .components-base-control__label {
75
- display: block;
76
- margin: 0;
77
- }
78
- }
@@ -1,36 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _i18n = require("@wordpress/i18n");
9
-
10
- require("./style.scss");
11
-
12
- var _jsxRuntime = require("@emotion/react/jsx-runtime");
13
-
14
- /**
15
- * WordPress dependencies
16
- */
17
- const __ = _i18n.__;
18
-
19
- const PreviewBox = _ref => {
20
- let {
21
- children
22
- } = _ref;
23
- return (0, _jsxRuntime.jsxs)("div", {
24
- className: "newspack-preview-box",
25
- children: [(0, _jsxRuntime.jsx)("div", {
26
- className: "newspack-preview-box__label",
27
- children: __('Preview', 'newspack')
28
- }), (0, _jsxRuntime.jsx)("div", {
29
- className: "newspack-preview-box__content",
30
- children: children
31
- })]
32
- });
33
- };
34
-
35
- var _default = PreviewBox;
36
- exports.default = _default;
@@ -1,18 +0,0 @@
1
- @import '../../../shared/scss/colors';
2
- @import '~@wordpress/base-styles/colors';
3
-
4
- .newspack-preview-box {
5
- margin: 32px 0;
6
-
7
- &__label {
8
- color: $gray-900;
9
- font-weight: bold;
10
- }
11
-
12
- &__content {
13
- background: $gray-100;
14
- border: 1px solid $gray-300;
15
- border-radius: 3px;
16
- padding: 11px 8px;
17
- }
18
- }
@@ -1,54 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
-
10
- var _components = require("@wordpress/components");
11
-
12
- var _element = require("@wordpress/element");
13
-
14
- require("./style.scss");
15
-
16
- var _classnames = _interopRequireDefault(require("classnames"));
17
-
18
- var _jsxRuntime = require("@emotion/react/jsx-runtime");
19
-
20
- /**
21
- * Textarea Control
22
- */
23
-
24
- /**
25
- * WordPress dependencies
26
- */
27
-
28
- /**
29
- * Internal dependencies
30
- */
31
-
32
- /**
33
- * External dependencies
34
- */
35
- class TextareaControl extends _element.Component {
36
- /**
37
- * Render.
38
- */
39
- render() {
40
- const {
41
- className,
42
- ...otherProps
43
- } = this.props;
44
- const classes = (0, _classnames.default)('newspack-textarea-control', className);
45
- return (0, _jsxRuntime.jsx)(_components.TextareaControl, {
46
- className: classes,
47
- ...otherProps
48
- });
49
- }
50
-
51
- }
52
-
53
- var _default = TextareaControl;
54
- exports.default = _default;