Bookmark.js 5.04 KB
Newer Older
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
1
import React, { useState, useEffect } from 'react'
2
import { Col, Card, Container, Row, Button, Nav, Navbar, Image } from "react-bootstrap"
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
3
import axios from "axios"
Kim, Chaerin's avatar
z    
Kim, Chaerin committed
4
5
6
import ohuh from '../ohuh-sm.PNG';
import catchErrors from '../utils/catchErrors.js'
import { isAuthenticated } from '../utils/auth'
Lee SeoYeon's avatar
0127    
Lee SeoYeon committed
7
import * as Icon from 'react-bootstrap-icons';
8
import { Link } from 'react-router-dom'
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
9

Lee SeoYeon's avatar
.    
Lee SeoYeon committed
10

Lee SeoYeon's avatar
..    
Lee SeoYeon committed
11
const INIT_PAGE = {
Lee SeoYeon's avatar
0127    
Lee SeoYeon committed
12
    bookmark: []
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
13
14
}

Lee SeoYeon's avatar
.    
Lee SeoYeon committed
15

Lee SeoYeon's avatar
.    
Lee SeoYeon committed
16
function Bookmark() {
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
17
    const [page, setPage] = useState(INIT_PAGE)
Lee SeoYeon's avatar
0127    
Lee SeoYeon committed
18
    const [index, setIndex] = useState(1);
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
19
    const [error, setError] = useState('')
Lee SeoYeon's avatar
..    
Lee SeoYeon committed
20
    const [state, setState] = useState(false);
21
    const [bookmark, setBookmark] = useState([true, true, true, true])
Lee SeoYeon's avatar
0127    
Lee SeoYeon committed
22
23
    const [pagePlace, setPagePlace] = useState([])
    const [showSet, setShowSet] = useState([false, false, false, false]);
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
24

Lee SeoYeon's avatar
.    
Lee SeoYeon committed
25
26
    const user = isAuthenticated()

Lee SeoYeon's avatar
.    
Lee SeoYeon committed
27
    async function getBookmark() {
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
28
        try {
Lee SeoYeon's avatar
0127    
Lee SeoYeon committed
29
30
            const response = await axios.get(`/api/users/bookmark?ID=${user}`)
            setPagePlace(response.data.bookmark)
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
31
32
        } catch (error) {
            catchErrors(error, setError)
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
33
        }
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
34
35
    }

Lee SeoYeon's avatar
0127    
Lee SeoYeon committed
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

    async function handleBookmark(index) {
        if (!bookmark[index]) {
            console.log(pagePlace[index])
            try {
                const response = await axios.put(`/api/users/bookmark?ID=${user}&place=${pagePlace[index]._id}`)
                alert(response.data, '북마크가 저장되었습니다.')
                const showArr = bookmark
                showArr[index] = true
                setBookmark(showArr)
                console.log("bookmark=", bookmark)
            } catch (error) {
                catchErrors(error, setError)
            }
        } else {
            try {
52
                const response = await axios.delete(`/api/users/bookmark?ID=${user}&place=${pagePlace[index]._id}`)
Lee SeoYeon's avatar
0127    
Lee SeoYeon committed
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
                alert(response.data, '저장된 북마크가 삭제되었습니다.')
                const showArr = bookmark
                showArr[index] = false
                setBookmark(showArr)
                console.log("bookmark=", bookmark)
            } catch (error) {
                catchErrors(error, setError)
            }
        }
    }
    useEffect(() => {
        getBookmark()
    }, [])


Lee SeoYeon's avatar
.    
Lee SeoYeon committed
68
69
    return (
        <Container>
Kim, Chaerin's avatar
z    
Kim, Chaerin committed
70
71
72
73
74
75
            <Link to="/" className="d-flex justify-content-center"><Image src={ohuh} /></Link>
            <div class="d-flex align-items-center p-3 text-white bg-info rounded shadow-sm">
                <div >
                    <h1 class="h6 mb-0 text-white">북마크</h1>
                </div>
            </div>
Lee SeoYeon's avatar
0127    
Lee SeoYeon committed
76
77
78
79
80
81
82
            <Row className="d-flex flex-wrap">
                {console.log("#####################33", pagePlace)}
                {pagePlace.map((place, index) => {
                    return (
                        <Col key={index} md={6} >
                            <Card align="center" border="info" style={{ margin: "3%" }}>

baesangjune's avatar
baesangjune committed
83
                                <Card.Header className="d-flex justify-content-center" style={{ margin: "0", fontSize: '200%', fontWeight: 'bold' }} >{place.name}
Lee SeoYeon's avatar
0127    
Lee SeoYeon committed
84
85
                                    {user ?
                                        <Button
86
87
                                            className="float-right"
                                            variant={bookmark[index] ? "info" : "light"}
Lee SeoYeon's avatar
0127    
Lee SeoYeon committed
88
89
90
91
                                            onClick={() => handleBookmark(index, place)}>
                                            <Icon.BookmarkStarFill size={35} />
                                            {console.log("bookmark", bookmark)}
                                            {console.log("bookmark[index]", bookmark[index])}</Button> : null}
baesangjune's avatar
baesangjune committed
92
                                </Card.Header>
Lee SeoYeon's avatar
0127    
Lee SeoYeon committed
93
94
95
96
                                <Card.Img variant="top" style={{ padding: "5%", width: "100%", height: "340px" }} src={place.img} />
                                <Card.Body >
                                    <Card.Text style={{ overflow: 'auto', fontSize: '25px', width: '100%', height: "80px" }} >
                                        {place.address} </Card.Text>
97
                                    <Link to={`/place?&place=${place.name}`} >
Kim, Chaerin's avatar
z    
Kim, Chaerin committed
98
99
                                        <Button variant="info"> {place.name} 자세히 살펴보기</Button>
                                    </Link>
Lee SeoYeon's avatar
0127    
Lee SeoYeon committed
100
101
102
103
104
105
106
107
                                </Card.Body>
                            </Card>
                        </Col>
                    )
                })}


            </Row>
108
        </Container >
Lee SeoYeon's avatar
.    
Lee SeoYeon committed
109
110
111
    )
}

Lee SeoYeon's avatar
..    
Lee SeoYeon committed
112
113
114
115
export default Bookmark


    // async function handleSubmit(e){
Lee SeoYeon's avatar
0127    
Lee SeoYeon committed
116
        //     setState(true);  //버튼이 눌려서 handlesubmit이될때 setState값이 true로 바뀐다
Lee SeoYeon's avatar
..    
Lee SeoYeon committed
117
118
119
120
121
122
123
124
125
126
127
128
    //     try { //respons 서버에 post로 요청하여 데이터를 받아온다
    //         const response = await axios.post('/api/users/bookmark', page)
    //         setSuccess(true)
    //     } catch (error) {
    //         console.log(error)
    //         catchErrors(error, setError)
    //     }
    // }

    // useEffect(() => {
    //     getBookmark(user)
    // }, [user])