diff --git a/packages/app/src/components/workspace-modal/index.tsx b/packages/app/src/components/workspace-modal/index.tsx
index 08372b52ba..5380f71fc0 100644
--- a/packages/app/src/components/workspace-modal/index.tsx
+++ b/packages/app/src/components/workspace-modal/index.tsx
@@ -10,12 +10,10 @@ import {
UsersIcon,
AddIcon,
} from '@blocksuite/icons';
-// import { useConfirm } from '@/providers/ConfirmProvider';
import { toast } from '@/ui/toast';
import { WorkspaceAvatar } from '@/components/workspace-avatar';
import { useAppState } from '@/providers/app-state-provider';
import { useRouter } from 'next/router';
-import { useUserHelper } from '@/hooks/use-user-helper';
interface WorkspaceModalProps {
open: boolean;
@@ -25,8 +23,7 @@ interface WorkspaceModalProps {
export const WorkspaceModal = ({ open, onClose }: WorkspaceModalProps) => {
const [createWorkspaceOpen, setCreateWorkspaceOpen] = useState(false);
// const { confirm } = useConfirm();
- const { workspaceList, currentWorkspace } = useAppState();
- const { login, user } = useUserHelper();
+ const { workspaceList, currentWorkspace, login, user } = useAppState();
const router = useRouter();
return (
diff --git a/packages/app/src/components/workspace-setting/SyncPage.tsx b/packages/app/src/components/workspace-setting/SyncPage.tsx
index fb0dc5aabc..afd19b700f 100644
--- a/packages/app/src/components/workspace-setting/SyncPage.tsx
+++ b/packages/app/src/components/workspace-setting/SyncPage.tsx
@@ -11,14 +11,12 @@ import { useWorkspaceHelper } from '@/hooks/use-workspace-helper';
import { useAppState } from '@/providers/app-state-provider';
import { useConfirm } from '@/providers/ConfirmProvider';
import { toast } from '@/ui/toast';
-import { useUserHelper } from '@/hooks/use-user-helper';
import { useRouter } from 'next/router';
export const SyncPage = ({ workspace }: { workspace: WorkspaceInfo }) => {
// console.log('workspace: ', workspace);
const { enableWorkspace } = useWorkspaceHelper();
- const { currentWorkspace } = useAppState();
+ const { currentWorkspace, user } = useAppState();
const { confirm } = useConfirm();
- const { user, login } = useUserHelper();
const router = useRouter();
return (
diff --git a/packages/app/src/hooks/use-user-helper.ts b/packages/app/src/hooks/use-user-helper.ts
deleted file mode 100644
index 7d837cec55..0000000000
--- a/packages/app/src/hooks/use-user-helper.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { useAppState } from '@/providers/app-state-provider';
-import { User } from '@affine/datacenter';
-import { useEffect, useState } from 'react';
-
-export const useUserHelper = () => {
- const { dataCenter } = useAppState();
- const [user, setUser] = useState
(undefined);
- useEffect(() => {
- dataCenter
- .getUserInfo()
- .then(user => {
- setUser(user);
- })
- .catch(e => {
- setUser(undefined);
- });
- }, []);
-
- const login = async () => {
- await dataCenter.login();
- const user = await dataCenter.getUserInfo();
- setUser(user);
- };
- return {
- user,
- login,
- };
-};
diff --git a/packages/app/src/providers/app-state-provider/Provider.tsx b/packages/app/src/providers/app-state-provider/Provider.tsx
index 33f650d024..9c0ebdda54 100644
--- a/packages/app/src/providers/app-state-provider/Provider.tsx
+++ b/packages/app/src/providers/app-state-provider/Provider.tsx
@@ -8,7 +8,7 @@ import {
PageMeta,
} from './interface';
import { createDefaultWorkspace } from './utils';
-import { WorkspaceInfo } from '@affine/datacenter';
+import { WorkspaceInfo, User } from '@affine/datacenter';
type AppStateContextProps = PropsWithChildren>;
@@ -127,6 +127,26 @@ export const AppStateProvider = ({
});
};
+ const login = async () => {
+ const { dataCenter } = appState;
+ await dataCenter.login();
+ const user = (await dataCenter.getUserInfo()) as User;
+ setAppState({
+ ...appState,
+ user,
+ });
+ return user;
+ };
+
+ const logout = async () => {
+ const { dataCenter } = appState;
+ await dataCenter.logout();
+ setAppState({
+ ...appState,
+ user: null,
+ });
+ };
+
return (
{children}
diff --git a/packages/app/src/providers/app-state-provider/interface.ts b/packages/app/src/providers/app-state-provider/interface.ts
index ca178781f5..de1577af75 100644
--- a/packages/app/src/providers/app-state-provider/interface.ts
+++ b/packages/app/src/providers/app-state-provider/interface.ts
@@ -33,6 +33,9 @@ export type AppStateFunction = {
loadWorkspace: (workspaceId: string) => Promise;
loadPage: (pageId: string) => void;
+
+ login: () => Promise;
+ logout: () => Promise;
};
export type AppStateContext = AppStateValue & AppStateFunction;