diff --git a/package-lock.json b/package-lock.json
index ab4334fa..500cfa9c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,10 +10,12 @@
"dependencies": {
"@tanstack/react-query": "^4.32.0",
"axios": "^1.4.0",
+ "jwt-decode": "^3.1.2",
"react": "^18.2.0",
"react-date-range": "^1.4.0",
"react-dom": "^18.2.0",
"react-icons": "^4.10.1",
+ "react-router-dom": "^6.14.2",
"scss": "^0.2.4",
"vite-plugin-mkcert": "^1.16.0",
"vite-plugin-sass-dts": "^1.3.8"
@@ -1094,6 +1096,14 @@
"@octokit/openapi-types": "^18.0.0"
}
},
+ "node_modules/@remix-run/router": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.2.tgz",
+ "integrity": "sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A==",
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/@swc/core": {
"version": "1.3.70",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.70.tgz",
@@ -2781,6 +2791,11 @@
"node": ">=6"
}
},
+ "node_modules/jwt-decode": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz",
+ "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A=="
+ },
"node_modules/levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -3275,6 +3290,36 @@
"node": ">=0.10.0"
}
},
+ "node_modules/react-router": {
+ "version": "6.14.2",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.2.tgz",
+ "integrity": "sha512-09Zss2dE2z+T1D03IheqAFtK4UzQyX8nFPWx6jkwdYzGLXd5ie06A6ezS2fO6zJfEb/SpG6UocN2O1hfD+2urQ==",
+ "dependencies": {
+ "@remix-run/router": "1.7.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "6.14.2",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.2.tgz",
+ "integrity": "sha512-5pWX0jdKR48XFZBuJqHosX3AAHjRAzygouMTyimnBPOLdY3WjzUSKhus2FVMihUFWzeLebDgr4r8UeQFAct7Bg==",
+ "dependencies": {
+ "@remix-run/router": "1.7.2",
+ "react-router": "6.14.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
diff --git a/package.json b/package.json
index 59bfed20..cfc7f902 100644
--- a/package.json
+++ b/package.json
@@ -12,10 +12,12 @@
"dependencies": {
"@tanstack/react-query": "^4.32.0",
"axios": "^1.4.0",
+ "jwt-decode": "^3.1.2",
"react": "^18.2.0",
"react-date-range": "^1.4.0",
"react-dom": "^18.2.0",
"react-icons": "^4.10.1",
+ "react-router-dom": "^6.14.2",
"scss": "^0.2.4",
"vite-plugin-mkcert": "^1.16.0",
"vite-plugin-sass-dts": "^1.3.8"
diff --git a/src/@types/common.ts b/src/@types/common.ts
index c49222e3..8f3836f2 100644
--- a/src/@types/common.ts
+++ b/src/@types/common.ts
@@ -1,7 +1,20 @@
-
-declare interface Sample {
+declare interface JoinUserInputType {
+ id: string;
name: string;
+ joinDate: string;
+}
+
+declare interface LoginOutputType {
id: string;
+ name: string;
joinDate: string;
+ accessToken: string;
+ refreshToken?: string;
+}
+
+declare interface UserLoginType {
+ accessToken: string;
+ refreshToken?: string;
}
+
// declare 사용하여 전역화 시킨다.
\ No newline at end of file
diff --git a/src/App.tsx b/src/App.tsx
index 0d5ef4a9..5939c852 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,13 +1,16 @@
import Main from "./pages/Main/main.tsx";
+import { Route, Routes } from "react-router-dom";
+// import ProtectedRoute from "./Components/ProtectedRoute.tsx";
+// import Admin from "./pages/Admin/admin.tsx";
function App() {
-
return (
- <>
-
라우터 필요시 생성
-
- >
+
+ } />
+ {/*}*/}
+
)
}
diff --git a/src/Components/Calendar-input/Calendar.tsx b/src/Components/Calendar-input/Calendar.tsx
index 0e00ab70..ccf9eae7 100644
--- a/src/Components/Calendar-input/Calendar.tsx
+++ b/src/Components/Calendar-input/Calendar.tsx
@@ -12,7 +12,7 @@ export default function MyDateRangePicker() {
}
]);
- // 선택한 날짜 범위를 받아 옵니다.
+ // 선택한 날짜 범위를 받아 옵니다. 확인용 콘솔입니다.
console.log(state[0].startDate);
console.log(state[0].endDate);
@@ -25,6 +25,7 @@ export default function MyDateRangePicker() {
editableDateInputs={true}
onChange={handleSelect}
moveRangeOnFirstSelection={false}
+ months={2}
ranges={state}
/>
);
diff --git a/src/Components/Common/Modal/Modal.css b/src/Components/Modal/Modal.css
similarity index 98%
rename from src/Components/Common/Modal/Modal.css
rename to src/Components/Modal/Modal.css
index 4cf03074..5b083395 100644
--- a/src/Components/Common/Modal/Modal.css
+++ b/src/Components/Modal/Modal.css
@@ -30,7 +30,7 @@
.modal-close {
bottom: 10px;
- width: 164px;
+ width: 200px;
height: 40px;
color: indianred;
font-size: 18px;
diff --git a/src/Components/Common/Modal/Modal.css.map b/src/Components/Modal/Modal.css.map
similarity index 100%
rename from src/Components/Common/Modal/Modal.css.map
rename to src/Components/Modal/Modal.css.map
diff --git a/src/Components/Common/Modal/Modal.scss b/src/Components/Modal/Modal.scss
similarity index 98%
rename from src/Components/Common/Modal/Modal.scss
rename to src/Components/Modal/Modal.scss
index c1c64ee0..72c07880 100644
--- a/src/Components/Common/Modal/Modal.scss
+++ b/src/Components/Modal/Modal.scss
@@ -31,7 +31,7 @@
}
.modal-close {
bottom: 10px;
- width: 164px;
+ width: 200px;
height: 40px;
color: indianred;
font-size: 18px;
diff --git a/src/Components/Common/Modal/Modal.tsx b/src/Components/Modal/Modal.tsx
similarity index 100%
rename from src/Components/Common/Modal/Modal.tsx
rename to src/Components/Modal/Modal.tsx
diff --git a/src/Hooks/useData-Query.tsx b/src/Hooks/useData-Query.tsx
index 463ebb2c..0f3913da 100644
--- a/src/Hooks/useData-Query.tsx
+++ b/src/Hooks/useData-Query.tsx
@@ -1,3 +1,38 @@
+import { QueryClient, useMutation, useQuery } from "@tanstack/react-query";
+import { getLogin, postUserJoin } from "../Api/api.ts";
+// react- query 커스텀 훅
-// react- query 커스텀 훅
\ No newline at end of file
+const queryClient = new QueryClient()
+
+
+export default function useDataQuery(accessToken:string) {
+
+ const getUserData =
+ useQuery(["useData", accessToken], () => {
+ if (accessToken) {
+ return getLogin(accessToken).then((res) => {
+ console.log(res);
+ return res;
+ });
+ } else {
+ return [];
+ }
+ }, { staleTime: 1000 * 60 });
+
+ const joinUser =
+ useMutation((joinData: JoinUserInputType ) => postUserJoin(joinData), {
+ onSuccess: () => {
+ queryClient.invalidateQueries(["useData", accessToken]);
+ }
+ });
+
+ return { joinUser, getUserData };
+}
+
+
+/*
+1. provider 설정
+2. useQuery 설정
+3. 필요한 곳에서 action 실행(Mutation)
+*/
diff --git a/src/main.tsx b/src/main.tsx
index 6aefa40d..6af864e5 100644
--- a/src/main.tsx
+++ b/src/main.tsx
@@ -1,14 +1,17 @@
-import React from 'react'
-import ReactDOM from 'react-dom/client'
-import App from './App.tsx'
-import './index.css'
+import React from "react";
+import ReactDOM from "react-dom/client";
+import App from "./App.tsx";
+import "./index.css";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
+import { BrowserRouter } from "react-router-dom";
-const queryClient = new QueryClient()
-ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
+const queryClient = new QueryClient();
+ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
-
-
-
- ,
-)
+
+
+
+
+
+
+);
diff --git a/src/pages/Main/main.tsx b/src/pages/Main/main.tsx
index 547a38f2..46c9e526 100644
--- a/src/pages/Main/main.tsx
+++ b/src/pages/Main/main.tsx
@@ -1,4 +1,4 @@
-import Modal from "../../Components/Common/Modal/Modal.tsx";
+import Modal from "../../Components/Modal/Modal.tsx";
import { useState } from "react";
import MyDateRangePicker from "../../Components/Calendar-input/Calendar.tsx";
diff --git a/vite.config.ts b/vite.config.ts
index 515b774f..131df9c5 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,12 +1,13 @@
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
+import sassDts from "vite-plugin-sass-dts";
import mkcert from "vite-plugin-mkcert";
import path from "path";
const __dirname = path.resolve();
// https://vitejs.dev/config/
export default defineConfig({
- plugins: [react(), mkcert()],
+ plugins: [react(), sassDts(), mkcert()],
resolve: {
alias: [{ find: "@", replacement: `${__dirname}/src` }],
},