@atlaskit/editor-plugin-track-changes
Version:
ShowDiff plugin for @atlaskit/editor-core
74 lines • 3.18 kB
JavaScript
import React from 'react';
import { keymapPlugin } from './pm-plugins/keymaps';
import { createTrackChangesPlugin, trackChangesPluginKey } from './pm-plugins/main';
import { TOGGLE_TRACK_CHANGES_ACTION as ACTION } from './pm-plugins/types';
import { getToolbarComponents } from './ui/toolbar-components';
import { TrackChangesToolbarButton } from './ui/TrackChangesToolbarButton';
export const trackChangesPlugin = ({
api,
config: options
}) => {
const isToolbarAIFCEnabled = Boolean(api === null || api === void 0 ? void 0 : api.toolbar);
const primaryToolbarComponent = () => {
return /*#__PURE__*/React.createElement(TrackChangesToolbarButton, {
api: api
});
};
if ((options === null || options === void 0 ? void 0 : options.showOnToolbar) === true) {
if (isToolbarAIFCEnabled) {
var _api$toolbar;
api === null || api === void 0 ? void 0 : (_api$toolbar = api.toolbar) === null || _api$toolbar === void 0 ? void 0 : _api$toolbar.actions.registerComponents(getToolbarComponents(api, options));
} else {
var _api$primaryToolbar, _api$primaryToolbar$a;
api === null || api === void 0 ? void 0 : (_api$primaryToolbar = api.primaryToolbar) === null || _api$primaryToolbar === void 0 ? void 0 : (_api$primaryToolbar$a = _api$primaryToolbar.actions) === null || _api$primaryToolbar$a === void 0 ? void 0 : _api$primaryToolbar$a.registerComponent({
name: 'trackChanges',
component: primaryToolbarComponent
});
}
}
return {
name: 'trackChanges',
pmPlugins() {
return [{
name: 'trackChangesKeyMap',
plugin: () => keymapPlugin(api)
}, {
name: 'trackChangesPlugin',
plugin: () => createTrackChangesPlugin(api)
}];
},
commands: {
toggleChanges: ({
tr
}) => {
return tr.setMeta(trackChangesPluginKey, {
action: ACTION.TOGGLE_TRACK_CHANGES
});
},
resetBaseline: ({
tr
}) => {
var _api$trackChanges, _api$trackChanges$sha;
if (!(api !== null && api !== void 0 && (_api$trackChanges = api.trackChanges) !== null && _api$trackChanges !== void 0 && (_api$trackChanges$sha = _api$trackChanges.sharedState.currentState()) !== null && _api$trackChanges$sha !== void 0 && _api$trackChanges$sha.isShowDiffAvailable)) {
return null;
}
return tr.setMeta(trackChangesPluginKey, {
action: ACTION.RESET_BASELINE
});
}
},
getSharedState: editorState => {
var _trackChangesPluginKe, _trackChangesPluginKe2;
if (!editorState) {
return {
isDisplayingChanges: false,
isShowDiffAvailable: false
};
}
return {
isDisplayingChanges: Boolean((_trackChangesPluginKe = trackChangesPluginKey.getState(editorState)) === null || _trackChangesPluginKe === void 0 ? void 0 : _trackChangesPluginKe.shouldChangesBeDisplayed),
isShowDiffAvailable: Boolean((_trackChangesPluginKe2 = trackChangesPluginKey.getState(editorState)) === null || _trackChangesPluginKe2 === void 0 ? void 0 : _trackChangesPluginKe2.isShowDiffAvailable)
};
}
};
};