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.
- package/dist/cjs/accordion/index.js +46 -0
- package/dist/cjs/accordion/style.scss +27 -0
- package/dist/cjs/action-card/index.js +48 -25
- package/dist/cjs/action-card/style.scss +100 -23
- package/dist/cjs/autocomplete-tokenfield/index.js +13 -41
- package/dist/cjs/autocomplete-tokenfield/style.scss +2 -2
- package/dist/cjs/autocomplete-with-suggestions/index.js +30 -51
- package/dist/cjs/autocomplete-with-suggestions/style.scss +16 -15
- package/dist/cjs/button/index.js +5 -13
- package/dist/cjs/button-card/index.js +1 -10
- package/dist/cjs/button-card/style.scss +13 -13
- package/dist/cjs/card/index.js +1 -8
- package/dist/cjs/card/style.scss +25 -8
- package/dist/cjs/category-autocomplete/index.js +18 -38
- package/dist/cjs/category-autocomplete/style.scss +0 -2
- package/dist/cjs/color-picker/index.js +1 -15
- package/dist/cjs/color-picker/style.scss +0 -3
- package/dist/cjs/consts.js +5 -3
- package/dist/cjs/custom-select-control/index.js +1 -9
- package/dist/cjs/custom-select-control/style.scss +6 -7
- package/dist/cjs/date-range-picker/index.js +1 -10
- package/dist/cjs/date-range-picker/style.scss +12 -12
- package/dist/cjs/footer/index.js +5 -17
- package/dist/cjs/footer/style.scss +5 -5
- package/dist/cjs/form-token-field/index.js +1 -9
- package/dist/cjs/form-token-field/style.scss +2 -3
- package/dist/cjs/global-notices/index.js +1 -8
- package/dist/cjs/grid/index.js +1 -8
- package/dist/cjs/grid/style.scss +5 -5
- package/dist/cjs/handoff/index.js +8 -17
- package/dist/cjs/handoff-message/index.js +50 -0
- package/dist/cjs/hooks/index.js +1 -7
- package/dist/cjs/hooks/useObjectState.js +7 -13
- package/dist/cjs/hooks/useObjectState.test.js +0 -14
- package/dist/cjs/hooks/useOnClickOutside.js +3 -6
- package/dist/cjs/hooks/usePrompt.js +1 -13
- package/dist/cjs/image-upload/index.js +21 -19
- package/dist/cjs/image-upload/index.test.js +0 -5
- package/dist/cjs/image-upload/style.scss +5 -9
- package/dist/cjs/index.js +28 -44
- package/dist/cjs/info-button/index.js +3 -11
- package/dist/cjs/info-button/style.scss +1 -3
- package/dist/cjs/modal/index.js +1 -9
- package/dist/cjs/modal/style.scss +8 -8
- package/dist/cjs/newspack-icon/index.js +1 -9
- package/dist/cjs/newspack-icon/style.scss +4 -4
- package/dist/cjs/newspack-logo/index.js +1 -9
- package/dist/cjs/newspack-logo/style.scss +3 -3
- package/dist/cjs/notice/index.js +8 -15
- package/dist/cjs/notice/style.scss +28 -15
- package/dist/cjs/patrons-logo/index.js +3 -11
- package/dist/cjs/plugin-installer/index.js +36 -36
- package/dist/cjs/plugin-installer/style.scss +5 -5
- package/dist/cjs/plugin-settings/SettingsSection.js +9 -28
- package/dist/cjs/plugin-settings/index.js +39 -22
- package/dist/cjs/plugin-toggle/index.js +40 -33
- package/dist/cjs/plugin-toggle/style.scss +2 -2
- package/dist/cjs/popover/index.js +1 -11
- package/dist/cjs/popover/style.scss +19 -16
- package/dist/cjs/position-control/index.js +113 -0
- package/dist/cjs/position-control/style.scss +66 -0
- package/dist/cjs/progress-bar/index.js +2 -9
- package/dist/cjs/progress-bar/index.test.js +2 -7
- package/dist/cjs/progress-bar/style.scss +4 -4
- package/dist/cjs/proxied-imports/router.js +0 -3
- package/dist/cjs/radio-control/index.js +1 -11
- package/dist/cjs/radio-control/style.scss +9 -9
- package/dist/cjs/section-header/index.js +44 -29
- package/dist/cjs/section-header/style.scss +2 -2
- package/dist/cjs/select-control/ButtonGroupControl.js +4 -13
- package/dist/cjs/select-control/GroupedSelectControl.js +9 -15
- package/dist/cjs/select-control/index.js +5 -12
- package/dist/cjs/select-control/style.scss +2 -2
- package/dist/cjs/settings/MinMaxSetting.js +3 -7
- package/dist/cjs/settings/SettingsCard.js +3 -7
- package/dist/cjs/settings/SettingsSection.js +1 -4
- package/dist/cjs/settings/index.js +0 -6
- package/dist/cjs/settings/style.scss +1 -1
- package/dist/cjs/steps-list/index.js +52 -0
- package/dist/cjs/steps-list/style.scss +11 -0
- package/dist/cjs/steps-list-item/index.js +56 -0
- package/dist/cjs/steps-list-item/style.scss +47 -0
- package/dist/cjs/style-card/index.js +6 -13
- package/dist/cjs/style-card/style.scss +9 -12
- package/dist/cjs/style.scss +5 -6
- package/dist/cjs/tabbed-navigation/index.js +19 -16
- package/dist/cjs/tabbed-navigation/style.scss +3 -4
- package/dist/cjs/text-control/index.js +6 -16
- package/dist/cjs/utils/index.js +10 -5
- package/dist/cjs/waiting/index.js +1 -9
- package/dist/cjs/web-preview/index.js +13 -28
- package/dist/cjs/web-preview/style.scss +14 -14
- package/dist/cjs/with-wizard/index.js +51 -31
- package/dist/cjs/with-wizard/style.scss +35 -37
- package/dist/cjs/with-wizard-screen/index.js +11 -17
- package/dist/cjs/with-wizard-screen/style.scss +14 -17
- package/dist/cjs/wizard/components/WizardError.js +3 -15
- package/dist/cjs/wizard/index.js +10 -24
- package/dist/cjs/wizard/store/index.js +42 -55
- package/dist/cjs/wizard/store/utils.js +1 -6
- package/dist/esm/accordion/index.js +38 -0
- package/dist/esm/accordion/style.scss +27 -0
- package/dist/esm/action-card/index.js +50 -21
- package/dist/esm/action-card/style.scss +100 -23
- package/dist/esm/autocomplete-tokenfield/index.js +14 -37
- package/dist/esm/autocomplete-tokenfield/style.scss +2 -2
- package/dist/esm/autocomplete-with-suggestions/index.js +28 -41
- package/dist/esm/autocomplete-with-suggestions/style.scss +16 -15
- package/dist/esm/button/index.js +5 -7
- package/dist/esm/button-card/index.js +2 -5
- package/dist/esm/button-card/style.scss +13 -13
- package/dist/esm/card/index.js +2 -5
- package/dist/esm/card/style.scss +25 -8
- package/dist/esm/category-autocomplete/index.js +17 -30
- package/dist/esm/category-autocomplete/style.scss +0 -2
- package/dist/esm/color-picker/index.js +2 -4
- package/dist/esm/color-picker/style.scss +0 -3
- package/dist/esm/consts.js +3 -2
- package/dist/esm/custom-select-control/index.js +2 -5
- package/dist/esm/custom-select-control/style.scss +6 -7
- package/dist/esm/date-range-picker/index.js +1 -3
- package/dist/esm/date-range-picker/style.scss +12 -12
- package/dist/esm/footer/index.js +3 -11
- package/dist/esm/footer/style.scss +5 -5
- package/dist/esm/form-token-field/index.js +2 -5
- package/dist/esm/form-token-field/style.scss +2 -3
- package/dist/esm/global-notices/index.js +1 -6
- package/dist/esm/grid/index.js +2 -5
- package/dist/esm/grid/style.scss +5 -5
- package/dist/esm/handoff/index.js +3 -14
- package/dist/esm/handoff-message/index.js +45 -0
- package/dist/esm/hooks/index.js +0 -2
- package/dist/esm/hooks/useObjectState.js +3 -8
- package/dist/esm/hooks/useObjectState.test.js +0 -3
- package/dist/esm/hooks/useOnClickOutside.js +2 -5
- package/dist/esm/hooks/usePrompt.js +1 -8
- package/dist/esm/image-upload/index.js +17 -16
- package/dist/esm/image-upload/style.scss +5 -9
- package/dist/esm/index.js +4 -0
- package/dist/esm/info-button/index.js +4 -6
- package/dist/esm/info-button/style.scss +1 -3
- package/dist/esm/modal/index.js +2 -5
- package/dist/esm/modal/style.scss +8 -8
- package/dist/esm/newspack-icon/index.js +2 -5
- package/dist/esm/newspack-icon/style.scss +4 -4
- package/dist/esm/newspack-logo/index.js +2 -5
- package/dist/esm/newspack-logo/style.scss +3 -3
- package/dist/esm/notice/index.js +4 -8
- package/dist/esm/notice/style.scss +28 -15
- package/dist/esm/patrons-logo/index.js +3 -5
- package/dist/esm/plugin-installer/index.js +35 -39
- package/dist/esm/plugin-installer/style.scss +5 -5
- package/dist/esm/plugin-settings/SettingsSection.js +8 -21
- package/dist/esm/plugin-settings/index.js +38 -24
- package/dist/esm/plugin-toggle/index.js +39 -36
- package/dist/esm/plugin-toggle/style.scss +2 -2
- package/dist/esm/popover/index.js +3 -6
- package/dist/esm/popover/style.scss +19 -16
- package/dist/esm/position-control/index.js +109 -0
- package/dist/esm/position-control/style.scss +66 -0
- package/dist/esm/progress-bar/index.js +2 -7
- package/dist/esm/progress-bar/index.test.js +2 -1
- package/dist/esm/progress-bar/style.scss +4 -4
- package/dist/esm/proxied-imports/router.js +1 -0
- package/dist/esm/radio-control/index.js +3 -6
- package/dist/esm/radio-control/style.scss +9 -9
- package/dist/esm/section-header/index.js +44 -25
- package/dist/esm/section-header/style.scss +2 -2
- package/dist/esm/select-control/ButtonGroupControl.js +5 -7
- package/dist/esm/select-control/GroupedSelectControl.js +5 -6
- package/dist/esm/select-control/index.js +6 -6
- package/dist/esm/select-control/style.scss +2 -2
- package/dist/esm/settings/MinMaxSetting.js +1 -3
- package/dist/esm/settings/SettingsCard.js +3 -4
- package/dist/esm/settings/SettingsSection.js +0 -2
- package/dist/esm/settings/style.scss +1 -1
- package/dist/esm/steps-list/index.js +43 -0
- package/dist/esm/steps-list/style.scss +11 -0
- package/dist/esm/steps-list-item/index.js +48 -0
- package/dist/esm/steps-list-item/style.scss +47 -0
- package/dist/esm/style-card/index.js +2 -5
- package/dist/esm/style-card/style.scss +9 -12
- package/dist/esm/style.scss +5 -6
- package/dist/esm/tabbed-navigation/index.js +20 -10
- package/dist/esm/tabbed-navigation/style.scss +3 -4
- package/dist/esm/text-control/index.js +2 -9
- package/dist/esm/utils/index.js +9 -3
- package/dist/esm/waiting/index.js +2 -5
- package/dist/esm/web-preview/index.js +9 -24
- package/dist/esm/web-preview/style.scss +14 -14
- package/dist/esm/with-wizard/index.js +49 -34
- package/dist/esm/with-wizard/style.scss +35 -37
- package/dist/esm/with-wizard-screen/index.js +9 -11
- package/dist/esm/with-wizard-screen/style.scss +14 -17
- package/dist/esm/wizard/components/WizardError.js +1 -10
- package/dist/esm/wizard/index.js +10 -12
- package/dist/esm/wizard/store/index.js +40 -46
- package/dist/esm/wizard/store/utils.js +1 -1
- package/package.json +4 -4
- package/shared/js/button-props.js +3 -1
- package/shared/scss/_mixins.scss +12 -0
- package/src/accordion/index.js +32 -0
- package/src/accordion/style.scss +27 -0
- package/src/action-card/index.js +43 -8
- package/src/action-card/style.scss +100 -23
- package/src/autocomplete-tokenfield/index.js +1 -1
- package/src/autocomplete-tokenfield/style.scss +2 -2
- package/src/autocomplete-with-suggestions/style.scss +16 -15
- package/src/button-card/style.scss +13 -13
- package/src/card/style.scss +25 -8
- package/src/category-autocomplete/index.js +3 -1
- package/src/category-autocomplete/style.scss +0 -2
- package/src/color-picker/style.scss +0 -3
- package/src/consts.js +2 -1
- package/src/custom-select-control/style.scss +6 -7
- package/src/date-range-picker/style.scss +12 -12
- package/src/footer/index.js +2 -2
- package/src/footer/style.scss +5 -5
- package/src/form-token-field/index.js +2 -7
- package/src/form-token-field/style.scss +2 -3
- package/src/grid/style.scss +5 -5
- package/src/handoff/index.js +3 -8
- package/src/handoff-message/index.js +39 -0
- package/src/hooks/useObjectState.js +2 -1
- package/src/image-upload/index.js +9 -3
- package/src/image-upload/style.scss +5 -9
- package/src/index.js +4 -0
- package/src/info-button/style.scss +1 -3
- package/src/modal/style.scss +8 -8
- package/src/newspack-icon/style.scss +4 -4
- package/src/newspack-logo/style.scss +3 -3
- package/src/notice/index.js +2 -0
- package/src/notice/style.scss +28 -15
- package/src/plugin-installer/index.js +15 -2
- package/src/plugin-installer/style.scss +5 -5
- package/src/plugin-settings/SettingsSection.js +7 -13
- package/src/plugin-settings/index.js +7 -2
- package/src/plugin-toggle/index.js +2 -3
- package/src/plugin-toggle/style.scss +2 -2
- package/src/popover/style.scss +19 -16
- package/src/position-control/index.js +122 -0
- package/src/position-control/style.scss +66 -0
- package/src/progress-bar/style.scss +4 -4
- package/src/radio-control/style.scss +9 -9
- package/src/section-header/index.js +32 -15
- package/src/section-header/style.scss +2 -2
- package/src/select-control/ButtonGroupControl.js +3 -0
- package/src/select-control/GroupedSelectControl.js +2 -1
- package/src/select-control/index.js +6 -2
- package/src/select-control/style.scss +2 -2
- package/src/settings/style.scss +1 -1
- package/src/steps-list/index.js +39 -0
- package/src/steps-list/style.scss +11 -0
- package/src/steps-list-item/index.js +40 -0
- package/src/steps-list-item/style.scss +47 -0
- package/src/style-card/index.js +2 -11
- package/src/style-card/style.scss +9 -12
- package/src/style.scss +5 -6
- package/src/tabbed-navigation/index.js +12 -4
- package/src/tabbed-navigation/style.scss +3 -4
- package/src/utils/index.js +9 -0
- package/src/web-preview/index.js +1 -1
- package/src/web-preview/style.scss +14 -14
- package/src/with-wizard/style.scss +35 -37
- package/src/with-wizard-screen/index.js +4 -1
- package/src/with-wizard-screen/style.scss +14 -17
- package/src/wizard/index.js +15 -3
- package/src/wizard/store/index.js +8 -2
package/dist/esm/wizard/index.js
CHANGED
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
* External dependencies.
|
|
3
3
|
*/
|
|
4
4
|
import classnames from 'classnames';
|
|
5
|
+
|
|
5
6
|
/**
|
|
6
7
|
* WordPress dependencies.
|
|
7
8
|
*/
|
|
8
|
-
|
|
9
9
|
import { useSelect } from '@wordpress/data';
|
|
10
10
|
import { useState } from '@wordpress/element';
|
|
11
11
|
import { __ as alias__ } from '@wordpress/i18n';
|
|
12
12
|
const __ = alias__;
|
|
13
13
|
import { category } from '@wordpress/icons';
|
|
14
|
+
|
|
14
15
|
/**
|
|
15
16
|
* Internal dependencies
|
|
16
17
|
*/
|
|
17
|
-
|
|
18
|
-
import { Footer, Notice, Button, NewspackIcon, TabbedNavigation, PluginInstaller } from '../';
|
|
18
|
+
import { Footer, Notice, Button, NewspackIcon, TabbedNavigation, PluginInstaller, HandoffMessage } from '../';
|
|
19
19
|
import Router from '../proxied-imports/router';
|
|
20
20
|
import registerStore, { WIZARD_STORE_NAMESPACE } from './store';
|
|
21
21
|
import { useWizardData } from './store/utils';
|
|
@@ -30,7 +30,6 @@ const {
|
|
|
30
30
|
Route,
|
|
31
31
|
Switch
|
|
32
32
|
} = Router;
|
|
33
|
-
|
|
34
33
|
const Wizard = _ref => {
|
|
35
34
|
let {
|
|
36
35
|
sections = [],
|
|
@@ -43,13 +42,13 @@ const Wizard = _ref => {
|
|
|
43
42
|
requiredPlugins = []
|
|
44
43
|
} = _ref;
|
|
45
44
|
const isLoading = useSelect(select => select(WIZARD_STORE_NAMESPACE).isLoading());
|
|
46
|
-
const isQuietLoading = useSelect(select => select(WIZARD_STORE_NAMESPACE).isQuietLoading());
|
|
47
|
-
// but for consistency, fetching is triggered regardless of the section.
|
|
45
|
+
const isQuietLoading = useSelect(select => select(WIZARD_STORE_NAMESPACE).isQuietLoading());
|
|
48
46
|
|
|
47
|
+
// Trigger initial data fetch. Some sections might not use the wizard data,
|
|
48
|
+
// but for consistency, fetching is triggered regardless of the section.
|
|
49
49
|
useSelect(select => select(WIZARD_STORE_NAMESPACE).getWizardAPIData(apiSlug));
|
|
50
50
|
let displayedSections = sections.filter(section => !section.isHidden);
|
|
51
51
|
const [pluginRequirementsSatisfied, setPluginRequirementsSatisfied] = useState(requiredPlugins.length === 0);
|
|
52
|
-
|
|
53
52
|
if (!pluginRequirementsSatisfied) {
|
|
54
53
|
headerText = requiredPlugins.length > 1 ? __('Required plugins', 'newspack') : __('Required plugin', 'newspack');
|
|
55
54
|
displayedSections = [{
|
|
@@ -65,9 +64,8 @@ const Wizard = _ref => {
|
|
|
65
64
|
})
|
|
66
65
|
}];
|
|
67
66
|
}
|
|
68
|
-
|
|
69
67
|
return _jsxs(_Fragment, {
|
|
70
|
-
children: [_jsx(
|
|
68
|
+
children: [_jsx("div", {
|
|
71
69
|
className: classnames(isLoading ? 'newspack-wizard__is-loading' : 'newspack-wizard__is-loaded', {
|
|
72
70
|
'newspack-wizard__is-loading-quiet': isQuietLoading
|
|
73
71
|
}),
|
|
@@ -101,8 +99,9 @@ const Wizard = _ref => {
|
|
|
101
99
|
})
|
|
102
100
|
})
|
|
103
101
|
}), displayedSections.length > 1 && _jsx(TabbedNavigation, {
|
|
104
|
-
items: displayedSections
|
|
105
|
-
|
|
102
|
+
items: displayedSections,
|
|
103
|
+
children: _jsx(WizardError, {})
|
|
104
|
+
}), _jsx(HandoffMessage, {}), _jsxs(Switch, {
|
|
106
105
|
children: [displayedSections.map((section, index) => {
|
|
107
106
|
const SectionComponent = section.render;
|
|
108
107
|
return _jsx(Route, {
|
|
@@ -122,7 +121,6 @@ const Wizard = _ref => {
|
|
|
122
121
|
})]
|
|
123
122
|
});
|
|
124
123
|
};
|
|
125
|
-
|
|
126
124
|
Wizard.useWizardData = useWizardData;
|
|
127
125
|
Wizard.STORE_NAMESPACE = WIZARD_STORE_NAMESPACE;
|
|
128
126
|
export default Wizard;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* External dependencies.
|
|
3
3
|
*/
|
|
4
|
-
import
|
|
4
|
+
import set from 'lodash/set';
|
|
5
|
+
import get from 'lodash/get';
|
|
6
|
+
import isEmpty from 'lodash/isEmpty';
|
|
7
|
+
|
|
5
8
|
/**
|
|
6
9
|
* WordPress dependencies.
|
|
7
10
|
*/
|
|
8
|
-
|
|
9
11
|
import apiFetch from '@wordpress/api-fetch';
|
|
10
12
|
import { createReduxStore, register, dispatch, select } from '@wordpress/data';
|
|
11
13
|
import { createAction } from './utils.js';
|
|
@@ -16,55 +18,50 @@ const DEFAULT_STATE = {
|
|
|
16
18
|
apiData: {},
|
|
17
19
|
error: null
|
|
18
20
|
};
|
|
21
|
+
|
|
19
22
|
/**
|
|
20
23
|
* wordpress/data does not trigger a component re-render
|
|
21
24
|
* on deep state change (via lodash's set function)
|
|
22
25
|
* unless the state was cloned first.
|
|
23
26
|
*/
|
|
24
|
-
|
|
25
27
|
const clone = objectToClone => JSON.parse(JSON.stringify(objectToClone));
|
|
26
|
-
|
|
27
28
|
const reducer = function () {
|
|
28
29
|
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_STATE;
|
|
29
30
|
let {
|
|
30
31
|
type,
|
|
31
32
|
payload = {}
|
|
32
33
|
} = arguments.length > 1 ? arguments[1] : undefined;
|
|
33
|
-
|
|
34
34
|
switch (type) {
|
|
35
35
|
case 'START_LOADING_DATA':
|
|
36
36
|
if (payload.isQuietLoading) {
|
|
37
|
-
return {
|
|
37
|
+
return {
|
|
38
|
+
...state,
|
|
38
39
|
isQuietLoading: true
|
|
39
40
|
};
|
|
40
41
|
}
|
|
41
|
-
|
|
42
|
-
|
|
42
|
+
return {
|
|
43
|
+
...state,
|
|
43
44
|
isLoading: true
|
|
44
45
|
};
|
|
45
|
-
|
|
46
46
|
case 'FINISH_LOADING_DATA':
|
|
47
|
-
return {
|
|
47
|
+
return {
|
|
48
|
+
...state,
|
|
48
49
|
isLoading: false,
|
|
49
50
|
isQuietLoading: false
|
|
50
51
|
};
|
|
51
|
-
|
|
52
52
|
case 'SET_API_DATA':
|
|
53
53
|
return set(clone(state), ['apiData', payload.slug], payload.data);
|
|
54
|
-
|
|
55
54
|
case 'UPDATE_WIZARD_SETTINGS':
|
|
56
55
|
return set(clone(state), ['apiData', payload.slug, ...payload.path], payload.value);
|
|
57
|
-
|
|
58
56
|
case 'SET_ERROR':
|
|
59
|
-
return {
|
|
57
|
+
return {
|
|
58
|
+
...state,
|
|
60
59
|
error: payload
|
|
61
60
|
};
|
|
62
|
-
|
|
63
61
|
default:
|
|
64
62
|
return state;
|
|
65
63
|
}
|
|
66
64
|
};
|
|
67
|
-
|
|
68
65
|
const actions = {
|
|
69
66
|
// Regular actions.
|
|
70
67
|
startLoadingData: createAction('START_LOADING_DATA'),
|
|
@@ -73,47 +70,43 @@ const actions = {
|
|
|
73
70
|
setAPIDataForWizard: createAction('SET_API_DATA'),
|
|
74
71
|
updateWizardSettings: createAction('UPDATE_WIZARD_SETTINGS'),
|
|
75
72
|
setError: createAction('SET_ERROR'),
|
|
76
|
-
|
|
77
73
|
// Async actions. These will not show up in Redux devtools.
|
|
78
|
-
|
|
74
|
+
saveWizardSettings(_ref) {
|
|
79
75
|
let {
|
|
80
76
|
slug,
|
|
81
77
|
section = '',
|
|
82
78
|
payloadPath = false,
|
|
83
79
|
updatePayload = null
|
|
84
80
|
} = _ref;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
isQuietFetch: true
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
if (!isEmpty(updatedData)) {
|
|
104
|
-
return actions.setAPIDataForWizard({
|
|
105
|
-
slug,
|
|
106
|
-
data: updatedData
|
|
81
|
+
return function* () {
|
|
82
|
+
// Optionally data can be updated before saving - an immediate update case
|
|
83
|
+
// (without an explicit "save" action).
|
|
84
|
+
if (updatePayload) {
|
|
85
|
+
yield actions.updateWizardSettings({
|
|
86
|
+
slug,
|
|
87
|
+
...updatePayload
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const wizardState = select(WIZARD_STORE_NAMESPACE).getWizardAPIData(slug);
|
|
91
|
+
const updatedData = yield actions.fetchFromAPI({
|
|
92
|
+
path: `/newspack/v1/wizard/${slug}/${section}`,
|
|
93
|
+
method: 'POST',
|
|
94
|
+
data: payloadPath ? get(wizardState, payloadPath) : wizardState,
|
|
95
|
+
isQuietFetch: true
|
|
107
96
|
});
|
|
108
|
-
|
|
97
|
+
if (!isEmpty(updatedData) && !updatedData.error) {
|
|
98
|
+
return actions.setAPIDataForWizard({
|
|
99
|
+
slug,
|
|
100
|
+
data: updatedData
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}();
|
|
109
104
|
},
|
|
110
|
-
|
|
111
105
|
*wizardApiFetch(fetchConfig) {
|
|
112
106
|
// Just a proxy to fetchFromAPI, but it has to be a generator.
|
|
113
107
|
const result = yield actions.fetchFromAPI(fetchConfig);
|
|
114
108
|
return result;
|
|
115
109
|
}
|
|
116
|
-
|
|
117
110
|
};
|
|
118
111
|
const selectors = {
|
|
119
112
|
isLoading: state => state.isLoading,
|
|
@@ -130,7 +123,10 @@ const store = createReduxStore(WIZARD_STORE_NAMESPACE, {
|
|
|
130
123
|
dispatch(WIZARD_STORE_NAMESPACE).startLoadingData({
|
|
131
124
|
isQuietLoading: Boolean(action.payload.isQuietFetch)
|
|
132
125
|
});
|
|
133
|
-
return apiFetch(action.payload).
|
|
126
|
+
return apiFetch(action.payload).then(data => {
|
|
127
|
+
dispatch(WIZARD_STORE_NAMESPACE).setError(null);
|
|
128
|
+
return data;
|
|
129
|
+
}).catch(error => {
|
|
134
130
|
dispatch(WIZARD_STORE_NAMESPACE).setError(error);
|
|
135
131
|
return {
|
|
136
132
|
error
|
|
@@ -152,10 +148,8 @@ const store = createReduxStore(WIZARD_STORE_NAMESPACE, {
|
|
|
152
148
|
data
|
|
153
149
|
});
|
|
154
150
|
}
|
|
155
|
-
|
|
156
151
|
return actions.finishLoadingData();
|
|
157
152
|
}
|
|
158
|
-
|
|
159
153
|
}
|
|
160
154
|
});
|
|
161
155
|
export default (() => register(store));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "newspack-components",
|
|
3
|
-
"version": "2.1
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"description": "Newspack design system components",
|
|
5
5
|
"author": "Automattic",
|
|
6
6
|
"license": "GPL-2.0-or-later",
|
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@wordpress/base-styles": "^4.0.0",
|
|
27
|
-
"@wordpress/components": "^
|
|
28
|
-
"@wordpress/element": "^
|
|
27
|
+
"@wordpress/components": "^23.6.0",
|
|
28
|
+
"@wordpress/element": "^5.5.0",
|
|
29
29
|
"@wordpress/i18n": "^4.2.2",
|
|
30
|
-
"@wordpress/icons": "^
|
|
30
|
+
"@wordpress/icons": "^9.11.0",
|
|
31
31
|
"classnames": "^2.3.1",
|
|
32
32
|
"lodash": "^4.17.21",
|
|
33
33
|
"moment-range": "^3.1.1",
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Internal dependencies
|
|
3
3
|
*/
|
|
4
|
-
import
|
|
4
|
+
import isFunction from 'lodash/isFunction';
|
|
5
|
+
import isObject from 'lodash/isObject';
|
|
6
|
+
import isString from 'lodash/isString';
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* Creates button props based on an action
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
@mixin visuallyHidden {
|
|
2
|
+
border: 0;
|
|
3
|
+
clip: rect( 1px, 1px, 1px, 1px );
|
|
4
|
+
clip-path: inset( 50% );
|
|
5
|
+
width: 1px;
|
|
6
|
+
height: 1px;
|
|
7
|
+
margin: -1px;
|
|
8
|
+
overflow: hidden;
|
|
9
|
+
padding: 0;
|
|
10
|
+
position: absolute !important;
|
|
11
|
+
word-wrap: normal !important; /* Many screen reader and browser combinations announce broken words as they would appear visually. */
|
|
12
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useState } from '@wordpress/element';
|
|
5
|
+
import { Icon, chevronRight } from '@wordpress/icons';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* External dependencies
|
|
9
|
+
*/
|
|
10
|
+
import classNames from 'classnames';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Internal dependencies
|
|
14
|
+
*/
|
|
15
|
+
import './style.scss';
|
|
16
|
+
|
|
17
|
+
const Accordion = ( { children, title } ) => {
|
|
18
|
+
const [ isOpen, setIsOpen ] = useState( false );
|
|
19
|
+
return (
|
|
20
|
+
<details
|
|
21
|
+
className={ classNames( 'newspack-accordion', { 'newspack-accordion--is-open': isOpen } ) }
|
|
22
|
+
>
|
|
23
|
+
<summary onClick={ () => setIsOpen( ! isOpen ) }>
|
|
24
|
+
{ title }
|
|
25
|
+
<Icon className="newspack-accordion__icon" icon={ chevronRight } size={ 24 } />
|
|
26
|
+
</summary>
|
|
27
|
+
{ children }
|
|
28
|
+
</details>
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default Accordion;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
@use '~@wordpress/base-styles/colors' as wp-colors;
|
|
2
|
+
|
|
3
|
+
.newspack-accordion {
|
|
4
|
+
border: 1px solid wp-colors.$gray-300;
|
|
5
|
+
|
|
6
|
+
&__icon {
|
|
7
|
+
transition: transform 200ms ease-out;
|
|
8
|
+
transform: rotate( 90deg );
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
&--is-open {
|
|
12
|
+
.newspack-accordion {
|
|
13
|
+
&__icon {
|
|
14
|
+
transform: rotate( -90deg );
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
summary {
|
|
19
|
+
padding: 16px 32px;
|
|
20
|
+
display: flex;
|
|
21
|
+
align-items: center;
|
|
22
|
+
justify-content: space-between;
|
|
23
|
+
cursor: pointer;
|
|
24
|
+
font-size: 14px;
|
|
25
|
+
font-weight: bold;
|
|
26
|
+
}
|
|
27
|
+
}
|
package/src/action-card/index.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { Component } from '@wordpress/element';
|
|
9
9
|
import { ExternalLink, ToggleControl } from '@wordpress/components';
|
|
10
|
-
import { Icon, check } from '@wordpress/icons';
|
|
10
|
+
import { Icon, check, chevronDown, chevronUp } from '@wordpress/icons';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Internal dependencies
|
|
@@ -21,12 +21,21 @@ import './style.scss';
|
|
|
21
21
|
import classnames from 'classnames';
|
|
22
22
|
|
|
23
23
|
class ActionCard extends Component {
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
state = {
|
|
25
|
+
expanded: false,
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
|
-
*
|
|
29
|
+
* When the collapse prop is updated to true, collapse the card if already expanded.
|
|
30
|
+
*/
|
|
31
|
+
componentDidUpdate( prevProps ) {
|
|
32
|
+
if ( ! prevProps.collapse && this.props.collapse && this.state.expanded ) {
|
|
33
|
+
this.setState( { expanded: false } );
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Render.
|
|
30
39
|
*/
|
|
31
40
|
render() {
|
|
32
41
|
const {
|
|
@@ -60,19 +69,31 @@ class ActionCard extends Component {
|
|
|
60
69
|
toggleChecked,
|
|
61
70
|
toggleOnChange,
|
|
62
71
|
hasGreyHeader,
|
|
72
|
+
hasWhiteHeader,
|
|
63
73
|
isPending,
|
|
74
|
+
expandable = false,
|
|
64
75
|
} = this.props;
|
|
76
|
+
|
|
77
|
+
const { expanded } = this.state;
|
|
78
|
+
|
|
65
79
|
const hasChildren = notification || children;
|
|
66
80
|
const classes = classnames(
|
|
67
81
|
'newspack-action-card',
|
|
68
82
|
simple && 'newspack-card--is-clickable',
|
|
69
83
|
hasGreyHeader && 'newspack-card--has-grey-header',
|
|
84
|
+
hasWhiteHeader && 'newspack-card--has-white-header',
|
|
70
85
|
hasChildren && 'newspack-card--has-children',
|
|
71
86
|
indent && 'newspack-card--indent',
|
|
72
87
|
isSmall && 'is-small',
|
|
73
88
|
isMedium && 'is-medium',
|
|
89
|
+
checkbox && 'has-checkbox',
|
|
90
|
+
expandable && 'is-expandable',
|
|
91
|
+
actionContent && 'has-action-content',
|
|
74
92
|
className
|
|
75
93
|
);
|
|
94
|
+
const backgroundImageStyles = url => {
|
|
95
|
+
return url ? { backgroundImage: `url(${ url })` } : {};
|
|
96
|
+
};
|
|
76
97
|
const titleProps =
|
|
77
98
|
toggleOnChange && ! titleLink && ! disabled
|
|
78
99
|
? { onClick: () => toggleOnChange( ! toggleChecked ), tabIndex: '0' }
|
|
@@ -95,7 +116,7 @@ class ActionCard extends Component {
|
|
|
95
116
|
<a href={ imageLink }>
|
|
96
117
|
<div
|
|
97
118
|
className="newspack-action-card__image"
|
|
98
|
-
style={
|
|
119
|
+
style={ backgroundImageStyles( image ) }
|
|
99
120
|
/>
|
|
100
121
|
</a>
|
|
101
122
|
</div>
|
|
@@ -118,7 +139,13 @@ class ActionCard extends Component {
|
|
|
118
139
|
<Grid columns={ 1 } gutter={ 8 } noMargin>
|
|
119
140
|
<h2>
|
|
120
141
|
<span className="newspack-action-card__title" { ...titleProps }>
|
|
121
|
-
{ titleLink
|
|
142
|
+
{ titleLink && <a href={ titleLink }>{ title }</a> }
|
|
143
|
+
{ ! titleLink && expandable && (
|
|
144
|
+
<Button isLink onClick={ () => this.setState( { expanded: ! expanded } ) }>
|
|
145
|
+
{ title }
|
|
146
|
+
</Button>
|
|
147
|
+
) }
|
|
148
|
+
{ ! titleLink && ! expandable && title }
|
|
122
149
|
</span>
|
|
123
150
|
{ badges?.length &&
|
|
124
151
|
badges.map( ( badgeText, i ) => (
|
|
@@ -135,7 +162,7 @@ class ActionCard extends Component {
|
|
|
135
162
|
) }
|
|
136
163
|
</Grid>
|
|
137
164
|
</div>
|
|
138
|
-
{ ( actionText || isDisplayingSecondaryAction || actionContent ) && (
|
|
165
|
+
{ ! expandable && ( actionText || isDisplayingSecondaryAction || actionContent ) && (
|
|
139
166
|
<div className="newspack-action-card__region newspack-action-card__region-right">
|
|
140
167
|
{ /* eslint-disable no-nested-ternary */ }
|
|
141
168
|
{ actionContent && actionContent }
|
|
@@ -146,6 +173,7 @@ class ActionCard extends Component {
|
|
|
146
173
|
</Handoff>
|
|
147
174
|
) : onClick || hasInternalLink ? (
|
|
148
175
|
<Button
|
|
176
|
+
disabled={ disabled }
|
|
149
177
|
isLink
|
|
150
178
|
href={ href }
|
|
151
179
|
onClick={ onClick }
|
|
@@ -176,6 +204,11 @@ class ActionCard extends Component {
|
|
|
176
204
|
) }
|
|
177
205
|
</div>
|
|
178
206
|
) }
|
|
207
|
+
{ expandable && (
|
|
208
|
+
<Button onClick={ () => this.setState( { expanded: ! expanded } ) }>
|
|
209
|
+
<Icon icon={ expanded ? chevronUp : chevronDown } height={ 24 } width={ 24 } />
|
|
210
|
+
</Button>
|
|
211
|
+
) }
|
|
179
212
|
</div>
|
|
180
213
|
{ notification && (
|
|
181
214
|
<div className="newspack-action-card__notification newspack-action-card__region-children">
|
|
@@ -193,7 +226,9 @@ class ActionCard extends Component {
|
|
|
193
226
|
) }
|
|
194
227
|
</div>
|
|
195
228
|
) }
|
|
196
|
-
{ children &&
|
|
229
|
+
{ children && ( ( expandable && expanded ) || ! expandable ) && (
|
|
230
|
+
<div className="newspack-action-card__region-children">{ children }</div>
|
|
231
|
+
) }
|
|
197
232
|
</Card>
|
|
198
233
|
);
|
|
199
234
|
}
|