UNPKG

@lyra/form-builder

Version:
46 lines (39 loc) 1.48 kB
'use strict'; 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; } }; }