@gechiui/block-editor
Version:
137 lines (116 loc) • 3.27 kB
JavaScript
;
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