@gechiui/block-editor
Version:
66 lines (62 loc) • 1.48 kB
JavaScript
/**
* GeChiUI dependencies
*/
import { __ } from '@gechiui/i18n';
import { MenuGroup, MenuItem } from '@gechiui/components';
import {
getBlockMenuDefaultClassName,
switchToBlockType,
} from '@gechiui/blocks';
import { useState } from '@gechiui/element';
/**
* Internal dependencies
*/
import BlockIcon from '../block-icon';
import PreviewBlockPopover from './preview-block-popover';
const BlockTransformationsMenu = ( {
className,
possibleBlockTransformations,
onSelect,
blocks,
} ) => {
const [
hoveredTransformItemName,
setHoveredTransformItemName,
] = useState();
return (
<MenuGroup label={ __( '转换为' ) } className={ className }>
{ hoveredTransformItemName && (
<PreviewBlockPopover
blocks={ switchToBlockType(
blocks,
hoveredTransformItemName
) }
/>
) }
{ possibleBlockTransformations.map( ( item ) => {
const { name, icon, title, isDisabled } = item;
return (
<MenuItem
key={ name }
className={ getBlockMenuDefaultClassName( name ) }
onClick={ ( event ) => {
event.preventDefault();
onSelect( name );
} }
disabled={ isDisabled }
onMouseLeave={ () =>
setHoveredTransformItemName( null )
}
onMouseEnter={ () =>
setHoveredTransformItemName( name )
}
>
<BlockIcon icon={ icon } showColors />
{ title }
</MenuItem>
);
} ) }
</MenuGroup>
);
};
export default BlockTransformationsMenu;