fix can().undo() for collab
This commit is contained in:
@@ -59,6 +59,7 @@ module.exports = {
|
|||||||
'no-param-reassign': 'off',
|
'no-param-reassign': 'off',
|
||||||
'import/prefer-default-export': 'off',
|
'import/prefer-default-export': 'off',
|
||||||
'consistent-return': 'off',
|
'consistent-return': 'off',
|
||||||
|
'prefer-destructuring': 'off',
|
||||||
'no-redeclare': 'off',
|
'no-redeclare': 'off',
|
||||||
'@typescript-eslint/no-redeclare': ['error'],
|
'@typescript-eslint/no-redeclare': ['error'],
|
||||||
'no-unused-vars': 'off',
|
'no-unused-vars': 'off',
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
import { Extension, Command } from '@tiptap/core'
|
import { Extension, Command } from '@tiptap/core'
|
||||||
|
import { UndoManager } from 'yjs'
|
||||||
import {
|
import {
|
||||||
redo,
|
redo,
|
||||||
undo,
|
undo,
|
||||||
ySyncPlugin,
|
ySyncPlugin,
|
||||||
yUndoPlugin,
|
yUndoPlugin,
|
||||||
|
yUndoPluginKey,
|
||||||
} from 'y-prosemirror'
|
} from 'y-prosemirror'
|
||||||
|
|
||||||
declare module '@tiptap/core' {
|
declare module '@tiptap/core' {
|
||||||
@@ -47,14 +49,34 @@ export const Collaboration = Extension.create<CollaborationOptions>({
|
|||||||
|
|
||||||
addCommands() {
|
addCommands() {
|
||||||
return {
|
return {
|
||||||
undo: () => ({ tr, state }) => {
|
undo: () => ({ tr, state, dispatch }) => {
|
||||||
tr.setMeta('preventDispatch', true)
|
tr.setMeta('preventDispatch', true)
|
||||||
|
|
||||||
|
const undoManager: UndoManager = yUndoPluginKey.getState(state).undoManager
|
||||||
|
|
||||||
|
if (undoManager.undoStack.length === 0) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dispatch) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
return undo(state)
|
return undo(state)
|
||||||
},
|
},
|
||||||
redo: () => ({ tr, state }) => {
|
redo: () => ({ tr, state, dispatch }) => {
|
||||||
tr.setMeta('preventDispatch', true)
|
tr.setMeta('preventDispatch', true)
|
||||||
|
|
||||||
|
const undoManager: UndoManager = yUndoPluginKey.getState(state).undoManager
|
||||||
|
|
||||||
|
if (undoManager.redoStack.length === 0) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dispatch) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
return redo(state)
|
return redo(state)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user