@atlaskit/editor-plugin-submit-editor
Version:
Submit editor plugin for @atlaskit/editor-core
37 lines • 1.58 kB
JavaScript
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD } from '@atlaskit/editor-common/analytics';
import { submit } from '@atlaskit/editor-common/keymaps';
import { analyticsEventKey } from '@atlaskit/editor-common/utils';
import { keymap } from '@atlaskit/editor-prosemirror/keymap';
export function createPlugin(eventDispatch, api, onSave) {
if (!onSave) {
return;
}
return keymap({
[`${submit.common}`]: (state, _dispatch, editorView) => {
var _api$media, _api$media$sharedStat;
const mediaState = api === null || api === void 0 ? void 0 : (_api$media = api.media) === null || _api$media === void 0 ? void 0 : (_api$media$sharedStat = _api$media.sharedState) === null || _api$media$sharedStat === void 0 ? void 0 : _api$media$sharedStat.currentState();
if (mediaState && mediaState.waitForMediaUpload && !mediaState.allUploadsFinished) {
return true;
}
if (!editorView) {
return false;
}
eventDispatch(analyticsEventKey, analyticsPayload(state));
onSave(editorView);
return true;
}
});
}
const analyticsPayload = state => ({
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
}
});