File: //opt/coauthor/node_modules/@blocknote/react/src/hooks/useEditorForceUpdate.tsx
import { Editor } from "@tiptap/core";
import { useEffect, useState } from "react";
function useForceUpdate() {
const [, setValue] = useState(0);
return () => setValue((value) => value + 1);
}
// This is a component that is similar to https://github.com/ueberdosis/tiptap/blob/main/packages/react/src/useEditor.ts
// Use it to rerender a component whenever a transaction happens in the editor
export const useEditorForceUpdate = (editor: Editor) => {
const forceUpdate = useForceUpdate();
useEffect(() => {
const callback = () => {
requestAnimationFrame(() => {
requestAnimationFrame(() => {
forceUpdate();
});
});
};
editor.on("transaction", callback);
return () => {
editor.off("transaction", callback);
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [editor]);
};