| import { Authorization } from '@/constants/authorization'; | |
| import userService from '@/services/user-service'; | |
| import authorizationUtil from '@/utils/authorization-util'; | |
| import { useMutation } from '@tanstack/react-query'; | |
| import { message } from 'antd'; | |
| import { useTranslation } from 'react-i18next'; | |
| import { history } from 'umi'; | |
| export interface ILoginRequestBody { | |
| email: string; | |
| password: string; | |
| } | |
| export interface IRegisterRequestBody extends ILoginRequestBody { | |
| nickname: string; | |
| } | |
| export const useLogin = () => { | |
| const { t } = useTranslation(); | |
| const { | |
| data, | |
| isPending: loading, | |
| mutateAsync, | |
| } = useMutation({ | |
| mutationKey: ['login'], | |
| mutationFn: async (params: { email: string; password: string }) => { | |
| const { data: res = {}, response } = await userService.login(params); | |
| if (res.retcode === 0) { | |
| const { data } = res; | |
| message.success(t('message.logged')); | |
| const authorization = response.headers.get(Authorization); | |
| const token = data.access_token; | |
| const userInfo = { | |
| avatar: data.avatar, | |
| name: data.nickname, | |
| email: data.email, | |
| }; | |
| authorizationUtil.setItems({ | |
| Authorization: authorization, | |
| userInfo: JSON.stringify(userInfo), | |
| Token: token, | |
| }); | |
| } | |
| return res.retcode; | |
| }, | |
| }); | |
| return { data, loading, login: mutateAsync }; | |
| }; | |
| export const useRegister = () => { | |
| const { t } = useTranslation(); | |
| const { | |
| data, | |
| isPending: loading, | |
| mutateAsync, | |
| } = useMutation({ | |
| mutationKey: ['register'], | |
| mutationFn: async (params: { | |
| email: string; | |
| password: string; | |
| nickname: string; | |
| }) => { | |
| const { data = {} } = await userService.register(params); | |
| if (data.retcode === 0) { | |
| message.success(t('message.registered')); | |
| } | |
| return data.retcode; | |
| }, | |
| }); | |
| return { data, loading, register: mutateAsync }; | |
| }; | |
| export const useLogout = () => { | |
| const { t } = useTranslation(); | |
| const { | |
| data, | |
| isPending: loading, | |
| mutateAsync, | |
| } = useMutation({ | |
| mutationKey: ['logout'], | |
| mutationFn: async () => { | |
| const { data = {} } = await userService.logout(); | |
| if (data.retcode === 0) { | |
| message.success(t('message.logout')); | |
| authorizationUtil.removeAll(); | |
| history.push('/login'); | |
| } | |
| return data.retcode; | |
| }, | |
| }); | |
| return { data, loading, logout: mutateAsync }; | |
| }; | |