@wordpress/edit-site 4.0.1-next.f435e9e01b.0 → 4.0.3-next.a55ed9455a.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.
- package/CHANGELOG.md +1 -1
- package/build/components/add-new-template/new-template-part.js +4 -1
- package/build/components/add-new-template/new-template-part.js.map +1 -1
- package/build/components/app/index.js +20 -0
- package/build/components/app/index.js.map +1 -1
- package/build/components/editor/global-styles-renderer.js +7 -3
- package/build/components/editor/global-styles-renderer.js.map +1 -1
- package/build/components/editor/index.js +3 -18
- package/build/components/editor/index.js.map +1 -1
- package/build/components/error-boundary/index.js +11 -27
- package/build/components/error-boundary/index.js.map +1 -1
- package/build/components/error-boundary/warning.js +70 -0
- package/build/components/error-boundary/warning.js.map +1 -0
- package/build/components/global-styles/navigation-button.js +7 -27
- package/build/components/global-styles/navigation-button.js.map +1 -1
- package/build/components/global-styles/screen-block-list.js +31 -1
- package/build/components/global-styles/screen-block-list.js.map +1 -1
- package/build/components/global-styles/screen-typography.js.map +1 -1
- package/build/components/global-styles/typography-panel.js +5 -2
- package/build/components/global-styles/typography-panel.js.map +1 -1
- package/build/components/global-styles/use-global-styles-output.js +21 -4
- package/build/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build/components/global-styles/utils.js +2 -2
- package/build/components/global-styles/utils.js.map +1 -1
- package/build/components/header/index.js +1 -1
- package/build/components/header/index.js.map +1 -1
- package/build/components/header/more-menu/index.js +9 -21
- package/build/components/header/more-menu/index.js.map +1 -1
- package/build/components/header/more-menu/site-export.js +1 -1
- package/build/components/header/more-menu/site-export.js.map +1 -1
- package/build/components/header/more-menu/welcome-guide-menu-item.js +4 -8
- package/build/components/header/more-menu/welcome-guide-menu-item.js.map +1 -1
- package/build/components/keyboard-shortcuts/index.js +1 -1
- package/build/components/keyboard-shortcuts/index.js.map +1 -1
- package/build/components/list/table.js +9 -20
- package/build/components/list/table.js.map +1 -1
- package/build/components/navigation-sidebar/navigation-panel/index.js +9 -3
- package/build/components/navigation-sidebar/navigation-panel/index.js.map +1 -1
- package/build/components/navigation-sidebar/navigation-toggle/index.js +15 -4
- package/build/components/navigation-sidebar/navigation-toggle/index.js.map +1 -1
- package/build/components/secondary-sidebar/list-view-sidebar.js +0 -11
- package/build/components/secondary-sidebar/list-view-sidebar.js.map +1 -1
- package/build/components/sidebar/global-styles-sidebar.js +5 -5
- package/build/components/sidebar/global-styles-sidebar.js.map +1 -1
- package/build/components/template-part-converter/convert-to-template-part.js +4 -1
- package/build/components/template-part-converter/convert-to-template-part.js.map +1 -1
- package/build/components/welcome-guide/editor.js +6 -6
- package/build/components/welcome-guide/editor.js.map +1 -1
- package/build/components/welcome-guide/styles.js +6 -4
- package/build/components/welcome-guide/styles.js.map +1 -1
- package/build/index.js +22 -7
- package/build/index.js.map +1 -1
- package/build/store/actions.js +203 -163
- package/build/store/actions.js.map +1 -1
- package/build/store/index.js +3 -9
- package/build/store/index.js.map +1 -1
- package/build/store/reducer.js +0 -44
- package/build/store/reducer.js.map +1 -1
- package/build/store/selectors.js +33 -10
- package/build/store/selectors.js.map +1 -1
- package/build-module/components/add-new-template/new-template-part.js +4 -1
- package/build-module/components/add-new-template/new-template-part.js.map +1 -1
- package/build-module/components/app/index.js +16 -0
- package/build-module/components/app/index.js.map +1 -1
- package/build-module/components/editor/global-styles-renderer.js +6 -3
- package/build-module/components/editor/global-styles-renderer.js.map +1 -1
- package/build-module/components/editor/index.js +4 -17
- package/build-module/components/editor/index.js.map +1 -1
- package/build-module/components/error-boundary/index.js +9 -26
- package/build-module/components/error-boundary/index.js.map +1 -1
- package/build-module/components/error-boundary/warning.js +60 -0
- package/build-module/components/error-boundary/warning.js.map +1 -0
- package/build-module/components/global-styles/navigation-button.js +8 -28
- package/build-module/components/global-styles/navigation-button.js.map +1 -1
- package/build-module/components/global-styles/screen-block-list.js +31 -2
- package/build-module/components/global-styles/screen-block-list.js.map +1 -1
- package/build-module/components/global-styles/screen-typography.js.map +1 -1
- package/build-module/components/global-styles/typography-panel.js +6 -3
- package/build-module/components/global-styles/typography-panel.js.map +1 -1
- package/build-module/components/global-styles/use-global-styles-output.js +20 -4
- package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build-module/components/global-styles/utils.js +2 -2
- package/build-module/components/global-styles/utils.js.map +1 -1
- package/build-module/components/header/index.js +1 -1
- package/build-module/components/header/index.js.map +1 -1
- package/build-module/components/header/more-menu/index.js +11 -22
- package/build-module/components/header/more-menu/index.js.map +1 -1
- package/build-module/components/header/more-menu/site-export.js +1 -1
- package/build-module/components/header/more-menu/site-export.js.map +1 -1
- package/build-module/components/header/more-menu/welcome-guide-menu-item.js +4 -8
- package/build-module/components/header/more-menu/welcome-guide-menu-item.js.map +1 -1
- package/build-module/components/keyboard-shortcuts/index.js +1 -1
- package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
- package/build-module/components/list/table.js +9 -21
- package/build-module/components/list/table.js.map +1 -1
- package/build-module/components/navigation-sidebar/navigation-panel/index.js +9 -3
- package/build-module/components/navigation-sidebar/navigation-panel/index.js.map +1 -1
- package/build-module/components/navigation-sidebar/navigation-toggle/index.js +12 -4
- package/build-module/components/navigation-sidebar/navigation-toggle/index.js.map +1 -1
- package/build-module/components/secondary-sidebar/list-view-sidebar.js +1 -12
- package/build-module/components/secondary-sidebar/list-view-sidebar.js.map +1 -1
- package/build-module/components/sidebar/global-styles-sidebar.js +4 -4
- package/build-module/components/sidebar/global-styles-sidebar.js.map +1 -1
- package/build-module/components/template-part-converter/convert-to-template-part.js +4 -1
- package/build-module/components/template-part-converter/convert-to-template-part.js.map +1 -1
- package/build-module/components/welcome-guide/editor.js +5 -5
- package/build-module/components/welcome-guide/editor.js.map +1 -1
- package/build-module/components/welcome-guide/styles.js +5 -4
- package/build-module/components/welcome-guide/styles.js.map +1 -1
- package/build-module/index.js +20 -7
- package/build-module/index.js.map +1 -1
- package/build-module/store/actions.js +181 -154
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/index.js +4 -9
- package/build-module/store/index.js.map +1 -1
- package/build-module/store/reducer.js +0 -40
- package/build-module/store/reducer.js.map +1 -1
- package/build-module/store/selectors.js +28 -10
- package/build-module/store/selectors.js.map +1 -1
- package/build-style/style-rtl.css +101 -38
- package/build-style/style.css +101 -38
- package/package.json +33 -27
- package/src/components/add-new-template/new-template-part.js +7 -1
- package/src/components/app/index.js +19 -0
- package/src/components/editor/global-styles-renderer.js +7 -1
- package/src/components/editor/index.js +2 -20
- package/src/components/error-boundary/index.js +11 -28
- package/src/components/error-boundary/warning.js +59 -0
- package/src/components/global-styles/navigation-button.js +6 -25
- package/src/components/global-styles/screen-block-list.js +27 -2
- package/src/components/global-styles/screen-typography.js +1 -2
- package/src/components/global-styles/typography-panel.js +12 -5
- package/src/components/global-styles/use-global-styles-output.js +19 -3
- package/src/components/global-styles/utils.js +2 -2
- package/src/components/header/index.js +1 -1
- package/src/components/header/more-menu/index.js +12 -29
- package/src/components/header/more-menu/site-export.js +1 -1
- package/src/components/header/more-menu/welcome-guide-menu-item.js +3 -7
- package/src/components/keyboard-shortcuts/index.js +1 -1
- package/src/components/list/table.js +18 -23
- package/src/components/navigation-sidebar/navigation-panel/index.js +16 -11
- package/src/components/navigation-sidebar/navigation-toggle/index.js +13 -4
- package/src/components/navigation-sidebar/navigation-toggle/style.scss +32 -31
- package/src/components/navigation-sidebar/navigation-toggle/test/index.js +1 -1
- package/src/components/secondary-sidebar/list-view-sidebar.js +1 -11
- package/src/components/sidebar/global-styles-sidebar.js +6 -3
- package/src/components/sidebar/style.scss +1 -1
- package/src/components/template-part-converter/convert-to-template-part.js +6 -1
- package/src/components/welcome-guide/editor.js +8 -4
- package/src/components/welcome-guide/styles.js +5 -3
- package/src/index.js +25 -7
- package/src/store/actions.js +180 -215
- package/src/store/index.js +2 -8
- package/src/store/reducer.js +0 -30
- package/src/store/selectors.js +37 -10
- package/src/store/test/actions.js +203 -92
- package/src/store/test/reducer.js +0 -22
- package/src/store/test/selectors.js +22 -53
- package/src/style.scss +0 -1
- package/build/components/header/feature-toggle/index.js +0 -66
- package/build/components/header/feature-toggle/index.js.map +0 -1
- package/build/components/routes/redirect-to-homepage.js +0 -87
- package/build/components/routes/redirect-to-homepage.js.map +0 -1
- package/build/store/defaults.js +0 -15
- package/build/store/defaults.js.map +0 -1
- package/build-module/components/header/feature-toggle/index.js +0 -52
- package/build-module/components/header/feature-toggle/index.js.map +0 -1
- package/build-module/components/routes/redirect-to-homepage.js +0 -75
- package/build-module/components/routes/redirect-to-homepage.js.map +0 -1
- package/build-module/store/defaults.js +0 -8
- package/build-module/store/defaults.js.map +0 -1
- package/src/components/header/feature-toggle/index.js +0 -55
- package/src/components/header/more-menu/style.scss +0 -29
- package/src/components/routes/redirect-to-homepage.js +0 -71
- package/src/store/defaults.js +0 -7
package/src/store/selectors.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { map, keyBy } from 'lodash';
|
|
5
5
|
import createSelector from 'rememo';
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -9,9 +9,11 @@ import createSelector from 'rememo';
|
|
|
9
9
|
*/
|
|
10
10
|
import { store as coreDataStore } from '@wordpress/core-data';
|
|
11
11
|
import { createRegistrySelector } from '@wordpress/data';
|
|
12
|
+
import deprecated from '@wordpress/deprecated';
|
|
12
13
|
import { uploadMedia } from '@wordpress/media-utils';
|
|
13
14
|
import { isTemplatePart } from '@wordpress/blocks';
|
|
14
15
|
import { Platform } from '@wordpress/element';
|
|
16
|
+
import { store as preferencesStore } from '@wordpress/preferences';
|
|
15
17
|
|
|
16
18
|
/**
|
|
17
19
|
* Internal dependencies
|
|
@@ -31,16 +33,35 @@ import {
|
|
|
31
33
|
* @typedef {'template'|'template_type'} TemplateType Template type.
|
|
32
34
|
*/
|
|
33
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Helper for getting a preference from the preferences store.
|
|
38
|
+
*
|
|
39
|
+
* This is only present so that `getSettings` doesn't need to be made a
|
|
40
|
+
* registry selector.
|
|
41
|
+
*
|
|
42
|
+
* It's unstable because the selector needs to be exported and so part of the
|
|
43
|
+
* public API to work.
|
|
44
|
+
*/
|
|
45
|
+
export const __unstableGetPreference = createRegistrySelector(
|
|
46
|
+
( select ) => ( state, name ) =>
|
|
47
|
+
select( preferencesStore ).get( 'core/edit-site', name )
|
|
48
|
+
);
|
|
49
|
+
|
|
34
50
|
/**
|
|
35
51
|
* Returns whether the given feature is enabled or not.
|
|
36
52
|
*
|
|
37
|
-
* @param {Object} state
|
|
38
|
-
* @param {string}
|
|
53
|
+
* @param {Object} state Global application state.
|
|
54
|
+
* @param {string} featureName Feature slug.
|
|
39
55
|
*
|
|
40
56
|
* @return {boolean} Is active.
|
|
41
57
|
*/
|
|
42
|
-
export function isFeatureActive( state,
|
|
43
|
-
|
|
58
|
+
export function isFeatureActive( state, featureName ) {
|
|
59
|
+
deprecated( `select( 'core/interface' ).isFeatureActive`, {
|
|
60
|
+
since: '6.0',
|
|
61
|
+
alternative: `select( 'core/preferences' ).get`,
|
|
62
|
+
} );
|
|
63
|
+
|
|
64
|
+
return !! __unstableGetPreference( state, featureName );
|
|
44
65
|
}
|
|
45
66
|
|
|
46
67
|
/**
|
|
@@ -94,10 +115,15 @@ export const getSettings = createSelector(
|
|
|
94
115
|
const settings = {
|
|
95
116
|
...state.settings,
|
|
96
117
|
outlineMode: true,
|
|
97
|
-
focusMode:
|
|
98
|
-
hasFixedToolbar:
|
|
118
|
+
focusMode: !! __unstableGetPreference( state, 'focusMode' ),
|
|
119
|
+
hasFixedToolbar: !! __unstableGetPreference(
|
|
120
|
+
state,
|
|
121
|
+
'fixedToolbar'
|
|
122
|
+
),
|
|
99
123
|
__experimentalSetIsInserterOpened: setIsInserterOpen,
|
|
100
124
|
__experimentalReusableBlocks: getReusableBlocks( state ),
|
|
125
|
+
__experimentalPreferPatternsOnRoot:
|
|
126
|
+
'wp_template' === getEditedPostType( state ),
|
|
101
127
|
};
|
|
102
128
|
|
|
103
129
|
const canUserCreateMedia = getCanUserCreateMedia( state );
|
|
@@ -117,9 +143,10 @@ export const getSettings = createSelector(
|
|
|
117
143
|
( state ) => [
|
|
118
144
|
getCanUserCreateMedia( state ),
|
|
119
145
|
state.settings,
|
|
120
|
-
|
|
121
|
-
|
|
146
|
+
__unstableGetPreference( state, 'focusMode' ),
|
|
147
|
+
__unstableGetPreference( state, 'fixedToolbar' ),
|
|
122
148
|
getReusableBlocks( state ),
|
|
149
|
+
getEditedPostType( state ),
|
|
123
150
|
]
|
|
124
151
|
);
|
|
125
152
|
|
|
@@ -336,5 +363,5 @@ export const getCurrentTemplateTemplateParts = createRegistrySelector(
|
|
|
336
363
|
* @return {string} Editing mode.
|
|
337
364
|
*/
|
|
338
365
|
export function getEditorMode( state ) {
|
|
339
|
-
return state
|
|
366
|
+
return __unstableGetPreference( state, 'editorMode' );
|
|
340
367
|
}
|
|
@@ -1,129 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import apiFetch from '@wordpress/api-fetch';
|
|
5
|
+
import { store as blockEditorStore } from '@wordpress/block-editor';
|
|
6
|
+
import { store as coreStore } from '@wordpress/core-data';
|
|
7
|
+
import { createRegistry } from '@wordpress/data';
|
|
8
|
+
import { store as interfaceStore } from '@wordpress/interface';
|
|
9
|
+
import { store as noticesStore } from '@wordpress/notices';
|
|
10
|
+
import { store as preferencesStore } from '@wordpress/preferences';
|
|
11
|
+
|
|
1
12
|
/**
|
|
2
13
|
* Internal dependencies
|
|
3
14
|
*/
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
15
|
+
import { store as editSiteStore } from '..';
|
|
16
|
+
|
|
17
|
+
jest.useRealTimers();
|
|
18
|
+
|
|
19
|
+
const ENTITY_TYPES = {
|
|
20
|
+
wp_template: {
|
|
21
|
+
description: 'Templates to include in your theme.',
|
|
22
|
+
hierarchical: false,
|
|
23
|
+
name: 'Templates',
|
|
24
|
+
rest_base: 'templates',
|
|
25
|
+
rest_namespace: 'wp/v2',
|
|
26
|
+
slug: 'wp_template',
|
|
27
|
+
taxonomies: [],
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
function createRegistryWithStores() {
|
|
32
|
+
// create a registry
|
|
33
|
+
const registry = createRegistry();
|
|
34
|
+
|
|
35
|
+
// register stores
|
|
36
|
+
registry.register( blockEditorStore );
|
|
37
|
+
registry.register( coreStore );
|
|
38
|
+
registry.register( editSiteStore );
|
|
39
|
+
registry.register( interfaceStore );
|
|
40
|
+
registry.register( noticesStore );
|
|
41
|
+
registry.register( preferencesStore );
|
|
42
|
+
|
|
43
|
+
return registry;
|
|
44
|
+
}
|
|
13
45
|
|
|
14
46
|
describe( 'actions', () => {
|
|
15
47
|
describe( 'toggleFeature', () => {
|
|
16
|
-
it( 'should
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
48
|
+
it( 'should toggle a feature flag', () => {
|
|
49
|
+
const registry = createRegistryWithStores();
|
|
50
|
+
|
|
51
|
+
// Should default to false.
|
|
52
|
+
expect(
|
|
53
|
+
registry.select( editSiteStore ).isFeatureActive( 'name' )
|
|
54
|
+
).toBe( false );
|
|
55
|
+
|
|
56
|
+
// Toggle on.
|
|
57
|
+
registry.dispatch( editSiteStore ).toggleFeature( 'name' );
|
|
58
|
+
expect(
|
|
59
|
+
registry.select( editSiteStore ).isFeatureActive( 'name' )
|
|
60
|
+
).toBe( true );
|
|
61
|
+
|
|
62
|
+
// Toggle off again.
|
|
63
|
+
registry.dispatch( editSiteStore ).toggleFeature( 'name' );
|
|
64
|
+
expect(
|
|
65
|
+
registry.select( editSiteStore ).isFeatureActive( 'name' )
|
|
66
|
+
).toBe( false );
|
|
67
|
+
|
|
68
|
+
// Expect a deprecation warning.
|
|
69
|
+
expect( console ).toHaveWarned();
|
|
22
70
|
} );
|
|
23
71
|
} );
|
|
24
72
|
|
|
25
73
|
describe( 'setTemplate', () => {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
74
|
+
const ID = 1;
|
|
75
|
+
const SLUG = 'archive';
|
|
76
|
+
|
|
77
|
+
it( 'should set the template when slug is provided', async () => {
|
|
78
|
+
const registry = createRegistryWithStores();
|
|
79
|
+
|
|
80
|
+
await registry.dispatch( editSiteStore ).setTemplate( ID, SLUG );
|
|
81
|
+
|
|
82
|
+
const select = registry.select( editSiteStore );
|
|
83
|
+
expect( select.getEditedPostId() ).toBe( ID );
|
|
84
|
+
expect( select.getPage().context.templateSlug ).toBe( SLUG );
|
|
35
85
|
} );
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
86
|
+
|
|
87
|
+
it( 'should set the template by fetching the template slug', async () => {
|
|
88
|
+
const registry = createRegistryWithStores();
|
|
89
|
+
|
|
90
|
+
apiFetch.setFetchHandler( async ( options ) => {
|
|
91
|
+
const { method = 'GET', path } = options;
|
|
92
|
+
if ( method === 'GET' ) {
|
|
93
|
+
if ( path.startsWith( '/wp/v2/types' ) ) {
|
|
94
|
+
return ENTITY_TYPES;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if ( path.startsWith( `/wp/v2/templates/${ ID }` ) ) {
|
|
98
|
+
return { id: ID, slug: SLUG };
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
throw {
|
|
103
|
+
code: 'unknown_path',
|
|
104
|
+
message: `Unknown path: ${ method } ${ path }`,
|
|
105
|
+
};
|
|
50
106
|
} );
|
|
107
|
+
|
|
108
|
+
await registry.dispatch( editSiteStore ).setTemplate( ID );
|
|
109
|
+
|
|
110
|
+
const select = registry.select( editSiteStore );
|
|
111
|
+
expect( select.getEditedPostId() ).toBe( ID );
|
|
112
|
+
expect( select.getPage().context.templateSlug ).toBe( SLUG );
|
|
51
113
|
} );
|
|
52
114
|
} );
|
|
53
115
|
|
|
54
116
|
describe( 'addTemplate', () => {
|
|
55
|
-
it( 'should
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
117
|
+
it( 'should issue a REST request to create the template and then set it', async () => {
|
|
118
|
+
const registry = createRegistryWithStores();
|
|
119
|
+
|
|
120
|
+
const ID = 1;
|
|
121
|
+
const SLUG = 'index';
|
|
122
|
+
|
|
123
|
+
apiFetch.setFetchHandler( async ( options ) => {
|
|
124
|
+
const { method = 'GET', path, data } = options;
|
|
125
|
+
|
|
126
|
+
if ( method === 'GET' && path.startsWith( '/wp/v2/types' ) ) {
|
|
127
|
+
return ENTITY_TYPES;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (
|
|
131
|
+
method === 'POST' &&
|
|
132
|
+
path.startsWith( '/wp/v2/templates' )
|
|
133
|
+
) {
|
|
134
|
+
return { id: ID, slug: data.slug };
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
throw {
|
|
138
|
+
code: 'unknown_path',
|
|
139
|
+
message: `Unknown path: ${ method } ${ path }`,
|
|
140
|
+
};
|
|
73
141
|
} );
|
|
142
|
+
|
|
143
|
+
await registry
|
|
144
|
+
.dispatch( editSiteStore )
|
|
145
|
+
.addTemplate( { slug: SLUG } );
|
|
146
|
+
|
|
147
|
+
const select = registry.select( editSiteStore );
|
|
148
|
+
expect( select.getEditedPostId() ).toBe( ID );
|
|
149
|
+
expect( select.getPage().context.templateSlug ).toBe( SLUG );
|
|
74
150
|
} );
|
|
75
151
|
} );
|
|
76
152
|
|
|
77
153
|
describe( 'setTemplatePart', () => {
|
|
78
|
-
it( 'should
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
154
|
+
it( 'should set template part', () => {
|
|
155
|
+
const registry = createRegistryWithStores();
|
|
156
|
+
|
|
157
|
+
const ID = 1;
|
|
158
|
+
registry.dispatch( editSiteStore ).setTemplatePart( ID );
|
|
159
|
+
|
|
160
|
+
const select = registry.select( editSiteStore );
|
|
161
|
+
expect( select.getEditedPostId() ).toBe( ID );
|
|
162
|
+
expect( select.getEditedPostType() ).toBe( 'wp_template_part' );
|
|
84
163
|
} );
|
|
85
164
|
} );
|
|
86
165
|
|
|
87
166
|
describe( 'setPage', () => {
|
|
88
|
-
it( 'should
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
167
|
+
it( 'should find the template and then set the page', async () => {
|
|
168
|
+
const registry = createRegistryWithStores();
|
|
169
|
+
|
|
170
|
+
const ID = 'emptytheme//single';
|
|
171
|
+
const SLUG = 'single';
|
|
172
|
+
|
|
173
|
+
window.fetch = async ( path ) => {
|
|
174
|
+
if ( path === '/?_wp-find-template=true' ) {
|
|
175
|
+
return {
|
|
176
|
+
json: async () => ( { data: { id: ID, slug: SLUG } } ),
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
throw {
|
|
181
|
+
code: 'unknown_path',
|
|
182
|
+
message: `Unknown path: ${ path }`,
|
|
183
|
+
};
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
apiFetch.setFetchHandler( async ( options ) => {
|
|
187
|
+
const { method = 'GET', path } = options;
|
|
188
|
+
|
|
189
|
+
if ( method === 'GET' ) {
|
|
190
|
+
if ( path.startsWith( '/wp/v2/types' ) ) {
|
|
191
|
+
return ENTITY_TYPES;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
if ( path.startsWith( `/wp/v2/templates/${ ID }` ) ) {
|
|
195
|
+
return { id: ID, slug: SLUG };
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
throw {
|
|
200
|
+
code: 'unknown_path',
|
|
201
|
+
message: `Unknown path: ${ method } ${ path }`,
|
|
202
|
+
};
|
|
102
203
|
} );
|
|
103
|
-
|
|
204
|
+
|
|
205
|
+
await registry.dispatch( editSiteStore ).setPage( { path: '/' } );
|
|
206
|
+
|
|
207
|
+
const select = registry.select( editSiteStore );
|
|
208
|
+
expect( select.getEditedPostId() ).toBe( 'emptytheme//single' );
|
|
209
|
+
expect( select.getEditedPostType() ).toBe( 'wp_template' );
|
|
210
|
+
expect( select.getPage().path ).toBe( '/' );
|
|
104
211
|
} );
|
|
105
212
|
} );
|
|
106
213
|
|
|
107
214
|
describe( 'setHomeTemplateId', () => {
|
|
108
|
-
it( 'should
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
215
|
+
it( 'should set the home template ID', () => {
|
|
216
|
+
const registry = createRegistryWithStores();
|
|
217
|
+
|
|
218
|
+
registry.dispatch( editSiteStore ).setHomeTemplateId( 90 );
|
|
219
|
+
expect( registry.select( editSiteStore ).getHomeTemplateId() ).toBe(
|
|
220
|
+
90
|
|
221
|
+
);
|
|
114
222
|
} );
|
|
115
223
|
} );
|
|
116
224
|
|
|
117
225
|
describe( 'setIsListViewOpened', () => {
|
|
118
|
-
it( 'should
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
226
|
+
it( 'should set the list view opened state', () => {
|
|
227
|
+
const registry = createRegistryWithStores();
|
|
228
|
+
|
|
229
|
+
registry.dispatch( editSiteStore ).setIsListViewOpened( true );
|
|
230
|
+
expect( registry.select( editSiteStore ).isListViewOpened() ).toBe(
|
|
231
|
+
true
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
registry.dispatch( editSiteStore ).setIsListViewOpened( false );
|
|
235
|
+
expect( registry.select( editSiteStore ).isListViewOpened() ).toBe(
|
|
236
|
+
false
|
|
237
|
+
);
|
|
127
238
|
} );
|
|
128
239
|
} );
|
|
129
240
|
} );
|
|
@@ -7,7 +7,6 @@ import deepFreeze from 'deep-freeze';
|
|
|
7
7
|
* Internal dependencies
|
|
8
8
|
*/
|
|
9
9
|
import {
|
|
10
|
-
preferences,
|
|
11
10
|
settings,
|
|
12
11
|
homeTemplateId,
|
|
13
12
|
editedPost,
|
|
@@ -15,7 +14,6 @@ import {
|
|
|
15
14
|
blockInserterPanel,
|
|
16
15
|
listViewPanel,
|
|
17
16
|
} from '../reducer';
|
|
18
|
-
import { PREFERENCES_DEFAULTS } from '../defaults';
|
|
19
17
|
|
|
20
18
|
import {
|
|
21
19
|
setNavigationPanelActiveMenu,
|
|
@@ -26,26 +24,6 @@ import {
|
|
|
26
24
|
} from '../actions';
|
|
27
25
|
|
|
28
26
|
describe( 'state', () => {
|
|
29
|
-
describe( 'preferences()', () => {
|
|
30
|
-
it( 'should apply all defaults', () => {
|
|
31
|
-
const state = preferences( undefined, {} );
|
|
32
|
-
|
|
33
|
-
expect( state ).toEqual( PREFERENCES_DEFAULTS );
|
|
34
|
-
} );
|
|
35
|
-
|
|
36
|
-
it( 'should toggle a feature flag', () => {
|
|
37
|
-
const state = preferences(
|
|
38
|
-
deepFreeze( { features: { chicken: true } } ),
|
|
39
|
-
{
|
|
40
|
-
type: 'TOGGLE_FEATURE',
|
|
41
|
-
feature: 'chicken',
|
|
42
|
-
}
|
|
43
|
-
);
|
|
44
|
-
|
|
45
|
-
expect( state.features ).toEqual( { chicken: false } );
|
|
46
|
-
} );
|
|
47
|
-
} );
|
|
48
|
-
|
|
49
27
|
describe( 'settings()', () => {
|
|
50
28
|
it( 'should apply default state', () => {
|
|
51
29
|
expect( settings( undefined, {} ) ).toEqual( {} );
|
|
@@ -7,7 +7,6 @@ import { store as coreDataStore } from '@wordpress/core-data';
|
|
|
7
7
|
* Internal dependencies
|
|
8
8
|
*/
|
|
9
9
|
import {
|
|
10
|
-
isFeatureActive,
|
|
11
10
|
getCanUserCreateMedia,
|
|
12
11
|
getSettings,
|
|
13
12
|
getHomeTemplateId,
|
|
@@ -19,62 +18,22 @@ import {
|
|
|
19
18
|
isNavigationOpened,
|
|
20
19
|
isInserterOpened,
|
|
21
20
|
isListViewOpened,
|
|
21
|
+
__unstableGetPreference,
|
|
22
22
|
} from '../selectors';
|
|
23
23
|
|
|
24
24
|
describe( 'selectors', () => {
|
|
25
25
|
const canUser = jest.fn( () => true );
|
|
26
26
|
const getEntityRecords = jest.fn( () => [] );
|
|
27
|
+
const get = jest.fn();
|
|
27
28
|
getCanUserCreateMedia.registry = {
|
|
28
29
|
select: jest.fn( () => ( { canUser } ) ),
|
|
29
30
|
};
|
|
30
31
|
getReusableBlocks.registry = {
|
|
31
32
|
select: jest.fn( () => ( { getEntityRecords } ) ),
|
|
32
33
|
};
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
// See: https://github.com/WordPress/gutenberg/issues/14580
|
|
37
|
-
const state = {
|
|
38
|
-
preferences: {},
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
expect( isFeatureActive( state, 'chicken' ) ).toBe( false );
|
|
42
|
-
} );
|
|
43
|
-
|
|
44
|
-
it( 'should return true if feature is active', () => {
|
|
45
|
-
const state = {
|
|
46
|
-
preferences: {
|
|
47
|
-
features: {
|
|
48
|
-
chicken: true,
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
expect( isFeatureActive( state, 'chicken' ) ).toBe( true );
|
|
54
|
-
} );
|
|
55
|
-
|
|
56
|
-
it( 'should return false if feature is not active', () => {
|
|
57
|
-
const state = {
|
|
58
|
-
preferences: {
|
|
59
|
-
features: {
|
|
60
|
-
chicken: false,
|
|
61
|
-
},
|
|
62
|
-
},
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
expect( isFeatureActive( state, 'chicken' ) ).toBe( false );
|
|
66
|
-
} );
|
|
67
|
-
|
|
68
|
-
it( 'should return false if feature is not referred', () => {
|
|
69
|
-
const state = {
|
|
70
|
-
preferences: {
|
|
71
|
-
features: {},
|
|
72
|
-
},
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
expect( isFeatureActive( state, 'chicken' ) ).toBe( false );
|
|
76
|
-
} );
|
|
77
|
-
} );
|
|
34
|
+
__unstableGetPreference.registry = {
|
|
35
|
+
select: jest.fn( () => ( { get } ) ),
|
|
36
|
+
};
|
|
78
37
|
|
|
79
38
|
describe( 'getCanUserCreateMedia', () => {
|
|
80
39
|
it( "selects `canUser( 'create', 'media' )` from the core store", () => {
|
|
@@ -106,7 +65,15 @@ describe( 'selectors', () => {
|
|
|
106
65
|
it( "returns the settings when the user can't create media", () => {
|
|
107
66
|
canUser.mockReturnValueOnce( false );
|
|
108
67
|
canUser.mockReturnValueOnce( false );
|
|
109
|
-
|
|
68
|
+
get.mockImplementation( ( scope, name ) => {
|
|
69
|
+
if ( name === 'focusMode' ) return false;
|
|
70
|
+
if ( name === 'fixedToolbar' ) return false;
|
|
71
|
+
} );
|
|
72
|
+
const state = {
|
|
73
|
+
settings: {},
|
|
74
|
+
preferences: {},
|
|
75
|
+
editedPost: { type: 'wp_template' },
|
|
76
|
+
};
|
|
110
77
|
const setInserterOpened = () => {};
|
|
111
78
|
expect( getSettings( state, setInserterOpened ) ).toEqual( {
|
|
112
79
|
outlineMode: true,
|
|
@@ -114,18 +81,19 @@ describe( 'selectors', () => {
|
|
|
114
81
|
hasFixedToolbar: false,
|
|
115
82
|
__experimentalSetIsInserterOpened: setInserterOpened,
|
|
116
83
|
__experimentalReusableBlocks: [],
|
|
84
|
+
__experimentalPreferPatternsOnRoot: true,
|
|
117
85
|
} );
|
|
118
86
|
} );
|
|
119
87
|
|
|
120
88
|
it( 'returns the extended settings when the user can create media', () => {
|
|
89
|
+
get.mockImplementation( ( scope, name ) => {
|
|
90
|
+
if ( name === 'focusMode' ) return true;
|
|
91
|
+
if ( name === 'fixedToolbar' ) return true;
|
|
92
|
+
} );
|
|
93
|
+
|
|
121
94
|
const state = {
|
|
122
95
|
settings: { key: 'value' },
|
|
123
|
-
|
|
124
|
-
features: {
|
|
125
|
-
focusMode: true,
|
|
126
|
-
fixedToolbar: true,
|
|
127
|
-
},
|
|
128
|
-
},
|
|
96
|
+
editedPost: { type: 'wp_template_part' },
|
|
129
97
|
};
|
|
130
98
|
const setInserterOpened = () => {};
|
|
131
99
|
|
|
@@ -137,6 +105,7 @@ describe( 'selectors', () => {
|
|
|
137
105
|
__experimentalSetIsInserterOpened: setInserterOpened,
|
|
138
106
|
__experimentalReusableBlocks: [],
|
|
139
107
|
mediaUpload: expect.any( Function ),
|
|
108
|
+
__experimentalPreferPatternsOnRoot: false,
|
|
140
109
|
} );
|
|
141
110
|
} );
|
|
142
111
|
} );
|
package/src/style.scss
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
@import "./components/global-styles/style.scss";
|
|
6
6
|
@import "./components/header/style.scss";
|
|
7
7
|
@import "./components/header/document-actions/style.scss";
|
|
8
|
-
@import "./components/header/more-menu/style.scss";
|
|
9
8
|
@import "./components/navigation-sidebar/navigation-toggle/style.scss";
|
|
10
9
|
@import "./components/navigation-sidebar/navigation-panel/style.scss";
|
|
11
10
|
@import "./components/list/style.scss";
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = FeatureToggle;
|
|
7
|
-
|
|
8
|
-
var _element = require("@wordpress/element");
|
|
9
|
-
|
|
10
|
-
var _lodash = require("lodash");
|
|
11
|
-
|
|
12
|
-
var _data = require("@wordpress/data");
|
|
13
|
-
|
|
14
|
-
var _components = require("@wordpress/components");
|
|
15
|
-
|
|
16
|
-
var _i18n = require("@wordpress/i18n");
|
|
17
|
-
|
|
18
|
-
var _icons = require("@wordpress/icons");
|
|
19
|
-
|
|
20
|
-
var _a11y = require("@wordpress/a11y");
|
|
21
|
-
|
|
22
|
-
var _store = require("../../../store");
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* External dependencies
|
|
26
|
-
*/
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* WordPress dependencies
|
|
30
|
-
*/
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Internal dependencies
|
|
34
|
-
*/
|
|
35
|
-
function FeatureToggle(_ref) {
|
|
36
|
-
let {
|
|
37
|
-
feature,
|
|
38
|
-
label,
|
|
39
|
-
info,
|
|
40
|
-
messageActivated,
|
|
41
|
-
messageDeactivated
|
|
42
|
-
} = _ref;
|
|
43
|
-
|
|
44
|
-
const speakMessage = () => {
|
|
45
|
-
if (isActive) {
|
|
46
|
-
(0, _a11y.speak)(messageDeactivated || (0, _i18n.__)('Feature deactivated'));
|
|
47
|
-
} else {
|
|
48
|
-
(0, _a11y.speak)(messageActivated || (0, _i18n.__)('Feature activated'));
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
const isActive = (0, _data.useSelect)(select => {
|
|
53
|
-
return select(_store.store).isFeatureActive(feature);
|
|
54
|
-
}, []);
|
|
55
|
-
const {
|
|
56
|
-
toggleFeature
|
|
57
|
-
} = (0, _data.useDispatch)(_store.store);
|
|
58
|
-
return (0, _element.createElement)(_components.MenuItem, {
|
|
59
|
-
icon: isActive && _icons.check,
|
|
60
|
-
isSelected: isActive,
|
|
61
|
-
onClick: (0, _lodash.flow)(toggleFeature.bind(null, feature), speakMessage),
|
|
62
|
-
role: "menuitemcheckbox",
|
|
63
|
-
info: info
|
|
64
|
-
}, label);
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/edit-site/src/components/header/feature-toggle/index.js"],"names":["FeatureToggle","feature","label","info","messageActivated","messageDeactivated","speakMessage","isActive","select","editSiteStore","isFeatureActive","toggleFeature","check","bind"],"mappings":";;;;;;;;;AAGA;;AAKA;;AACA;;AACA;;AACA;;AACA;;AAKA;;AAjBA;AACA;AACA;;AAGA;AACA;AACA;;AAOA;AACA;AACA;AAGe,SAASA,aAAT,OAMX;AAAA,MANmC;AACtCC,IAAAA,OADsC;AAEtCC,IAAAA,KAFsC;AAGtCC,IAAAA,IAHsC;AAItCC,IAAAA,gBAJsC;AAKtCC,IAAAA;AALsC,GAMnC;;AACH,QAAMC,YAAY,GAAG,MAAM;AAC1B,QAAKC,QAAL,EAAgB;AACf,uBAAOF,kBAAkB,IAAI,cAAI,qBAAJ,CAA7B;AACA,KAFD,MAEO;AACN,uBAAOD,gBAAgB,IAAI,cAAI,mBAAJ,CAA3B;AACA;AACD,GAND;;AAQA,QAAMG,QAAQ,GAAG,qBAAaC,MAAF,IAAc;AACzC,WAAOA,MAAM,CAAEC,YAAF,CAAN,CAAwBC,eAAxB,CAAyCT,OAAzC,CAAP;AACA,GAFgB,EAEd,EAFc,CAAjB;AAIA,QAAM;AAAEU,IAAAA;AAAF,MAAoB,uBAAaF,YAAb,CAA1B;AAEA,SACC,4BAAC,oBAAD;AACC,IAAA,IAAI,EAAGF,QAAQ,IAAIK,YADpB;AAEC,IAAA,UAAU,EAAGL,QAFd;AAGC,IAAA,OAAO,EAAG,kBACTI,aAAa,CAACE,IAAd,CAAoB,IAApB,EAA0BZ,OAA1B,CADS,EAETK,YAFS,CAHX;AAOC,IAAA,IAAI,EAAC,kBAPN;AAQC,IAAA,IAAI,EAAGH;AARR,KAUGD,KAVH,CADD;AAcA","sourcesContent":["/**\n * External dependencies\n */\nimport { flow } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { MenuItem } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { check } from '@wordpress/icons';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport { store as editSiteStore } from '../../../store';\n\nexport default function FeatureToggle( {\n\tfeature,\n\tlabel,\n\tinfo,\n\tmessageActivated,\n\tmessageDeactivated,\n} ) {\n\tconst speakMessage = () => {\n\t\tif ( isActive ) {\n\t\t\tspeak( messageDeactivated || __( 'Feature deactivated' ) );\n\t\t} else {\n\t\t\tspeak( messageActivated || __( 'Feature activated' ) );\n\t\t}\n\t};\n\n\tconst isActive = useSelect( ( select ) => {\n\t\treturn select( editSiteStore ).isFeatureActive( feature );\n\t}, [] );\n\n\tconst { toggleFeature } = useDispatch( editSiteStore );\n\n\treturn (\n\t\t<MenuItem\n\t\t\ticon={ isActive && check }\n\t\t\tisSelected={ isActive }\n\t\t\tonClick={ flow(\n\t\t\t\ttoggleFeature.bind( null, feature ),\n\t\t\t\tspeakMessage\n\t\t\t) }\n\t\t\trole=\"menuitemcheckbox\"\n\t\t\tinfo={ info }\n\t\t>\n\t\t\t{ label }\n\t\t</MenuItem>\n\t);\n}\n"]}
|