UNPKG

@atlaskit/editor-plugin-tasks-and-decisions

Version:

Tasks and decisions plugin for @atlaskit/editor-core

151 lines (146 loc) 8.43 kB
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; }; }; };