Files
cnb-center/src/pages/auth/hooks/use-api-query.ts
2026-03-05 22:02:45 +08:00

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,
});
};