@atlaskit/editor-plugin-code-block
Version:
Code block plugin for @atlaskit/editor-core
74 lines • 3.92 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/defineProperty";
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
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) { _defineProperty(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; }
import { ACTIONS } from '../../pm-plugins/actions';
export var mapPendingFormats = function mapPendingFormats(pendingFormats, tr, newState) {
var entries = Object.entries(pendingFormats);
if (entries.length === 0) {
return pendingFormats;
}
var nextPendingFormats = pendingFormats;
entries.forEach(function (_ref) {
var _ref2 = _slicedToArray(_ref, 2),
localId = _ref2[0],
pendingFormat = _ref2[1];
var _tr$mapping$mapResult = tr.mapping.mapResult(pendingFormat.pos, 1),
deleted = _tr$mapping$mapResult.deleted,
pos = _tr$mapping$mapResult.pos;
var codeBlockNode = newState.doc.nodeAt(pos);
var shouldRemovePendingFormat = deleted || (codeBlockNode === null || codeBlockNode === void 0 ? void 0 : codeBlockNode.type) !== newState.schema.nodes.codeBlock || (codeBlockNode === null || codeBlockNode === void 0 ? void 0 : codeBlockNode.attrs.localId) !== localId;
var shouldUpdatePendingFormat = pos !== pendingFormat.pos;
if (shouldRemovePendingFormat || shouldUpdatePendingFormat) {
if (nextPendingFormats === pendingFormats) {
nextPendingFormats = _objectSpread({}, pendingFormats);
}
}
if (shouldRemovePendingFormat) {
delete nextPendingFormats[localId];
return;
}
if (shouldUpdatePendingFormat) {
nextPendingFormats[localId] = _objectSpread(_objectSpread({}, pendingFormat), {}, {
pos: pos
});
}
});
return nextPendingFormats;
};
function removeRecordEntry(record, key) {
var nextRecord = _objectSpread({}, record);
delete nextRecord[key];
return nextRecord;
}
export var applyFormatCodeMeta = function applyFormatCodeMeta(pluginState, meta) {
switch (meta === null || meta === void 0 ? void 0 : meta.type) {
case ACTIONS.START_FORMAT_CODE:
return _objectSpread(_objectSpread({}, pluginState), {}, {
pendingFormats: _objectSpread(_objectSpread({}, pluginState.pendingFormats), {}, _defineProperty({}, meta.data.localId, {
languageSource: meta.data.languageSource,
pos: meta.data.pos,
requestId: meta.data.requestId
}))
});
case ACTIONS.RESOLVE_FORMAT_CODE:
{
var pendingFormats = removeRecordEntry(pluginState.pendingFormats, meta.data.localId);
var formatCodeErrors = removeRecordEntry(pluginState.formatCodeErrors, meta.data.localId);
return _objectSpread(_objectSpread({}, pluginState), {}, {
formatCodeErrors: meta.data.outcome === 'failed' ? _objectSpread(_objectSpread({}, formatCodeErrors), {}, _defineProperty({}, meta.data.localId, {
errorType: meta.data.errorType,
localId: meta.data.localId,
languageSource: meta.data.languageSource
})) : formatCodeErrors,
pendingFormats: pendingFormats
});
}
case ACTIONS.CLEAR_FORMAT_CODE_ERROR:
return _objectSpread(_objectSpread({}, pluginState), {}, {
formatCodeErrors: removeRecordEntry(pluginState.formatCodeErrors, meta.data.localId)
});
default:
return pluginState;
}
};