Skip to content

Commit 867fff8

Browse files
committed
fix: fix onboarding routing
1 parent 1dff8b0 commit 867fff8

File tree

2 files changed

+22
-18
lines changed

2 files changed

+22
-18
lines changed

src/hooks/auth/useFetchUser.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useEffect, useState } from "react";
1+
import { useEffect, useState } from "react";
22
import { useAuthStore, User } from "../../store/auth/index";
33

44
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL;
@@ -10,9 +10,14 @@ export const useFetchUser = (
1010
) => {
1111
const { login, logout } = useAuthStore();
1212
const [user, setUser] = useState<User | null>(null);
13+
const [loading, setLoading] = useState(true);
1314

1415
useEffect(() => {
15-
if (!accessToken || !refreshToken) return;
16+
if (!accessToken || !refreshToken) {
17+
setLoading(false);
18+
return;
19+
}
20+
setLoading(true);
1621

1722
fetch(`${API_BASE_URL}/user/self`, {
1823
headers: {
@@ -22,17 +27,22 @@ export const useFetchUser = (
2227
.then((res) => {
2328
if (!res.ok) {
2429
logout();
30+
setLoading(false);
2531
return null;
2632
}
2733
return res.json();
2834
})
2935
.then((user) => {
30-
if (!user) return;
36+
if (!user) {
37+
setLoading(false);
38+
return;
39+
}
3140
login(user as User, accessToken, refreshToken);
3241
setUser(user);
3342
if (onSuccess) onSuccess(user as User);
43+
setLoading(false);
3444
});
3545
}, [accessToken, refreshToken, login, logout, onSuccess]);
3646

37-
return { user };
47+
return { user, loading };
3848
};

src/hooks/redirect/useRootRedirect.tsx

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,41 @@
11
import { useEffect } from "react";
22
import { useNavigate, useLocation } from "react-router-dom";
33
import { useFetchUser } from "../../hooks/auth/useFetchUser";
4-
import { User } from "../../store/auth";
54

65
const useRootRedirect = () => {
76
const navigate = useNavigate();
87
const location = useLocation();
98
const accessToken = localStorage.getItem("access_token");
109
const refreshToken = localStorage.getItem("refresh_token");
1110

12-
const result = useFetchUser(accessToken, refreshToken, undefined);
13-
const user = result.user as User | null;
11+
const { user, loading } = useFetchUser(accessToken, refreshToken, undefined);
1412

1513
useEffect(() => {
16-
if (!user) return;
14+
if (loading || !user) return;
1715

1816
const hasPrivacy = !!user.privacy;
1917

18+
const hasConcerns = !!user.addition?.concerns;
19+
const hasEmotions = !!user.addition?.emotions;
20+
2021
if ((!accessToken && !refreshToken) || !user.email || user.id == null) {
2122
navigate("/login", { replace: true });
2223
return;
2324
}
2425

25-
if (location.pathname.includes("/onboarding")) {
26-
if (!hasPrivacy) {
27-
navigate("/onboarding/basic", { replace: true });
28-
} else {
29-
navigate("/home", { replace: true });
30-
}
31-
return;
32-
}
33-
3426
if (
3527
location.pathname === "" ||
3628
location.pathname === "/" ||
3729
location.pathname === "/home"
3830
) {
3931
if (!hasPrivacy) {
4032
navigate("/onboarding/basic", { replace: true });
33+
} else if (!hasConcerns || !hasEmotions) {
34+
navigate("/onboarding/additional/concern", { replace: true });
4135
}
4236
return;
4337
}
44-
}, [navigate, location, accessToken, refreshToken, user]);
38+
}, [navigate, location, accessToken, refreshToken, user, loading]);
4539

4640
return null;
4741
};

0 commit comments

Comments
 (0)