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