UNPKG

marshall-y-slate

Version:
73 lines 7.12 kB
import * as Y from 'yjs'; import { YjsEditor } from './yjs-editor'; import { absolutePositionToRelativePosition, relativePositionToAbsolutePosition } from '../cursor/utils'; import { Editor, Transforms } from 'slate'; export function withUndoManager(editor, options = { trackedOrigins: [], captureTimeout: 300, deleteFilter: () => true }) { const e = editor; const { onChange } = e; let previousSelection; const undoManager = new Y.UndoManager(e.sharedType, Object.assign(Object.assign({}, options), { trackedOrigins: new Set([editor].concat(options.trackedOrigins)) })); e.onChange = () => { onChange(); if (!YjsEditor.isRemote(e)) { try { const lastOperation = e.operations[e.operations.length - 1]; if (lastOperation && lastOperation.type === 'set_selection' && lastOperation.newProperties) { const { anchor, focus } = lastOperation.newProperties; const anchorRelative = anchor && absolutePositionToRelativePosition(e.sharedType, anchor); const focusRelative = focus && absolutePositionToRelativePosition(e.sharedType, focus); if (anchorRelative && focusRelative) { previousSelection = { anchorRelative, focusRelative }; } } } catch (error) { const e = editor; if (e.onError) { e.onError({ code: 10004, name: 'get previous relative', nativeError: error }); } } } }; undoManager.on('stack-item-added', (event) => { if (event.changedParentTypes.has(e.sharedType) && previousSelection) { event.stackItem.meta.set(e, previousSelection); previousSelection = null; } }); undoManager.on('stack-item-popped', (event) => { const selection = event.stackItem.meta.get(e); if (selection) { const anchor = relativePositionToAbsolutePosition(e.sharedType, selection.anchorRelative); const focus = relativePositionToAbsolutePosition(e.sharedType, selection.focusRelative); if ((anchor === null || anchor === void 0 ? void 0 : anchor.path) && (focus === null || focus === void 0 ? void 0 : focus.path) && Editor.hasPath(e, anchor.path) && Editor.hasPath(e, focus.path)) { Transforms.setSelection(e, { anchor: anchor, focus: focus }); } } }); e.undoManager = undoManager; e.undo = () => { YjsEditor.asUndo(e, () => { e.undoManager.undo(); }); Promise.resolve().then(() => Editor.normalize(editor)); }; e.redo = () => { YjsEditor.asUndo(e, () => { e.undoManager.redo(); }); Promise.resolve().then(() => Editor.normalize(editor)); }; return e; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5kby1tYW5hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2luL3VuZG8tbWFuYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO0FBQ3pCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekcsT0FBTyxFQUF5QixNQUFNLEVBQVEsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBUXhFLE1BQU0sVUFBVSxlQUFlLENBQzdCLE1BQVMsRUFDVCxPQUFPLEdBQUc7SUFDUixjQUFjLEVBQUUsRUFBRTtJQUNsQixjQUFjLEVBQUUsR0FBRztJQUNuQixZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtDQUN6QjtJQUVELE1BQU0sQ0FBQyxHQUFHLE1BQTJCLENBQUM7SUFDdEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2QixJQUFJLGlCQUFtRyxDQUFDO0lBQ3hHLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxrQ0FDN0MsT0FBTyxLQUNWLGNBQWMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsSUFDaEUsQ0FBQztJQUVILENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFO1FBQ2hCLFFBQVEsRUFBRSxDQUFDO1FBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDMUIsSUFBSTtnQkFDRixNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FB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