♻️(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) => {
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

View File

@@ -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,
},
},
};