UNPKG

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

Version:

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

61 lines 2.21 kB
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD } from '@atlaskit/editor-common/analytics'; import { analyticsEventKey } from '@atlaskit/editor-common/utils'; import { keymap } from '@atlaskit/editor-prosemirror/keymap'; export var createPlugin = function createPlugin(eventDispatch, onSave) { if (!onSave) { return; } return keymap({ Enter: function Enter(state, _dispatch, editorView) { if (editorView && canSaveOnEnter(editorView)) { eventDispatch(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: ACTION.STOPPED, actionSubject: ACTION_SUBJECT.EDITOR, actionSubjectId: ACTION_SUBJECT_ID.SAVE, attributes: { inputMethod: 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: EVENT_TYPE.UI } }; }; export var 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); } }]; } }; };