UNPKG

@gechiui/block-editor

Version:
135 lines (123 loc) 4.46 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import { createElement, Fragment } from "@gechiui/element"; /** * External dependencies */ import classnames from 'classnames'; /** * GeChiUI dependencies */ import { useSelect, useDispatch } from '@gechiui/data'; import { useRef } from '@gechiui/element'; import { useViewportMatch } from '@gechiui/compose'; import { getBlockType, hasBlockSupport } from '@gechiui/blocks'; import { ToolbarGroup } from '@gechiui/components'; /** * Internal dependencies */ import BlockMover from '../block-mover'; import BlockParentSelector from '../block-parent-selector'; import BlockSwitcher from '../block-switcher'; import BlockControls from '../block-controls'; import BlockSettingsMenu from '../block-settings-menu'; import { useShowMoversGestures } from './utils'; import { store as blockEditorStore } from '../../store'; export default function BlockToolbar(_ref) { let { hideDragHandle } = _ref; const { blockClientIds, blockClientId, blockType, hasFixedToolbar, hasReducedUI, isValid, isVisual } = useSelect(select => { const { getBlockName, getBlockMode, getSelectedBlockClientIds, isBlockValid, getBlockRootClientId, getSettings } = select(blockEditorStore); const selectedBlockClientIds = getSelectedBlockClientIds(); const selectedBlockClientId = selectedBlockClientIds[0]; const blockRootClientId = getBlockRootClientId(selectedBlockClientId); const settings = getSettings(); return { blockClientIds: selectedBlockClientIds, blockClientId: selectedBlockClientId, blockType: selectedBlockClientId && getBlockType(getBlockName(selectedBlockClientId)), hasFixedToolbar: settings.hasFixedToolbar, hasReducedUI: settings.hasReducedUI, rootClientId: blockRootClientId, isValid: selectedBlockClientIds.every(id => isBlockValid(id)), isVisual: selectedBlockClientIds.every(id => getBlockMode(id) === 'visual') }; }, []); // Handles highlighting the current block outline on hover or focus of the // block type toolbar area. const { toggleBlockHighlight } = useDispatch(blockEditorStore); const nodeRef = useRef(); const { showMovers, gestures: showMoversGestures } = useShowMoversGestures({ ref: nodeRef, onChange(isFocused) { if (isFocused && hasReducedUI) { return; } toggleBlockHighlight(blockClientId, isFocused); } }); // Account for the cases where the block toolbar is rendered within the // header area and not contextually to the block. const displayHeaderToolbar = useViewportMatch('medium', '<') || hasFixedToolbar; if (blockType) { if (!hasBlockSupport(blockType, '__experimentalToolbar', true)) { return null; } } const shouldShowMovers = displayHeaderToolbar || showMovers; if (blockClientIds.length === 0) { return null; } const shouldShowVisualToolbar = isValid && isVisual; const isMultiToolbar = blockClientIds.length > 1; const classes = classnames('block-editor-block-toolbar', shouldShowMovers && 'is-showing-movers'); return createElement("div", { className: classes }, !isMultiToolbar && !displayHeaderToolbar && createElement(BlockParentSelector, { clientIds: blockClientIds }), createElement("div", _extends({ ref: nodeRef }, showMoversGestures), (shouldShowVisualToolbar || isMultiToolbar) && createElement(ToolbarGroup, { className: "block-editor-block-toolbar__block-controls" }, createElement(BlockSwitcher, { clientIds: blockClientIds }), createElement(BlockMover, { clientIds: blockClientIds, hideDragHandle: hideDragHandle || hasReducedUI }))), shouldShowVisualToolbar && createElement(Fragment, null, createElement(BlockControls.Slot, { group: "parent", className: "block-editor-block-toolbar__slot" }), createElement(BlockControls.Slot, { group: "block", className: "block-editor-block-toolbar__slot" }), createElement(BlockControls.Slot, { className: "block-editor-block-toolbar__slot" }), createElement(BlockControls.Slot, { group: "inline", className: "block-editor-block-toolbar__slot" }), createElement(BlockControls.Slot, { group: "other", className: "block-editor-block-toolbar__slot" })), createElement(BlockSettingsMenu, { clientIds: blockClientIds })); } //# sourceMappingURL=index.js.map