@atlaskit/editor-core
Version:
A package contains Atlassian editor core functionality
60 lines • 2.47 kB
JavaScript
"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