@atlaskit/editor-plugin-list
Version:
List plugin for @atlaskit/editor-core
79 lines (78 loc) • 3.17 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.joinListItemForward = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _analytics = require("@atlaskit/editor-common/analytics");
var _utils = require("@atlaskit/editor-common/utils");
var _state = require("@atlaskit/editor-prosemirror/state");
var _utils2 = require("@atlaskit/editor-prosemirror/utils");
var _fg = require("@atlaskit/platform-feature-flags/fg");
var _joinListItemsForward = require("../actions/join-list-items-forward");
var joinListItemForward = exports.joinListItemForward = function joinListItemForward(editorAnalyticsAPI) {
return function (state, dispatch) {
var tr = state.tr,
$head = state.selection.$head;
var walkNode = (0, _utils.walkNextNode)($head);
if (!(0, _utils.isEmptySelectionAtEnd)(state)) {
return false;
}
if ((0, _fg.fg)('platform_editor_blocks_patch_7')) {
var interveningSyncBlockPos;
// walkNextNode can skip leaf nodes because they have no resolvable content position.
state.doc.nodesBetween($head.pos, walkNode.$pos.pos, function (node, pos) {
if (interveningSyncBlockPos === undefined && node.type.name === 'syncBlock') {
interveningSyncBlockPos = pos;
}
return interveningSyncBlockPos === undefined;
});
if (interveningSyncBlockPos !== undefined) {
if (dispatch) {
var selection = _state.NodeSelection.create(state.doc, interveningSyncBlockPos);
dispatch(tr.setSelection(selection).scrollIntoView());
}
return true;
}
}
var scenarios = (0, _joinListItemsForward.calcJoinListScenario)(walkNode, $head);
if (!scenarios) {
return false;
}
var _scenarios = (0, _slicedToArray2.default)(scenarios, 2),
scenario = _scenarios[0],
action = _scenarios[1];
var result = action({
tr: tr,
$next: walkNode.$pos,
$head: $head
});
if (!result) {
return false;
}
var _state$schema$nodes = state.schema.nodes,
bulletList = _state$schema$nodes.bulletList,
orderedList = _state$schema$nodes.orderedList;
var listParent = (0, _utils2.findParentNodeOfType)([bulletList, orderedList])(tr.selection);
var actionSubjectId = _analytics.ACTION_SUBJECT_ID.FORMAT_LIST_BULLET;
if (listParent && listParent.node.type === orderedList) {
actionSubjectId = _analytics.ACTION_SUBJECT_ID.FORMAT_LIST_NUMBER;
}
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({
action: _analytics.ACTION.LIST_ITEM_JOINED,
actionSubject: _analytics.ACTION_SUBJECT.LIST,
actionSubjectId: actionSubjectId,
eventType: _analytics.EVENT_TYPE.TRACK,
attributes: {
inputMethod: _analytics.INPUT_METHOD.KEYBOARD,
direction: _analytics.DELETE_DIRECTION.FORWARD,
scenario: scenario
}
})(tr);
if (dispatch) {
dispatch(tr);
}
return true;
};
};