@lyra/form-builder
Version:
Lyra form builder
49 lines (43 loc) • 1.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = ListItemOnTabKeyPlugin;
var _slate = require('slate');
// This plugin handles tab key when focus is on list element, and changes the level on it
/*:: type Options = {}*/
function ListItemOnTabKeyPlugin(options /*: Options*/ = {}) {
return {
// eslint-disable-next-line complexity
onKeyDown(event /*: SyntheticKeyboardEvent<*>*/, change /*: Change*/) {
const key = event.key,
shiftKey = event.shiftKey,
altKey = event.altKey;
if (key !== 'Tab') {
return undefined;
}
if (altKey) {
return undefined;
}
const value = change.value;
const listBlocks = value.blocks.filter(block => block.data.get('listItem'));
if (listBlocks.size === 0) {
return undefined;
}
event.preventDefault();
listBlocks.forEach(listNode => {
const listItemData = listNode.data.toObject();
listItemData.level = listItemData.level || 1;
if (shiftKey) {
listItemData.level--;
listItemData.level = listItemData.level || 1; // Min level 1
} else {
listItemData.level++;
listItemData.level = listItemData.level < 11 ? listItemData.level : 10; // Max level 10
}
change.setNodeByKey(listNode.key, { data: listItemData });
});
return change;
}
};
}