♻️(frontend) simplify useDocStore

We moved the editor store to its own store in the previous
commit. This change allow us to simplify useDocStore.
This commit is contained in:
Anthony LC
2024-11-09 10:39:44 +01:00
committed by Anthony LC
parent a09e740648
commit e4dfae1905
5 changed files with 27 additions and 36 deletions

View File

@@ -18,6 +18,7 @@ and this project adheres to
- 🚸(backend) improve users similarity search and sort results #391 - 🚸(backend) improve users similarity search and sort results #391
- 🌐(backend) add german translation #259 - 🌐(backend) add german translation #259
- ♻️(frontend) simplify stores #402
## Fixed ## Fixed

View File

@@ -32,8 +32,8 @@ export const DocEditor = ({ doc }: DocEditorProps) => {
const { colorsTokens } = useCunninghamTheme(); const { colorsTokens } = useCunninghamTheme();
const { docsStore } = useDocStore(); const { providers } = useDocStore();
const provider = docsStore?.[doc.id]?.provider; const provider = providers?.[doc.id];
if (!provider) { if (!provider) {
return null; return null;
@@ -98,7 +98,7 @@ export const DocVersionEditor = ({ doc, versionId }: DocVersionEditorProps) => {
docId: doc.id, docId: doc.id,
versionId, versionId,
}); });
const { createProvider, docsStore } = useDocStore(); const { createProvider, providers } = useDocStore();
const navigate = useNavigate(); const navigate = useNavigate();
@@ -107,11 +107,11 @@ export const DocVersionEditor = ({ doc, versionId }: DocVersionEditorProps) => {
return; return;
} }
const provider = docsStore?.[version.id]?.provider; const provider = providers?.[version.id];
if (!provider || provider.document.guid !== version.id) { if (!provider || provider.document.guid !== version.id) {
createProvider(version.id, version.content); createProvider(version.id, version.content);
} }
}, [createProvider, docsStore, version]); }, [createProvider, providers, version]);
if (isError && error) { if (isError && error) {
if (error.status === 404) { if (error.status === 404) {
@@ -143,7 +143,7 @@ export const DocVersionEditor = ({ doc, versionId }: DocVersionEditorProps) => {
); );
} }
const provider = docsStore?.[version.id]?.provider; const provider = providers?.[version.id];
if (!provider) { if (!provider) {
return null; return null;

View File

@@ -5,23 +5,19 @@ import { create } from 'zustand';
import { providerUrl } from '@/core'; import { providerUrl } from '@/core';
import { Base64, Doc, blocksToYDoc } from '@/features/docs/doc-management'; import { Base64, Doc, blocksToYDoc } from '@/features/docs/doc-management';
interface DocStore {
provider: HocuspocusProvider;
}
export interface UseDocStore { export interface UseDocStore {
currentDoc?: Doc; currentDoc?: Doc;
docsStore: { providers: {
[storeId: string]: DocStore; [storeId: string]: HocuspocusProvider;
}; };
createProvider: (storeId: string, initialDoc: Base64) => HocuspocusProvider; createProvider: (storeId: string, initialDoc: Base64) => HocuspocusProvider;
setStore: (storeId: string, props: Partial<DocStore>) => void; setProviders: (storeId: string, providers: HocuspocusProvider) => void;
setCurrentDoc: (doc: Doc | undefined) => void; setCurrentDoc: (doc: Doc | undefined) => void;
} }
export const useDocStore = create<UseDocStore>((set, get) => ({ export const useDocStore = create<UseDocStore>((set, get) => ({
currentDoc: undefined, currentDoc: undefined,
docsStore: {}, providers: {},
createProvider: (storeId: string, initialDoc: Base64) => { createProvider: (storeId: string, initialDoc: Base64) => {
const doc = new Y.Doc({ const doc = new Y.Doc({
guid: storeId, guid: storeId,
@@ -46,23 +42,17 @@ export const useDocStore = create<UseDocStore>((set, get) => ({
document: doc, document: doc,
}); });
get().setStore(storeId, { provider }); get().setProviders(storeId, provider);
return provider; return provider;
}, },
setStore: (storeId, props) => { setProviders: (storeId, provider) => {
set(({ docsStore }, ...store) => { set(({ providers }) => ({
return { providers: {
...store, ...providers,
docsStore: { [storeId]: provider,
...docsStore, },
[storeId]: { }));
...docsStore[storeId],
...props,
},
},
};
});
}, },
setCurrentDoc: (doc) => { setCurrentDoc: (doc) => {
set({ currentDoc: doc }); set({ currentDoc: doc });

View File

@@ -32,7 +32,7 @@ export const ModalVersion = ({
}: ModalVersionProps) => { }: ModalVersionProps) => {
const { toast } = useToastProvider(); const { toast } = useToastProvider();
const router = useRouter(); const router = useRouter();
const { docsStore } = useDocStore(); const { providers } = useDocStore();
const { mutate: updateDoc } = useUpdateDoc({ const { mutate: updateDoc } = useUpdateDoc({
listInvalideQueries: [KEY_LIST_DOC_VERSIONS], listInvalideQueries: [KEY_LIST_DOC_VERSIONS],
onSuccess: () => { onSuccess: () => {
@@ -41,15 +41,15 @@ export const ModalVersion = ({
router.push(`/docs/${docId}`); router.push(`/docs/${docId}`);
}; };
if (!docsStore?.[docId]?.provider || !docsStore?.[versionId]?.provider) { if (!providers?.[docId] || !providers?.[versionId]) {
onDisplaySuccess(); onDisplaySuccess();
return; return;
} }
revertUpdate( revertUpdate(
docsStore[docId].provider.document, providers[docId].document,
docsStore[docId].provider.document, providers[docId].document,
docsStore[versionId].provider.document, providers[versionId].document,
); );
onDisplaySuccess(); onDisplaySuccess();
@@ -79,7 +79,7 @@ export const ModalVersion = ({
fullWidth fullWidth
onClick={() => { onClick={() => {
const newDoc = toBase64( const newDoc = toBase64(
Y.encodeStateAsUpdate(docsStore?.[versionId]?.provider.document), Y.encodeStateAsUpdate(providers?.[versionId].document),
); );
updateDoc({ updateDoc({

View File

@@ -43,11 +43,11 @@ const DocPage = ({ id }: DocProps) => {
const { login } = useAuthStore(); const { login } = useAuthStore();
const { data: docQuery, isError, error } = useDoc({ id }); const { data: docQuery, isError, error } = useDoc({ id });
const [doc, setDoc] = useState(docQuery); const [doc, setDoc] = useState(docQuery);
const { setCurrentDoc, createProvider, docsStore } = useDocStore(); const { setCurrentDoc, createProvider, providers } = useDocStore();
const { setBroadcastProvider, addTask } = useBroadcastStore(); const { setBroadcastProvider, addTask } = useBroadcastStore();
const queryClient = useQueryClient(); const queryClient = useQueryClient();
const navigate = useNavigate(); const navigate = useNavigate();
const provider = docsStore?.[id]?.provider; const provider = providers?.[id];
useEffect(() => { useEffect(() => {
if (doc?.title) { if (doc?.title) {