@atlaskit/editor-plugin-save-on-enter
Version:
Save-on-enter plugin for @atlaskit/editor-core
67 lines (66 loc) • 2.39 kB
JavaScript
;
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);
}
}];
}
};
};