UNPKG

@atlaskit/editor-plugin-save-on-enter

Version:

Save-on-enter plugin for @atlaskit/editor-core

67 lines (66 loc) 2.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.saveOnEnterPlugin = exports.createPlugin = void 0; var _analytics = require("@atlaskit/editor-common/analytics"); var _utils = require("@atlaskit/editor-common/utils"); var _keymap = require("@atlaskit/editor-prosemirror/keymap"); var createPlugin = exports.createPlugin = function createPlugin(eventDispatch, onSave) { if (!onSave) { return; } return (0, _keymap.keymap)({ Enter: function Enter(state, _dispatch, editorView) { if (editorView && canSaveOnEnter(editorView)) { eventDispatch(_utils.analyticsEventKey, analyticsPayload(state)); onSave(editorView); return true; } return false; } }); }; function canSaveOnEnter(editorView) { var _ref = editorView.state.selection, $cursor = _ref.$cursor; var _editorView$state$sch = editorView.state.schema.nodes, decisionItem = _editorView$state$sch.decisionItem, paragraph = _editorView$state$sch.paragraph, taskItem = _editorView$state$sch.taskItem; return !$cursor || $cursor.parent.type === paragraph && $cursor.depth === 1 || $cursor.parent.type === decisionItem && !isEmptyAtCursor($cursor) || $cursor.parent.type === taskItem && !isEmptyAtCursor($cursor); } function isEmptyAtCursor($cursor) { var content = $cursor.parent.content; return !(content && content.size); } var analyticsPayload = function analyticsPayload(state) { return { payload: { action: _analytics.ACTION.STOPPED, actionSubject: _analytics.ACTION_SUBJECT.EDITOR, actionSubjectId: _analytics.ACTION_SUBJECT_ID.SAVE, attributes: { inputMethod: _analytics.INPUT_METHOD.SHORTCUT, documentSize: state.doc.nodeSize // TODO: ED-26961 - add individual node counts - tables, headings, lists, mediaSingles, mediaGroups, mediaCards, panels, extensions, decisions, action, codeBlocks }, eventType: _analytics.EVENT_TYPE.UI } }; }; var saveOnEnterPlugin = exports.saveOnEnterPlugin = function saveOnEnterPlugin(_ref2) { var onSave = _ref2.config; return { name: 'saveOnEnter', pmPlugins: function pmPlugins() { return [{ name: 'saveOnEnter', plugin: function plugin(_ref3) { var dispatch = _ref3.dispatch; return createPlugin(dispatch, onSave); } }]; } }; };