@wordpress/block-library 8.5.0 → 8.6.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 +2 -0
- package/build/buttons/edit.native.js +1 -1
- package/build/buttons/edit.native.js.map +1 -1
- package/build/columns/edit.js +10 -8
- package/build/columns/edit.js.map +1 -1
- package/build/columns/edit.native.js +1 -1
- package/build/columns/edit.native.js.map +1 -1
- package/build/comments/edit/placeholder.js +8 -5
- package/build/comments/edit/placeholder.js.map +1 -1
- package/build/cover/index.js +13 -4
- package/build/cover/index.js.map +1 -1
- package/build/cover/variations.js +29 -0
- package/build/cover/variations.js.map +1 -0
- package/build/embed/edit.js +13 -14
- package/build/embed/edit.js.map +1 -1
- package/build/embed/edit.native.js +18 -14
- package/build/embed/edit.native.js.map +1 -1
- package/build/embed/util.js +39 -12
- package/build/embed/util.js.map +1 -1
- package/build/gallery/edit.js +1 -0
- package/build/gallery/edit.js.map +1 -1
- package/build/latest-posts/edit.js +10 -10
- package/build/latest-posts/edit.js.map +1 -1
- package/build/latest-posts/edit.native.js +3 -3
- package/build/latest-posts/edit.native.js.map +1 -1
- package/build/media-text/constants.js +17 -1
- package/build/media-text/constants.js.map +1 -1
- package/build/media-text/edit.js +7 -19
- package/build/media-text/edit.js.map +1 -1
- package/build/media-text/edit.native.js +6 -5
- package/build/media-text/edit.native.js.map +1 -1
- package/build/media-text/transforms.js +32 -44
- package/build/media-text/transforms.js.map +1 -1
- package/build/navigation/edit/index.js +56 -86
- package/build/navigation/edit/index.js.map +1 -1
- package/build/navigation/edit/inner-blocks.js +4 -1
- package/build/navigation/edit/inner-blocks.js.map +1 -1
- package/build/navigation/edit/menu-inspector-controls.js +2 -5
- package/build/navigation/edit/menu-inspector-controls.js.map +1 -1
- package/build/navigation/edit/navigation-menu-selector.js +26 -22
- package/build/navigation/edit/navigation-menu-selector.js.map +1 -1
- package/build/navigation/edit/unsaved-inner-blocks.js +14 -1
- package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
- package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js +2 -4
- package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
- package/build/navigation/edit/use-create-navigation-menu.js +1 -1
- package/build/navigation/edit/use-create-navigation-menu.js.map +1 -1
- package/build/navigation/edit/use-navigation-notice.js +1 -1
- package/build/navigation/edit/use-navigation-notice.js.map +1 -1
- package/build/navigation-link/edit.js +0 -11
- package/build/navigation-link/edit.js.map +1 -1
- package/build/navigation-link/link-ui.js +0 -1
- package/build/navigation-link/link-ui.js.map +1 -1
- package/build/navigation-submenu/edit.js +1 -13
- package/build/navigation-submenu/edit.js.map +1 -1
- package/build/page-list/edit.js +59 -45
- package/build/page-list/edit.js.map +1 -1
- package/build/page-list-item/edit.js +3 -2
- package/build/page-list-item/edit.js.map +1 -1
- package/build/post-content/edit.js +6 -1
- package/build/post-content/edit.js.map +1 -1
- package/build/post-featured-image/dimension-controls.js +0 -6
- package/build/post-featured-image/dimension-controls.js.map +1 -1
- package/build/post-featured-image/edit.js +1 -1
- package/build/post-featured-image/edit.js.map +1 -1
- package/build/pullquote/deprecated.js +3 -3
- package/build/pullquote/deprecated.js.map +1 -1
- package/build/query/edit/query-placeholder.js +3 -2
- package/build/query/edit/query-placeholder.js.map +1 -1
- package/build/query/utils.js +26 -9
- package/build/query/utils.js.map +1 -1
- package/build/table/state.js +12 -4
- package/build/table/state.js.map +1 -1
- package/build/template-part/edit/import-controls.js +4 -24
- package/build/template-part/edit/import-controls.js.map +1 -1
- package/build/template-part/edit/utils/transformers.js +69 -19
- package/build/template-part/edit/utils/transformers.js.map +1 -1
- package/build/text-columns/edit.js +3 -7
- package/build/text-columns/edit.js.map +1 -1
- package/build/text-columns/save.js +11 -13
- package/build/text-columns/save.js.map +1 -1
- package/build-module/buttons/edit.native.js +1 -1
- package/build-module/buttons/edit.native.js.map +1 -1
- package/build-module/columns/edit.js +10 -7
- package/build-module/columns/edit.js.map +1 -1
- package/build-module/columns/edit.native.js +1 -1
- package/build-module/columns/edit.native.js.map +1 -1
- package/build-module/comments/edit/placeholder.js +9 -5
- package/build-module/comments/edit/placeholder.js.map +1 -1
- package/build-module/cover/index.js +12 -4
- package/build-module/cover/index.js.map +1 -1
- package/build-module/cover/variations.js +19 -0
- package/build-module/cover/variations.js.map +1 -0
- package/build-module/embed/edit.js +14 -15
- package/build-module/embed/edit.js.map +1 -1
- package/build-module/embed/edit.native.js +19 -15
- package/build-module/embed/edit.native.js.map +1 -1
- package/build-module/embed/util.js +34 -10
- package/build-module/embed/util.js.map +1 -1
- package/build-module/gallery/edit.js +1 -0
- package/build-module/gallery/edit.js.map +1 -1
- package/build-module/latest-posts/edit.js +10 -9
- package/build-module/latest-posts/edit.js.map +1 -1
- package/build-module/latest-posts/edit.native.js +3 -3
- package/build-module/latest-posts/edit.native.js.map +1 -1
- package/build-module/media-text/constants.js +10 -0
- package/build-module/media-text/constants.js.map +1 -1
- package/build-module/media-text/edit.js +2 -14
- package/build-module/media-text/edit.js.map +1 -1
- package/build-module/media-text/edit.native.js +4 -3
- package/build-module/media-text/edit.native.js.map +1 -1
- package/build-module/media-text/transforms.js +32 -44
- package/build-module/media-text/transforms.js.map +1 -1
- package/build-module/navigation/edit/index.js +58 -88
- package/build-module/navigation/edit/index.js.map +1 -1
- package/build-module/navigation/edit/inner-blocks.js +4 -1
- package/build-module/navigation/edit/inner-blocks.js.map +1 -1
- package/build-module/navigation/edit/menu-inspector-controls.js +2 -5
- package/build-module/navigation/edit/menu-inspector-controls.js.map +1 -1
- package/build-module/navigation/edit/navigation-menu-selector.js +25 -22
- package/build-module/navigation/edit/navigation-menu-selector.js.map +1 -1
- package/build-module/navigation/edit/unsaved-inner-blocks.js +14 -1
- package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
- package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js +2 -4
- package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
- package/build-module/navigation/edit/use-create-navigation-menu.js +1 -1
- package/build-module/navigation/edit/use-create-navigation-menu.js.map +1 -1
- package/build-module/navigation/edit/use-navigation-notice.js +1 -1
- package/build-module/navigation/edit/use-navigation-notice.js.map +1 -1
- package/build-module/navigation-link/edit.js +0 -11
- package/build-module/navigation-link/edit.js.map +1 -1
- package/build-module/navigation-link/link-ui.js +0 -1
- package/build-module/navigation-link/link-ui.js.map +1 -1
- package/build-module/navigation-submenu/edit.js +1 -13
- package/build-module/navigation-submenu/edit.js.map +1 -1
- package/build-module/page-list/edit.js +61 -47
- package/build-module/page-list/edit.js.map +1 -1
- package/build-module/page-list-item/edit.js +3 -2
- package/build-module/page-list-item/edit.js.map +1 -1
- package/build-module/post-content/edit.js +6 -1
- package/build-module/post-content/edit.js.map +1 -1
- package/build-module/post-featured-image/dimension-controls.js +0 -6
- package/build-module/post-featured-image/dimension-controls.js.map +1 -1
- package/build-module/post-featured-image/edit.js +1 -1
- package/build-module/post-featured-image/edit.js.map +1 -1
- package/build-module/pullquote/deprecated.js +3 -2
- package/build-module/pullquote/deprecated.js.map +1 -1
- package/build-module/query/edit/query-placeholder.js +4 -3
- package/build-module/query/edit/query-placeholder.js.map +1 -1
- package/build-module/query/utils.js +21 -6
- package/build-module/query/utils.js.map +1 -1
- package/build-module/table/state.js +13 -5
- package/build-module/table/state.js.map +1 -1
- package/build-module/template-part/edit/import-controls.js +4 -23
- package/build-module/template-part/edit/import-controls.js.map +1 -1
- package/build-module/template-part/edit/utils/transformers.js +69 -20
- package/build-module/template-part/edit/utils/transformers.js.map +1 -1
- package/build-module/text-columns/edit.js +3 -6
- package/build-module/text-columns/edit.js.map +1 -1
- package/build-module/text-columns/save.js +11 -12
- package/build-module/text-columns/save.js.map +1 -1
- package/build-style/cover/style-rtl.css +11 -5
- package/build-style/cover/style.css +11 -5
- package/build-style/editor-rtl.css +5 -1
- package/build-style/editor.css +5 -1
- package/build-style/navigation/editor-rtl.css +1 -1
- package/build-style/navigation/editor.css +1 -1
- package/build-style/page-list/editor-rtl.css +4 -0
- package/build-style/page-list/editor.css +4 -0
- package/build-style/post-featured-image/style-rtl.css +1 -0
- package/build-style/post-featured-image/style.css +1 -0
- package/build-style/style-rtl.css +12 -5
- package/build-style/style.css +12 -5
- package/package.json +31 -31
- package/src/audio/test/__snapshots__/edit.native.js.snap +44 -4
- package/src/audio/test/__snapshots__/transforms.native.js.snap +25 -0
- package/src/audio/test/transforms.native.js +42 -0
- package/src/block/test/__snapshots__/transforms.native.js.snap +15 -0
- package/src/block/test/transforms.native.js +40 -0
- package/src/buttons/edit.native.js +1 -1
- package/src/buttons/test/__snapshots__/transforms.native.js.snap +31 -0
- package/src/buttons/test/transforms.native.js +48 -0
- package/src/columns/edit.js +28 -17
- package/src/columns/edit.native.js +1 -1
- package/src/columns/test/__snapshots__/transforms.native.js.snap +61 -0
- package/src/columns/test/transforms.native.js +91 -0
- package/src/comment-template/index.php +1 -2
- package/src/comments/edit/placeholder.js +16 -4
- package/src/cover/block.json +9 -3
- package/src/cover/index.js +2 -0
- package/src/cover/style.scss +16 -7
- package/src/cover/test/__snapshots__/transforms.native.js.snap +73 -0
- package/src/cover/test/transforms.native.js +112 -0
- package/src/cover/variations.js +20 -0
- package/src/embed/edit.js +16 -12
- package/src/embed/edit.native.js +28 -18
- package/src/embed/test/__snapshots__/transforms.native.js.snap +23 -0
- package/src/embed/test/index.js +12 -0
- package/src/embed/test/transforms.native.js +44 -0
- package/src/embed/util.js +29 -8
- package/src/file/test/__snapshots__/edit.native.js.snap +18 -2
- package/src/file/test/__snapshots__/transforms.native.js.snap +19 -0
- package/src/file/test/transforms.native.js +42 -0
- package/src/freeform/test/__snapshots__/transforms.native.js.snap +19 -0
- package/src/freeform/test/transforms.native.js +39 -0
- package/src/gallery/edit.js +3 -0
- package/src/gallery/test/__snapshots__/transforms.native.js.snap +53 -0
- package/src/gallery/test/transforms.native.js +52 -0
- package/src/group/test/__snapshots__/transforms.native.js.snap +35 -0
- package/src/group/test/transforms.native.js +75 -0
- package/src/heading/test/__snapshots__/transforms.native.js.snap +47 -0
- package/src/heading/test/transforms.native.js +46 -0
- package/src/image/test/__snapshots__/transforms.native.js.snap +49 -0
- package/src/image/test/transforms.native.js +48 -0
- package/src/latest-posts/edit.js +11 -16
- package/src/latest-posts/edit.native.js +3 -3
- package/src/latest-posts/test/__snapshots__/transforms.native.js.snap +15 -0
- package/src/latest-posts/test/transforms.native.js +61 -0
- package/src/list/test/__snapshots__/transforms.native.js.snap +85 -0
- package/src/list/test/transforms.native.js +56 -0
- package/src/media-text/constants.js +16 -0
- package/src/media-text/edit.js +8 -18
- package/src/media-text/edit.native.js +3 -9
- package/src/media-text/test/__snapshots__/transforms.native.js.snap +73 -0
- package/src/media-text/test/transforms.native.js +112 -0
- package/src/media-text/transforms.js +24 -51
- package/src/missing/test/__snapshots__/edit.native.js.snap +20 -2
- package/src/more/test/__snapshots__/transforms.native.js.snap +19 -0
- package/src/more/test/transforms.native.js +42 -0
- package/src/navigation/edit/index.js +104 -107
- package/src/navigation/edit/inner-blocks.js +3 -0
- package/src/navigation/edit/menu-inspector-controls.js +2 -7
- package/src/navigation/edit/navigation-menu-selector.js +41 -25
- package/src/navigation/edit/unsaved-inner-blocks.js +46 -33
- package/src/navigation/edit/use-convert-classic-menu-to-block-menu.js +82 -83
- package/src/navigation/edit/use-create-navigation-menu.js +1 -1
- package/src/navigation/edit/use-navigation-notice.js +1 -1
- package/src/navigation/editor.scss +23 -20
- package/src/navigation/index.php +18 -39
- package/src/navigation-link/edit.js +0 -9
- package/src/navigation-link/index.php +5 -8
- package/src/navigation-link/link-ui.js +0 -1
- package/src/navigation-submenu/edit.js +0 -10
- package/src/navigation-submenu/index.php +23 -6
- package/src/nextpage/test/__snapshots__/transforms.native.js.snap +19 -0
- package/src/nextpage/test/transforms.native.js +42 -0
- package/src/page-list/edit.js +78 -44
- package/src/page-list/editor.scss +6 -0
- package/src/page-list-item/edit.js +2 -3
- package/src/paragraph/test/__snapshots__/transforms.native.js.snap +59 -0
- package/src/paragraph/test/transforms.native.js +50 -0
- package/src/post-content/edit.js +5 -1
- package/src/post-excerpt/index.php +1 -2
- package/src/post-featured-image/dimension-controls.js +0 -8
- package/src/post-featured-image/edit.js +1 -1
- package/src/post-featured-image/style.scss +1 -0
- package/src/preformatted/test/__snapshots__/transforms.native.js.snap +31 -0
- package/src/preformatted/test/transforms.native.js +42 -0
- package/src/pullquote/deprecated.js +2 -6
- package/src/pullquote/test/__snapshots__/transforms.native.js.snap +47 -0
- package/src/pullquote/test/transforms.native.js +46 -0
- package/src/query/edit/query-placeholder.js +10 -5
- package/src/query/test/utils.js +33 -1
- package/src/query/utils.js +19 -6
- package/src/quote/test/__snapshots__/transforms.native.js.snap +39 -0
- package/src/quote/test/transforms.native.js +67 -0
- package/src/search/test/__snapshots__/edit.native.js.snap +11 -1
- package/src/search/test/__snapshots__/transforms.native.js.snap +15 -0
- package/src/search/test/transforms.native.js +40 -0
- package/src/separator/test/__snapshots__/transforms.native.js.snap +19 -0
- package/src/separator/test/transforms.native.js +42 -0
- package/src/shortcode/test/__snapshots__/transforms.native.js.snap +19 -0
- package/src/shortcode/test/transforms.native.js +42 -0
- package/src/social-links/test/__snapshots__/transforms.native.js.snap +31 -0
- package/src/social-links/test/transforms.native.js +53 -0
- package/src/spacer/test/__snapshots__/transforms.native.js.snap +19 -0
- package/src/spacer/test/transforms.native.js +42 -0
- package/src/table/state.js +8 -17
- package/src/template-part/edit/import-controls.js +2 -29
- package/src/template-part/edit/utils/transformers.js +96 -19
- package/src/text-columns/edit.js +1 -6
- package/src/text-columns/save.js +1 -6
- package/src/verse/test/__snapshots__/transforms.native.js.snap +25 -0
- package/src/verse/test/transforms.native.js +42 -0
- package/src/video/test/__snapshots__/transforms.native.js.snap +41 -0
- package/src/video/test/transforms.native.js +48 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -12,7 +12,6 @@ import {
|
|
|
12
12
|
useEffect,
|
|
13
13
|
useRef,
|
|
14
14
|
Platform,
|
|
15
|
-
useMemo,
|
|
16
15
|
} from '@wordpress/element';
|
|
17
16
|
import {
|
|
18
17
|
InspectorControls,
|
|
@@ -41,7 +40,7 @@ import {
|
|
|
41
40
|
} from '@wordpress/components';
|
|
42
41
|
import { __, sprintf } from '@wordpress/i18n';
|
|
43
42
|
import { speak } from '@wordpress/a11y';
|
|
44
|
-
import { createBlock
|
|
43
|
+
import { createBlock } from '@wordpress/blocks';
|
|
45
44
|
import { close, Icon } from '@wordpress/icons';
|
|
46
45
|
|
|
47
46
|
/**
|
|
@@ -107,16 +106,20 @@ function Navigation( {
|
|
|
107
106
|
|
|
108
107
|
const ref = attributes.ref;
|
|
109
108
|
|
|
110
|
-
const setRef = (
|
|
111
|
-
|
|
112
|
-
|
|
109
|
+
const setRef = useCallback(
|
|
110
|
+
( postId ) => {
|
|
111
|
+
setAttributes( { ref: postId } );
|
|
112
|
+
},
|
|
113
|
+
[ setAttributes ]
|
|
114
|
+
);
|
|
113
115
|
|
|
114
116
|
const recursionId = `navigationMenu/${ ref }`;
|
|
115
117
|
const hasAlreadyRendered = useHasRecursion( recursionId );
|
|
116
118
|
|
|
117
119
|
// Preload classic menus, so that they don't suddenly pop-in when viewing
|
|
118
120
|
// the Select Menu dropdown.
|
|
119
|
-
const { menus: classicMenus } =
|
|
121
|
+
const { menus: classicMenus, hasResolvedMenus: hasResolvedClassicMenus } =
|
|
122
|
+
useNavigationEntities();
|
|
120
123
|
|
|
121
124
|
const [ showNavigationMenuStatusNotice, hideNavigationMenuStatusNotice ] =
|
|
122
125
|
useNavigationNotice( {
|
|
@@ -197,52 +200,22 @@ function Navigation( {
|
|
|
197
200
|
const isConvertingClassicMenu =
|
|
198
201
|
classicMenuConversionStatus === CLASSIC_MENU_CONVERSION_PENDING;
|
|
199
202
|
|
|
200
|
-
// Only
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
?.sort( ( menuA, menuB ) => {
|
|
206
|
-
const menuADate = new Date( menuA.date );
|
|
207
|
-
const menuBDate = new Date( menuB.date );
|
|
208
|
-
return menuADate.getTime() < menuBDate.getTime();
|
|
209
|
-
} ),
|
|
210
|
-
[ navigationMenus ]
|
|
211
|
-
);
|
|
212
|
-
|
|
213
|
-
// This useEffect adds snackbar and speak status notices when menus are created.
|
|
214
|
-
// If there are no fallback navigation menus then we don't show these messages,
|
|
215
|
-
// because this means that we are creating the first, fallback navigation menu.
|
|
216
|
-
useEffect( () => {
|
|
217
|
-
hideNavigationMenuStatusNotice();
|
|
218
|
-
|
|
219
|
-
if ( fallbackNavigationMenus && isCreatingNavigationMenu ) {
|
|
220
|
-
speak( __( `Creating Navigation Menu.` ) );
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
if ( createNavigationMenuIsSuccess ) {
|
|
224
|
-
handleUpdateMenu( createNavigationMenuPost.id, {
|
|
225
|
-
focusNavigationBlock: true,
|
|
226
|
-
} );
|
|
203
|
+
// Only auto-fallback to the latest published menu.
|
|
204
|
+
// The REST API already returns items sorted by publishing date.
|
|
205
|
+
const fallbackNavigationMenuId = navigationMenus?.find(
|
|
206
|
+
( menu ) => menu.status === 'publish'
|
|
207
|
+
)?.id;
|
|
227
208
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
209
|
+
const handleUpdateMenu = useCallback(
|
|
210
|
+
( menuId, options = { focusNavigationBlock: false } ) => {
|
|
211
|
+
const { focusNavigationBlock } = options;
|
|
212
|
+
setRef( menuId );
|
|
213
|
+
if ( focusNavigationBlock ) {
|
|
214
|
+
selectBlock( clientId );
|
|
232
215
|
}
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
showNavigationMenuStatusNotice(
|
|
237
|
-
__( 'Failed to create Navigation Menu.' )
|
|
238
|
-
);
|
|
239
|
-
}
|
|
240
|
-
}, [
|
|
241
|
-
createNavigationMenuStatus,
|
|
242
|
-
createNavigationMenuError,
|
|
243
|
-
createNavigationMenuPost,
|
|
244
|
-
fallbackNavigationMenus,
|
|
245
|
-
] );
|
|
216
|
+
},
|
|
217
|
+
[ selectBlock, clientId, setRef ]
|
|
218
|
+
);
|
|
246
219
|
|
|
247
220
|
// Attempt to retrieve and prioritize any existing navigation menu unless:
|
|
248
221
|
// - the are uncontrolled inner blocks already present in the block.
|
|
@@ -256,7 +229,7 @@ function Navigation( {
|
|
|
256
229
|
hasUncontrolledInnerBlocks ||
|
|
257
230
|
isCreatingNavigationMenu ||
|
|
258
231
|
ref ||
|
|
259
|
-
!
|
|
232
|
+
! fallbackNavigationMenuId
|
|
260
233
|
) {
|
|
261
234
|
return;
|
|
262
235
|
}
|
|
@@ -269,12 +242,14 @@ function Navigation( {
|
|
|
269
242
|
* nor to be undoable, hence why it is marked as non persistent
|
|
270
243
|
*/
|
|
271
244
|
__unstableMarkNextChangeAsNotPersistent();
|
|
272
|
-
setRef(
|
|
245
|
+
setRef( fallbackNavigationMenuId );
|
|
273
246
|
}, [
|
|
274
247
|
ref,
|
|
248
|
+
setRef,
|
|
275
249
|
isCreatingNavigationMenu,
|
|
276
|
-
|
|
250
|
+
fallbackNavigationMenuId,
|
|
277
251
|
hasUncontrolledInnerBlocks,
|
|
252
|
+
__unstableMarkNextChangeAsNotPersistent,
|
|
278
253
|
] );
|
|
279
254
|
|
|
280
255
|
const isEntityAvailable =
|
|
@@ -291,10 +266,12 @@ function Navigation( {
|
|
|
291
266
|
useEffect( () => {
|
|
292
267
|
if (
|
|
293
268
|
ref ||
|
|
269
|
+
! hasResolvedClassicMenus ||
|
|
294
270
|
! hasResolvedNavigationMenus ||
|
|
295
271
|
isConvertingClassicMenu ||
|
|
296
|
-
|
|
297
|
-
hasUnsavedBlocks
|
|
272
|
+
fallbackNavigationMenuId ||
|
|
273
|
+
hasUnsavedBlocks ||
|
|
274
|
+
! classicMenus?.length
|
|
298
275
|
) {
|
|
299
276
|
return;
|
|
300
277
|
}
|
|
@@ -303,46 +280,39 @@ function Navigation( {
|
|
|
303
280
|
// a classic menu with a `primary` location or slug,
|
|
304
281
|
// then create a new navigation menu based on it.
|
|
305
282
|
// Otherwise, use the most recently created classic menu.
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
(
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
);
|
|
283
|
+
const primaryMenus = classicMenus.filter(
|
|
284
|
+
( classicMenu ) =>
|
|
285
|
+
classicMenu.locations.includes( 'primary' ) ||
|
|
286
|
+
classicMenu.slug === 'primary'
|
|
287
|
+
);
|
|
312
288
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
} else {
|
|
320
|
-
classicMenus.sort( ( a, b ) => {
|
|
321
|
-
return b.id - a.id;
|
|
322
|
-
} );
|
|
323
|
-
convertClassicMenu(
|
|
324
|
-
classicMenus[ 0 ].id,
|
|
325
|
-
classicMenus[ 0 ].name,
|
|
326
|
-
'publish'
|
|
327
|
-
);
|
|
328
|
-
}
|
|
289
|
+
if ( primaryMenus.length ) {
|
|
290
|
+
convertClassicMenu(
|
|
291
|
+
primaryMenus[ 0 ].id,
|
|
292
|
+
primaryMenus[ 0 ].name,
|
|
293
|
+
'publish'
|
|
294
|
+
);
|
|
329
295
|
} else {
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
defaultBlocks = [ createBlock( 'core/page-list' ) ];
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
createNavigationMenu(
|
|
340
|
-
'Navigation', // TODO - use the template slug in future
|
|
341
|
-
defaultBlocks,
|
|
296
|
+
classicMenus.sort( ( a, b ) => {
|
|
297
|
+
return b.id - a.id;
|
|
298
|
+
} );
|
|
299
|
+
convertClassicMenu(
|
|
300
|
+
classicMenus[ 0 ].id,
|
|
301
|
+
classicMenus[ 0 ].name,
|
|
342
302
|
'publish'
|
|
343
303
|
);
|
|
344
304
|
}
|
|
345
|
-
}, [
|
|
305
|
+
}, [
|
|
306
|
+
hasResolvedClassicMenus,
|
|
307
|
+
hasResolvedNavigationMenus,
|
|
308
|
+
hasUnsavedBlocks,
|
|
309
|
+
classicMenus,
|
|
310
|
+
convertClassicMenu,
|
|
311
|
+
createNavigationMenu,
|
|
312
|
+
fallbackNavigationMenuId,
|
|
313
|
+
isConvertingClassicMenu,
|
|
314
|
+
ref,
|
|
315
|
+
] );
|
|
346
316
|
|
|
347
317
|
const navRef = useRef();
|
|
348
318
|
|
|
@@ -362,6 +332,25 @@ function Navigation( {
|
|
|
362
332
|
classicMenus?.length === 0 &&
|
|
363
333
|
! hasUncontrolledInnerBlocks;
|
|
364
334
|
|
|
335
|
+
useEffect( () => {
|
|
336
|
+
if ( isPlaceholder ) {
|
|
337
|
+
/**
|
|
338
|
+
* this fallback only displays (both in editor and on front)
|
|
339
|
+
* the list of pages block if no menu is available as a fallback.
|
|
340
|
+
* We don't want the fallback to request a save,
|
|
341
|
+
* nor to be undoable, hence we mark it non persistent.
|
|
342
|
+
*/
|
|
343
|
+
__unstableMarkNextChangeAsNotPersistent();
|
|
344
|
+
replaceInnerBlocks( clientId, [ createBlock( 'core/page-list' ) ] );
|
|
345
|
+
}
|
|
346
|
+
}, [
|
|
347
|
+
clientId,
|
|
348
|
+
isPlaceholder,
|
|
349
|
+
ref,
|
|
350
|
+
__unstableMarkNextChangeAsNotPersistent,
|
|
351
|
+
replaceInnerBlocks,
|
|
352
|
+
] );
|
|
353
|
+
|
|
365
354
|
// "loading" state:
|
|
366
355
|
// - there is a menu creation process in progress.
|
|
367
356
|
// - there is a classic menu conversion process in progress.
|
|
@@ -413,17 +402,6 @@ function Navigation( {
|
|
|
413
402
|
] = useState();
|
|
414
403
|
const [ detectedOverlayColor, setDetectedOverlayColor ] = useState();
|
|
415
404
|
|
|
416
|
-
const handleUpdateMenu = useCallback(
|
|
417
|
-
( menuId, options = { focusNavigationBlock: false } ) => {
|
|
418
|
-
const { focusNavigationBlock } = options;
|
|
419
|
-
setRef( menuId );
|
|
420
|
-
if ( focusNavigationBlock ) {
|
|
421
|
-
selectBlock( clientId );
|
|
422
|
-
}
|
|
423
|
-
},
|
|
424
|
-
[ selectBlock, clientId ]
|
|
425
|
-
);
|
|
426
|
-
|
|
427
405
|
const onSelectClassicMenu = async ( classicMenu ) => {
|
|
428
406
|
const navMenu = await convertClassicMenu(
|
|
429
407
|
classicMenu.id,
|
|
@@ -449,7 +427,7 @@ function Navigation( {
|
|
|
449
427
|
}
|
|
450
428
|
|
|
451
429
|
if ( createNavigationMenuIsSuccess ) {
|
|
452
|
-
handleUpdateMenu( createNavigationMenuPost
|
|
430
|
+
handleUpdateMenu( createNavigationMenuPost?.id, {
|
|
453
431
|
focusNavigationBlock: true,
|
|
454
432
|
} );
|
|
455
433
|
|
|
@@ -466,7 +444,7 @@ function Navigation( {
|
|
|
466
444
|
}, [
|
|
467
445
|
createNavigationMenuStatus,
|
|
468
446
|
createNavigationMenuError,
|
|
469
|
-
createNavigationMenuPost,
|
|
447
|
+
createNavigationMenuPost?.id,
|
|
470
448
|
createNavigationMenuIsError,
|
|
471
449
|
createNavigationMenuIsSuccess,
|
|
472
450
|
isCreatingNavigationMenu,
|
|
@@ -492,7 +470,12 @@ function Navigation( {
|
|
|
492
470
|
__( 'Classic menu import failed.' )
|
|
493
471
|
);
|
|
494
472
|
}
|
|
495
|
-
}, [
|
|
473
|
+
}, [
|
|
474
|
+
classicMenuConversionStatus,
|
|
475
|
+
classicMenuConversionError,
|
|
476
|
+
hideClassicMenuConversionNotice,
|
|
477
|
+
showClassicMenuConversionNotice,
|
|
478
|
+
] );
|
|
496
479
|
|
|
497
480
|
// Spacer block needs orientation from context. This is a patch until
|
|
498
481
|
// https://github.com/WordPress/gutenberg/issues/36197 is addressed.
|
|
@@ -501,7 +484,11 @@ function Navigation( {
|
|
|
501
484
|
__unstableMarkNextChangeAsNotPersistent();
|
|
502
485
|
setAttributes( { orientation } );
|
|
503
486
|
}
|
|
504
|
-
}, [
|
|
487
|
+
}, [
|
|
488
|
+
orientation,
|
|
489
|
+
__unstableMarkNextChangeAsNotPersistent,
|
|
490
|
+
setAttributes,
|
|
491
|
+
] );
|
|
505
492
|
|
|
506
493
|
useEffect( () => {
|
|
507
494
|
if ( ! enableContrastChecking ) {
|
|
@@ -531,7 +518,11 @@ function Navigation( {
|
|
|
531
518
|
setDetectedOverlayBackgroundColor
|
|
532
519
|
);
|
|
533
520
|
}
|
|
534
|
-
}
|
|
521
|
+
}, [
|
|
522
|
+
enableContrastChecking,
|
|
523
|
+
overlayTextColor.color,
|
|
524
|
+
overlayBackgroundColor.color,
|
|
525
|
+
] );
|
|
535
526
|
|
|
536
527
|
useEffect( () => {
|
|
537
528
|
if ( ! isSelected && ! isInnerBlockSelected ) {
|
|
@@ -572,6 +563,9 @@ function Navigation( {
|
|
|
572
563
|
canUserCreateNavigationMenu,
|
|
573
564
|
hasResolvedCanUserCreateNavigationMenu,
|
|
574
565
|
ref,
|
|
566
|
+
hideNavigationMenuPermissionsNotice,
|
|
567
|
+
showNavigationMenuPermissionsNotice,
|
|
568
|
+
navMenuResolvedButMissing,
|
|
575
569
|
] );
|
|
576
570
|
|
|
577
571
|
const hasManagePermissions =
|
|
@@ -791,6 +785,7 @@ function Navigation( {
|
|
|
791
785
|
createNavigationMenuIsSuccess
|
|
792
786
|
}
|
|
793
787
|
createNavigationMenuIsError={ createNavigationMenuIsError }
|
|
788
|
+
currentMenuId={ ref }
|
|
794
789
|
isNavigationMenuMissing={ isNavigationMenuMissing }
|
|
795
790
|
isManageMenusButtonDisabled={ isManageMenusButtonDisabled }
|
|
796
791
|
onCreateNew={ createUntitledEmptyNavigationMenu }
|
|
@@ -898,7 +893,9 @@ function Navigation( {
|
|
|
898
893
|
|
|
899
894
|
{ isLoading && (
|
|
900
895
|
<TagName { ...blockProps }>
|
|
901
|
-
<
|
|
896
|
+
<div className="wp-block-navigation__loading-indicator-container">
|
|
897
|
+
<Spinner className="wp-block-navigation__loading-indicator" />
|
|
898
|
+
</div>
|
|
902
899
|
</TagName>
|
|
903
900
|
) }
|
|
904
901
|
|
|
@@ -45,10 +45,6 @@ const MainContent = ( {
|
|
|
45
45
|
);
|
|
46
46
|
const { navigationMenu } = useNavigationMenu( currentMenuId );
|
|
47
47
|
|
|
48
|
-
if ( currentMenuId && isNavigationMenuMissing ) {
|
|
49
|
-
return <p>{ __( 'Select or create a menu' ) }</p>;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
48
|
if ( currentMenuId && isNavigationMenuMissing ) {
|
|
53
49
|
return <DeletedNavigationWarning onCreateNew={ onCreateNew } />;
|
|
54
50
|
}
|
|
@@ -69,6 +65,7 @@ const MainContent = ( {
|
|
|
69
65
|
return (
|
|
70
66
|
<OffCanvasEditor
|
|
71
67
|
blocks={ clientIdsTree }
|
|
68
|
+
parentClientId={ clientId }
|
|
72
69
|
isExpanded={ true }
|
|
73
70
|
LeafMoreMenu={ LeafMoreMenu }
|
|
74
71
|
description={ description }
|
|
@@ -89,9 +86,7 @@ const MenuInspectorControls = ( props ) => {
|
|
|
89
86
|
|
|
90
87
|
return (
|
|
91
88
|
<InspectorControls group="list">
|
|
92
|
-
<PanelBody
|
|
93
|
-
title={ process.env.IS_GUTENBERG_PLUGIN ? null : __( 'Menu' ) }
|
|
94
|
-
>
|
|
89
|
+
<PanelBody title={ null }>
|
|
95
90
|
<HStack className="wp-block-navigation-off-canvas-editor__header">
|
|
96
91
|
<Heading
|
|
97
92
|
className="wp-block-navigation-off-canvas-editor__title"
|
|
@@ -11,6 +11,7 @@ import { moreVertical } from '@wordpress/icons';
|
|
|
11
11
|
import { __, sprintf } from '@wordpress/i18n';
|
|
12
12
|
import { decodeEntities } from '@wordpress/html-entities';
|
|
13
13
|
import { useEffect, useMemo, useState } from '@wordpress/element';
|
|
14
|
+
import { useEntityProp } from '@wordpress/core-data';
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* Internal dependencies
|
|
@@ -18,6 +19,14 @@ import { useEffect, useMemo, useState } from '@wordpress/element';
|
|
|
18
19
|
import useNavigationMenu from '../use-navigation-menu';
|
|
19
20
|
import useNavigationEntities from '../use-navigation-entities';
|
|
20
21
|
|
|
22
|
+
function buildMenuLabel( title, id ) {
|
|
23
|
+
const label =
|
|
24
|
+
decodeEntities( title?.rendered ) ||
|
|
25
|
+
/* translators: %s is the index of the menu in the list of menus. */
|
|
26
|
+
sprintf( __( '(no title %s)' ), id );
|
|
27
|
+
return label;
|
|
28
|
+
}
|
|
29
|
+
|
|
21
30
|
function NavigationMenuSelector( {
|
|
22
31
|
currentMenuId,
|
|
23
32
|
onSelectNavigationMenu,
|
|
@@ -30,7 +39,6 @@ function NavigationMenuSelector( {
|
|
|
30
39
|
/* translators: %s: The name of a menu. */
|
|
31
40
|
const createActionLabel = __( "Create from '%s'" );
|
|
32
41
|
|
|
33
|
-
const [ selectorLabel, setSelectorLabel ] = useState( '' );
|
|
34
42
|
const [ isCreatingMenu, setIsCreatingMenu ] = useState( false );
|
|
35
43
|
|
|
36
44
|
actionLabel = actionLabel || createActionLabel;
|
|
@@ -39,25 +47,23 @@ function NavigationMenuSelector( {
|
|
|
39
47
|
|
|
40
48
|
const {
|
|
41
49
|
navigationMenus,
|
|
50
|
+
isResolvingNavigationMenus,
|
|
42
51
|
hasResolvedNavigationMenus,
|
|
43
52
|
canUserCreateNavigationMenu,
|
|
44
53
|
canSwitchNavigationMenu,
|
|
45
54
|
} = useNavigationMenu();
|
|
46
55
|
|
|
56
|
+
const [ currentTitle ] = useEntityProp(
|
|
57
|
+
'postType',
|
|
58
|
+
'wp_navigation',
|
|
59
|
+
'title'
|
|
60
|
+
);
|
|
61
|
+
|
|
47
62
|
const menuChoices = useMemo( () => {
|
|
48
63
|
return (
|
|
49
64
|
navigationMenus?.map( ( { id, title }, index ) => {
|
|
50
|
-
const label =
|
|
51
|
-
|
|
52
|
-
/* translators: %s is the index of the menu in the list of menus. */
|
|
53
|
-
sprintf( __( '(no title %s)' ), index + 1 );
|
|
54
|
-
|
|
55
|
-
if ( id === currentMenuId && ! isCreatingMenu ) {
|
|
56
|
-
setSelectorLabel(
|
|
57
|
-
/* translators: %s is the name of a navigation menu. */
|
|
58
|
-
sprintf( __( 'You are currently editing %s' ), label )
|
|
59
|
-
);
|
|
60
|
-
}
|
|
65
|
+
const label = buildMenuLabel( title, index + 1 );
|
|
66
|
+
|
|
61
67
|
return {
|
|
62
68
|
value: id,
|
|
63
69
|
label,
|
|
@@ -65,7 +71,7 @@ function NavigationMenuSelector( {
|
|
|
65
71
|
};
|
|
66
72
|
} ) || []
|
|
67
73
|
);
|
|
68
|
-
}, [
|
|
74
|
+
}, [ navigationMenus, actionLabel ] );
|
|
69
75
|
|
|
70
76
|
const hasNavigationMenus = !! navigationMenus?.length;
|
|
71
77
|
const hasClassicMenus = !! classicMenus?.length;
|
|
@@ -77,20 +83,35 @@ function NavigationMenuSelector( {
|
|
|
77
83
|
const menuUnavailable =
|
|
78
84
|
hasResolvedNavigationMenus && currentMenuId === null;
|
|
79
85
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
+
let selectorLabel = '';
|
|
87
|
+
|
|
88
|
+
if ( isCreatingMenu || isResolvingNavigationMenus ) {
|
|
89
|
+
selectorLabel = __( 'Loading …' );
|
|
90
|
+
} else if ( noMenuSelected || noBlockMenus || menuUnavailable ) {
|
|
91
|
+
// Note: classic Menus may be available.
|
|
92
|
+
selectorLabel = __( 'Choose or create a Navigation menu' );
|
|
93
|
+
} else {
|
|
94
|
+
// Current Menu's title.
|
|
95
|
+
selectorLabel = currentTitle;
|
|
96
|
+
}
|
|
86
97
|
|
|
98
|
+
useEffect( () => {
|
|
87
99
|
if (
|
|
88
100
|
isCreatingMenu &&
|
|
89
101
|
( createNavigationMenuIsSuccess || createNavigationMenuIsError )
|
|
90
102
|
) {
|
|
91
103
|
setIsCreatingMenu( false );
|
|
92
104
|
}
|
|
93
|
-
}, [
|
|
105
|
+
}, [
|
|
106
|
+
hasResolvedNavigationMenus,
|
|
107
|
+
createNavigationMenuIsSuccess,
|
|
108
|
+
canUserCreateNavigationMenu,
|
|
109
|
+
createNavigationMenuIsError,
|
|
110
|
+
isCreatingMenu,
|
|
111
|
+
menuUnavailable,
|
|
112
|
+
noBlockMenus,
|
|
113
|
+
noMenuSelected,
|
|
114
|
+
] );
|
|
94
115
|
|
|
95
116
|
const NavigationMenuSelectorDropdown = (
|
|
96
117
|
<DropdownMenu
|
|
@@ -105,7 +126,6 @@ function NavigationMenuSelector( {
|
|
|
105
126
|
<MenuItemsChoice
|
|
106
127
|
value={ currentMenuId }
|
|
107
128
|
onSelect={ ( menuId ) => {
|
|
108
|
-
setSelectorLabel( __( 'Loading …' ) );
|
|
109
129
|
setIsCreatingMenu( true );
|
|
110
130
|
onSelectNavigationMenu( menuId );
|
|
111
131
|
onClose();
|
|
@@ -122,9 +142,6 @@ function NavigationMenuSelector( {
|
|
|
122
142
|
return (
|
|
123
143
|
<MenuItem
|
|
124
144
|
onClick={ () => {
|
|
125
|
-
setSelectorLabel(
|
|
126
|
-
__( 'Loading …' )
|
|
127
|
-
);
|
|
128
145
|
setIsCreatingMenu( true );
|
|
129
146
|
onSelectClassicMenu( menu );
|
|
130
147
|
onClose();
|
|
@@ -151,7 +168,6 @@ function NavigationMenuSelector( {
|
|
|
151
168
|
onClose();
|
|
152
169
|
onCreateNew();
|
|
153
170
|
setIsCreatingMenu( true );
|
|
154
|
-
setSelectorLabel( __( 'Loading …' ) );
|
|
155
171
|
} }
|
|
156
172
|
>
|
|
157
173
|
{ __( 'Create new menu' ) }
|
|
@@ -120,40 +120,53 @@ export default function UnsavedInnerBlocks( {
|
|
|
120
120
|
const { hasResolvedNavigationMenus } = useNavigationMenu();
|
|
121
121
|
|
|
122
122
|
// Automatically save the uncontrolled blocks.
|
|
123
|
-
useEffect(
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
123
|
+
useEffect(
|
|
124
|
+
() => {
|
|
125
|
+
// The block will be disabled when used in a BlockPreview.
|
|
126
|
+
// In this case avoid automatic creation of a wp_navigation post.
|
|
127
|
+
// Otherwise the user will be spammed with lots of menus!
|
|
128
|
+
//
|
|
129
|
+
// Also ensure other navigation menus have loaded so an
|
|
130
|
+
// accurate name can be created.
|
|
131
|
+
//
|
|
132
|
+
// Don't try saving when another save is already
|
|
133
|
+
// in progress.
|
|
134
|
+
//
|
|
135
|
+
// And finally only create the menu when the block is selected,
|
|
136
|
+
// which is an indication they want to start editing.
|
|
137
|
+
if (
|
|
138
|
+
isDisabled ||
|
|
139
|
+
isSaving ||
|
|
140
|
+
! hasResolvedDraftNavigationMenus ||
|
|
141
|
+
! hasResolvedNavigationMenus ||
|
|
142
|
+
! hasSelection ||
|
|
143
|
+
! innerBlocksAreDirty
|
|
144
|
+
) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
146
147
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
148
|
+
createNavigationMenu( null, blocks );
|
|
149
|
+
},
|
|
150
|
+
/* The dependency "blocks" is intentionally omitted here.
|
|
151
|
+
* This is because making blocks a dependency would cause
|
|
152
|
+
* createNavigationMenu to run on every block change whereas
|
|
153
|
+
* we only want it to run when the blocks are first detected
|
|
154
|
+
* as dirty.
|
|
155
|
+
* A better solution might be to add a hard saving lock using
|
|
156
|
+
* a ref to avoid having to disbale theses eslint rules.
|
|
157
|
+
*/
|
|
158
|
+
/* eslint-disable react-hooks/exhaustive-deps */
|
|
159
|
+
[
|
|
160
|
+
createNavigationMenu,
|
|
161
|
+
isDisabled,
|
|
162
|
+
isSaving,
|
|
163
|
+
hasResolvedDraftNavigationMenus,
|
|
164
|
+
hasResolvedNavigationMenus,
|
|
165
|
+
innerBlocksAreDirty,
|
|
166
|
+
hasSelection,
|
|
167
|
+
]
|
|
168
|
+
/* eslint-enable react-hooks/exhaustive-deps */
|
|
169
|
+
);
|
|
157
170
|
|
|
158
171
|
const Wrapper = isSaving ? Disabled : 'div';
|
|
159
172
|
|