Skip to content

Commit 02d5d1f

Browse files
committed
main 최신화
2 parents 5ed52ec + 3143cef commit 02d5d1f

62 files changed

Lines changed: 1433 additions & 491 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

apps/extension/src/App.tsx

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { HashRouter as Router, Route, Routes } from "react-router-dom";
22

33
import Layout from "./components/layout";
4+
import StarLayout from "./components/layout/star-layout";
45
import Agreement from "./pages/agreement";
56
import Bookmark from "./pages/bookmark";
67
import CreateBookmark from "./pages/create-bookmark";
@@ -12,28 +13,30 @@ function App() {
1213
<Router>
1314
<Routes>
1415
<Route element={<Layout />}>
15-
<Route path="/" element={<Home />} />
16-
<Route path="/agreement" element={<Agreement />} />
17-
<Route path="/bookmark" element={<Bookmark />} />
18-
<Route path="/create-bookmark" element={<CreateBookmark />} />
19-
<Route
20-
path="/no-summary"
21-
element={
22-
<ErrorPage
23-
title="생성된 북마크 요약이 없습니다."
24-
subtitle="북마크를 요약하러 가볼까요?"
25-
/>
26-
}
27-
/>
28-
<Route
29-
path="*"
30-
element={
31-
<ErrorPage
32-
title="요청하신 경로가 없습니다."
33-
subtitle="경로를 다시 한 번 확인해주세요."
34-
/>
35-
}
36-
/>
16+
<Route element={<StarLayout />}>
17+
<Route path="/" element={<Home />} />
18+
<Route path="/agreement" element={<Agreement />} />
19+
<Route path="/bookmark" element={<Bookmark />} />
20+
<Route path="/create-bookmark" element={<CreateBookmark />} />
21+
<Route
22+
path="/no-summary"
23+
element={
24+
<ErrorPage
25+
title="생성된 북마크 요약이 없습니다."
26+
subtitle="북마크를 요약하러 가볼까요?"
27+
/>
28+
}
29+
/>
30+
<Route
31+
path="*"
32+
element={
33+
<ErrorPage
34+
title="요청하신 경로가 없습니다."
35+
subtitle="경로를 다시 한 번 확인해주세요."
36+
/>
37+
}
38+
/>
39+
</Route>
3740
</Route>
3841
</Routes>
3942
</Router>

apps/extension/src/apis/api-v1.ts

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,38 +6,3 @@ export const apiV1 = axios.create({
66
baseURL,
77
withCredentials: true,
88
});
9-
10-
apiV1.interceptors.response.use(
11-
(response) => response,
12-
async (error) => {
13-
const originalRequest = error.config;
14-
15-
if (
16-
error.response &&
17-
error.response.data &&
18-
error.response.data.code === "TOKEN4001" &&
19-
!originalRequest._retry
20-
) {
21-
originalRequest._retry = true;
22-
23-
try {
24-
const { data } = await apiV1.get("/oauth/reissue", {
25-
withCredentials: true,
26-
});
27-
28-
await chrome.cookies.set({
29-
url: baseURL,
30-
name: "accessToken",
31-
value: data.result.accessToken,
32-
path: "/",
33-
httpOnly: true,
34-
});
35-
36-
return apiV1(originalRequest);
37-
} catch (refreshError) {
38-
return Promise.reject(refreshError);
39-
}
40-
}
41-
return Promise.reject(error);
42-
}
43-
);

apps/extension/src/apis/api-v2.ts

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,38 +6,3 @@ export const apiV2 = axios.create({
66
baseURL,
77
withCredentials: true,
88
});
9-
10-
apiV2.interceptors.response.use(
11-
(response) => response,
12-
async (error) => {
13-
const originalRequest = error.config;
14-
15-
if (
16-
error.response &&
17-
error.response.data &&
18-
error.response.data.code === "TOKEN4001" &&
19-
!originalRequest._retry
20-
) {
21-
originalRequest._retry = true;
22-
23-
try {
24-
const { data } = await apiV2.get("/oauth/reissue", {
25-
withCredentials: true,
26-
});
27-
28-
await chrome.cookies.set({
29-
url: baseURL,
30-
name: "accessToken",
31-
value: data.result.accessToken,
32-
path: "/",
33-
httpOnly: true,
34-
});
35-
36-
return apiV2(originalRequest);
37-
} catch (refreshError) {
38-
return Promise.reject(refreshError);
39-
}
40-
}
41-
return Promise.reject(error);
42-
}
43-
);

apps/extension/src/components/layout/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
import { useEffect } from "react";
22

3+
import { useDetectPath } from "@/hooks/use-detect-path";
34
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
45

56
import { Outlet } from "react-router-dom";
67

78
export const queryClient = new QueryClient();
89

910
const Layout = () => {
11+
useDetectPath();
12+
1013
useEffect(() => {
1114
window.Kakao.init(import.meta.env.VITE_KAKAO_JS_KEY);
1215
}, []);
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { useEffect } from "react";
2+
3+
import { useGetStars } from "@/state/query/star";
4+
import { useStarStore } from "@/state/zustand/star";
5+
import { useUserStore } from "@/state/zustand/user";
6+
7+
import { Outlet } from "react-router-dom";
8+
9+
const StarLayout = () => {
10+
const { isLoggedIn, setIsLoggedIn } = useUserStore();
11+
const { setStars } = useStarStore();
12+
const { data, isPending, refetch } = useGetStars(isLoggedIn);
13+
14+
useEffect(() => {
15+
(async function checkLogin() {
16+
try {
17+
const token = await chrome.cookies.get({
18+
url: import.meta.env.VITE_BASE_URL,
19+
name: "accessToken",
20+
});
21+
if (token) {
22+
setIsLoggedIn(true);
23+
refetch();
24+
}
25+
} catch (error) {
26+
console.error("Error checking initial token:", error);
27+
}
28+
})();
29+
}, []);
30+
31+
useEffect(() => {
32+
if (isLoggedIn && !isPending) {
33+
setStars(data?.result ?? null);
34+
}
35+
}, [isLoggedIn, isPending, data]);
36+
37+
return <Outlet />;
38+
};
39+
40+
export default StarLayout;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
export enum CATEGORY {
2-
GET = "get-categories",
2+
GET = "GET_CATEGORIES",
33
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export enum STAR {
2+
GET_ALL = "GET_STARS",
3+
GET_BY_ID = "GET_STAR_BY_ID",
4+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
export enum TERM {
2-
CONTENT = "term-content",
2+
CONTENT = "TERM_CONTENT",
33
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import { useEffect } from "react";
2+
3+
import { useStarStore } from "@/state/zustand/star";
4+
import { useTabStore } from "@/state/zustand/tab";
5+
import { updateCurrentTab } from "@/utils/chrome";
6+
7+
import { useReplaceNavigate } from "./use-replace-navigate";
8+
9+
interface TabChangeInfoProps {
10+
status?: chrome.tabs.TabStatus;
11+
url?: string;
12+
groupId?: number;
13+
pinned?: boolean;
14+
audible?: boolean;
15+
frozen?: boolean;
16+
discarded?: boolean;
17+
autoDiscardable?: boolean;
18+
mutedInfo?: chrome.tabs.MutedInfo;
19+
favIconUrl?: string;
20+
title?: string;
21+
}
22+
23+
export function useDetectPath() {
24+
const { currentTab, setCurrentTab, setIsFindingExistPath } = useTabStore();
25+
26+
const stars = useStarStore((state) => state.stars);
27+
28+
const navigate = useReplaceNavigate();
29+
30+
useEffect(() => {
31+
updateCurrentTab(setCurrentTab);
32+
33+
const onTabActived = () => {
34+
setIsFindingExistPath(true);
35+
updateCurrentTab(setCurrentTab);
36+
};
37+
38+
const onTabUpdated = (_: number, changeInfo: TabChangeInfoProps) => {
39+
setIsFindingExistPath(true);
40+
if (changeInfo.status === "complete") {
41+
updateCurrentTab(setCurrentTab);
42+
}
43+
};
44+
45+
chrome.tabs.onActivated.addListener(onTabActived);
46+
chrome.tabs.onUpdated.addListener(onTabUpdated);
47+
48+
return () => {
49+
chrome.tabs.onActivated.removeListener(onTabActived);
50+
chrome.tabs.onUpdated.removeListener(onTabUpdated);
51+
};
52+
}, []);
53+
54+
useEffect(() => {
55+
const findStar = stars?.starListDto.find((star) => encodeURI(star.siteUrl) === currentTab.url);
56+
57+
if (findStar) {
58+
navigate(`/create-bookmark?id=${findStar.starId}`);
59+
} else {
60+
navigate("/bookmark");
61+
}
62+
setIsFindingExistPath(false);
63+
}, [stars, currentTab]);
64+
65+
return { currentTab };
66+
}

apps/extension/src/hooks/use-social-login.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
import { useUserStore } from "@/state/zustand/user";
2+
13
import { useNavigate } from "react-router-dom";
24

35
const url = import.meta.env.VITE_BASE_URL;
46

57
export const useSocialLogin = (setIsLoading: (isLoading: boolean) => void) => {
8+
const { setIsLoggedIn } = useUserStore();
69
const navigate = useNavigate();
710
const baseUrl = import.meta.env.VITE_BASE_URL + "/oauth";
811
const kakaoLoginPage = baseUrl + "/kakao?redirectType=extension";
@@ -41,6 +44,7 @@ export const useSocialLogin = (setIsLoading: (isLoading: boolean) => void) => {
4144
path: "/",
4245
secure: false,
4346
});
47+
setIsLoggedIn(true);
4448
return navigate("/bookmark", { replace: true });
4549
}
4650
navigate("/agreement", { state: { accessToken, refreshToken }, replace: true });

0 commit comments

Comments
 (0)