@wordpress/block-editor
Version:
145 lines (123 loc) • 3.73 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _element = require("@wordpress/element");
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _classnames = _interopRequireDefault(require("classnames"));
var _blocks = require("@wordpress/blocks");
var _keycodes = require("@wordpress/keycodes");
var _blockIcon = _interopRequireDefault(require("../block-icon"));
var _inserterListbox = require("../inserter-listbox");
var _inserterDraggableBlocks = _interopRequireDefault(require("../inserter-draggable-blocks"));
/**
* External dependencies
*/
/**
* WordPress dependencies
*/
/**
* Internal dependencies
*/
/**
* Return true if platform is MacOS.
*
* @param {Object} _window window object by default; used for DI testing.
*
* @return {boolean} True if MacOS; false otherwise.
*/
function isAppleOS(_window = window) {
const {
platform
} = _window.navigator;
return platform.indexOf('Mac') !== -1 || ['iPad', 'iPhone'].includes(platform);
}
function InserterListItem({
className,
isFirst,
item,
onSelect,
onHover,
isDraggable,
...props
}) {
const isDragging = (0, _element.useRef)(false);
const itemIconStyle = item.icon ? {
backgroundColor: item.icon.background,
color: item.icon.foreground
} : {};
const blocks = (0, _element.useMemo)(() => {
return [(0, _blocks.createBlock)(item.name, item.initialAttributes, (0, _blocks.createBlocksFromInnerBlocksTemplate)(item.innerBlocks))];
}, [item.name, item.initialAttributes, item.initialAttributes]);
return (0, _element.createElement)(_inserterDraggableBlocks.default, {
isEnabled: isDraggable && !item.disabled,
blocks: blocks,
icon: item.icon
}, ({
draggable,
onDragStart,
onDragEnd
}) => (0, _element.createElement)("div", {
className: "block-editor-block-types-list__list-item",
draggable: draggable,
onDragStart: event => {
isDragging.current = true;
if (onDragStart) {
onHover(null);
onDragStart(event);
}
},
onDragEnd: event => {
isDragging.current = false;
if (onDragEnd) {
onDragEnd(event);
}
}
}, (0, _element.createElement)(_inserterListbox.InserterListboxItem, (0, _extends2.default)({
isFirst: isFirst,
className: (0, _classnames.default)('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 === _keycodes.ENTER) {
event.preventDefault();
onSelect(item, isAppleOS() ? event.metaKey : event.ctrlKey);
onHover(null);
}
},
onFocus: () => {
if (isDragging.current) {
return;
}
onHover(item);
},
onMouseEnter: () => {
if (isDragging.current) {
return;
}
onHover(item);
},
onMouseLeave: () => onHover(null),
onBlur: () => onHover(null)
}, props), (0, _element.createElement)("span", {
className: "block-editor-block-types-list__item-icon",
style: itemIconStyle
}, (0, _element.createElement)(_blockIcon.default, {
icon: item.icon,
showColors: true
})), (0, _element.createElement)("span", {
className: "block-editor-block-types-list__item-title"
}, item.title))));
}
var _default = (0, _element.memo)(InserterListItem);
exports.default = _default;
//# sourceMappingURL=index.js.map