♻️(frontend) replace setEditor per setStore

setStore is more generic and can be used to set
any store.
This commit is contained in:
Anthony LC
2024-07-17 09:34:36 +02:00
committed by Anthony LC
parent 424c100eeb
commit b5443676c1
2 changed files with 15 additions and 22 deletions

View File

@@ -38,7 +38,7 @@ interface BlockNoteContentProps {
export const BlockNoteContent = ({ doc, provider }: BlockNoteContentProps) => { export const BlockNoteContent = ({ doc, provider }: BlockNoteContentProps) => {
const { userData } = useAuthStore(); const { userData } = useAuthStore();
const { setEditor, docsStore } = useDocStore(); const { setStore, docsStore } = useDocStore();
useSaveDoc(doc.id, provider.doc, doc.abilities.partial_update); useSaveDoc(doc.id, provider.doc, doc.abilities.partial_update);
const storedEditor = docsStore?.[doc.id]?.editor; const storedEditor = docsStore?.[doc.id]?.editor;
@@ -60,8 +60,8 @@ export const BlockNoteContent = ({ doc, provider }: BlockNoteContentProps) => {
}, [provider, storedEditor, userData?.email]); }, [provider, storedEditor, userData?.email]);
useEffect(() => { useEffect(() => {
setEditor(doc.id, editor); setStore(doc.id, { editor });
}, [setEditor, doc.id, editor]); }, [setStore, doc.id, editor]);
return ( return (
<Box <Box

View File

@@ -6,22 +6,24 @@ import { create } from 'zustand';
import { signalingUrl } from '@/core'; import { signalingUrl } from '@/core';
import { Base64, Doc } from '@/features/docs/doc-management'; import { Base64, Doc } from '@/features/docs/doc-management';
export interface DocStore { interface DocStore {
provider: WebrtcProvider;
editor?: BlockNoteEditor;
}
export interface UseDocStore {
docsStore: { docsStore: {
[docId: Doc['id']]: { [docId: Doc['id']]: DocStore;
provider: WebrtcProvider;
editor?: BlockNoteEditor;
};
}; };
createProvider: (docId: Doc['id'], initialDoc: Base64) => WebrtcProvider; createProvider: (docId: Doc['id'], initialDoc: Base64) => WebrtcProvider;
setEditor: (docId: Doc['id'], editor: BlockNoteEditor) => void; setStore: (docId: Doc['id'], props: Partial<DocStore>) => void;
} }
const initialState = { const initialState = {
docsStore: {}, docsStore: {},
}; };
export const useDocStore = create<DocStore>((set) => ({ export const useDocStore = create<UseDocStore>((set, get) => ({
docsStore: initialState.docsStore, docsStore: initialState.docsStore,
createProvider: (docId: string, initialDoc: Base64) => { createProvider: (docId: string, initialDoc: Base64) => {
const doc = new Y.Doc({ const doc = new Y.Doc({
@@ -37,27 +39,18 @@ export const useDocStore = create<DocStore>((set) => ({
maxConns: 5, maxConns: 5,
}); });
set(({ docsStore }) => { get().setStore(docId, { provider });
return {
docsStore: {
...docsStore,
[docId]: {
provider,
},
},
};
});
return provider; return provider;
}, },
setEditor: (docId, editor) => { setStore: (docId, props) => {
set(({ docsStore }) => { set(({ docsStore }) => {
return { return {
docsStore: { docsStore: {
...docsStore, ...docsStore,
[docId]: { [docId]: {
...docsStore[docId], ...docsStore[docId],
editor, ...props,
}, },
}, },
}; };