Undo / Redo are not working when collaboration is enabled
@nperez0111 已经在做这个了。
开始于 2026年1月13日。
评估
这个 Issue 还没有评估数据。
描述
Describe the bug
Hello and thank you for the work on BlockNote!
It seems that undo / redo (Ctrl + Z / Ctrl + Y) are not working when the collaboration feature with Yjs is enabled.
When enabling collaboration with a minimal YJsProvider, Ctrl + Z does nothing. If we comment the collaboration part of the config it's working again.
Also, when trying to implement it by hand with the following code, it's still not working:
const undoHandler = useCallback((e: KeyboardEvent) => {
if ((e.metaKey || e.ctrlKey) && (e.key === 'z' || e.key === 'Z')) {
console.log('undo'); // displayed
editor.undo(); // <- NOT WORKING
}
}, []);
useWindowEvent('keydown', undoHandler);
To Reproduce
Here is a minimal reproduction in a sandbox: https://stackblitz.com/edit/github-qp3au5av?file=src%2FApp.tsx
And the code, in case the sandbox is not working:
App.jsx
import '@blocknote/core/fonts/inter.css';
import { BlockNoteView } from '@blocknote/mantine';
import '@blocknote/mantine/style.css';
import { useCreateBlockNote } from '@blocknote/react';
import * as Y from 'yjs';
export default function App() {
const ydoc = new Y.Doc();
const yLoggingProvider = new YProvider(ydoc);
const editor = useCreateBlockNote({
collaboration: {
provider: yLoggingProvider,
fragment: ydoc.getXmlFragment('blocks'),
user: {
name: 'My Username',
color: '#ff0000',
},
// showCursorLabels: 'always',
},
});
// Renders the editor instance using a React component.
return <BlockNoteView editor={editor} />;
}
export class YProvider {
private doc: Y.Doc;
private name: string;
constructor(doc: Y.Doc, name = 'YProvider') {
this.doc = doc;
this.name = name;
this.doc.on('update', this.onLocalUpdate);
console.log(`[${this.name}] provider started`);
}
private onLocalUpdate = (update: Uint8Array, origin: any) => {
Y.applyUpdate(this.doc, update);
};
/**
* Apply a received update from an external source.
* This bypasses the debounce and applies immediately.
*/
public receiveUpdate(update: Uint8Array): void {
Y.applyUpdate(this.doc, update, `${this.name}-external`);
}
public destroy(): void {
this.doc.off('update', this.onLocalUpdate);
}
}
Alternatively, you can try with the official WebrtcProvider as shown in the doc here: https://www.blocknotejs.org/docs/features/collaboration
const provider = new WebrtcProvider("my-document-id", ydoc);
const editor = useCreateBlockNote({
collaboration: {
provider: provider,
// Where to store BlockNote data in the Y.Doc:
fragment: ydoc.getXmlFragment("blocks"),
// Information (name and color) for this user:
user: {
name: "My Username",
color: "#ff0000",
},
// showCursorLabels: 'always',
}
});
It's not working.
Misc
- Node version: 25.2
- Package manager: npm
- Browser: It's not working with multiple browsers
- I'm a sponsor and would appreciate if you could look into this sooner than later 💖
- 主要语言
- TypeScript
- 星标
- 10.2k
- 派生
- 772
- 平均合并
- 3 天 11 小时
- 30 天内合并 PR
- 17
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
TypeCellOS/BlockNote 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 84/100
TypeCellOS/BlockNote#3098 ·
-
needs-triage
难度 2/5 1-3 小时 新手友好度 78/100
TypeCellOS/BlockNote#3073 ·
-
needs-triage
难度 2/5 1-3 小时 新手友好度 85/100
TypeCellOS/BlockNote#3072 ·
-
难度 2/5 1-3 小时 新手友好度 82/100
TypeCellOS/BlockNote#2949 · 1 条评论 ·
-
a11y
难度 2/5 1-3 小时 新手友好度 68/100
TypeCellOS/BlockNote#2855 ·
查看 TypeCellOS/BlockNote 的全部 Issue
相似的 Issue
-
comp/dashboard P3 type/bug
难度 2/5 1-3 小时 新手友好度 86/100
NousResearch/hermes-agent#117722 ·
-
clawsweeper:fix-shape-clear clawsweeper:queueable-fix clawsweeper:source-repro impact:ux-friction issue-rating: 🦞 diamond lobster no-stale P3
难度 2/5 1-3 小时 新手友好度 78/100
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
难度 1/5 1 小时以内 新手友好度 76/100
-
code-quality refactoring
难度 2/5 1-3 小时 新手友好度 84/100
github/gh-aw-firewall#8816 ·
-
integration:quickjs org:external priority:backlog topic:code-interpreter topic:middleware type:feature
难度 2/5 1-3 小时 新手友好度 74/100
langchain-ai/deepagents#6450 ·