@wordpress/block-library 7.0.2 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/build/audio/edit.js +4 -4
- package/build/audio/edit.js.map +1 -1
- package/build/audio/edit.native.js +4 -4
- package/build/audio/edit.native.js.map +1 -1
- package/build/audio/transforms.js +1 -1
- package/build/audio/transforms.js.map +1 -1
- package/build/block/edit.js +3 -9
- package/build/block/edit.js.map +1 -1
- package/build/button/edit.js +3 -2
- package/build/button/edit.js.map +1 -1
- package/build/button/edit.native.js +2 -2
- package/build/button/edit.native.js.map +1 -1
- package/build/buttons/transforms.js +8 -8
- package/build/buttons/transforms.js.map +1 -1
- package/build/categories/edit.js +15 -26
- package/build/categories/edit.js.map +1 -1
- package/build/code/index.js +0 -1
- package/build/code/index.js.map +1 -1
- package/build/columns/columnCalculations.native.js +1 -1
- package/build/columns/columnCalculations.native.js.map +1 -1
- package/build/columns/edit.js +1 -1
- package/build/columns/edit.js.map +1 -1
- package/build/columns/edit.native.js +3 -3
- package/build/columns/edit.native.js.map +1 -1
- package/build/cover/controls.native.js +5 -5
- package/build/cover/controls.native.js.map +1 -1
- package/build/cover/deprecated.js +188 -17
- package/build/cover/deprecated.js.map +1 -1
- package/build/cover/edit.js +8 -11
- package/build/cover/edit.js.map +1 -1
- package/build/cover/edit.native.js +8 -8
- package/build/cover/edit.native.js.map +1 -1
- package/build/cover/overlay-color-settings.native.js +3 -3
- package/build/cover/overlay-color-settings.native.js.map +1 -1
- package/build/cover/save.js +1 -1
- package/build/cover/save.js.map +1 -1
- package/build/cover/shared.js +2 -2
- package/build/cover/shared.js.map +1 -1
- package/build/embed/edit.js +1 -1
- package/build/embed/edit.js.map +1 -1
- package/build/embed/edit.native.js +1 -1
- package/build/embed/edit.native.js.map +1 -1
- package/build/embed/util.js +2 -2
- package/build/embed/util.js.map +1 -1
- package/build/embed/variations.js +1 -1
- package/build/embed/variations.js.map +1 -1
- package/build/file/edit.js +20 -17
- package/build/file/edit.js.map +1 -1
- package/build/file/edit.native.js +1 -1
- package/build/file/edit.native.js.map +1 -1
- package/build/file/save.js +7 -3
- package/build/file/save.js.map +1 -1
- package/build/freeform/edit.js +2 -2
- package/build/freeform/edit.js.map +1 -1
- package/build/gallery/edit.js +1 -1
- package/build/gallery/edit.js.map +1 -1
- package/build/gallery/gallery.native.js +1 -1
- package/build/gallery/gallery.native.js.map +1 -1
- package/build/gallery/v1/edit.js +3 -3
- package/build/gallery/v1/edit.js.map +1 -1
- package/build/gallery/v1/gallery-image.native.js +3 -3
- package/build/gallery/v1/gallery-image.native.js.map +1 -1
- package/build/gallery/v1/gallery.native.js +2 -2
- package/build/gallery/v1/gallery.native.js.map +1 -1
- package/build/group/index.js +3 -37
- package/build/group/index.js.map +1 -1
- package/build/group/transforms.js +45 -0
- package/build/group/transforms.js.map +1 -0
- package/build/home-link/edit.js +1 -1
- package/build/home-link/edit.js.map +1 -1
- package/build/image/edit.js +7 -6
- package/build/image/edit.js.map +1 -1
- package/build/image/edit.native.js +25 -10
- package/build/image/edit.native.js.map +1 -1
- package/build/image/transforms.js +1 -1
- package/build/image/transforms.js.map +1 -1
- package/build/index.js +3 -4
- package/build/index.js.map +1 -1
- package/build/index.native.js +2 -2
- package/build/index.native.js.map +1 -1
- package/build/media-text/edit.js +21 -2
- package/build/media-text/edit.js.map +1 -1
- package/build/media-text/edit.native.js +2 -2
- package/build/media-text/edit.native.js.map +1 -1
- package/build/media-text/media-container.native.js +1 -1
- package/build/media-text/media-container.native.js.map +1 -1
- package/build/missing/edit.native.js +1 -1
- package/build/missing/edit.native.js.map +1 -1
- package/build/more/transforms.js +2 -2
- package/build/more/transforms.js.map +1 -1
- package/build/navigation/edit/index.js +134 -60
- package/build/navigation/edit/index.js.map +1 -1
- package/build/navigation/edit/inner-blocks.js +8 -3
- package/build/navigation/edit/inner-blocks.js.map +1 -1
- package/build/navigation/edit/navigation-menu-selector.js +66 -53
- package/build/navigation/edit/navigation-menu-selector.js.map +1 -1
- package/build/navigation/edit/placeholder/index.js +31 -46
- package/build/navigation/edit/placeholder/index.js.map +1 -1
- package/build/navigation/edit/placeholder/placeholder-preview.js +3 -12
- package/build/navigation/edit/placeholder/placeholder-preview.js.map +1 -1
- package/build/navigation/edit/unsaved-inner-blocks.js +3 -1
- package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
- package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js +120 -0
- package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -0
- package/build/navigation/edit/use-create-navigation-menu.js +53 -4
- package/build/navigation/edit/use-create-navigation-menu.js.map +1 -1
- package/build/navigation/edit/use-navigation-notice.js +3 -3
- package/build/navigation/edit/use-navigation-notice.js.map +1 -1
- package/build/navigation/menu-items-to-blocks.js +1 -1
- package/build/navigation/menu-items-to-blocks.js.map +1 -1
- package/build/navigation/use-navigation-entities.js +25 -49
- package/build/navigation/use-navigation-entities.js.map +1 -1
- package/build/navigation/use-navigation-menu.js +2 -0
- package/build/navigation/use-navigation-menu.js.map +1 -1
- package/build/navigation-link/fallback-variations.js +1 -1
- package/build/navigation-link/fallback-variations.js.map +1 -1
- package/build/navigation-link/hooks.js +2 -2
- package/build/navigation-link/hooks.js.map +1 -1
- package/build/navigation-submenu/edit.js +2 -2
- package/build/navigation-submenu/edit.js.map +1 -1
- package/build/page-list/convert-to-links-modal.js +13 -23
- package/build/page-list/convert-to-links-modal.js.map +1 -1
- package/build/page-list/edit.js +8 -22
- package/build/page-list/edit.js.map +1 -1
- package/build/post-author-name/edit.js +2 -1
- package/build/post-author-name/edit.js.map +1 -1
- package/build/post-comments-form/edit.js +3 -1
- package/build/post-comments-form/edit.js.map +1 -1
- package/build/post-excerpt/edit.js +7 -4
- package/build/post-excerpt/edit.js.map +1 -1
- package/build/post-terms/edit.js +3 -1
- package/build/post-terms/edit.js.map +1 -1
- package/build/query-title/edit.js +0 -1
- package/build/query-title/edit.js.map +1 -1
- package/build/search/edit.js +4 -1
- package/build/search/edit.js.map +1 -1
- package/build/search/edit.native.js +1 -1
- package/build/search/edit.native.js.map +1 -1
- package/build/separator/save.js +4 -4
- package/build/separator/save.js.map +1 -1
- package/build/separator/separator-settings.native.js +1 -1
- package/build/separator/separator-settings.native.js.map +1 -1
- package/build/site-logo/edit.js +1 -1
- package/build/site-logo/edit.js.map +1 -1
- package/build/social-link/edit.native.js +11 -3
- package/build/social-link/edit.native.js.map +1 -1
- package/build/spacer/controls.js +5 -5
- package/build/spacer/controls.js.map +1 -1
- package/build/spacer/controls.native.js +5 -5
- package/build/spacer/controls.native.js.map +1 -1
- package/build/table/edit.js +2 -2
- package/build/table/edit.js.map +1 -1
- package/build/video/edit.js +4 -4
- package/build/video/edit.js.map +1 -1
- package/build/video/edit.native.js +3 -3
- package/build/video/edit.native.js.map +1 -1
- package/build-module/audio/edit.js +4 -4
- package/build-module/audio/edit.js.map +1 -1
- package/build-module/audio/edit.native.js +4 -4
- package/build-module/audio/edit.native.js.map +1 -1
- package/build-module/audio/transforms.js +1 -1
- package/build-module/audio/transforms.js.map +1 -1
- package/build-module/block/edit.js +5 -11
- package/build-module/block/edit.js.map +1 -1
- package/build-module/button/edit.js +3 -2
- package/build-module/button/edit.js.map +1 -1
- package/build-module/button/edit.native.js +2 -2
- package/build-module/button/edit.native.js.map +1 -1
- package/build-module/buttons/transforms.js +8 -8
- package/build-module/buttons/transforms.js.map +1 -1
- package/build-module/categories/edit.js +15 -25
- package/build-module/categories/edit.js.map +1 -1
- package/build-module/code/index.js +0 -1
- package/build-module/code/index.js.map +1 -1
- package/build-module/columns/columnCalculations.native.js +1 -1
- package/build-module/columns/columnCalculations.native.js.map +1 -1
- package/build-module/columns/edit.js +1 -1
- package/build-module/columns/edit.js.map +1 -1
- package/build-module/columns/edit.native.js +3 -3
- package/build-module/columns/edit.native.js.map +1 -1
- package/build-module/cover/controls.native.js +5 -5
- package/build-module/cover/controls.native.js.map +1 -1
- package/build-module/cover/deprecated.js +190 -17
- package/build-module/cover/deprecated.js.map +1 -1
- package/build-module/cover/edit.js +8 -11
- package/build-module/cover/edit.js.map +1 -1
- package/build-module/cover/edit.native.js +8 -8
- package/build-module/cover/edit.native.js.map +1 -1
- package/build-module/cover/overlay-color-settings.native.js +3 -3
- package/build-module/cover/overlay-color-settings.native.js.map +1 -1
- package/build-module/cover/save.js +1 -1
- package/build-module/cover/save.js.map +1 -1
- package/build-module/cover/shared.js +2 -2
- package/build-module/cover/shared.js.map +1 -1
- package/build-module/embed/edit.js +1 -1
- package/build-module/embed/edit.js.map +1 -1
- package/build-module/embed/edit.native.js +1 -1
- package/build-module/embed/edit.native.js.map +1 -1
- package/build-module/embed/util.js +2 -2
- package/build-module/embed/util.js.map +1 -1
- package/build-module/embed/variations.js +1 -1
- package/build-module/embed/variations.js.map +1 -1
- package/build-module/file/edit.js +21 -18
- package/build-module/file/edit.js.map +1 -1
- package/build-module/file/edit.native.js +1 -1
- package/build-module/file/edit.native.js.map +1 -1
- package/build-module/file/save.js +7 -3
- package/build-module/file/save.js.map +1 -1
- package/build-module/freeform/edit.js +2 -2
- package/build-module/freeform/edit.js.map +1 -1
- package/build-module/gallery/edit.js +1 -1
- package/build-module/gallery/edit.js.map +1 -1
- package/build-module/gallery/gallery.native.js +1 -1
- package/build-module/gallery/gallery.native.js.map +1 -1
- package/build-module/gallery/v1/edit.js +3 -3
- package/build-module/gallery/v1/edit.js.map +1 -1
- package/build-module/gallery/v1/gallery-image.native.js +3 -3
- package/build-module/gallery/v1/gallery-image.native.js.map +1 -1
- package/build-module/gallery/v1/gallery.native.js +2 -2
- package/build-module/gallery/v1/gallery.native.js.map +1 -1
- package/build-module/group/index.js +2 -36
- package/build-module/group/index.js.map +1 -1
- package/build-module/group/transforms.js +36 -0
- package/build-module/group/transforms.js.map +1 -0
- package/build-module/home-link/edit.js +1 -1
- package/build-module/home-link/edit.js.map +1 -1
- package/build-module/image/edit.js +7 -6
- package/build-module/image/edit.js.map +1 -1
- package/build-module/image/edit.native.js +25 -10
- package/build-module/image/edit.native.js.map +1 -1
- package/build-module/image/transforms.js +1 -1
- package/build-module/image/transforms.js.map +1 -1
- package/build-module/index.js +4 -5
- package/build-module/index.js.map +1 -1
- package/build-module/index.native.js +2 -2
- package/build-module/index.native.js.map +1 -1
- package/build-module/media-text/edit.js +20 -2
- package/build-module/media-text/edit.js.map +1 -1
- package/build-module/media-text/edit.native.js +2 -2
- package/build-module/media-text/edit.native.js.map +1 -1
- package/build-module/media-text/media-container.native.js +1 -1
- package/build-module/media-text/media-container.native.js.map +1 -1
- package/build-module/missing/edit.native.js +1 -1
- package/build-module/missing/edit.native.js.map +1 -1
- package/build-module/more/transforms.js +2 -2
- package/build-module/more/transforms.js.map +1 -1
- package/build-module/navigation/edit/index.js +128 -60
- package/build-module/navigation/edit/index.js.map +1 -1
- package/build-module/navigation/edit/inner-blocks.js +8 -3
- package/build-module/navigation/edit/inner-blocks.js.map +1 -1
- package/build-module/navigation/edit/navigation-menu-selector.js +66 -50
- package/build-module/navigation/edit/navigation-menu-selector.js.map +1 -1
- package/build-module/navigation/edit/placeholder/index.js +32 -45
- package/build-module/navigation/edit/placeholder/index.js.map +1 -1
- package/build-module/navigation/edit/placeholder/placeholder-preview.js +3 -9
- package/build-module/navigation/edit/placeholder/placeholder-preview.js.map +1 -1
- package/build-module/navigation/edit/unsaved-inner-blocks.js +3 -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 +100 -0
- package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -0
- package/build-module/navigation/edit/use-create-navigation-menu.js +48 -5
- package/build-module/navigation/edit/use-create-navigation-menu.js.map +1 -1
- package/build-module/navigation/edit/use-navigation-notice.js +3 -3
- package/build-module/navigation/edit/use-navigation-notice.js.map +1 -1
- package/build-module/navigation/menu-items-to-blocks.js +1 -1
- package/build-module/navigation/menu-items-to-blocks.js.map +1 -1
- package/build-module/navigation/use-navigation-entities.js +26 -50
- package/build-module/navigation/use-navigation-entities.js.map +1 -1
- package/build-module/navigation/use-navigation-menu.js +2 -0
- package/build-module/navigation/use-navigation-menu.js.map +1 -1
- package/build-module/navigation-link/fallback-variations.js +1 -1
- package/build-module/navigation-link/fallback-variations.js.map +1 -1
- package/build-module/navigation-link/hooks.js +2 -2
- package/build-module/navigation-link/hooks.js.map +1 -1
- package/build-module/navigation-submenu/edit.js +2 -2
- package/build-module/navigation-submenu/edit.js.map +1 -1
- package/build-module/page-list/convert-to-links-modal.js +15 -25
- package/build-module/page-list/convert-to-links-modal.js.map +1 -1
- package/build-module/page-list/edit.js +9 -23
- package/build-module/page-list/edit.js.map +1 -1
- package/build-module/post-author-name/edit.js +2 -1
- package/build-module/post-author-name/edit.js.map +1 -1
- package/build-module/post-comments-form/edit.js +4 -2
- package/build-module/post-comments-form/edit.js.map +1 -1
- package/build-module/post-excerpt/edit.js +9 -6
- package/build-module/post-excerpt/edit.js.map +1 -1
- package/build-module/post-terms/edit.js +2 -1
- package/build-module/post-terms/edit.js.map +1 -1
- package/build-module/query-title/edit.js +0 -1
- package/build-module/query-title/edit.js.map +1 -1
- package/build-module/search/edit.js +3 -1
- package/build-module/search/edit.js.map +1 -1
- package/build-module/search/edit.native.js +1 -1
- package/build-module/search/edit.native.js.map +1 -1
- package/build-module/separator/save.js +4 -4
- package/build-module/separator/save.js.map +1 -1
- package/build-module/separator/separator-settings.native.js +1 -1
- package/build-module/separator/separator-settings.native.js.map +1 -1
- package/build-module/site-logo/edit.js +1 -1
- package/build-module/site-logo/edit.js.map +1 -1
- package/build-module/social-link/edit.native.js +11 -3
- package/build-module/social-link/edit.native.js.map +1 -1
- package/build-module/spacer/controls.js +5 -5
- package/build-module/spacer/controls.js.map +1 -1
- package/build-module/spacer/controls.native.js +5 -5
- package/build-module/spacer/controls.native.js.map +1 -1
- package/build-module/table/edit.js +2 -2
- package/build-module/table/edit.js.map +1 -1
- package/build-module/video/edit.js +4 -4
- package/build-module/video/edit.js.map +1 -1
- package/build-module/video/edit.native.js +3 -3
- package/build-module/video/edit.native.js.map +1 -1
- package/build-style/button/editor-rtl.css +0 -3
- package/build-style/button/editor.css +0 -3
- package/build-style/code/style-rtl.css +2 -1
- package/build-style/code/style.css +2 -1
- package/build-style/code/theme-rtl.css +0 -3
- package/build-style/code/theme.css +0 -3
- package/build-style/common-rtl.css +1 -1
- package/build-style/common.css +1 -1
- package/build-style/cover/style-rtl.css +1 -5
- package/build-style/cover/style.css +1 -5
- package/build-style/editor-rtl.css +16 -3
- package/build-style/editor.css +16 -3
- package/build-style/image/style-rtl.css +2 -1
- package/build-style/image/style.css +2 -1
- package/build-style/navigation/editor-rtl.css +16 -0
- package/build-style/navigation/editor.css +16 -0
- package/build-style/style-rtl.css +12 -10
- package/build-style/style.css +12 -10
- package/build-style/tag-cloud/style-rtl.css +6 -2
- package/build-style/tag-cloud/style.css +6 -2
- package/build-style/theme-rtl.css +0 -3
- package/build-style/theme.css +0 -3
- package/package.json +32 -28
- package/src/audio/edit.js +4 -4
- package/src/audio/edit.native.js +4 -4
- package/src/audio/transforms.js +1 -1
- package/src/block/edit.js +7 -22
- package/src/block/test/edit.native.js +9 -9
- package/src/button/edit.js +2 -1
- package/src/button/edit.native.js +2 -2
- package/src/button/editor.scss +0 -5
- package/src/buttons/test/edit.native.js +3 -3
- package/src/buttons/transforms.js +8 -8
- package/src/categories/edit.js +12 -22
- package/src/code/block.json +0 -1
- package/src/code/style.scss +4 -2
- package/src/code/theme.scss +0 -3
- package/src/columns/columnCalculations.native.js +1 -1
- package/src/columns/edit.js +1 -1
- package/src/columns/edit.native.js +3 -3
- package/src/comments-pagination-numbers/index.php +1 -1
- package/src/common.scss +1 -1
- package/src/cover/controls.native.js +1 -1
- package/src/cover/deprecated.js +214 -1
- package/src/cover/edit.js +6 -8
- package/src/cover/edit.native.js +8 -8
- package/src/cover/overlay-color-settings.native.js +3 -3
- package/src/cover/save.js +4 -3
- package/src/cover/shared.js +2 -2
- package/src/cover/style.scss +1 -3
- package/src/cover/test/edit.native.js +39 -39
- package/src/embed/edit.js +1 -1
- package/src/embed/edit.native.js +1 -1
- package/src/embed/test/index.native.js +105 -105
- package/src/embed/util.js +2 -2
- package/src/embed/variations.js +1 -1
- package/src/file/edit.js +19 -17
- package/src/file/edit.native.js +1 -1
- package/src/file/save.js +9 -3
- package/src/file/style.native.scss +1 -0
- package/src/freeform/edit.js +2 -2
- package/src/gallery/edit.js +1 -1
- package/src/gallery/gallery.native.js +1 -1
- package/src/gallery/test/__snapshots__/index.native.js.snap +164 -0
- package/src/gallery/test/helpers.native.js +293 -0
- package/src/gallery/test/index.native.js +583 -65
- package/src/gallery/v1/edit.js +3 -4
- package/src/gallery/v1/gallery-image.native.js +3 -3
- package/src/gallery/v1/gallery.native.js +2 -2
- package/src/group/index.js +2 -54
- package/src/group/transforms.js +52 -0
- package/src/home-link/edit.js +1 -1
- package/src/image/edit.js +7 -6
- package/src/image/edit.native.js +25 -8
- package/src/image/style.scss +2 -1
- package/src/image/test/edit.native.js +1 -1
- package/src/image/transforms.js +1 -1
- package/src/index.js +2 -3
- package/src/index.native.js +2 -2
- package/src/media-text/edit.js +20 -2
- package/src/media-text/edit.native.js +2 -2
- package/src/media-text/media-container.native.js +1 -1
- package/src/media-text/style.native.scss +1 -0
- package/src/missing/edit.native.js +1 -1
- package/src/missing/test/edit-integration.native.js +4 -4
- package/src/missing/test/edit.native.js +2 -2
- package/src/more/transforms.js +2 -2
- package/src/navigation/edit/index.js +194 -69
- package/src/navigation/edit/inner-blocks.js +11 -4
- package/src/navigation/edit/navigation-menu-selector.js +97 -79
- package/src/navigation/edit/placeholder/index.js +61 -84
- package/src/navigation/edit/placeholder/placeholder-preview.js +3 -10
- package/src/navigation/edit/unsaved-inner-blocks.js +3 -1
- package/src/navigation/edit/use-convert-classic-menu-to-block-menu.js +137 -0
- package/src/navigation/edit/use-create-navigation-menu.js +59 -8
- package/src/navigation/edit/use-navigation-notice.js +3 -3
- package/src/navigation/editor.scss +23 -1
- package/src/navigation/menu-items-to-blocks.js +1 -1
- package/src/navigation/test/menu-items-to-blocks.js +1 -1
- package/src/navigation/use-navigation-entities.js +26 -60
- package/src/navigation/use-navigation-menu.js +5 -0
- package/src/navigation-link/fallback-variations.js +1 -1
- package/src/navigation-link/hooks.js +2 -2
- package/src/navigation-link/test/edit.js +5 -5
- package/src/navigation-submenu/edit.js +2 -2
- package/src/page-list/convert-to-links-modal.js +17 -31
- package/src/page-list/edit.js +14 -23
- package/src/post-author-name/edit.js +1 -0
- package/src/post-author-name/index.php +1 -1
- package/src/post-comments-form/edit.js +7 -3
- package/src/post-excerpt/edit.js +9 -12
- package/src/post-terms/edit.js +2 -1
- package/src/query-title/edit.js +0 -1
- package/src/search/edit.js +6 -0
- package/src/search/edit.native.js +1 -1
- package/src/search/index.php +3 -2
- package/src/search/test/edit.native.js +0 -1
- package/src/separator/save.js +4 -4
- package/src/separator/separator-settings.native.js +1 -1
- package/src/site-logo/edit.js +1 -1
- package/src/social-link/edit.native.js +17 -8
- package/src/social-link/test/index.native.js +138 -0
- package/src/spacer/controls.js +1 -1
- package/src/spacer/controls.native.js +1 -1
- package/src/table/edit.js +2 -2
- package/src/tag-cloud/style.scss +12 -7
- package/src/video/edit.js +4 -4
- package/src/video/edit.native.js +3 -3
- package/src/video/style.native.scss +1 -0
- package/build/navigation/use-convert-classic-menu.js +0 -59
- package/build/navigation/use-convert-classic-menu.js.map +0 -1
- package/build-module/navigation/use-convert-classic-menu.js +0 -47
- package/build-module/navigation/use-convert-classic-menu.js.map +0 -1
- package/src/navigation/use-convert-classic-menu.js +0 -58
|
@@ -35,10 +35,11 @@ import {
|
|
|
35
35
|
__experimentalToggleGroupControl as ToggleGroupControl,
|
|
36
36
|
__experimentalToggleGroupControlOption as ToggleGroupControlOption,
|
|
37
37
|
ToolbarGroup,
|
|
38
|
-
ToolbarDropdownMenu,
|
|
39
38
|
Button,
|
|
39
|
+
Spinner,
|
|
40
40
|
} from '@wordpress/components';
|
|
41
41
|
import { __ } from '@wordpress/i18n';
|
|
42
|
+
import { speak } from '@wordpress/a11y';
|
|
42
43
|
|
|
43
44
|
/**
|
|
44
45
|
* Internal dependencies
|
|
@@ -47,7 +48,6 @@ import useListViewModal from './use-list-view-modal';
|
|
|
47
48
|
import useNavigationMenu from '../use-navigation-menu';
|
|
48
49
|
import useNavigationEntities from '../use-navigation-entities';
|
|
49
50
|
import Placeholder from './placeholder';
|
|
50
|
-
import PlaceholderPreview from './placeholder/placeholder-preview';
|
|
51
51
|
import ResponsiveWrapper from './responsive-wrapper';
|
|
52
52
|
import NavigationInnerBlocks from './inner-blocks';
|
|
53
53
|
import NavigationMenuSelector from './navigation-menu-selector';
|
|
@@ -56,6 +56,16 @@ import UnsavedInnerBlocks from './unsaved-inner-blocks';
|
|
|
56
56
|
import NavigationMenuDeleteControl from './navigation-menu-delete-control';
|
|
57
57
|
import useNavigationNotice from './use-navigation-notice';
|
|
58
58
|
import OverlayMenuIcon from './overlay-menu-icon';
|
|
59
|
+
import useConvertClassicToBlockMenu, {
|
|
60
|
+
CLASSIC_MENU_CONVERSION_ERROR,
|
|
61
|
+
CLASSIC_MENU_CONVERSION_PENDING,
|
|
62
|
+
CLASSIC_MENU_CONVERSION_SUCCESS,
|
|
63
|
+
} from './use-convert-classic-menu-to-block-menu';
|
|
64
|
+
import useCreateNavigationMenu, {
|
|
65
|
+
CREATE_NAVIGATION_MENU_ERROR,
|
|
66
|
+
CREATE_NAVIGATION_MENU_PENDING,
|
|
67
|
+
CREATE_NAVIGATION_MENU_SUCCESS,
|
|
68
|
+
} from './use-create-navigation-menu';
|
|
59
69
|
|
|
60
70
|
const EMPTY_ARRAY = [];
|
|
61
71
|
|
|
@@ -157,6 +167,51 @@ function Navigation( {
|
|
|
157
167
|
// the Select Menu dropdown.
|
|
158
168
|
useNavigationEntities();
|
|
159
169
|
|
|
170
|
+
const [
|
|
171
|
+
showNavigationMenuCreateNotice,
|
|
172
|
+
hideNavigationMenuCreateNotice,
|
|
173
|
+
] = useNavigationNotice( {
|
|
174
|
+
name: 'block-library/core/navigation/create',
|
|
175
|
+
} );
|
|
176
|
+
|
|
177
|
+
const {
|
|
178
|
+
create: createNavigationMenu,
|
|
179
|
+
status: createNavigationMenuStatus,
|
|
180
|
+
error: createNavigationMenuError,
|
|
181
|
+
value: createNavigationMenuPost,
|
|
182
|
+
} = useCreateNavigationMenu( clientId );
|
|
183
|
+
|
|
184
|
+
const isCreatingNavigationMenu =
|
|
185
|
+
createNavigationMenuStatus === CREATE_NAVIGATION_MENU_PENDING;
|
|
186
|
+
|
|
187
|
+
useEffect( () => {
|
|
188
|
+
hideNavigationMenuCreateNotice();
|
|
189
|
+
|
|
190
|
+
if ( createNavigationMenuStatus === CREATE_NAVIGATION_MENU_PENDING ) {
|
|
191
|
+
speak( __( `Creating Navigation Menu.` ) );
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
if ( createNavigationMenuStatus === CREATE_NAVIGATION_MENU_SUCCESS ) {
|
|
195
|
+
setRef( createNavigationMenuPost.id );
|
|
196
|
+
selectBlock( clientId );
|
|
197
|
+
|
|
198
|
+
showNavigationMenuCreateNotice(
|
|
199
|
+
__( `Navigation Menu successfully created.` )
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
if ( createNavigationMenuStatus === CREATE_NAVIGATION_MENU_ERROR ) {
|
|
204
|
+
showNavigationMenuCreateNotice(
|
|
205
|
+
__( 'Failed to create Navigation Menu.' )
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
}, [
|
|
209
|
+
createNavigationMenu,
|
|
210
|
+
createNavigationMenuStatus,
|
|
211
|
+
createNavigationMenuError,
|
|
212
|
+
createNavigationMenuPost,
|
|
213
|
+
] );
|
|
214
|
+
|
|
160
215
|
const {
|
|
161
216
|
hasUncontrolledInnerBlocks,
|
|
162
217
|
uncontrolledInnerBlocks,
|
|
@@ -173,8 +228,7 @@ function Navigation( {
|
|
|
173
228
|
// introduce a selector like `getUncontrolledInnerBlocks`, just in
|
|
174
229
|
// case `getBlock` is fixed.
|
|
175
230
|
const _uncontrolledInnerBlocks = getBlock( clientId ).innerBlocks;
|
|
176
|
-
const _hasUncontrolledInnerBlocks =
|
|
177
|
-
_uncontrolledInnerBlocks?.length;
|
|
231
|
+
const _hasUncontrolledInnerBlocks = !! _uncontrolledInnerBlocks?.length;
|
|
178
232
|
const _controlledInnerBlocks = _hasUncontrolledInnerBlocks
|
|
179
233
|
? EMPTY_ARRAY
|
|
180
234
|
: getBlocks( clientId );
|
|
@@ -206,10 +260,6 @@ function Navigation( {
|
|
|
206
260
|
|
|
207
261
|
const isWithinUnassignedArea = !! navigationArea && ! ref;
|
|
208
262
|
|
|
209
|
-
const [ isPlaceholderShown, setIsPlaceholderShown ] = useState(
|
|
210
|
-
! hasUncontrolledInnerBlocks || isWithinUnassignedArea
|
|
211
|
-
);
|
|
212
|
-
|
|
213
263
|
const [ isResponsiveMenuOpen, setResponsiveMenuVisibility ] = useState(
|
|
214
264
|
false
|
|
215
265
|
);
|
|
@@ -219,8 +269,6 @@ function Navigation( {
|
|
|
219
269
|
const {
|
|
220
270
|
isNavigationMenuResolved,
|
|
221
271
|
isNavigationMenuMissing,
|
|
222
|
-
canSwitchNavigationMenu,
|
|
223
|
-
hasResolvedNavigationMenus,
|
|
224
272
|
navigationMenus,
|
|
225
273
|
navigationMenu,
|
|
226
274
|
canUserUpdateNavigationMenu,
|
|
@@ -228,6 +276,7 @@ function Navigation( {
|
|
|
228
276
|
canUserDeleteNavigationMenu,
|
|
229
277
|
hasResolvedCanUserDeleteNavigationMenu,
|
|
230
278
|
canUserCreateNavigationMenu,
|
|
279
|
+
isResolvingCanUserCreateNavigationMenu,
|
|
231
280
|
hasResolvedCanUserCreateNavigationMenu,
|
|
232
281
|
} = useNavigationMenu( ref );
|
|
233
282
|
|
|
@@ -238,9 +287,45 @@ function Navigation( {
|
|
|
238
287
|
clientId
|
|
239
288
|
);
|
|
240
289
|
|
|
290
|
+
const {
|
|
291
|
+
convert,
|
|
292
|
+
status: classicMenuConversionStatus,
|
|
293
|
+
error: classicMenuConversionError,
|
|
294
|
+
value: classicMenuConversionResult,
|
|
295
|
+
} = useConvertClassicToBlockMenu( clientId );
|
|
296
|
+
|
|
297
|
+
const isConvertingClassicMenu =
|
|
298
|
+
classicMenuConversionStatus === CLASSIC_MENU_CONVERSION_PENDING;
|
|
299
|
+
|
|
300
|
+
// The standard HTML5 tag for the block wrapper.
|
|
301
|
+
const TagName = 'nav';
|
|
302
|
+
|
|
303
|
+
// "placeholder" shown if:
|
|
304
|
+
// - there is no ref attribute pointing to a Navigation Post.
|
|
305
|
+
// - there is no classic menu conversion process in progress.
|
|
306
|
+
// - there is no menu creation process in progress.
|
|
307
|
+
// - there are no uncontrolled blocks.
|
|
308
|
+
// - (legacy) there is a Navigation Area without a ref attribute pointing to a Navigation Post.
|
|
309
|
+
const isPlaceholder =
|
|
310
|
+
! ref &&
|
|
311
|
+
! isCreatingNavigationMenu &&
|
|
312
|
+
! isConvertingClassicMenu &&
|
|
313
|
+
( ! hasUncontrolledInnerBlocks || isWithinUnassignedArea );
|
|
314
|
+
|
|
241
315
|
const isEntityAvailable =
|
|
242
316
|
! isNavigationMenuMissing && isNavigationMenuResolved;
|
|
243
317
|
|
|
318
|
+
// "loading" state:
|
|
319
|
+
// - there is a menu creation process in progress.
|
|
320
|
+
// - there is a classic menu conversion process in progress.
|
|
321
|
+
// OR
|
|
322
|
+
// - there is a ref attribute pointing to a Navigation Post
|
|
323
|
+
// - the Navigation Post isn't available (hasn't resolved) yet.
|
|
324
|
+
const isLoading =
|
|
325
|
+
isCreatingNavigationMenu ||
|
|
326
|
+
isConvertingClassicMenu ||
|
|
327
|
+
!! ( ref && ! isEntityAvailable && ! isConvertingClassicMenu );
|
|
328
|
+
|
|
244
329
|
const blockProps = useBlockProps( {
|
|
245
330
|
ref: navRef,
|
|
246
331
|
className: classnames( className, {
|
|
@@ -302,6 +387,42 @@ function Navigation( {
|
|
|
302
387
|
] = useState();
|
|
303
388
|
const [ detectedOverlayColor, setDetectedOverlayColor ] = useState();
|
|
304
389
|
|
|
390
|
+
const [
|
|
391
|
+
showClassicMenuConversionErrorNotice,
|
|
392
|
+
hideClassicMenuConversionErrorNotice,
|
|
393
|
+
] = useNavigationNotice( {
|
|
394
|
+
name: 'block-library/core/navigation/classic-menu-conversion/error',
|
|
395
|
+
} );
|
|
396
|
+
|
|
397
|
+
function handleUpdateMenu( menuId ) {
|
|
398
|
+
setRef( menuId );
|
|
399
|
+
selectBlock( clientId );
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
useEffect( () => {
|
|
403
|
+
if ( classicMenuConversionStatus === CLASSIC_MENU_CONVERSION_PENDING ) {
|
|
404
|
+
speak( __( 'Classic menu importing.' ) );
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
if (
|
|
408
|
+
classicMenuConversionStatus === CLASSIC_MENU_CONVERSION_SUCCESS &&
|
|
409
|
+
classicMenuConversionResult
|
|
410
|
+
) {
|
|
411
|
+
handleUpdateMenu( classicMenuConversionResult?.id );
|
|
412
|
+
hideClassicMenuConversionErrorNotice();
|
|
413
|
+
speak( __( 'Classic menu imported successfully.' ) );
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
if ( classicMenuConversionStatus === CLASSIC_MENU_CONVERSION_ERROR ) {
|
|
417
|
+
showClassicMenuConversionErrorNotice( classicMenuConversionError );
|
|
418
|
+
speak( __( 'Classic menu import failed.' ) );
|
|
419
|
+
}
|
|
420
|
+
}, [
|
|
421
|
+
classicMenuConversionStatus,
|
|
422
|
+
classicMenuConversionResult,
|
|
423
|
+
classicMenuConversionError,
|
|
424
|
+
] );
|
|
425
|
+
|
|
305
426
|
// Spacer block needs orientation from context. This is a patch until
|
|
306
427
|
// https://github.com/WordPress/gutenberg/issues/36197 is addressed.
|
|
307
428
|
useEffect( () => {
|
|
@@ -332,11 +453,6 @@ function Navigation( {
|
|
|
332
453
|
}
|
|
333
454
|
} );
|
|
334
455
|
|
|
335
|
-
// Hide the placeholder if an navigation menu entity has loaded.
|
|
336
|
-
useEffect( () => {
|
|
337
|
-
setIsPlaceholderShown( ! isEntityAvailable );
|
|
338
|
-
}, [ isEntityAvailable ] );
|
|
339
|
-
|
|
340
456
|
const [ showCantEditNotice, hideCantEditNotice ] = useNavigationNotice( {
|
|
341
457
|
name: 'block-library/core/navigation/permissions/update',
|
|
342
458
|
message: __(
|
|
@@ -385,7 +501,26 @@ function Navigation( {
|
|
|
385
501
|
ref,
|
|
386
502
|
] );
|
|
387
503
|
|
|
388
|
-
const
|
|
504
|
+
const handleSelectNavigation = useCallback(
|
|
505
|
+
( navPostOrClassicMenu ) => {
|
|
506
|
+
if ( ! navPostOrClassicMenu ) {
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
const isClassicMenu = navPostOrClassicMenu.hasOwnProperty(
|
|
511
|
+
'auto_add'
|
|
512
|
+
);
|
|
513
|
+
|
|
514
|
+
if ( isClassicMenu ) {
|
|
515
|
+
convert( navPostOrClassicMenu.id, navPostOrClassicMenu.name );
|
|
516
|
+
} else {
|
|
517
|
+
handleUpdateMenu( navPostOrClassicMenu.id );
|
|
518
|
+
}
|
|
519
|
+
},
|
|
520
|
+
[ convert, handleUpdateMenu ]
|
|
521
|
+
);
|
|
522
|
+
|
|
523
|
+
const resetToEmptyBlock = useCallback( () => {
|
|
389
524
|
registry.batch( () => {
|
|
390
525
|
if ( navigationArea ) {
|
|
391
526
|
setAreaMenu( 0 );
|
|
@@ -396,7 +531,6 @@ function Navigation( {
|
|
|
396
531
|
if ( ! ref ) {
|
|
397
532
|
replaceInnerBlocks( clientId, [] );
|
|
398
533
|
}
|
|
399
|
-
setIsPlaceholderShown( true );
|
|
400
534
|
} );
|
|
401
535
|
}, [ clientId, ref ] );
|
|
402
536
|
|
|
@@ -408,7 +542,7 @@ function Navigation( {
|
|
|
408
542
|
const hasUnsavedBlocks = hasUncontrolledInnerBlocks && ! isEntityAvailable;
|
|
409
543
|
if ( hasUnsavedBlocks ) {
|
|
410
544
|
return (
|
|
411
|
-
<
|
|
545
|
+
<TagName { ...blockProps }>
|
|
412
546
|
<ResponsiveWrapper
|
|
413
547
|
id={ clientId }
|
|
414
548
|
onToggle={ setResponsiveMenuVisibility }
|
|
@@ -435,7 +569,7 @@ function Navigation( {
|
|
|
435
569
|
} }
|
|
436
570
|
/>
|
|
437
571
|
</ResponsiveWrapper>
|
|
438
|
-
</
|
|
572
|
+
</TagName>
|
|
439
573
|
);
|
|
440
574
|
}
|
|
441
575
|
|
|
@@ -448,7 +582,7 @@ function Navigation( {
|
|
|
448
582
|
{ __(
|
|
449
583
|
'Navigation menu has been deleted or is unavailable. '
|
|
450
584
|
) }
|
|
451
|
-
<Button onClick={
|
|
585
|
+
<Button onClick={ resetToEmptyBlock } variant="link">
|
|
452
586
|
{ __( 'Create a new menu?' ) }
|
|
453
587
|
</Button>
|
|
454
588
|
</Warning>
|
|
@@ -477,31 +611,39 @@ function Navigation( {
|
|
|
477
611
|
{ open: overlayMenuPreview }
|
|
478
612
|
);
|
|
479
613
|
|
|
614
|
+
if ( isPlaceholder ) {
|
|
615
|
+
return (
|
|
616
|
+
<TagName { ...blockProps }>
|
|
617
|
+
<PlaceholderComponent
|
|
618
|
+
isSelected={ isSelected }
|
|
619
|
+
currentMenuId={ ref }
|
|
620
|
+
clientId={ clientId }
|
|
621
|
+
canUserCreateNavigationMenu={ canUserCreateNavigationMenu }
|
|
622
|
+
isResolvingCanUserCreateNavigationMenu={
|
|
623
|
+
isResolvingCanUserCreateNavigationMenu
|
|
624
|
+
}
|
|
625
|
+
onFinish={ handleSelectNavigation }
|
|
626
|
+
onCreateEmpty={ () => createNavigationMenu( '', [] ) }
|
|
627
|
+
/>
|
|
628
|
+
</TagName>
|
|
629
|
+
);
|
|
630
|
+
}
|
|
631
|
+
|
|
480
632
|
return (
|
|
481
633
|
<EntityProvider kind="postType" type="wp_navigation" id={ ref }>
|
|
482
634
|
<RecursionProvider>
|
|
483
635
|
<BlockControls>
|
|
484
636
|
{ ! isDraftNavigationMenu && isEntityAvailable && (
|
|
485
|
-
<ToolbarGroup>
|
|
486
|
-
<
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
setRef( id );
|
|
496
|
-
onClose();
|
|
497
|
-
} }
|
|
498
|
-
onCreateNew={ startWithEmptyMenu }
|
|
499
|
-
/* translators: %s: The name of a menu. */
|
|
500
|
-
actionLabel={ __( "Switch to '%s'" ) }
|
|
501
|
-
showManageActions
|
|
502
|
-
/>
|
|
503
|
-
) }
|
|
504
|
-
</ToolbarDropdownMenu>
|
|
637
|
+
<ToolbarGroup className="wp-block-navigation__toolbar-menu-selector">
|
|
638
|
+
<NavigationMenuSelector
|
|
639
|
+
currentMenuId={ ref }
|
|
640
|
+
clientId={ clientId }
|
|
641
|
+
onSelect={ handleSelectNavigation }
|
|
642
|
+
onCreateNew={ resetToEmptyBlock }
|
|
643
|
+
/* translators: %s: The name of a menu. */
|
|
644
|
+
actionLabel={ __( "Switch to '%s'" ) }
|
|
645
|
+
showManageActions
|
|
646
|
+
/>
|
|
505
647
|
</ToolbarGroup>
|
|
506
648
|
) }
|
|
507
649
|
<ToolbarGroup>{ listViewToolbarButton }</ToolbarGroup>
|
|
@@ -652,36 +794,20 @@ function Navigation( {
|
|
|
652
794
|
{ hasResolvedCanUserDeleteNavigationMenu &&
|
|
653
795
|
canUserDeleteNavigationMenu && (
|
|
654
796
|
<NavigationMenuDeleteControl
|
|
655
|
-
onDelete={
|
|
797
|
+
onDelete={ resetToEmptyBlock }
|
|
656
798
|
/>
|
|
657
799
|
) }
|
|
658
800
|
</InspectorControls>
|
|
659
801
|
) }
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
} }
|
|
670
|
-
canSwitchNavigationMenu={ canSwitchNavigationMenu }
|
|
671
|
-
hasResolvedNavigationMenus={
|
|
672
|
-
hasResolvedNavigationMenus
|
|
673
|
-
}
|
|
674
|
-
clientId={ clientId }
|
|
675
|
-
canUserCreateNavigationMenu={
|
|
676
|
-
canUserCreateNavigationMenu
|
|
677
|
-
}
|
|
678
|
-
/>
|
|
679
|
-
) }
|
|
680
|
-
{ ! hasResolvedCanUserCreateNavigationMenu ||
|
|
681
|
-
( ! isEntityAvailable && ! isPlaceholderShown && (
|
|
682
|
-
<PlaceholderPreview isLoading />
|
|
683
|
-
) ) }
|
|
684
|
-
{ ! isPlaceholderShown && (
|
|
802
|
+
|
|
803
|
+
{ isLoading && (
|
|
804
|
+
<TagName { ...blockProps }>
|
|
805
|
+
<Spinner className="wp-block-navigation__loading-indicator" />
|
|
806
|
+
</TagName>
|
|
807
|
+
) }
|
|
808
|
+
|
|
809
|
+
{ ! isLoading && (
|
|
810
|
+
<TagName { ...blockProps }>
|
|
685
811
|
<ResponsiveWrapper
|
|
686
812
|
id={ clientId }
|
|
687
813
|
onToggle={ setResponsiveMenuVisibility }
|
|
@@ -695,7 +821,6 @@ function Navigation( {
|
|
|
695
821
|
>
|
|
696
822
|
{ isEntityAvailable && (
|
|
697
823
|
<NavigationInnerBlocks
|
|
698
|
-
isVisible={ ! isPlaceholderShown }
|
|
699
824
|
clientId={ clientId }
|
|
700
825
|
hasCustomPlaceholder={
|
|
701
826
|
!! CustomPlaceholder
|
|
@@ -704,8 +829,8 @@ function Navigation( {
|
|
|
704
829
|
/>
|
|
705
830
|
) }
|
|
706
831
|
</ResponsiveWrapper>
|
|
707
|
-
|
|
708
|
-
|
|
832
|
+
</TagName>
|
|
833
|
+
) }
|
|
709
834
|
</RecursionProvider>
|
|
710
835
|
</EntityProvider>
|
|
711
836
|
);
|
|
@@ -38,7 +38,6 @@ const LAYOUT = {
|
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
export default function NavigationInnerBlocks( {
|
|
41
|
-
isVisible,
|
|
42
41
|
clientId,
|
|
43
42
|
hasCustomPlaceholder,
|
|
44
43
|
orientation,
|
|
@@ -66,7 +65,7 @@ export default function NavigationInnerBlocks( {
|
|
|
66
65
|
] )?.length,
|
|
67
66
|
|
|
68
67
|
// This prop is already available but computing it here ensures it's
|
|
69
|
-
// fresh compared to isImmediateParentOfSelectedBlock
|
|
68
|
+
// fresh compared to isImmediateParentOfSelectedBlock.
|
|
70
69
|
isSelected: selectedBlockId === clientId,
|
|
71
70
|
};
|
|
72
71
|
},
|
|
@@ -98,6 +97,15 @@ export default function NavigationInnerBlocks( {
|
|
|
98
97
|
|
|
99
98
|
const placeholder = useMemo( () => <PlaceholderPreview />, [] );
|
|
100
99
|
|
|
100
|
+
const hasMenuItems = !! blocks?.length;
|
|
101
|
+
|
|
102
|
+
// If there is a `ref` attribute pointing to a `wp_navigation` but
|
|
103
|
+
// that menu has no **items** (i.e. empty) then show a placeholder.
|
|
104
|
+
// The block must also be selected else the placeholder will display
|
|
105
|
+
// alongside the appender.
|
|
106
|
+
const showPlaceholder =
|
|
107
|
+
! hasCustomPlaceholder && ! hasMenuItems && ! isSelected;
|
|
108
|
+
|
|
101
109
|
const innerBlocksProps = useInnerBlocksProps(
|
|
102
110
|
{
|
|
103
111
|
className: 'wp-block-navigation__container',
|
|
@@ -130,8 +138,7 @@ export default function NavigationInnerBlocks( {
|
|
|
130
138
|
// inherit templateLock={ 'all' }.
|
|
131
139
|
templateLock: false,
|
|
132
140
|
__experimentalLayout: LAYOUT,
|
|
133
|
-
placeholder:
|
|
134
|
-
! isVisible || hasCustomPlaceholder ? undefined : placeholder,
|
|
141
|
+
placeholder: showPlaceholder ? placeholder : undefined,
|
|
135
142
|
}
|
|
136
143
|
);
|
|
137
144
|
|
|
@@ -1,25 +1,30 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
MenuGroup,
|
|
6
|
+
MenuItem,
|
|
7
|
+
MenuItemsChoice,
|
|
8
|
+
ToolbarDropdownMenu,
|
|
9
|
+
} from '@wordpress/components';
|
|
5
10
|
import { __, sprintf } from '@wordpress/i18n';
|
|
6
11
|
import { decodeEntities } from '@wordpress/html-entities';
|
|
7
12
|
import { addQueryArgs } from '@wordpress/url';
|
|
13
|
+
import { useCallback, useMemo } from '@wordpress/element';
|
|
8
14
|
|
|
9
15
|
/**
|
|
10
16
|
* Internal dependencies
|
|
11
17
|
*/
|
|
12
18
|
import useNavigationMenu from '../use-navigation-menu';
|
|
13
19
|
import useNavigationEntities from '../use-navigation-entities';
|
|
14
|
-
import useConvertClassicMenu from '../use-convert-classic-menu';
|
|
15
|
-
import useCreateNavigationMenu from './use-create-navigation-menu';
|
|
16
20
|
|
|
17
21
|
export default function NavigationMenuSelector( {
|
|
18
|
-
|
|
22
|
+
currentMenuId,
|
|
19
23
|
onSelect,
|
|
20
24
|
onCreateNew,
|
|
21
25
|
showManageActions = false,
|
|
22
26
|
actionLabel,
|
|
27
|
+
toggleProps = {},
|
|
23
28
|
} ) {
|
|
24
29
|
/* translators: %s: The name of a menu. */
|
|
25
30
|
const createActionLabel = __( "Create from '%s'" );
|
|
@@ -35,26 +40,36 @@ export default function NavigationMenuSelector( {
|
|
|
35
40
|
canSwitchNavigationMenu,
|
|
36
41
|
} = useNavigationMenu();
|
|
37
42
|
|
|
38
|
-
const
|
|
43
|
+
const handleSelect = useCallback(
|
|
44
|
+
( _onClose ) => ( selectedId ) => {
|
|
45
|
+
_onClose();
|
|
46
|
+
onSelect(
|
|
47
|
+
navigationMenus?.find( ( post ) => post.id === selectedId )
|
|
48
|
+
);
|
|
49
|
+
},
|
|
50
|
+
[ navigationMenus ]
|
|
51
|
+
);
|
|
39
52
|
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
53
|
+
const handleSelectClassic = useCallback(
|
|
54
|
+
( _onClose, menu ) => () => {
|
|
55
|
+
_onClose();
|
|
56
|
+
onSelect( menu );
|
|
57
|
+
},
|
|
58
|
+
[]
|
|
59
|
+
);
|
|
47
60
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
61
|
+
const menuChoices = useMemo( () => {
|
|
62
|
+
return (
|
|
63
|
+
navigationMenus?.map( ( { id, title } ) => {
|
|
64
|
+
const label = decodeEntities( title.rendered );
|
|
65
|
+
return {
|
|
66
|
+
value: id,
|
|
67
|
+
label,
|
|
68
|
+
ariaLabel: sprintf( actionLabel, label ),
|
|
69
|
+
};
|
|
70
|
+
} ) || []
|
|
51
71
|
);
|
|
52
|
-
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
const convertClassicMenuToBlocks = useConvertClassicMenu(
|
|
56
|
-
onFinishMenuCreation
|
|
57
|
-
);
|
|
72
|
+
}, [ navigationMenus ] );
|
|
58
73
|
|
|
59
74
|
const hasNavigationMenus = !! navigationMenus?.length;
|
|
60
75
|
const hasClassicMenus = !! classicMenus?.length;
|
|
@@ -62,75 +77,78 @@ export default function NavigationMenuSelector( {
|
|
|
62
77
|
const showClassicMenus = !! canUserCreateNavigationMenu;
|
|
63
78
|
const hasManagePermissions =
|
|
64
79
|
canUserCreateNavigationMenu || canUserUpdateNavigationMenu;
|
|
80
|
+
|
|
81
|
+
// Show the selector if:
|
|
82
|
+
// - has switch or create permissions and there are block or classic menus.
|
|
83
|
+
// - user has create or update permisisons and component should show the menu actions.
|
|
65
84
|
const showSelectMenus =
|
|
66
|
-
( canSwitchNavigationMenu || canUserCreateNavigationMenu ) &&
|
|
67
|
-
|
|
85
|
+
( ( canSwitchNavigationMenu || canUserCreateNavigationMenu ) &&
|
|
86
|
+
( hasNavigationMenus || hasClassicMenus ) ) ||
|
|
87
|
+
( hasManagePermissions && showManageActions );
|
|
68
88
|
|
|
69
89
|
if ( ! showSelectMenus ) {
|
|
70
90
|
return null;
|
|
71
91
|
}
|
|
72
92
|
|
|
73
93
|
return (
|
|
74
|
-
|
|
75
|
-
{
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
{
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
94
|
+
<ToolbarDropdownMenu
|
|
95
|
+
label={ __( 'Select Menu' ) }
|
|
96
|
+
text={ __( 'Select Menu' ) }
|
|
97
|
+
icon={ null }
|
|
98
|
+
toggleProps={ toggleProps }
|
|
99
|
+
>
|
|
100
|
+
{ ( { onClose } ) => (
|
|
101
|
+
<>
|
|
102
|
+
{ showNavigationMenus && hasNavigationMenus && (
|
|
103
|
+
<MenuGroup label={ __( 'Menus' ) }>
|
|
104
|
+
<MenuItemsChoice
|
|
105
|
+
value={ currentMenuId }
|
|
106
|
+
onSelect={ handleSelect( onClose ) }
|
|
107
|
+
choices={ menuChoices }
|
|
108
|
+
/>
|
|
109
|
+
</MenuGroup>
|
|
110
|
+
) }
|
|
111
|
+
{ showClassicMenus && hasClassicMenus && (
|
|
112
|
+
<MenuGroup label={ __( 'Classic Menus' ) }>
|
|
113
|
+
{ classicMenus?.map( ( menu ) => {
|
|
114
|
+
const label = decodeEntities( menu.name );
|
|
115
|
+
return (
|
|
116
|
+
<MenuItem
|
|
117
|
+
onClick={ handleSelectClassic(
|
|
118
|
+
onClose,
|
|
119
|
+
menu
|
|
120
|
+
) }
|
|
121
|
+
key={ menu.id }
|
|
122
|
+
aria-label={ sprintf(
|
|
123
|
+
createActionLabel,
|
|
124
|
+
label
|
|
125
|
+
) }
|
|
126
|
+
>
|
|
127
|
+
{ label }
|
|
128
|
+
</MenuItem>
|
|
129
|
+
);
|
|
130
|
+
} ) }
|
|
131
|
+
</MenuGroup>
|
|
132
|
+
) }
|
|
133
|
+
|
|
134
|
+
{ showManageActions && hasManagePermissions && (
|
|
135
|
+
<MenuGroup label={ __( 'Tools' ) }>
|
|
136
|
+
{ canUserCreateNavigationMenu && (
|
|
137
|
+
<MenuItem onClick={ onCreateNew }>
|
|
138
|
+
{ __( 'Create new menu' ) }
|
|
139
|
+
</MenuItem>
|
|
140
|
+
) }
|
|
98
141
|
<MenuItem
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
menu.name
|
|
103
|
-
);
|
|
104
|
-
} }
|
|
105
|
-
key={ menu.id }
|
|
106
|
-
aria-label={ sprintf(
|
|
107
|
-
createActionLabel,
|
|
108
|
-
label
|
|
109
|
-
) }
|
|
142
|
+
href={ addQueryArgs( 'edit.php', {
|
|
143
|
+
post_type: 'wp_navigation',
|
|
144
|
+
} ) }
|
|
110
145
|
>
|
|
111
|
-
{
|
|
146
|
+
{ __( 'Manage menus' ) }
|
|
112
147
|
</MenuItem>
|
|
113
|
-
|
|
114
|
-
} ) }
|
|
115
|
-
</MenuGroup>
|
|
116
|
-
) }
|
|
117
|
-
|
|
118
|
-
{ showManageActions && hasManagePermissions && (
|
|
119
|
-
<MenuGroup label={ __( 'Tools' ) }>
|
|
120
|
-
{ canUserCreateNavigationMenu && (
|
|
121
|
-
<MenuItem onClick={ onCreateNew }>
|
|
122
|
-
{ __( 'Create new menu' ) }
|
|
123
|
-
</MenuItem>
|
|
148
|
+
</MenuGroup>
|
|
124
149
|
) }
|
|
125
|
-
|
|
126
|
-
href={ addQueryArgs( 'edit.php', {
|
|
127
|
-
post_type: 'wp_navigation',
|
|
128
|
-
} ) }
|
|
129
|
-
>
|
|
130
|
-
{ __( 'Manage menus' ) }
|
|
131
|
-
</MenuItem>
|
|
132
|
-
</MenuGroup>
|
|
150
|
+
</>
|
|
133
151
|
) }
|
|
134
|
-
|
|
152
|
+
</ToolbarDropdownMenu>
|
|
135
153
|
);
|
|
136
154
|
}
|