@wordpress/block-library
Version:
Block library for the WordPress editor.
67 lines (57 loc) • 2.25 kB
JavaScript
/**
* WordPress dependencies
*/
import { createBlock, getDefaultBlockName, cloneBlock } from '@wordpress/blocks';
import { useRef } from '@wordpress/element';
import { useSelect, useDispatch } from '@wordpress/data';
import { store as blockEditorStore } from '@wordpress/block-editor';
/**
* Internal dependencies
*/
import useOutdentListItem from './use-outdent-list-item';
export default function useEnter(props, preventDefault) {
const {
replaceBlocks,
selectionChange
} = useDispatch(blockEditorStore);
const {
getBlock,
getBlockRootClientId,
getBlockIndex
} = useSelect(blockEditorStore);
const propsRef = useRef(props);
propsRef.current = props;
const [canOutdent, outdentListItem] = useOutdentListItem(propsRef.current.clientId);
return {
onEnter() {
var _topParentListBlock$i;
const {
content,
clientId
} = propsRef.current;
if (content.length) {
return;
}
preventDefault.current = true;
if (canOutdent) {
outdentListItem();
return;
} // Here we are in top level list so we need to split.
const topParentListBlock = getBlock(getBlockRootClientId(clientId));
const blockIndex = getBlockIndex(clientId);
const head = cloneBlock({ ...topParentListBlock,
innerBlocks: topParentListBlock.innerBlocks.slice(0, blockIndex)
});
const middle = createBlock(getDefaultBlockName()); // Last list item might contain a `list` block innerBlock
// In that case append remaining innerBlocks blocks.
const after = [...(((_topParentListBlock$i = topParentListBlock.innerBlocks[blockIndex].innerBlocks[0]) === null || _topParentListBlock$i === void 0 ? void 0 : _topParentListBlock$i.innerBlocks) || []), ...topParentListBlock.innerBlocks.slice(blockIndex + 1)];
const tail = after.length ? [cloneBlock({ ...topParentListBlock,
innerBlocks: after
})] : [];
replaceBlocks(topParentListBlock.clientId, [head, middle, ...tail], 1); // We manually change the selection here because we are replacing
// a different block than the selected one.
selectionChange(middle.clientId);
}
};
}
//# sourceMappingURL=use-enter.native.js.map