@atlaskit/editor-plugin-tasks-and-decisions
Version:
Tasks and decisions plugin for @atlaskit/editor-core
151 lines (146 loc) • 8.43 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/defineProperty";
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
import { uuid } from '@atlaskit/adf-schema';
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD } from '@atlaskit/editor-common/analytics';
import { getCommonListAnalyticsAttributes } from '@atlaskit/editor-common/lists';
import { transformBetweenListTypes, transformToTaskList, transformTaskListToBlockNodes, isBulletOrOrderedList, isTaskList, getFormattedNode } from '@atlaskit/editor-common/transforms';
import { TextSelection } from '@atlaskit/editor-prosemirror/state';
import { safeInsert } from '@atlaskit/editor-prosemirror/utils';
import { fg } from '@atlaskit/platform-feature-flags';
export var toggleTaskList = function toggleTaskList(editorAnalyticsAPI) {
return function () {
var targetType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'paragraph';
return function (_ref) {
var tr = _ref.tr;
var inputMethod = INPUT_METHOD.TOOLBAR;
var nodes = tr.doc.type.schema.nodes;
var selection = tr.selection;
// Handle empty selection: insert a new task item
var $from = selection.$from;
var isEmpty = $from.parent.content.size === 0;
if (isEmpty && nodes.taskList && nodes.taskItem) {
// Create an empty task list with one empty task item
var listLocalId = uuid.generate();
var itemLocalId = uuid.generate();
var emptyList = nodes.taskList.create({
localId: listLocalId
}, [nodes.taskItem.create({
localId: itemLocalId
})]);
// Insert the empty list at the current selection
var insertTr = safeInsert(emptyList)(tr);
if (insertTr !== tr) {
if (fg('platform_editor_toolbar_task_list_analytics')) {
// Fire INSERT analytics event when creating a new task list
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({
action: ACTION.INSERTED,
actionSubject: ACTION_SUBJECT.DOCUMENT,
actionSubjectId: ACTION_SUBJECT_ID.ACTION,
eventType: EVENT_TYPE.TRACK,
attributes: {
inputMethod: inputMethod,
listLocalId: listLocalId,
listSize: 1,
localId: itemLocalId,
position: 0
}
})(insertTr);
}
// Set cursor inside the new task item
var insertPos = insertTr.selection.$from.pos;
return insertTr.setSelection(TextSelection.near(insertTr.doc.resolve(insertPos)));
}
}
var _getFormattedNode = getFormattedNode(tr),
node = _getFormattedNode.node,
pos = _getFormattedNode.pos;
if (node !== null && pos !== null) {
if (isBulletOrOrderedList(node.type)) {
var transformedFrom = node.type.name === 'bulletList' ? ACTION_SUBJECT_ID.FORMAT_LIST_BULLET : ACTION_SUBJECT_ID.FORMAT_LIST_NUMBER;
var context = {
sourceNode: node,
sourcePos: pos,
targetNodeType: nodes.taskList,
tr: tr
};
var resultTr = transformBetweenListTypes(context);
if (fg('platform_editor_toolbar_task_list_analytics')) {
// Fire CONVERTED analytics event when transforming a list to task list
if (resultTr && resultTr.docChanged) {
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({
action: ACTION.CONVERTED,
actionSubject: ACTION_SUBJECT.LIST,
actionSubjectId: ACTION_SUBJECT_ID.FORMAT_LIST_BULLET,
eventType: EVENT_TYPE.TRACK,
attributes: _objectSpread(_objectSpread({}, getCommonListAnalyticsAttributes(tr)), {}, {
transformedFrom: transformedFrom,
inputMethod: inputMethod
})
})(resultTr);
}
}
return resultTr;
}
if (isTaskList(node.type)) {
var _context = {
sourceNode: node,
sourcePos: pos,
targetNodeType: nodes[targetType],
tr: tr
};
var _resultTr = targetType === 'paragraph' ? transformTaskListToBlockNodes(_context) : transformBetweenListTypes(_context);
// Fire CONVERTED analytics event when transforming from task list
if (_resultTr && _resultTr.docChanged && targetType !== 'paragraph') {
var _transformedFrom = ACTION_SUBJECT_ID.FORMAT_LIST_BULLET;
var targetListType = targetType === 'bulletList' ? ACTION_SUBJECT_ID.FORMAT_LIST_BULLET : ACTION_SUBJECT_ID.FORMAT_LIST_NUMBER;
if (fg('platform_editor_toolbar_task_list_analytics')) {
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({
action: ACTION.CONVERTED,
actionSubject: ACTION_SUBJECT.LIST,
actionSubjectId: targetListType,
eventType: EVENT_TYPE.TRACK,
attributes: _objectSpread(_objectSpread({}, getCommonListAnalyticsAttributes(tr)), {}, {
transformedFrom: _transformedFrom,
inputMethod: inputMethod
})
})(_resultTr);
}
}
return _resultTr;
}
var _$from = selection.$from,
$to = selection.$to;
var range = _$from.blockRange($to);
if (range) {
var _resultTr2 = transformToTaskList(tr, range, nodes.taskList, undefined, nodes);
// Fire INSERT analytics event when creating task list from selection
if (_resultTr2 && _resultTr2.docChanged) {
var _listNode$attrs$local, _listNode$attrs, _listNode$childCount, _listNode$firstChild$, _listNode$firstChild;
var listNode = _resultTr2.doc.nodeAt(range.start);
var listLocalIdFromNode = (_listNode$attrs$local = listNode === null || listNode === void 0 || (_listNode$attrs = listNode.attrs) === null || _listNode$attrs === void 0 ? void 0 : _listNode$attrs.localId) !== null && _listNode$attrs$local !== void 0 ? _listNode$attrs$local : uuid.generate();
var listSizeFromNode = (_listNode$childCount = listNode === null || listNode === void 0 ? void 0 : listNode.childCount) !== null && _listNode$childCount !== void 0 ? _listNode$childCount : 0;
var localIdFromNode = (_listNode$firstChild$ = listNode === null || listNode === void 0 || (_listNode$firstChild = listNode.firstChild) === null || _listNode$firstChild === void 0 || (_listNode$firstChild = _listNode$firstChild.attrs) === null || _listNode$firstChild === void 0 ? void 0 : _listNode$firstChild.localId) !== null && _listNode$firstChild$ !== void 0 ? _listNode$firstChild$ : uuid.generate();
if (fg('platform_editor_toolbar_task_list_analytics')) {
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({
action: ACTION.INSERTED,
actionSubject: ACTION_SUBJECT.DOCUMENT,
actionSubjectId: ACTION_SUBJECT_ID.ACTION,
eventType: EVENT_TYPE.TRACK,
attributes: {
inputMethod: inputMethod,
listLocalId: listLocalIdFromNode,
listSize: listSizeFromNode,
localId: localIdFromNode,
position: 0
}
})(_resultTr2);
}
}
return _resultTr2;
}
}
return tr;
};
};
};