Showing
7 changed files
with
114 additions
and
20 deletions
1 | -import "./styles/App.css"; | ||
2 | import { BrowserRouter, Route, Routes } from "react-router-dom"; | 1 | import { BrowserRouter, Route, Routes } from "react-router-dom"; |
2 | +import React from "react"; | ||
3 | 3 | ||
4 | +import "./styles/App.css"; | ||
4 | import Calendar from "./pages/Calendar"; | 5 | import Calendar from "./pages/Calendar"; |
5 | import Home from "./pages/Home"; | 6 | import Home from "./pages/Home"; |
7 | +import Login from "./pages/Login"; | ||
8 | +import Settings from "./pages/Settings"; | ||
9 | + | ||
10 | +export const AppStateContext = React.createContext(); | ||
6 | 11 | ||
7 | function App() { | 12 | function App() { |
8 | return ( | 13 | return ( |
9 | <BrowserRouter> | 14 | <BrowserRouter> |
10 | - <div className="App"> | 15 | + <AppStateContext.Provider value={[]}> |
11 | - <Routes> | 16 | + <div className="App"> |
12 | - <Route path="/calendar/*" element={<Calendar />} /> | 17 | + <Routes> |
13 | - <Route exact path="/login" element={<></>} /> | 18 | + <Route path="*" element={<Home />} /> |
14 | - <Route exact path="/setting" element={<></>} /> | 19 | + <Route path="/calendar/*" element={<Calendar />} /> |
15 | - <Route path="*" element={<Home />} /> | 20 | + <Route path="/login" element={<Login />} /> |
16 | - </Routes> | 21 | + <Route path="/settings" element={<Settings />} /> |
17 | - </div> | 22 | + </Routes> |
23 | + </div> | ||
24 | + </AppStateContext.Provider> | ||
18 | </BrowserRouter> | 25 | </BrowserRouter> |
19 | ); | 26 | ); |
20 | } | 27 | } | ... | ... |
... | @@ -59,6 +59,9 @@ const Header = () => { | ... | @@ -59,6 +59,9 @@ const Header = () => { |
59 | <span className="hcs">{headLabel}</span> | 59 | <span className="hcs">{headLabel}</span> |
60 | </div> | 60 | </div> |
61 | <div className="hr"> | 61 | <div className="hr"> |
62 | + <button className="hrb_l" onClick={() => navigate("/settings")}> | ||
63 | + 설정 | ||
64 | + </button> | ||
62 | <div className="hrd"> | 65 | <div className="hrd"> |
63 | <button | 66 | <button |
64 | disabled={state.scope === "day"} | 67 | disabled={state.scope === "day"} |
... | @@ -85,6 +88,15 @@ const Header = () => { | ... | @@ -85,6 +88,15 @@ const Header = () => { |
85 | 월 | 88 | 월 |
86 | </button> | 89 | </button> |
87 | </div> | 90 | </div> |
91 | + <button | ||
92 | + className="hrb_r" | ||
93 | + onClick={() => { | ||
94 | + localStorage.setItem("session", ""); | ||
95 | + navigate("/"); | ||
96 | + }} | ||
97 | + > | ||
98 | + 로그아웃 | ||
99 | + </button> | ||
88 | </div> | 100 | </div> |
89 | </header> | 101 | </header> |
90 | ); | 102 | ); | ... | ... |
1 | import React, { useState } from "react"; | 1 | import React, { useState } from "react"; |
2 | -import { Route, Routes } from "react-router-dom"; | 2 | +import { Navigate, Route, Routes } from "react-router-dom"; |
3 | 3 | ||
4 | import Grid from "../components/Grid"; | 4 | import Grid from "../components/Grid"; |
5 | import Header from "../components/Header"; | 5 | import Header from "../components/Header"; |
... | @@ -8,7 +8,10 @@ import "../styles/Home.css"; | ... | @@ -8,7 +8,10 @@ import "../styles/Home.css"; |
8 | export const CalendarStateContext = React.createContext(); | 8 | export const CalendarStateContext = React.createContext(); |
9 | 9 | ||
10 | const Calendar = () => { | 10 | const Calendar = () => { |
11 | - //scope는 day, state는 date | 11 | + console.log("visit Calendar"); |
12 | + | ||
13 | + const session = localStorage.getItem("session"); | ||
14 | + | ||
12 | const [state, setState] = useState({ | 15 | const [state, setState] = useState({ |
13 | scope: "month", | 16 | scope: "month", |
14 | date: new Date(), | 17 | date: new Date(), |
... | @@ -16,14 +19,18 @@ const Calendar = () => { | ... | @@ -16,14 +19,18 @@ const Calendar = () => { |
16 | 19 | ||
17 | return ( | 20 | return ( |
18 | <CalendarStateContext.Provider value={[state, setState]}> | 21 | <CalendarStateContext.Provider value={[state, setState]}> |
19 | - <div className="Calendar"> | 22 | + {session ? ( |
20 | - <Header /> | 23 | + <div className="Calendar"> |
21 | - <Routes> | 24 | + <Header /> |
22 | - <Route path="/month/*" element={<Grid />} /> | 25 | + <Routes> |
23 | - <Route path="/week/*" element={<></>} /> | 26 | + <Route path="/month/*" element={<Grid />} /> |
24 | - <Route path="/day/*" element={<></>} /> | 27 | + <Route path="/week/*" element={<></>} /> |
25 | - </Routes> | 28 | + <Route path="/day/*" element={<></>} /> |
26 | - </div> | 29 | + </Routes> |
30 | + </div> | ||
31 | + ) : ( | ||
32 | + <Navigate to="/login" /> | ||
33 | + )} | ||
27 | </CalendarStateContext.Provider> | 34 | </CalendarStateContext.Provider> |
28 | ); | 35 | ); |
29 | }; | 36 | }; | ... | ... |
... | @@ -2,8 +2,18 @@ import { useEffect } from "react"; | ... | @@ -2,8 +2,18 @@ import { useEffect } from "react"; |
2 | import { useNavigate } from "react-router-dom"; | 2 | import { useNavigate } from "react-router-dom"; |
3 | 3 | ||
4 | const Home = () => { | 4 | const Home = () => { |
5 | + const session = localStorage.getItem("session"); | ||
6 | + console.log("visit Home"); | ||
7 | + | ||
8 | + let destination; | ||
9 | + if (session) { | ||
10 | + destination = "/calendar/month"; | ||
11 | + } else { | ||
12 | + destination = "/login"; | ||
13 | + } | ||
14 | + | ||
5 | const navigate = useNavigate(); | 15 | const navigate = useNavigate(); |
6 | - useEffect(() => navigate("/calendar/month"), [navigate]); | 16 | + useEffect(() => navigate(destination), [destination, navigate]); |
7 | }; | 17 | }; |
8 | 18 | ||
9 | export default Home; | 19 | export default Home; | ... | ... |
src/pages/Login.js
0 → 100644
1 | +import { Navigate, useNavigate } from "react-router-dom"; | ||
2 | + | ||
3 | +const Login = () => { | ||
4 | + console.log("visit Login"); | ||
5 | + const session = localStorage.getItem("session"); | ||
6 | + | ||
7 | + const navigate = useNavigate(); | ||
8 | + const login = () => { | ||
9 | + if (true) { | ||
10 | + //login success | ||
11 | + localStorage.setItem("session", true); | ||
12 | + | ||
13 | + navigate("/"); | ||
14 | + } | ||
15 | + }; | ||
16 | + | ||
17 | + return session ? ( | ||
18 | + <Navigate to="/" /> | ||
19 | + ) : ( | ||
20 | + <div className="Login"> | ||
21 | + <button onClick={login}>로그인</button> | ||
22 | + </div> | ||
23 | + ); | ||
24 | +}; | ||
25 | + | ||
26 | +export default Login; |
src/pages/Settings.js
0 → 100644
1 | +import { Navigate, useNavigate } from "react-router-dom"; | ||
2 | + | ||
3 | +const Settings = () => { | ||
4 | + const session = localStorage.getItem("session"); | ||
5 | + | ||
6 | + const navigate = useNavigate(); | ||
7 | + | ||
8 | + return session ? ( | ||
9 | + <div className="Settings"> | ||
10 | + <button | ||
11 | + onClick={() => { | ||
12 | + navigate(-1); | ||
13 | + }} | ||
14 | + > | ||
15 | + {"<"} | ||
16 | + </button> | ||
17 | + </div> | ||
18 | + ) : ( | ||
19 | + <Navigate to="/login" /> | ||
20 | + ); | ||
21 | +}; | ||
22 | + | ||
23 | +export default Settings; |
... | @@ -41,7 +41,16 @@ header { | ... | @@ -41,7 +41,16 @@ header { |
41 | margin: 10px; | 41 | margin: 10px; |
42 | } | 42 | } |
43 | 43 | ||
44 | +.hrd { | ||
45 | + margin-right: 10px; | ||
46 | + margin-left: 10px; | ||
47 | +} | ||
48 | + | ||
44 | .hrd > button { | 49 | .hrd > button { |
45 | padding: 8px 14px 8px 14px; | 50 | padding: 8px 14px 8px 14px; |
46 | font-size: medium; | 51 | font-size: medium; |
47 | } | 52 | } |
53 | + | ||
54 | +.hr { | ||
55 | + display: flex; | ||
56 | +} | ... | ... |
-
Please register or login to post a comment