diff --git a/packages/core/src/CommandManager.ts b/packages/core/src/CommandManager.ts index c41dcb1f..b0e8ad7e 100644 --- a/packages/core/src/CommandManager.ts +++ b/packages/core/src/CommandManager.ts @@ -53,7 +53,9 @@ export default class CommandManager { const method = (...args: any) => { const callback = command(...args)(props) - view.dispatch(tr) + if (tr.steps.length) { + view.dispatch(tr) + } return callback } @@ -72,7 +74,7 @@ export default class CommandManager { return new Proxy({}, { get: (_, name: string, proxy) => { if (name === 'run') { - if (!hasStartTransaction && shouldDispatch) { + if (!hasStartTransaction && shouldDispatch && tr.steps.length) { view.dispatch(tr) } diff --git a/packages/extension-collaboration/src/index.ts b/packages/extension-collaboration/src/index.ts index 6249c4bb..63f775df 100644 --- a/packages/extension-collaboration/src/index.ts +++ b/packages/extension-collaboration/src/index.ts @@ -1,4 +1,4 @@ -import { Extension } from '@tiptap/core' +import { Extension, Command } from '@tiptap/core' import { redo, undo, @@ -15,6 +15,31 @@ const Collaboration = Extension.create({ provider: null, }, + addCommands() { + return { + /** + * Undo recent changes + */ + undo: (): Command => ({ state }) => { + return undo(state) + }, + /** + * Reapply reverted changes + */ + redo: (): Command => ({ state }) => { + return redo(state) + }, + } + }, + + addKeyboardShortcuts() { + return { + 'Mod-z': () => this.editor.commands.undo(), + 'Mod-y': () => this.editor.commands.redo(), + 'Shift-Mod-z': () => this.editor.commands.redo(), + } + }, + addProseMirrorPlugins() { return [ ySyncPlugin( @@ -24,14 +49,6 @@ const Collaboration = Extension.create({ ] }, - addKeyboardShortcuts() { - return { - 'Mod-z': () => undo(this.editor.state), - 'Mod-y': () => redo(this.editor.state), - 'Mod-Shift-z': () => redo(this.editor.state), - } - }, - onDestroy() { this.options.provider?.destroy() },