@wordpress/block-library 6.0.23 → 6.0.24
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/build/navigation/edit/index.js +8 -2
- package/build/navigation/edit/index.js.map +1 -1
- package/build/navigation/edit/navigation-menu-selector.js +42 -4
- package/build/navigation/edit/navigation-menu-selector.js.map +1 -1
- package/build/navigation/edit/placeholder/index.js +6 -41
- package/build/navigation/edit/placeholder/index.js.map +1 -1
- package/build/navigation/use-convert-classic-menu.js +59 -0
- package/build/navigation/use-convert-classic-menu.js.map +1 -0
- package/build-module/navigation/edit/index.js +7 -2
- package/build-module/navigation/edit/index.js.map +1 -1
- package/build-module/navigation/edit/navigation-menu-selector.js +39 -4
- package/build-module/navigation/edit/navigation-menu-selector.js.map +1 -1
- package/build-module/navigation/edit/placeholder/index.js +5 -41
- package/build-module/navigation/edit/placeholder/index.js.map +1 -1
- package/build-module/navigation/use-convert-classic-menu.js +47 -0
- package/build-module/navigation/use-convert-classic-menu.js.map +1 -0
- package/package.json +2 -2
- package/src/navigation/edit/index.js +9 -1
- package/src/navigation/edit/navigation-menu-selector.js +65 -15
- package/src/navigation/edit/placeholder/index.js +9 -44
- package/src/navigation/use-convert-classic-menu.js +58 -0
|
@@ -11,18 +11,47 @@ import { addQueryArgs } from '@wordpress/url';
|
|
|
11
11
|
* Internal dependencies
|
|
12
12
|
*/
|
|
13
13
|
import useNavigationMenu from '../use-navigation-menu';
|
|
14
|
+
import useNavigationEntities from '../use-navigation-entities';
|
|
15
|
+
import useConvertClassicMenu from '../use-convert-classic-menu';
|
|
16
|
+
import useCreateNavigationMenu from './use-create-navigation-menu';
|
|
14
17
|
|
|
15
18
|
export default function NavigationMenuSelector( {
|
|
19
|
+
clientId,
|
|
16
20
|
onSelect,
|
|
17
21
|
onCreateNew,
|
|
18
|
-
|
|
22
|
+
canUserCreateNavigation = false,
|
|
19
23
|
} ) {
|
|
24
|
+
const {
|
|
25
|
+
menus: classicMenus,
|
|
26
|
+
hasMenus: hasClassicMenus,
|
|
27
|
+
} = useNavigationEntities();
|
|
20
28
|
const { navigationMenus } = useNavigationMenu();
|
|
21
29
|
const ref = useEntityId( 'postType', 'wp_navigation' );
|
|
22
30
|
|
|
31
|
+
const createNavigationMenu = useCreateNavigationMenu( clientId );
|
|
32
|
+
|
|
33
|
+
const onFinishMenuCreation = async (
|
|
34
|
+
blocks,
|
|
35
|
+
navigationMenuTitle = null
|
|
36
|
+
) => {
|
|
37
|
+
if ( ! canUserCreateNavigation ) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const navigationMenu = await createNavigationMenu(
|
|
42
|
+
navigationMenuTitle,
|
|
43
|
+
blocks
|
|
44
|
+
);
|
|
45
|
+
onSelect( navigationMenu );
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const convertClassicMenuToBlocks = useConvertClassicMenu(
|
|
49
|
+
onFinishMenuCreation
|
|
50
|
+
);
|
|
51
|
+
|
|
23
52
|
return (
|
|
24
53
|
<>
|
|
25
|
-
<MenuGroup>
|
|
54
|
+
<MenuGroup label={ __( 'Menus' ) }>
|
|
26
55
|
<MenuItemsChoice
|
|
27
56
|
value={ ref }
|
|
28
57
|
onSelect={ ( selectedId ) =>
|
|
@@ -46,19 +75,40 @@ export default function NavigationMenuSelector( {
|
|
|
46
75
|
} ) }
|
|
47
76
|
/>
|
|
48
77
|
</MenuGroup>
|
|
49
|
-
{
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
{ __( '
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
78
|
+
{ canUserCreateNavigation && (
|
|
79
|
+
<>
|
|
80
|
+
{ hasClassicMenus && (
|
|
81
|
+
<MenuGroup label={ __( 'Classic Menus' ) }>
|
|
82
|
+
{ classicMenus.map( ( menu ) => {
|
|
83
|
+
return (
|
|
84
|
+
<MenuItem
|
|
85
|
+
onClick={ () => {
|
|
86
|
+
convertClassicMenuToBlocks(
|
|
87
|
+
menu.id,
|
|
88
|
+
menu.name
|
|
89
|
+
);
|
|
90
|
+
} }
|
|
91
|
+
key={ menu.id }
|
|
92
|
+
>
|
|
93
|
+
{ decodeEntities( menu.name ) }
|
|
94
|
+
</MenuItem>
|
|
95
|
+
);
|
|
96
|
+
} ) }
|
|
97
|
+
</MenuGroup>
|
|
98
|
+
) }
|
|
99
|
+
<MenuGroup label={ __( 'Tools' ) }>
|
|
100
|
+
<MenuItem onClick={ onCreateNew }>
|
|
101
|
+
{ __( 'Create new menu' ) }
|
|
102
|
+
</MenuItem>
|
|
103
|
+
<MenuItem
|
|
104
|
+
href={ addQueryArgs( 'edit.php', {
|
|
105
|
+
post_type: 'wp_navigation',
|
|
106
|
+
} ) }
|
|
107
|
+
>
|
|
108
|
+
{ __( 'Manage menus' ) }
|
|
109
|
+
</MenuItem>
|
|
110
|
+
</MenuGroup>
|
|
111
|
+
</>
|
|
62
112
|
) }
|
|
63
113
|
</>
|
|
64
114
|
);
|
|
@@ -9,7 +9,6 @@ import {
|
|
|
9
9
|
MenuGroup,
|
|
10
10
|
MenuItem,
|
|
11
11
|
} from '@wordpress/components';
|
|
12
|
-
import { useCallback, useState, useEffect } from '@wordpress/element';
|
|
13
12
|
import { __ } from '@wordpress/i18n';
|
|
14
13
|
import { navigation, Icon } from '@wordpress/icons';
|
|
15
14
|
import { decodeEntities } from '@wordpress/html-entities';
|
|
@@ -20,14 +19,13 @@ import { decodeEntities } from '@wordpress/html-entities';
|
|
|
20
19
|
|
|
21
20
|
import useNavigationEntities from '../../use-navigation-entities';
|
|
22
21
|
import PlaceholderPreview from './placeholder-preview';
|
|
23
|
-
import menuItemsToBlocks from '../../menu-items-to-blocks';
|
|
24
22
|
import useNavigationMenu from '../../use-navigation-menu';
|
|
25
23
|
import useCreateNavigationMenu from '../use-create-navigation-menu';
|
|
24
|
+
import useConvertClassicMenu from '../../use-convert-classic-menu';
|
|
26
25
|
|
|
27
26
|
const ExistingMenusDropdown = ( {
|
|
28
27
|
canSwitchNavigationMenu,
|
|
29
28
|
navigationMenus,
|
|
30
|
-
setSelectedMenu,
|
|
31
29
|
onFinish,
|
|
32
30
|
menus,
|
|
33
31
|
onCreateFromMenu,
|
|
@@ -53,7 +51,6 @@ const ExistingMenusDropdown = ( {
|
|
|
53
51
|
return (
|
|
54
52
|
<MenuItem
|
|
55
53
|
onClick={ () => {
|
|
56
|
-
setSelectedMenu( menu.id );
|
|
57
54
|
onFinish( menu );
|
|
58
55
|
} }
|
|
59
56
|
onClose={ onClose }
|
|
@@ -72,8 +69,10 @@ const ExistingMenusDropdown = ( {
|
|
|
72
69
|
return (
|
|
73
70
|
<MenuItem
|
|
74
71
|
onClick={ () => {
|
|
75
|
-
|
|
76
|
-
|
|
72
|
+
onCreateFromMenu(
|
|
73
|
+
menu.id,
|
|
74
|
+
menu.name
|
|
75
|
+
);
|
|
77
76
|
} }
|
|
78
77
|
onClose={ onClose }
|
|
79
78
|
key={ menu.id }
|
|
@@ -97,9 +96,6 @@ export default function NavigationPlaceholder( {
|
|
|
97
96
|
hasResolvedNavigationMenus,
|
|
98
97
|
canUserCreateNavigation = false,
|
|
99
98
|
} ) {
|
|
100
|
-
const [ selectedMenu, setSelectedMenu ] = useState();
|
|
101
|
-
const [ isCreatingFromMenu, setIsCreatingFromMenu ] = useState( false );
|
|
102
|
-
const [ menuName, setMenuName ] = useState( '' );
|
|
103
99
|
const createNavigationMenu = useCreateNavigationMenu( clientId );
|
|
104
100
|
|
|
105
101
|
const onFinishMenuCreation = async (
|
|
@@ -117,39 +113,18 @@ export default function NavigationPlaceholder( {
|
|
|
117
113
|
onFinish( navigationMenu, blocks );
|
|
118
114
|
};
|
|
119
115
|
|
|
116
|
+
const convertClassicMenu = useConvertClassicMenu( onFinishMenuCreation );
|
|
117
|
+
|
|
120
118
|
const {
|
|
121
119
|
isResolvingPages,
|
|
122
120
|
menus,
|
|
123
121
|
isResolvingMenus,
|
|
124
|
-
menuItems,
|
|
125
|
-
hasResolvedMenuItems,
|
|
126
122
|
hasPages,
|
|
127
123
|
hasMenus,
|
|
128
|
-
} = useNavigationEntities(
|
|
124
|
+
} = useNavigationEntities();
|
|
129
125
|
|
|
130
126
|
const isStillLoading = isResolvingPages || isResolvingMenus;
|
|
131
127
|
|
|
132
|
-
const createFromMenu = useCallback(
|
|
133
|
-
( name ) => {
|
|
134
|
-
const { innerBlocks: blocks } = menuItemsToBlocks( menuItems );
|
|
135
|
-
onFinishMenuCreation( blocks, name );
|
|
136
|
-
},
|
|
137
|
-
[ menuItems, menuItemsToBlocks, onFinish ]
|
|
138
|
-
);
|
|
139
|
-
|
|
140
|
-
const onCreateFromMenu = ( name ) => {
|
|
141
|
-
// If we have menu items, create the block right away.
|
|
142
|
-
if ( hasResolvedMenuItems ) {
|
|
143
|
-
createFromMenu( name );
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// Otherwise, create the block when resolution finishes.
|
|
148
|
-
setIsCreatingFromMenu( true );
|
|
149
|
-
// Store the name to use later.
|
|
150
|
-
setMenuName( name );
|
|
151
|
-
};
|
|
152
|
-
|
|
153
128
|
const onCreateEmptyMenu = () => {
|
|
154
129
|
onFinishMenuCreation( [] );
|
|
155
130
|
};
|
|
@@ -159,15 +134,6 @@ export default function NavigationPlaceholder( {
|
|
|
159
134
|
onFinishMenuCreation( block );
|
|
160
135
|
};
|
|
161
136
|
|
|
162
|
-
useEffect( () => {
|
|
163
|
-
// If the user selected a menu but we had to wait for menu items to
|
|
164
|
-
// finish resolving, then create the block once resolution finishes.
|
|
165
|
-
if ( isCreatingFromMenu && hasResolvedMenuItems ) {
|
|
166
|
-
createFromMenu( menuName );
|
|
167
|
-
setIsCreatingFromMenu( false );
|
|
168
|
-
}
|
|
169
|
-
}, [ isCreatingFromMenu, hasResolvedMenuItems, menuName ] );
|
|
170
|
-
|
|
171
137
|
const { navigationMenus } = useNavigationMenu();
|
|
172
138
|
|
|
173
139
|
return (
|
|
@@ -194,10 +160,9 @@ export default function NavigationPlaceholder( {
|
|
|
194
160
|
canSwitchNavigationMenu
|
|
195
161
|
}
|
|
196
162
|
navigationMenus={ navigationMenus }
|
|
197
|
-
setSelectedMenu={ setSelectedMenu }
|
|
198
163
|
onFinish={ onFinish }
|
|
199
164
|
menus={ menus }
|
|
200
|
-
onCreateFromMenu={
|
|
165
|
+
onCreateFromMenu={ convertClassicMenu }
|
|
201
166
|
showClassicMenus={
|
|
202
167
|
canUserCreateNavigation
|
|
203
168
|
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useCallback, useState, useEffect } from '@wordpress/element';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import useNavigationEntities from './use-navigation-entities';
|
|
10
|
+
import menuItemsToBlocks from './menu-items-to-blocks';
|
|
11
|
+
|
|
12
|
+
export default function useConvertClassicMenu( onFinish ) {
|
|
13
|
+
const [ selectedMenu, setSelectedMenu ] = useState();
|
|
14
|
+
const [
|
|
15
|
+
isAwaitingMenuItemResolution,
|
|
16
|
+
setIsAwaitingMenuItemResolution,
|
|
17
|
+
] = useState( false );
|
|
18
|
+
const [ menuName, setMenuName ] = useState( '' );
|
|
19
|
+
|
|
20
|
+
const { menuItems, hasResolvedMenuItems } = useNavigationEntities(
|
|
21
|
+
selectedMenu
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
const createFromMenu = useCallback(
|
|
25
|
+
( name ) => {
|
|
26
|
+
const { innerBlocks: blocks } = menuItemsToBlocks( menuItems );
|
|
27
|
+
onFinish( blocks, name );
|
|
28
|
+
},
|
|
29
|
+
[ menuItems, menuItemsToBlocks, onFinish ]
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
useEffect( () => {
|
|
33
|
+
// If the user selected a menu but we had to wait for menu items to
|
|
34
|
+
// finish resolving, then create the block once resolution finishes.
|
|
35
|
+
if ( isAwaitingMenuItemResolution && hasResolvedMenuItems ) {
|
|
36
|
+
createFromMenu( menuName );
|
|
37
|
+
setIsAwaitingMenuItemResolution( false );
|
|
38
|
+
}
|
|
39
|
+
}, [ isAwaitingMenuItemResolution, hasResolvedMenuItems, menuName ] );
|
|
40
|
+
|
|
41
|
+
return useCallback(
|
|
42
|
+
( id, name ) => {
|
|
43
|
+
setSelectedMenu( id );
|
|
44
|
+
|
|
45
|
+
// If we have menu items, create the block right away.
|
|
46
|
+
if ( hasResolvedMenuItems ) {
|
|
47
|
+
createFromMenu( name );
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Otherwise, create the block when resolution finishes.
|
|
52
|
+
setIsAwaitingMenuItemResolution( true );
|
|
53
|
+
// Store the name to use later.
|
|
54
|
+
setMenuName( name );
|
|
55
|
+
},
|
|
56
|
+
[ hasResolvedMenuItems, createFromMenu ]
|
|
57
|
+
);
|
|
58
|
+
}
|