🐛(app-impress) refresh when multiple Blocknote
When multiple blocknote were created, the editor didn't display the content of the selected blocknote but the content of the last blocknote with a new provider. We were actually storing the editor, so if the editor is stored already, we serve it instead of creating a new one.
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
import { BlockNoteView, useCreateBlockNote } from '@blocknote/react';
|
||||
import { BlockNoteEditor as BlockNoteEditorCore } from '@blocknote/core';
|
||||
import { BlockNoteView } from '@blocknote/react';
|
||||
import '@blocknote/react/style.css';
|
||||
import { Alert, VariantType } from '@openfun/cunningham-react';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import React, { useEffect, useMemo } from 'react';
|
||||
import { WebrtcProvider } from 'y-webrtc';
|
||||
|
||||
import { Box } from '@/components';
|
||||
@@ -19,19 +20,10 @@ interface BlockNoteEditorProps {
|
||||
|
||||
export const BlockNoteEditor = ({ pad }: BlockNoteEditorProps) => {
|
||||
const { createProvider, padsStore } = usePadStore();
|
||||
const [provider, setProvider] = useState<WebrtcProvider>(
|
||||
padsStore?.[pad.id]?.provider,
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
if (provider) {
|
||||
return;
|
||||
}
|
||||
|
||||
setProvider(createProvider(pad.id));
|
||||
}, [createProvider, pad.id, provider]);
|
||||
const provider = padsStore?.[pad.id]?.provider;
|
||||
|
||||
if (!provider) {
|
||||
createProvider(pad.id);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -45,18 +37,25 @@ interface BlockNoteContentProps {
|
||||
|
||||
export const BlockNoteContent = ({ pad, provider }: BlockNoteContentProps) => {
|
||||
const { userData } = useAuthStore();
|
||||
const { setEditor } = usePadStore();
|
||||
const { setEditor, padsStore } = usePadStore();
|
||||
|
||||
const editor = useCreateBlockNote({
|
||||
collaboration: {
|
||||
provider,
|
||||
fragment: provider.doc.getXmlFragment('document-store'),
|
||||
user: {
|
||||
name: userData?.name || userData?.email || 'Anonymous',
|
||||
color: randomColor(),
|
||||
const storedEditor = padsStore?.[pad.id]?.editor;
|
||||
const editor = useMemo(() => {
|
||||
if (storedEditor) {
|
||||
return storedEditor;
|
||||
}
|
||||
|
||||
return BlockNoteEditorCore.create({
|
||||
collaboration: {
|
||||
provider,
|
||||
fragment: provider.doc.getXmlFragment('document-store'),
|
||||
user: {
|
||||
name: userData?.name || userData?.email || 'Anonymous',
|
||||
color: randomColor(),
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
});
|
||||
}, [provider, storedEditor, userData?.email, userData?.name]);
|
||||
|
||||
editor.isEditable = pad.abilities.partial_update;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user