@lyra/form-builder
Version:
Lyra form builder
46 lines (39 loc) • 1.48 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = TextBlockOnEnterKeyPlugin;
var _slate = require('slate');
// This plugin inserts an empty default block after enter is pressed
// within a block which is not a default block type.
// I.e: when enter is pressed after a title, start a new empty normal block below
/*:: type Options = {
defaultBlock?: Block
}*/
function TextBlockOnEnterKeyPlugin(options /*: Options*/ = {}) {
const defaultBlock = options.defaultBlock;
if (!defaultBlock) {
throw new Error("Missing required option 'defaultBlock'");
}
return {
onKeyDown(event /*: SyntheticKeyboardEvent<*>*/, change /*: Change*/) {
if (event.key !== 'Enter') {
return undefined;
}
const value = change.value;
const isTextBlock = value.blocks.some((block /*: Block*/) => block.data.get('style'));
const isDefaultBlock = value.blocks.some((block /*: Block*/) => block.data.get('style') === defaultBlock.data.style);
const isListNode = value.blocks.some((block /*: Block*/) => block.data.get('listItem'));
const startBlock = value.startBlock;
if (isListNode || !isTextBlock || value.selection.isExpanded || !value.selection.hasEndAtEndOf(startBlock)) {
return undefined;
}
if (!isDefaultBlock) {
event.preventDefault();
change.insertBlock(defaultBlock);
return change;
}
return undefined;
}
};
}