@atlaskit/editor-plugin-paste
Version:
Paste plugin for @atlaskit/editor-core
30 lines • 1.16 kB
JavaScript
import { pluginFactory } from '@atlaskit/editor-common/utils';
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
import { PluginKey } from '@atlaskit/editor-prosemirror/state';
import { reducer } from './reducer';
export const pluginKey = new PluginKey('pastePlugin');
const dest = pluginFactory(pluginKey, reducer, {
mapping: (tr, pluginState) => {
if (tr.docChanged) {
let atLeastOnePositionChanged = false;
const positionsMappedThroughChanges = Object.entries(pluginState.pastedMacroPositions).reduce((acc, [key, position]) => {
const mappedPosition = tr.mapping.map(position);
if (position !== mappedPosition) {
atLeastOnePositionChanged = true;
}
acc[key] = tr.mapping.map(position);
return acc;
}, {});
if (atLeastOnePositionChanged) {
return {
...pluginState,
pastedMacroPositions: positionsMappedThroughChanges
};
}
}
return pluginState;
}
});
export const createPluginState = dest.createPluginState;
export const createCommand = dest.createCommand;
export const getPluginState = dest.getPluginState;