@gechiui/block-editor
Version:
156 lines (128 loc) • 5.09 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = BlockToolbar;
var _element = require("@gechiui/element");
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _classnames = _interopRequireDefault(require("classnames"));
var _data = require("@gechiui/data");
var _compose = require("@gechiui/compose");
var _blocks = require("@gechiui/blocks");
var _components = require("@gechiui/components");
var _blockMover = _interopRequireDefault(require("../block-mover"));
var _blockParentSelector = _interopRequireDefault(require("../block-parent-selector"));
var _blockSwitcher = _interopRequireDefault(require("../block-switcher"));
var _blockControls = _interopRequireDefault(require("../block-controls"));
var _blockSettingsMenu = _interopRequireDefault(require("../block-settings-menu"));
var _utils = require("./utils");
var _store = require("../../store");
/**
* External dependencies
*/
/**
* GeChiUI dependencies
*/
/**
* Internal dependencies
*/
function BlockToolbar(_ref) {
let {
hideDragHandle
} = _ref;
const {
blockClientIds,
blockClientId,
blockType,
hasFixedToolbar,
hasReducedUI,
isValid,
isVisual
} = (0, _data.useSelect)(select => {
const {
getBlockName,
getBlockMode,
getSelectedBlockClientIds,
isBlockValid,
getBlockRootClientId,
getSettings
} = select(_store.store);
const selectedBlockClientIds = getSelectedBlockClientIds();
const selectedBlockClientId = selectedBlockClientIds[0];
const blockRootClientId = getBlockRootClientId(selectedBlockClientId);
const settings = getSettings();
return {
blockClientIds: selectedBlockClientIds,
blockClientId: selectedBlockClientId,
blockType: selectedBlockClientId && (0, _blocks.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
} = (0, _data.useDispatch)(_store.store);
const nodeRef = (0, _element.useRef)();
const {
showMovers,
gestures: showMoversGestures
} = (0, _utils.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 = (0, _compose.useViewportMatch)('medium', '<') || hasFixedToolbar;
if (blockType) {
if (!(0, _blocks.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 = (0, _classnames.default)('block-editor-block-toolbar', shouldShowMovers && 'is-showing-movers');
return (0, _element.createElement)("div", {
className: classes
}, !isMultiToolbar && !displayHeaderToolbar && (0, _element.createElement)(_blockParentSelector.default, {
clientIds: blockClientIds
}), (0, _element.createElement)("div", (0, _extends2.default)({
ref: nodeRef
}, showMoversGestures), (shouldShowVisualToolbar || isMultiToolbar) && (0, _element.createElement)(_components.ToolbarGroup, {
className: "block-editor-block-toolbar__block-controls"
}, (0, _element.createElement)(_blockSwitcher.default, {
clientIds: blockClientIds
}), (0, _element.createElement)(_blockMover.default, {
clientIds: blockClientIds,
hideDragHandle: hideDragHandle || hasReducedUI
}))), shouldShowVisualToolbar && (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_blockControls.default.Slot, {
group: "parent",
className: "block-editor-block-toolbar__slot"
}), (0, _element.createElement)(_blockControls.default.Slot, {
group: "block",
className: "block-editor-block-toolbar__slot"
}), (0, _element.createElement)(_blockControls.default.Slot, {
className: "block-editor-block-toolbar__slot"
}), (0, _element.createElement)(_blockControls.default.Slot, {
group: "inline",
className: "block-editor-block-toolbar__slot"
}), (0, _element.createElement)(_blockControls.default.Slot, {
group: "other",
className: "block-editor-block-toolbar__slot"
})), (0, _element.createElement)(_blockSettingsMenu.default, {
clientIds: blockClientIds
}));
}
//# sourceMappingURL=index.js.map