♻️(frontend) replace setEditor per setStore
setStore is more generic and can be used to set any store.
This commit is contained in:
@@ -38,7 +38,7 @@ interface BlockNoteContentProps {
|
||||
|
||||
export const BlockNoteContent = ({ doc, provider }: BlockNoteContentProps) => {
|
||||
const { userData } = useAuthStore();
|
||||
const { setEditor, docsStore } = useDocStore();
|
||||
const { setStore, docsStore } = useDocStore();
|
||||
useSaveDoc(doc.id, provider.doc, doc.abilities.partial_update);
|
||||
|
||||
const storedEditor = docsStore?.[doc.id]?.editor;
|
||||
@@ -60,8 +60,8 @@ export const BlockNoteContent = ({ doc, provider }: BlockNoteContentProps) => {
|
||||
}, [provider, storedEditor, userData?.email]);
|
||||
|
||||
useEffect(() => {
|
||||
setEditor(doc.id, editor);
|
||||
}, [setEditor, doc.id, editor]);
|
||||
setStore(doc.id, { editor });
|
||||
}, [setStore, doc.id, editor]);
|
||||
|
||||
return (
|
||||
<Box
|
||||
|
||||
@@ -6,22 +6,24 @@ import { create } from 'zustand';
|
||||
import { signalingUrl } from '@/core';
|
||||
import { Base64, Doc } from '@/features/docs/doc-management';
|
||||
|
||||
export interface DocStore {
|
||||
interface DocStore {
|
||||
provider: WebrtcProvider;
|
||||
editor?: BlockNoteEditor;
|
||||
}
|
||||
|
||||
export interface UseDocStore {
|
||||
docsStore: {
|
||||
[docId: Doc['id']]: {
|
||||
provider: WebrtcProvider;
|
||||
editor?: BlockNoteEditor;
|
||||
};
|
||||
[docId: Doc['id']]: DocStore;
|
||||
};
|
||||
createProvider: (docId: Doc['id'], initialDoc: Base64) => WebrtcProvider;
|
||||
setEditor: (docId: Doc['id'], editor: BlockNoteEditor) => void;
|
||||
setStore: (docId: Doc['id'], props: Partial<DocStore>) => void;
|
||||
}
|
||||
|
||||
const initialState = {
|
||||
docsStore: {},
|
||||
};
|
||||
|
||||
export const useDocStore = create<DocStore>((set) => ({
|
||||
export const useDocStore = create<UseDocStore>((set, get) => ({
|
||||
docsStore: initialState.docsStore,
|
||||
createProvider: (docId: string, initialDoc: Base64) => {
|
||||
const doc = new Y.Doc({
|
||||
@@ -37,27 +39,18 @@ export const useDocStore = create<DocStore>((set) => ({
|
||||
maxConns: 5,
|
||||
});
|
||||
|
||||
set(({ docsStore }) => {
|
||||
return {
|
||||
docsStore: {
|
||||
...docsStore,
|
||||
[docId]: {
|
||||
provider,
|
||||
},
|
||||
},
|
||||
};
|
||||
});
|
||||
get().setStore(docId, { provider });
|
||||
|
||||
return provider;
|
||||
},
|
||||
setEditor: (docId, editor) => {
|
||||
setStore: (docId, props) => {
|
||||
set(({ docsStore }) => {
|
||||
return {
|
||||
docsStore: {
|
||||
...docsStore,
|
||||
[docId]: {
|
||||
...docsStore[docId],
|
||||
editor,
|
||||
...props,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user