@wordpress/block-editor
Version:
54 lines (48 loc) • 1.46 kB
JavaScript
/**
* WordPress dependencies
*/
import { useSelect } from '@wordpress/data';
import { isUnmodifiedDefaultBlock } from '@wordpress/blocks';
/**
* Internal dependencies
*/
import { store as blockEditorStore } from '../../store';
import { unlock } from '../../lock-unlock';
/**
* Source of truth for which block tools are showing in the block editor.
*
* @return {Object} Object of which block tools will be shown.
*/
export function useShowBlockTools() {
return useSelect( ( select ) => {
const {
getSelectedBlockClientId,
getFirstMultiSelectedBlockClientId,
getBlock,
getBlockMode,
getSettings,
isTyping,
isBlockInterfaceHidden,
} = unlock( select( blockEditorStore ) );
const clientId =
getSelectedBlockClientId() || getFirstMultiSelectedBlockClientId();
const block = getBlock( clientId );
const hasSelectedBlock = !! clientId && !! block;
const isEmptyDefaultBlock =
hasSelectedBlock &&
isUnmodifiedDefaultBlock( block, 'content' ) &&
getBlockMode( clientId ) !== 'html';
const _showEmptyBlockSideInserter =
clientId && ! isTyping() && isEmptyDefaultBlock;
const _showBlockToolbarPopover =
! isBlockInterfaceHidden() &&
! getSettings().hasFixedToolbar &&
! _showEmptyBlockSideInserter &&
hasSelectedBlock &&
! isEmptyDefaultBlock;
return {
showEmptyBlockSideInserter: _showEmptyBlockSideInserter,
showBlockToolbarPopover: _showBlockToolbarPopover,
};
}, [] );
}