UNPKG

@atlaskit/editor-plugin-show-diff

Version:

ShowDiff plugin for @atlaskit/editor-core

138 lines (137 loc) • 6.93 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.showDiffPlugin = void 0; var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _attributions = require("./pm-plugins/decorations/colorSchemes/attributions"); var _getDeletedWidgets2 = require("./pm-plugins/getDeletedWidgets"); var _getScrollableDecorations = require("./pm-plugins/getScrollableDecorations"); var _main = require("./pm-plugins/main"); var _resolveDiffContributors = require("./pm-plugins/resolveDiffContributors"); var _IndicatorBarContentComponent = require("./ui/IndicatorBar/IndicatorBarContentComponent"); var _excluded = ["stepsWithAttribution", "contributorProfiles", "showContributorTags"]; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var normalizeShowDiffParams = function normalizeShowDiffParams(params) { if (!params || !('stepsWithAttribution' in params)) { // Clear contributors to prevent leaking from attributed to unattributed diffs. return params ? _objectSpread(_objectSpread({}, params), {}, { stepAttributions: [], contributors: undefined }) : params; } var stepsWithAttribution = params.stepsWithAttribution, contributorProfiles = params.contributorProfiles, _params$showContribut = params.showContributorTags, showContributorTags = _params$showContribut === void 0 ? true : _params$showContribut, rest = (0, _objectWithoutProperties2.default)(params, _excluded); return _objectSpread(_objectSpread({}, rest), {}, { showContributorTags: showContributorTags, // Resolve at boundary to keep contributor model and attribution format internal. contributors: (0, _attributions.areAttributionColorGatesEnabled)() ? (0, _attributions.resolveContributors)((0, _resolveDiffContributors.resolveDiffContributors)(stepsWithAttribution, contributorProfiles)) : undefined, steps: stepsWithAttribution.map(function (_ref) { var step = _ref.step; return step; }), stepAttributions: stepsWithAttribution.map(function (_ref2) { var stepAttribution = _ref2.stepAttribution; return stepAttribution; }) }); }; var showDiffPlugin = exports.showDiffPlugin = function showDiffPlugin(_ref3) { var api = _ref3.api, config = _ref3.config; // Captured from view lifecycle so read-only actions access state without exposing plugin key. var editorView; var setEditorView = function setEditorView(view) { editorView = view; }; return { name: 'showDiff', actions: { getDeletedWidgets: function getDeletedWidgets(range) { return editorView ? (0, _getDeletedWidgets2.getDeletedWidgets)(editorView.state, range) : []; } }, commands: { showDiff: function showDiff(params) { return function (_ref4) { var _api$userIntent; var tr = _ref4.tr; api === null || api === void 0 || (_api$userIntent = api.userIntent) === null || _api$userIntent === void 0 || _api$userIntent.commands.setCurrentUserIntent('viewingDiff')({ tr: tr }); return tr.setMeta(_main.showDiffPluginKey, _objectSpread(_objectSpread({}, normalizeShowDiffParams(params)), {}, { action: 'SHOW_DIFF' })); }; }, hideDiff: function hideDiff(_ref5) { var _api$userIntent2; var tr = _ref5.tr; api === null || api === void 0 || (_api$userIntent2 = api.userIntent) === null || _api$userIntent2 === void 0 || _api$userIntent2.commands.setCurrentUserIntent('default')({ tr: tr }); return tr.setMeta(_main.showDiffPluginKey, { steps: [], stepAttributions: [], contributors: undefined, action: 'HIDE_DIFF' }); }, scrollToNext: function scrollToNext(_ref6) { var tr = _ref6.tr; return tr.setMeta(_main.showDiffPluginKey, { action: 'SCROLL_TO_NEXT' }); }, scrollToPrevious: function scrollToPrevious(_ref7) { var tr = _ref7.tr; return tr.setMeta(_main.showDiffPluginKey, { action: 'SCROLL_TO_PREVIOUS' }); } }, pmPlugins: function pmPlugins() { return [{ name: 'showDiffPlugin', // Contributor tags draw themselves into their own decoration widgets — plain DOM, so // no portal provider is needed here. plugin: function plugin(_ref8) { var getIntl = _ref8.getIntl; return (0, _main.createPlugin)(config, getIntl, api, setEditorView); } }]; }, contentComponent: function contentComponent() { // Rendered here sharing decoration anchor span DOM context (tags mount separately). return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_IndicatorBarContentComponent.IndicatorBarContentComponent, { api: api })); }, getSharedState: function getSharedState(editorState) { if (!editorState) { return { isDisplayingChanges: false, activeIndex: undefined, diffDescriptors: [] }; } var pluginState = _main.showDiffPluginKey.getState(editorState); var decorationCount = (0, _getScrollableDecorations.getScrollableDecorations)(pluginState === null || pluginState === void 0 ? void 0 : pluginState.decorations, editorState.doc); return { isDisplayingChanges: decorationCount.length > 0, activeIndex: pluginState === null || pluginState === void 0 ? void 0 : pluginState.activeIndex, numberOfChanges: decorationCount.length, contributorTags: pluginState === null || pluginState === void 0 ? void 0 : pluginState.contributorTags, diffDescriptors: pluginState === null || pluginState === void 0 ? void 0 : pluginState.diffDescriptors, showIndicators: pluginState === null || pluginState === void 0 ? void 0 : pluginState.showIndicators }; } }; };