App.js 6.39 KB
Newer Older
baesangjune's avatar
baesangjune committed
1
import React, { useState, useEffect } from 'react';
2
import { Link, Redirect } from 'react-router-dom';
Kim, Chaerin's avatar
?    
Kim, Chaerin committed
3
import ohuh from '../ohuh.PNG';
4
import { Container, Row, Form, Image, InputGroup, Button, Col, Card, Nav } from 'react-bootstrap';
baesangjune's avatar
baesangjune committed
5
import axios from 'axios';
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
6
import { handleLogout, isAuthenticated } from '../utils/auth.js'
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
7

Kim, Chaerin's avatar
Kim, Chaerin committed
8
function App() {
Kim, Chaerin's avatar
Kim, Chaerin committed
9
  const [state, setState] = useState(false);
Kim, Chaerin's avatar
Kim, Chaerin committed
10
  const [search, setSearch] = useState("");
baesangjune's avatar
baesangjune committed
11
12
  const [recommend, setRecommend] = useState([{ name: " ", address: " ", img: " " }]);
  const [latest, setLatest] = useState([{ name: " ", address: " ", img: " " }]);
Kim, Chaerin's avatar
?    
Kim, Chaerin committed
13

14
15
16
17
18

  useEffect(() => {
    getRecommend()
    getLatest()
  }, []);
Lee SeoYeon's avatar
0111    
Lee SeoYeon committed
19
  const user = isAuthenticated()
Lee SeoYeon's avatar
0113    
Lee SeoYeon committed
20

Kim, Chaerin's avatar
Kim, Chaerin committed
21
  if (state !== false) {
Kim, Chaerin's avatar
Kim, Chaerin committed
22
    return <Redirect to={`/search?keyword=${search}`} />;
Kim, Chaerin's avatar
Kim, Chaerin committed
23
  }
Kim, Chaerin's avatar
Kim, Chaerin committed
24
25
26

  const handleChange = (e) => {
    setSearch(e.target.value);
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
27
  } //바뀌는 것이 있을때 이벤트 발생
Kim, Chaerin's avatar
Kim, Chaerin committed
28

Kim, Chaerin's avatar
Kim, Chaerin committed
29
  const handleSubmit = () => {
Kim, Chaerin's avatar
Kim, Chaerin committed
30
    setState(true);
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
31
  } //submit 버튼을 누르면 state 값을 true로 바뀐다
Kim, Chaerin's avatar
Kim, Chaerin committed
32

baesangjune's avatar
baesangjune committed
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
  const getRecommend = () => {
    axios.get(`/api/app/recommend`)
      .then(res => {
        setRecommend(res.data)
      })
      .catch(err => {
        console.log("APP RECOMMEND ERROR", err)
      })
  }

  const getLatest = () => {
    axios.get(`/api/app/lastest`)
      .then(res => {
        setLatest(res.data)
      })
      .catch(err => {
        console.log("APP LATEST ERROR", err)
      })
51
52
53
  }


baesangjune's avatar
baesangjune committed
54

Kim, Chaerin's avatar
Kim, Chaerin committed
55
  return (
56
    <Container className="vh-100 ">
baesangjune's avatar
baesangjune committed
57
      <Col xs={12} >
58
        <Nav className="justify-content-end" bg="#fff" variant="light" style={{}} >
59
60
61
62
          {user ? <>
            <Nav.Link onClick={() => handleLogout()}>로그아웃</Nav.Link>
            <Nav.Link href='/bookmark'>북마크</Nav.Link>
          </>
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
63
64
65
66
67
68
69
            : (
              <>
                <Nav.Link href="/signup">회원가입</Nav.Link>
                <Nav.Link href="/login">로그인</Nav.Link>
              </>
            )}
        </Nav>
baesangjune's avatar
baesangjune committed
70
        <Row className="justify-content-center" md={2}>
71
72
          <Col className="d-flex justify-content-center">
            <Image src={ohuh} style={{ margin: "3%", marginTop: "3%" }} fluid />
baesangjune's avatar
baesangjune committed
73
          </Col>
Kim, Chaerin's avatar
서연    
Kim, Chaerin committed
74
        </Row>
75
        <Row style={{ marginBottom: "5%" }}>
Kim, Chaerin's avatar
서연    
Kim, Chaerin committed
76
          <Form className="vw-100" onSubmit={handleSubmit}>
77
            <InputGroup >
Kim, Chaerin's avatar
서연    
Kim, Chaerin committed
78
79
80
81
82
83
84
85
86
87
88
89
90
              <Form.Control
                size="lg"
                placeholder="검색어를 입력하세요."
                aria-label="Large"
                aria-describedby="inputGroup-sizing-sm"
                onChange={handleChange}
              />
              <InputGroup.Append>
                <Button type='submit' variant="outline-secondary">검색</Button>
              </InputGroup.Append>
            </InputGroup>
          </Form>
        </Row>
91
92
93
94
95
96
97
98
        <div class="row mb-2">
          <div class="col-md-6">
            <div class="row g-0 border rounded overflow-hidden flex-md-row mb-4 shadow-sm h-md-250 position-relative">
              <div class="col p-4 d-flex flex-column position-static">
                <strong class="d-inline-block mb-2 text-info">인기관광지</strong>
                <h3 class="mb-0">{recommend.name}</h3>
                <Image variant="top" style={{ padding: "5%", width: "100%", height: "340px" }} src={recommend.img} />
                <p class="card-text mb-auto">{recommend.address}</p>
Kim, Chaerin's avatar
.    
Kim, Chaerin committed
99
                <Link to={`/place?name=${recommend.name}&src=${recommend.img}&address=${recommend.address}`} >
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
                  <Button variant="info"> {recommend.name} 자세히 살펴보기</Button>
                </Link>
              </div>
              <div class="col-auto d-none d-lg-block">

              </div>
            </div>
          </div>
          <div class="col-md-6">
            <div class="row g-0 border rounded overflow-hidden flex-md-row mb-4 shadow-sm h-md-250 position-relative">
              <div class="col p-4 d-flex flex-column position-static">
                <strong class="d-inline-block mb-2 text-success">최근검색 관광지</strong>
                <h3 class="mb-0">{latest.name}</h3>
                <Image variant="top" style={{ padding: "5%", width: "100%", height: "340px" }} src={latest.img} />
                <p class="mb-auto">{latest.address}</p>
Kim, Chaerin's avatar
.    
Kim, Chaerin committed
115
                <Link to={`/place?name=${latest.name}&src=${latest.img}&address=${latest.address}`} >
116
117
118
119
120
121
122
123
124
125
126
127
                  <Button variant="info"> {latest.name} 자세히 살펴보기</Button>
                </Link>
              </div>
              <div class="col-auto d-none d-lg-block">

              </div>
            </div>
          </div>
        </div>


        {/* <Row  xs={6}>
baesangjune's avatar
baesangjune committed
128
          <Col md={6} xs={12}>
129
            <h1 className=" d-flex justify-content-center" style={{ marginBottom: "7%" }}>인기관광지</h1>
130
            <Card align="center" border="info" style={{ margin: "3%" }}>
baesangjune's avatar
baesangjune committed
131
              <Card.Header style={{  margin: "0",fontSize: '200%', fontWeight: 'bold' }} >{recommend.name}</Card.Header>
132
133
134
135
              <Card.Img variant="top" style={{ padding: "5%", width: "100%", height: "340px" }} src={recommend.img} />
              <Card.Body >
                <Card.Text style={{ overflow: 'auto', fontSize: '25px', width: '100%', height: "80px" }} >
                  {recommend.address} </Card.Text>
136
137
138
                  <Link to={`/place?id=${1}&place=${recommend.name}`} >
                  <Button variant="primary"> {recommend.name} 자세히 살펴보기</Button>
                </Link>
139
140
141
142
              </Card.Body>
            </Card>
          </Col>

baesangjune's avatar
baesangjune committed
143
          <Col md={6} xs={12}>
144
            <h1 className=" d-flex justify-content-center" style={{ marginBottom: "7%" }}>최근 검색관광지</h1>
baesangjune's avatar
baesangjune committed
145
146
            <Card align="center" border="info" style={{ margin: "3%" }} >
              <Card.Header style={{  margin: "0", fontSize: '200%', fontWeight: 'bold'}} bg="danger">{latest.name}</Card.Header>
147
148
149
150
              <Card.Img variant="top" style={{ padding: "5%", width: "100%", height: "340px" }} src={latest.img} />
              <Card.Body >
                <Card.Text style={{ overflow: 'auto', fontSize: '25px', width: '100%', height: "80px" }} >
                  {latest.address} </Card.Text>
151
152
153
                <Link to={`/place?id=${1}&place=${latest.name}`} >
                  <Button variant="primary"> {latest.name} 자세히 살펴보기</Button>
                </Link>
154
155
156
              </Card.Body>
            </Card>
          </Col>
157
        </Row> */}
Kim, Chaerin's avatar
서연    
Kim, Chaerin committed
158
      </Col>
Kim, Chaerin's avatar
Kim, Chaerin committed
159
    </Container>
160
161


Kim, Chaerin's avatar
Kim, Chaerin committed
162
163
164
  );
}

Lee SeoYeon's avatar
0113    
Lee SeoYeon committed
165
export default App;