♻️(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) => {
|
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
|
||||||
|
|||||||
@@ -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,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user