feat: refactor user & login function

This commit is contained in:
QiShaoXuan
2023-01-10 21:09:38 +08:00
parent b86a03642a
commit 2780beddbb
5 changed files with 28 additions and 36 deletions

View File

@@ -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 (
<div>

View File

@@ -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 (
<div>

View File

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

View File

@@ -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<Record<string, unknown>>;
@@ -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 (
<AppState.Provider
value={{
@@ -134,6 +154,8 @@ export const AppStateProvider = ({
setEditor,
loadPage: loadPage.current,
loadWorkspace: loadWorkspace.current,
login,
logout,
}}
>
{children}

View File

@@ -33,6 +33,9 @@ export type AppStateFunction = {
loadWorkspace: (workspaceId: string) => Promise<StoreWorkspace | null>;
loadPage: (pageId: string) => void;
login: () => Promise<User>;
logout: () => Promise<void>;
};
export type AppStateContext = AppStateValue & AppStateFunction;