UNPKG

@atlaskit/editor-core

Version:

A package contains Atlassian editor core functionality

60 lines 2.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var prosemirror_1 = require("../../prosemirror"); var uuid_1 = require("../../plugins/tasks-and-decisions/uuid"); var getListTypes = function (listType, schema) { var _a = schema.nodes, decisionList = _a.decisionList, decisionItem = _a.decisionItem, taskList = _a.taskList, taskItem = _a.taskItem; if (listType === 'taskList') { return { list: taskList, item: taskItem, }; } return { list: decisionList, item: decisionItem, }; }; var isSelectionInAList = function (listType, selection) { var fromNode = selection.$from.node(selection.$from.depth - 2); var endNode = selection.$to.node(selection.$to.depth - 2); return fromNode && fromNode.type.name === listType && endNode && endNode.type.name !== listType; }; exports.changeToTaskDecision = function (view, listType) { var state = view.state; var selection = state.selection, schema = state.schema; var _a = getListTypes(listType, schema), list = _a.list, item = _a.item; var tr = state.tr; if (!isSelectionInAList(listType, selection)) { // Not a list - convert to one. var created = exports.createListAtSelection(tr, list, item, schema, state); view.dispatch(tr); return created; } return false; }; exports.createListAtSelection = function (tr, list, item, schema, state) { var _a = state.selection, $from = _a.$from, $to = _a.$to; if ($from.parent !== $to.parent) { // ignore selections across multiple nodes return false; } var _b = schema.nodes, decisionList = _b.decisionList, taskList = _b.taskList; var isAlreadyDecisionTask = $from.parent.type === decisionList || $from.parent.type === taskList; if (isAlreadyDecisionTask) { return false; } var where = $from.before($from.depth); var content = $from.node($from.depth).content; tr .delete(where, $from.end($from.depth)) .replaceSelectionWith(list.create({ localId: uuid_1.default.generate() }, [item.create({}, content)])); // Adjust selection into new item, if not there (e.g. in full page editor) var newSelection = tr.selection; if (newSelection.$from.parent.type !== item) { tr.setSelection(prosemirror_1.TextSelection.create(tr.doc, newSelection.$from.pos - 2)); } return true; }; //# sourceMappingURL=commands.js.map