-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuseAuth.ts
More file actions
48 lines (40 loc) · 1.27 KB
/
useAuth.ts
File metadata and controls
48 lines (40 loc) · 1.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import { authService } from "@/features/auth/services/authService";
import type { UserOnboardingRequest } from "@nycu-sdc/core-system-sdk";
import { authRefreshToken } from "@nycu-sdc/core-system-sdk";
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { useEffect } from "react";
const DEFAULT_AUTH_REFRESH_INTERVAL = 5 * 60 * 1000;
export const useMe = () =>
useQuery({
queryKey: ["user", "me"],
queryFn: () => authService.getCurrentUser()
});
export const useLogout = () =>
useMutation({
mutationFn: () => authService.logout()
});
export const useUpdateOnboarding = () => {
const qc = useQueryClient();
return useMutation<void, Error, UserOnboardingRequest>({
mutationFn: data => authService.updateOnboarding(data),
onSuccess: () => qc.invalidateQueries({ queryKey: ["user", "me"] })
});
};
export const useAuth = () => {
const { data: user, isLoading } = useMe();
return {
user,
isAuthenticated: !!user,
isLoading
};
};
export const useAuthRefreshInterval = () => {
useEffect(() => {
console.log("Setting up auth refresh interval");
const interval = setInterval(() => {
console.log("Refreshing auth token");
authRefreshToken("");
}, DEFAULT_AUTH_REFRESH_INTERVAL);
return () => clearInterval(interval);
}, []);
};