@atlaskit/editor-plugin-selection-extension
Version:
editor-plugin-selection-extension plugin for @atlaskit/editor-core
52 lines (50 loc) • 2.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.replaceWithAdf = void 0;
var _model = require("@atlaskit/editor-prosemirror/model");
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
var _types = require("../../types");
var _main = require("../main");
var replaceWithAdf = exports.replaceWithAdf = function replaceWithAdf(nodeAdf, api) {
return function (state, dispatch) {
var _selectionExtensionPl;
var tr = state.tr,
schema = state.schema;
// we need to track if any changes were made since user click the toolbar button
var docChangedAfterClick = ((_selectionExtensionPl = _main.selectionExtensionPluginKey.getState(state)) === null || _selectionExtensionPl === void 0 ? void 0 : _selectionExtensionPl.docChangedAfterClick) || false;
tr.setMeta(_main.selectionExtensionPluginKey, {
type: _types.SelectionExtensionActionTypes.START_TRACK_CHANGES,
startTrackChanges: false // Reset the flag when starting to track changes
});
if (docChangedAfterClick) {
dispatch(tr);
return {
status: 'document-changed'
};
}
try {
var _selectionExtensionPl2, _selectionExtensionPl3, _api$editorViewModeEf;
var selectedNode = (_selectionExtensionPl2 = _main.selectionExtensionPluginKey.getState(state)) === null || _selectionExtensionPl2 === void 0 ? void 0 : _selectionExtensionPl2.selectedNode;
var nodePos = (_selectionExtensionPl3 = _main.selectionExtensionPluginKey.getState(state)) === null || _selectionExtensionPl3 === void 0 ? void 0 : _selectionExtensionPl3.nodePos;
if (!selectedNode || nodePos === undefined) {
throw new Error('No selected node or node position found');
}
var endPos = selectedNode.type.name === 'doc' && (0, _platformFeatureFlags.fg)('platform_editor_selection_extension_improvement') ? nodePos + selectedNode.content.size : nodePos + selectedNode.nodeSize;
var modifiedNode = _model.Node.fromJSON(schema, nodeAdf);
modifiedNode.check();
var updatedTr = tr.replaceWith(nodePos, endPos, modifiedNode).scrollIntoView();
// Allow this transaction in view mode and apply changes
dispatch((api === null || api === void 0 || (_api$editorViewModeEf = api.editorViewModeEffects) === null || _api$editorViewModeEf === void 0 ? void 0 : _api$editorViewModeEf.actions.allowViewModeTransaction(updatedTr)) || updatedTr);
return {
status: 'success'
};
} catch (_unused) {
dispatch(tr);
return {
status: 'failed-to-replace'
};
}
};
};