Showing
5 changed files
with
202 additions
and
12 deletions
... | @@ -10,8 +10,40 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" | ... | @@ -10,8 +10,40 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" |
10 | const MealCard = (props) => { | 10 | const MealCard = (props) => { |
11 | 11 | ||
12 | const [modal, setModal] = useState(false); | 12 | const [modal, setModal] = useState(false); |
13 | + const [isLogin, setIsLogin] = useState(false); | ||
13 | const toggleModal = () => setModal(!modal); | 14 | const toggleModal = () => setModal(!modal); |
14 | 15 | ||
16 | + | ||
17 | + const authApi = () => { | ||
18 | + const user = JSON.parse(localStorage.getItem('user')); | ||
19 | + return fetch('/api/auth', { | ||
20 | + method: 'GET', | ||
21 | + headers: { | ||
22 | + 'Content-Type': 'application/json', | ||
23 | + 'authorization': user | ||
24 | + } | ||
25 | + }).then(response => response.json()) | ||
26 | + .then(result => { | ||
27 | + if(result.message === 'valid token') { | ||
28 | + setIsLogin(true); | ||
29 | + // pick 로직 수행 | ||
30 | + } else { | ||
31 | + alert('로그인이 필요합니다.'); | ||
32 | + window.location.href = "/mypick"; | ||
33 | + } | ||
34 | + }); | ||
35 | + } | ||
36 | + | ||
37 | + const pickHandler = (e) => { | ||
38 | + e.preventDefault(); | ||
39 | + authApi(); | ||
40 | + } | ||
41 | + | ||
42 | + // useEffect(() => { | ||
43 | + // authApi(); | ||
44 | + // }, [isLogin]); | ||
45 | + | ||
46 | + | ||
15 | return ( | 47 | return ( |
16 | <> | 48 | <> |
17 | <Card style={{ | 49 | <Card style={{ |
... | @@ -83,7 +115,7 @@ const MealCard = (props) => { | ... | @@ -83,7 +115,7 @@ const MealCard = (props) => { |
83 | <small> | 115 | <small> |
84 | 썸네일 출처 | 116 | 썸네일 출처 |
85 | <hr className="my-2"/> | 117 | <hr className="my-2"/> |
86 | - {props.img_source} <Button size="sm" className="float-right" color="warning">Pick!</Button> | 118 | + {props.img_source} <Button onClick={pickHandler} size="sm" className="float-right" color="warning">Pick!</Button> |
87 | </small> | 119 | </small> |
88 | </div> | 120 | </div> |
89 | </ModalFooter> | 121 | </ModalFooter> | ... | ... |
1 | -import React from 'react'; | 1 | +import React, { useState, useEffect } from 'react'; |
2 | import NavBar from '../components/NavBar'; | 2 | import NavBar from '../components/NavBar'; |
3 | +import MealCard from '../components/MealCard'; | ||
4 | +import { CustomInput } from 'reactstrap'; | ||
5 | +import { Container, Row, Col } from "reactstrap"; | ||
6 | +import axios from 'axios'; | ||
7 | +import Loading from '../components/Loading'; | ||
3 | 8 | ||
4 | const LandingPage = (props) => { | 9 | const LandingPage = (props) => { |
10 | + const [datas, setDatas] = useState([]); | ||
11 | + const [filteredDatas, setFilteredDatas] = useState([]); | ||
12 | + const [isLoading, setIsLoading] = useState(false); | ||
13 | + const [all, setAll] = useState(false); | ||
14 | + const [Kfood, setKfood] = useState(false); | ||
15 | + const [Cfood, setCfood] = useState(false); | ||
16 | + const [Jfood, setJfood] = useState(false); | ||
17 | + const [meat, setMeat] = useState(false); | ||
18 | + const [snackfood, setSnackfood] = useState(false); | ||
19 | + const [pub, setPub] = useState(false); | ||
20 | + const [fastfood, setFastfood] = useState(false); | ||
21 | + const [cafe, setCafe] = useState(false); | ||
22 | + const [etc, setEtc] = useState(false); | ||
23 | + | ||
24 | + useEffect(() => { | ||
25 | + const fetchData = async () => { | ||
26 | + const result = await axios( | ||
27 | + 'http://localhost:5000/api/datas', | ||
28 | + // localhost로 바꾸기 | ||
29 | + ); | ||
30 | + setDatas(result.data); | ||
31 | + setIsLoading(true); | ||
32 | + }; | ||
33 | + fetchData(); | ||
34 | + }, []); | ||
35 | + | ||
36 | + // filtereddatas 처리 + isloading변경 | ||
37 | + | ||
38 | + useEffect(() => { | ||
39 | + setIsLoading(false); | ||
40 | + let result = []; | ||
41 | + const states = [Kfood, Cfood, Jfood, meat, snackfood, pub, fastfood, cafe, etc]; | ||
42 | + const types = [['한식'], ['중식'], ['일식'], ['고기'], ['분식'], ['호프', '술집'], ['패스트푸드'], ['카페', '디저트'], ['기타']]; | ||
43 | + for(let i = 0; i < states.length; i++) { | ||
44 | + if(states[i] === true) { | ||
45 | + const temp = types[i]; | ||
46 | + for(let j = 0; j < datas.length; j++) { | ||
47 | + for(let k = 0; k < temp.length; k++) { | ||
48 | + if(datas[j].type === temp[k]) { | ||
49 | + result.push(datas[j]); | ||
50 | + } | ||
51 | + } | ||
52 | + } | ||
53 | + } | ||
54 | + } | ||
55 | + setFilteredDatas(result); | ||
56 | + setIsLoading(true); | ||
57 | + }, [Kfood, Cfood, Jfood, meat, snackfood, pub, fastfood, cafe, etc]); | ||
58 | + | ||
59 | + useEffect(() => { | ||
60 | + if(all === true) { | ||
61 | + setKfood(true); | ||
62 | + setCfood(true); | ||
63 | + setJfood(true); | ||
64 | + setMeat(true); | ||
65 | + setSnackfood(true); | ||
66 | + setPub(true); | ||
67 | + setFastfood(true); | ||
68 | + setCafe(true); | ||
69 | + setEtc(true); | ||
70 | + } | ||
71 | + else { | ||
72 | + setKfood(false); | ||
73 | + setCfood(false); | ||
74 | + setJfood(false); | ||
75 | + setMeat(false); | ||
76 | + setSnackfood(false); | ||
77 | + setPub(false); | ||
78 | + setFastfood(false); | ||
79 | + setCafe(false); | ||
80 | + setEtc(false); | ||
81 | + } | ||
82 | + }, [all]); | ||
5 | 83 | ||
6 | return ( | 84 | return ( |
7 | <> | 85 | <> |
8 | <NavBar/> | 86 | <NavBar/> |
9 | - Landign page | 87 | + <Container style={{ |
88 | + paddingTop : '1.5rem' | ||
89 | + }}> | ||
90 | + | ||
91 | + <Row> | ||
92 | + <Col> | ||
93 | + <CustomInput type="switch" id="all" label="전체" | ||
94 | + checked={all} | ||
95 | + onChange={()=> setAll(!all)} | ||
96 | + /> | ||
97 | + </Col> | ||
98 | + </Row> | ||
99 | + <Row xs="3" sm="3" md="5"> | ||
100 | + <Col> | ||
101 | + <CustomInput type="checkbox" id="Kfood" label="한식" | ||
102 | + checked={Kfood} | ||
103 | + onChange={()=>setKfood(!Kfood)} | ||
104 | + /> | ||
105 | + </Col> | ||
106 | + <Col> | ||
107 | + <CustomInput type="checkbox" id="Cfood" label="중식" | ||
108 | + checked={Cfood} | ||
109 | + onChange={()=>setCfood(!Cfood)} | ||
110 | + /> | ||
111 | + </Col> | ||
112 | + <Col> | ||
113 | + <CustomInput type="checkbox" id="Jfood" label="일식" | ||
114 | + checked={Jfood} | ||
115 | + onChange={()=>setJfood(!Jfood)} | ||
116 | + /> | ||
117 | + </Col> | ||
118 | + <Col> | ||
119 | + <CustomInput type="checkbox" id="meat" label="고기" | ||
120 | + checked={meat} | ||
121 | + onChange={()=>setMeat(!meat)} | ||
122 | + /> | ||
123 | + </Col> | ||
124 | + <Col> | ||
125 | + <CustomInput type="checkbox" id="snackfood" label="분식" | ||
126 | + checked={snackfood} | ||
127 | + onChange={()=>setSnackfood(!snackfood)} | ||
128 | + /> | ||
129 | + </Col> | ||
130 | + <Col> | ||
131 | + <CustomInput type="checkbox" id="pub" label="호프/술집" | ||
132 | + checked={pub} | ||
133 | + onChange={()=>setPub(!pub)} | ||
134 | + /> | ||
135 | + </Col> | ||
136 | + | ||
137 | + <Col> | ||
138 | + <CustomInput type="checkbox" id="fastfood" label="패스트푸드" | ||
139 | + checked={fastfood} | ||
140 | + onChange={()=>setFastfood(!fastfood)} | ||
141 | + /> | ||
142 | + </Col> | ||
143 | + <Col> | ||
144 | + <CustomInput type="checkbox" id="cafe" label="카페/디저트" | ||
145 | + checked={cafe} | ||
146 | + onChange={()=>setCafe(!cafe)} | ||
147 | + /> | ||
148 | + </Col> | ||
149 | + <Col> | ||
150 | + <CustomInput type="checkbox" id="etc" label="기타" | ||
151 | + checked={etc} | ||
152 | + onChange={()=>setEtc(!etc)} | ||
153 | + /> | ||
154 | + </Col> | ||
155 | + | ||
156 | + </Row> | ||
157 | + </Container> | ||
158 | + | ||
159 | + | ||
160 | + <Container> | ||
161 | + {/* ???????? ???? */} | ||
162 | + {/* <FormGroup> | ||
163 | + <Label for="exampleCheckbox">??</Label> | ||
164 | + <div> | ||
165 | + <CustomInput type="checkbox" id="exampleCustomInline" label="??" inline /> | ||
166 | + | ||
167 | + </div> | ||
168 | + </FormGroup> */} | ||
169 | + </Container> | ||
170 | + | ||
171 | + | ||
172 | + | ||
173 | + | ||
10 | </> | 174 | </> |
11 | ); | 175 | ); |
12 | } | 176 | } |
13 | 177 | ||
178 | + | ||
14 | export default LandingPage; | 179 | export default LandingPage; |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
client/src/pages/MenuPage.css
deleted
100644 → 0
... | @@ -5,7 +5,7 @@ import { CustomInput } from 'reactstrap'; | ... | @@ -5,7 +5,7 @@ import { CustomInput } from 'reactstrap'; |
5 | import { Container, Row, Col } from "reactstrap"; | 5 | import { Container, Row, Col } from "reactstrap"; |
6 | import axios from 'axios'; | 6 | import axios from 'axios'; |
7 | import Loading from '../components/Loading'; | 7 | import Loading from '../components/Loading'; |
8 | -import './MenuPage.css'; | 8 | + |
9 | 9 | ||
10 | 10 | ||
11 | const MenuPage = (props) => { | 11 | const MenuPage = (props) => { | ... | ... |
... | @@ -23,7 +23,7 @@ const MypickPage = () => { | ... | @@ -23,7 +23,7 @@ const MypickPage = () => { |
23 | setIsLogin(true); | 23 | setIsLogin(true); |
24 | 24 | ||
25 | } else if(result.message === 'expired token') { | 25 | } else if(result.message === 'expired token') { |
26 | - alert('토큰이 만료되었습니다. 로그인 해주세요.'); | 26 | + // alert('토큰이 만료되었습니다. 로그인 해주세요.'); |
27 | setIsLogin(false); | 27 | setIsLogin(false); |
28 | } else if(result.message === 'invalid token') { | 28 | } else if(result.message === 'invalid token') { |
29 | setIsLogin(false); | 29 | setIsLogin(false); | ... | ... |
-
Please register or login to post a comment