generated from kevisual/vite-react-template
56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
|
import { queryLogin } from '@/modules/query';
|
|
import { toast } from 'sonner';
|
|
import type { UserInfo } from '../store';
|
|
|
|
export const authQueryKeys = {
|
|
me: ['auth', 'me'] as const,
|
|
token: ['auth', 'token'] as const,
|
|
} as const;
|
|
|
|
export const useMe = () => {
|
|
return useQuery({
|
|
queryKey: authQueryKeys.me,
|
|
queryFn: async () => {
|
|
const res = await queryLogin.getMe();
|
|
if (res.code === 200) {
|
|
return res.data;
|
|
}
|
|
throw new Error(res.message || 'Failed to fetch user info');
|
|
},
|
|
staleTime: 1000 * 60 * 5, // 5 minutes
|
|
});
|
|
};
|
|
|
|
export const useSwitchOrg = () => {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation({
|
|
mutationFn: async (username?: string) => {
|
|
const res = await queryLogin.switchUser(username || '');
|
|
if (res.code === 200) {
|
|
return res.data;
|
|
}
|
|
throw new Error(res.message || 'Switch failed');
|
|
},
|
|
onSuccess: () => {
|
|
toast.success('切换成功');
|
|
queryClient.invalidateQueries({ queryKey: authQueryKeys.me });
|
|
setTimeout(() => {
|
|
window.location.reload();
|
|
}, 1000);
|
|
},
|
|
onError: (error) => {
|
|
toast.error(error.message || '请求失败');
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useGetToken = () => {
|
|
return useQuery({
|
|
queryKey: authQueryKeys.token,
|
|
queryFn: () => queryLogin.getToken(),
|
|
staleTime: Infinity,
|
|
});
|
|
};
|