fix: remove useEffect on router sync with atoms (#2241)

This commit is contained in:
Himself65 authored and GitHub committed 2023-05-11 16:37:42 -05:00
1 parent 063ffda09d
commit 8d117123d7
12 files changed
+206 -192

No files matched your search

@@ -1,7 +1,4 @@
import {
rootCurrentWorkspaceIdAtom,
rootWorkspacesMetadataAtom,
} from '@affine/workspace/atom';
import { rootWorkspacesMetadataAtom } from '@affine/workspace/atom';
import type { WorkspaceFlavour } from '@affine/workspace/type';
import type { WorkspaceRegistry } from '@affine/workspace/type';
import { useSetAtom } from 'jotai';
@@ -15,7 +12,6 @@ import { WorkspaceAdapters } from '../plugins';
* The logic here is to delete the old workspace and create a new one.
*/
export function useTransformWorkspace() {
const setCurrentWorkspaceId = useSetAtom(rootCurrentWorkspaceIdAtom);
const set = useSetAtom(rootWorkspacesMetadataAtom);
return useCallback(
async <From extends WorkspaceFlavour, To extends WorkspaceFlavour>(
@@ -23,10 +19,11 @@ export function useTransformWorkspace() {
to: To,
workspace: WorkspaceRegistry[From]
): Promise<string> => {
await WorkspaceAdapters[from].CRUD.delete(workspace as any);
// create first, then delete, in case of failure
const newId = await WorkspaceAdapters[to].CRUD.create(
workspace.blockSuiteWorkspace
);
await WorkspaceAdapters[from].CRUD.delete(workspace as any);
set(workspaces => {
const idx = workspaces.findIndex(ws => ws.id === workspace.id);
workspaces.splice(idx, 1, {
@@ -35,9 +32,8 @@ export function useTransformWorkspace() {
});
return [...workspaces];
});
setCurrentWorkspaceId(newId);
return newId;
},
[set, setCurrentWorkspaceId]
[set]
);
}