@wordpress/block-editor
Version:
112 lines (103 loc) • 3.07 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import { createElement } from "@wordpress/element";
/**
* External dependencies
*/
import classnames from 'classnames';
/**
* WordPress dependencies
*/
import { useMemo, useRef, memo } from '@wordpress/element';
import { createBlock, createBlocksFromInnerBlocksTemplate, isReusableBlock, isTemplatePart } from '@wordpress/blocks';
import { __experimentalTruncate as Truncate } from '@wordpress/components';
import { ENTER, isAppleOS } from '@wordpress/keycodes';
/**
* Internal dependencies
*/
import BlockIcon from '../block-icon';
import { InserterListboxItem } from '../inserter-listbox';
import InserterDraggableBlocks from '../inserter-draggable-blocks';
function InserterListItem({
className,
isFirst,
item,
onSelect,
onHover,
isDraggable,
...props
}) {
const isDragging = useRef(false);
const itemIconStyle = item.icon ? {
backgroundColor: item.icon.background,
color: item.icon.foreground
} : {};
const blocks = useMemo(() => {
return [createBlock(item.name, item.initialAttributes, createBlocksFromInnerBlocksTemplate(item.innerBlocks))];
}, [item.name, item.initialAttributes, item.initialAttributes]);
const isSynced = isReusableBlock(item) || isTemplatePart(item);
return createElement(InserterDraggableBlocks, {
isEnabled: isDraggable && !item.disabled,
blocks: blocks,
icon: item.icon
}, ({
draggable,
onDragStart,
onDragEnd
}) => createElement("div", {
className: classnames('block-editor-block-types-list__list-item', {
'is-synced': isSynced
}),
draggable: draggable,
onDragStart: event => {
isDragging.current = true;
if (onDragStart) {
onHover(null);
onDragStart(event);
}
},
onDragEnd: event => {
isDragging.current = false;
if (onDragEnd) {
onDragEnd(event);
}
}
}, createElement(InserterListboxItem, _extends({
isFirst: isFirst,
className: classnames('block-editor-block-types-list__item', className),
disabled: item.isDisabled,
onClick: event => {
event.preventDefault();
onSelect(item, isAppleOS() ? event.metaKey : event.ctrlKey);
onHover(null);
},
onKeyDown: event => {
const {
keyCode
} = event;
if (keyCode === ENTER) {
event.preventDefault();
onSelect(item, isAppleOS() ? event.metaKey : event.ctrlKey);
onHover(null);
}
},
onMouseEnter: () => {
if (isDragging.current) {
return;
}
onHover(item);
},
onMouseLeave: () => onHover(null)
}, props), createElement("span", {
className: "block-editor-block-types-list__item-icon",
style: itemIconStyle
}, createElement(BlockIcon, {
icon: item.icon,
showColors: true
})), createElement("span", {
className: "block-editor-block-types-list__item-title"
}, createElement(Truncate, {
numberOfLines: 3
}, item.title)))));
}
export default memo(InserterListItem);
//# sourceMappingURL=index.js.map