UNPKG

@gechiui/block-editor

Version:
137 lines (116 loc) 3.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useEnter = useEnter; var _element = require("@gechiui/element"); var _compose = require("@gechiui/compose"); var _keycodes = require("@gechiui/keycodes"); var _richText = require("@gechiui/rich-text"); var _blocks = require("@gechiui/blocks"); var _data = require("@gechiui/data"); var _store = require("../../store"); var _splitValue = require("./split-value"); /** * GeChiUI dependencies */ /** * GeChiUI dependencies */ /** * Internal dependencies */ function useEnter(props) { const { __unstableMarkAutomaticChange } = (0, _data.useDispatch)(_store.store); const propsRef = (0, _element.useRef)(props); propsRef.current = props; return (0, _compose.useRefEffect)(element => { function onKeyDown(event) { if (event.defaultPrevented) { return; } const { removeEditorOnlyFormats, value, onReplace, onSplit, onSplitMiddle, multilineTag, onChange, disableLineBreaks, onSplitAtEnd } = propsRef.current; if (event.keyCode !== _keycodes.ENTER) { return; } event.preventDefault(); const _value = { ...value }; _value.formats = removeEditorOnlyFormats(value); const canSplit = onReplace && onSplit; if (onReplace) { const transforms = (0, _blocks.getBlockTransforms)('from').filter(_ref => { let { type } = _ref; return type === 'enter'; }); const transformation = (0, _blocks.findTransform)(transforms, item => { return item.regExp.test(_value.text); }); if (transformation) { onReplace([transformation.transform({ content: _value.text })]); __unstableMarkAutomaticChange(); } } if (multilineTag) { if (event.shiftKey) { if (!disableLineBreaks) { onChange((0, _richText.insert)(_value, '\n')); } } else if (canSplit && (0, _richText.__unstableIsEmptyLine)(_value)) { (0, _splitValue.splitValue)({ value: _value, onReplace, onSplit, onSplitMiddle, multilineTag }); } else { onChange((0, _richText.__unstableInsertLineSeparator)(_value)); } } else { const { text, start, end } = _value; const canSplitAtEnd = onSplitAtEnd && start === end && end === text.length; if (event.shiftKey || !canSplit && !canSplitAtEnd) { if (!disableLineBreaks) { onChange((0, _richText.insert)(_value, '\n')); } } else if (!canSplit && canSplitAtEnd) { onSplitAtEnd(); } else if (canSplit) { (0, _splitValue.splitValue)({ value: _value, onReplace, onSplit, onSplitMiddle, multilineTag }); } } } element.addEventListener('keydown', onKeyDown); return () => { element.removeEventListener('keydown', onKeyDown); }; }, []); } //# sourceMappingURL=use-enter.js.map