Skip to content

Commit

Permalink
Move conversion process to higher level component
Browse files Browse the repository at this point in the history
  • Loading branch information
getdave committed Feb 17, 2022
1 parent 9e36405 commit c62810b
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 24 deletions.
31 changes: 28 additions & 3 deletions packages/block-library/src/navigation/edit/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ import UnsavedInnerBlocks from './unsaved-inner-blocks';
import NavigationMenuDeleteControl from './navigation-menu-delete-control';
import useNavigationNotice from './use-navigation-notice';
import OverlayMenuIcon from './overlay-menu-icon';
import useConvertClassicToBlockMenu from './use-convert-classic-menu-to-block-menu';

const EMPTY_ARRAY = [];

Expand Down Expand Up @@ -302,6 +303,11 @@ function Navigation( {
] = useState();
const [ detectedOverlayColor, setDetectedOverlayColor ] = useState();

const {
convert,
state: classicMenuConversionState,
} = useConvertClassicToBlockMenu( clientId );

// Spacer block needs orientation from context. This is a patch until
// https://github.com/WordPress/gutenberg/issues/36197 is addressed.
useEffect( () => {
Expand Down Expand Up @@ -385,6 +391,15 @@ function Navigation( {
ref,
] );

useEffect( () => {
if (
! classicMenuConversionState?.isFetching &&
classicMenuConversionState.navMenu
) {
setRef( classicMenuConversionState.navMenu?.id );
}
}, [ classicMenuConversionState ] );

const startWithEmptyMenu = useCallback( () => {
registry.batch( () => {
if ( navigationArea ) {
Expand Down Expand Up @@ -495,6 +510,13 @@ function Navigation( {
setRef( id );
onClose();
} }
onSelectClassic={ ( classicMenu ) => {
onClose();
convert(
classicMenu.id,
classicMenu.name
);
} }
onCreateNew={ startWithEmptyMenu }
/* translators: %s: The name of a menu. */
actionLabel={ __( "Switch to '%s'" ) }
Expand Down Expand Up @@ -660,13 +682,16 @@ function Navigation( {
<nav { ...blockProps }>
{ isPlaceholderShown && (
<PlaceholderComponent
onFinish={ ( post ) => {
onFinish={ ( post, requiresConversion = false ) => {
setIsPlaceholderShown( false );

if ( post ) {
if ( requiresConversion ) {
convert( post.id, post.name );
}
if ( ! requiresConversion && post ) {
setRef( post.id );
selectBlock( clientId );
}
selectBlock( clientId );
} }
canSwitchNavigationMenu={ canSwitchNavigationMenu }
hasResolvedNavigationMenus={
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,10 @@ import { addQueryArgs } from '@wordpress/url';
*/
import useNavigationMenu from '../use-navigation-menu';
import useNavigationEntities from '../use-navigation-entities';
import { useEffect } from '@wordpress/element';
import useConvertClassicToBlockMenu from './use-convert-classic-menu-to-block-menu';

export default function NavigationMenuSelector( {
clientId,
onSelect,
onSelectClassic,
onCreateNew,
showManageActions = false,
actionLabel,
Expand All @@ -28,28 +26,13 @@ export default function NavigationMenuSelector( {

const { menus: classicMenus } = useNavigationEntities();

const {
convert,
state: classicMenuConversionState,
} = useConvertClassicToBlockMenu( clientId );

const {
navigationMenus,
canUserCreateNavigationMenu,
canUserUpdateNavigationMenu,
canSwitchNavigationMenu,
} = useNavigationMenu();

// TODO: lift this up into parent component in order that
useEffect( () => {
if (
! classicMenuConversionState?.isFetching &&
classicMenuConversionState.navMenu
) {
onSelect( classicMenuConversionState.navMenu );
}
}, [ classicMenuConversionState ] );

const hasNavigationMenus = !! navigationMenus?.length;
const hasClassicMenus = !! classicMenus?.length;
const showNavigationMenus = !! canSwitchNavigationMenu;
Expand Down Expand Up @@ -91,7 +74,7 @@ export default function NavigationMenuSelector( {
return (
<MenuItem
onClick={ () => {
convert( menu.id, menu.name );
onSelectClassic( menu );
} }
key={ menu.id }
aria-label={ sprintf(
Expand Down
11 changes: 9 additions & 2 deletions packages/block-library/src/navigation/edit/placeholder/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,17 @@ export default function NavigationPlaceholder( {
} }
popoverProps={ { isAlternate: true } }
>
{ () => (
{ ( { onClose } ) => (
<NavigationMenuSelector
clientId={ clientId }
onSelect={ onFinish }
onSelect={ ( menu ) => {
onClose();
onFinish( menu );
} }
onSelectClassic={ ( menu ) => {
onClose();
onFinish( menu, true );
} }
/>
) }
</DropdownMenu>
Expand Down

0 comments on commit c62810b

Please sign in to comment.