Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
students
search-page
Commits
2eb0844a
Commit
2eb0844a
authored
Jan 25, 2021
by
Lee SeoYeon
Browse files
.
parent
50aa8371
Changes
1
Hide whitespace changes
Inline
Side-by-side
client/.eslintcache
View file @
2eb0844a
[{
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
index.js"
:
"1"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
reportWebVitals.js"
:
"2"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
Place.js"
:
"3"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
Login.js"
:
"4"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
utils
\\
catchErrors.js"
:
"5"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
Signup.js"
:
"6"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
utils
\\
auth.js"
:
"7"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
Paginations.js"
:
"8"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Search.js"
:
"9"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
App.js"
:
"10"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
PrivateRoute.js"
:
"11"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Bookmark.js"
:
"12"
},{
"size"
:
1267
,
"mtime"
:
1611500254459
,
"results"
:
"13"
,
"hashOfConfig"
:
"14"
},{
"size"
:
362
,
"mtime"
:
499162500000
,
"results"
:
"15"
,
"hashOfConfig"
:
"14"
},{
"size"
:
1650
,
"mtime"
:
1611552739016
,
"results"
:
"16"
,
"hashOfConfig"
:
"14"
},{
"size"
:
3147
,
"mtime"
:
1611553267391
,
"results"
:
"17"
,
"hashOfConfig"
:
"14"
},{
"size"
:
405
,
"mtime"
:
1609915408569
,
"results"
:
"18"
,
"hashOfConfig"
:
"14"
},{
"size"
:
2995
,
"mtime"
:
1611489922054
,
"results"
:
"19"
,
"hashOfConfig"
:
"14"
},{
"size"
:
726
,
"mtime"
:
1611495738863
,
"results"
:
"20"
,
"hashOfConfig"
:
"14"
},{
"size"
:
2199
,
"mtime"
:
1610503781980
,
"results"
:
"21"
,
"hashOfConfig"
:
"14"
},{
"size"
:
10588
,
"mtime"
:
1611552795555
,
"results"
:
"22"
,
"hashOfConfig"
:
"14"
},{
"size"
:
2167
,
"mtime"
:
1611500202857
,
"results"
:
"23"
,
"hashOfConfig"
:
"14"
},{
"size"
:
486
,
"mtime"
:
1611489922054
,
"results"
:
"24"
,
"hashOfConfig"
:
"14"
},{
"size"
:
2609
,
"mtime"
:
1611551384114
,
"results"
:
"25"
,
"hashOfConfig"
:
"14"
},{
"filePath"
:
"26"
,
"messages"
:
"27"
,
"errorCount"
:
0
,
"warningCount"
:
1
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
"28"
,
"usedDeprecatedRules"
:
"29"
},
"1t9w6go"
,{
"filePath"
:
"30"
,
"messages"
:
"31"
,
"errorCount"
:
0
,
"warningCount"
:
0
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"usedDeprecatedRules"
:
"29"
},{
"filePath"
:
"32"
,
"messages"
:
"33"
,
"errorCount"
:
0
,
"warningCount"
:
2
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
"34"
,
"usedDeprecatedRules"
:
"29"
},{
"filePath"
:
"35"
,
"messages"
:
"36"
,
"errorCount"
:
0
,
"warningCount"
:
0
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
},{
"filePath"
:
"37"
,
"messages"
:
"38"
,
"errorCount"
:
0
,
"warningCount"
:
0
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"usedDeprecatedRules"
:
"29"
},{
"filePath"
:
"39"
,
"messages"
:
"40"
,
"errorCount"
:
0
,
"warningCount"
:
0
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"usedDeprecatedRules"
:
"29"
},{
"filePath"
:
"41"
,
"messages"
:
"42"
,
"errorCount"
:
0
,
"warningCount"
:
0
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"usedDeprecatedRules"
:
"29"
},{
"filePath"
:
"43"
,
"messages"
:
"44"
,
"errorCount"
:
0
,
"warningCount"
:
0
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"usedDeprecatedRules"
:
"29"
},{
"filePath"
:
"45"
,
"messages"
:
"46"
,
"errorCount"
:
0
,
"warningCount"
:
14
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
"47"
,
"usedDeprecatedRules"
:
"29"
},{
"filePath"
:
"48"
,
"messages"
:
"49"
,
"errorCount"
:
0
,
"warningCount"
:
4
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
"50"
,
"usedDeprecatedRules"
:
"29"
},{
"filePath"
:
"51"
,
"messages"
:
"52"
,
"errorCount"
:
0
,
"warningCount"
:
0
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"usedDeprecatedRules"
:
"29"
},{
"filePath"
:
"53"
,
"messages"
:
"54"
,
"errorCount"
:
0
,
"warningCount"
:
15
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
"55"
,
"usedDeprecatedRules"
:
"29"
},
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
index.js"
,[
"56"
],
"import React from 'react';
\r\n
import ReactDOM from 'react-dom';
\r\n
import './index.css';
\r\n
import 'bootstrap/dist/css/bootstrap.min.css';
\r\n
import App from './App'
\r\n
import Search from './Search';
\r\n
import reportWebVitals from './reportWebVitals';
\r\n
import Signup from './Components/Signup'
\r\n
import Login from './Components/Login'
\r\n
import PrivateRoute from
\"
./Components/PrivateRoute
\"
;
\r\n
import axios from 'axios'
\r\n
import Bookmark from
\"
./Bookmark
\"\r\n
import {\r
\n
BrowserRouter as Router,
\r\n
Switch,
\r\n
Route,
\r\n
Redirect,
\r\n
} from
\"
react-router-dom
\"
;
\r\n\r\n
ReactDOM.render(
\r\n
<React.StrictMode>
\r\n
<Router>
\r\n
<Switch>
\r\n
<Route exact path=
\"
/
\"
component=
{
App
}
/>
\r\n
<Route path=
\"
/search
\"
component=
{
Search
}
/>
\r\n
<Route path='/signup' component=
{
Signup
}
/>
\r\n
<Route path='/login' component=
{
Login
}
/>
\r\n
<PrivateRoute path='/bookmark'><Bookmark/></PrivateRoute>
\r\n
<Redirect path=
\"
/search
\"
to=
\"
/search
\"
/>
\r\n
</Switch>
\r\n
</Router>
\r\n
</React.StrictMode>,
\r\n
document.getElementById('root')
\r\n
);
\r\n\r\n
// If you want to start measuring performance in your app, pass a function
\r\n
// to log results (for example: reportWebVitals(console.log))
\r\n
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
\r\n
reportWebVitals();
\r\n
"
,[
"57"
,
"58"
],
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
reportWebVitals.js"
,[],
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
Place.js"
,[
"59"
,
"60"
],
"import axios from 'axios';
\r\n
import React, { useEffect, useState } from 'react';
\r\n
import { Modal, Container, Row, Button, } from 'react-bootstrap';
\r\n\r\n
function Place(props) {\r
\n
const [reviews, setReviews] = useState()
\r\n
const [db, setDb] = useState(false)
\r\n
const getReview = () => {\r
\n
axios({ url: `/api/review?keyword=${props.place.name}`, method: 'post', data: { db: db } })
\r\n
.then(res => {\r
\n
console.log(
\"
place res.data
\"
, res.data)
\r\n
setReviews(res.data)
\r\n
})
\r\n
.catch(err => {\r
\n
console.log(err)
\r\n
})
\r\n
}
\r\n\r\n
useEffect(() => {\r
\n
getReview();
\r\n
}, [])
\r\n\r\n
return (
\r\n
<Modal
{
...props
}
\r\n
size=
\"
xl
\"\r\n
keyboard=
\"
true
\"\r\n
variant=
\"
backdrop.in
\"\r\n
aria-labelledby=
\"
example-modal-sizes-title-lg
\"
>
\r\n
<Modal.Header closeButton>
\r\n
<Modal.Title id=
\"
contained-modal-title-vcenter
\"
style={{ fontSize: '40px' }}>
\r\n
{props.index + 1}.
{
props.place.name
}
\r\n
</Modal.Title>
\r\n
</Modal.Header>
\r\n
<Modal.Body className=
\"
show-grid
\"
>
\r\n
<Container style={{ fontSize: '40px' }}>
\r\n
{Array.isArray(reviews) ? reviews.map((review, index) => {\r
\n
return (
\r\n
<Row className=
\"
mt-4
\"
>
\r\n
<a href=
{
review.link}>{review.title
}
</a>
\r\n
<div>
{
review.summary
}
</div>
\r\n
<div>
{
review.content
}
</div>
\r\n
</Row>
\r\n
)
\r\n
})
\r\n
:
\"
리뷰가 없습니다.
\"
}
\r\n
</Container>
\r\n\r\n
</Modal.Body>
\r\n
<Modal.Footer>
\r\n
<Button block onClick=
{
props.onHide
}
>Close</Button>
\r\n
</Modal.Footer>
\r\n
</Modal>
\r\n
);
\r\n
}
\r\n\r\n
export default Place;
\r\n
"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
Login.js"
,[],
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
utils
\\
catchErrors.js"
,[],
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
Signup.js"
,[],
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
utils
\\
auth.js"
,[],
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
Paginations.js"
,[],
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Search.js"
,[
"61"
,
"62"
,
"63"
,
"64"
,
"65"
,
"66"
,
"67"
,
"68"
,
"69"
,
"70"
,
"71"
,
"72"
,
"73"
,
"74"
],
"import React, { useState, useEffect } from 'react';
\r\n
import { Link, Redirect } from 'react-router-dom';
\r\n
import ohuh from './ohuh-sm.PNG';
\r\n
import Place from './Components/Place';
\r\n
import { Container, Form, Row, Col, Card, Image, InputGroup, FormControl, Button, Modal } from 'react-bootstrap';
\r\n
import Paginations from './Components/Paginations.js'
\r\n
import catchErrors from './utils/catchErrors.js'
\r\n
// import * as Icon from 'react-bootstrap-icons';
\r\n
import axios from
\"
axios
\"
;
\r\n\r\n
const INIT_PAGE = {\r
\n
title: '',
\r\n
url: '',
\r\n
} //초기페이지에 타이틀이랑 url 저장
\r\n\r\n
function Search(props) {\r
\n
const endPage = 10;
\r\n
const [state, setState] = useState(false);
\r\n
const [index, setIndex] = useState(1);
\r\n
const [showSet, setShowSet] = useState([false, false, false, false]);
\r\n
const [search, setSearch] = useState(props.location.state.id);
\r\n
const [mobile, setMobile] = useState();
\r\n
const [show, setShow] = useState(false);
\r\n
const [page, setPage] = useState(INIT_PAGE)
\r\n
const [success, setSuccess] = useState(false)
\r\n
const [error, setError] = useState('')
\r\n\r\n
const handleClose = () => setShow(false);
\r\n
const handleShow = () => setShow(true);
\r\n\r\n
useEffect(() => {\r
\n
if (window.innerWidth < 960) {\r
\n
setMobile(true)
\r\n
} else {\r
\n
setMobile(false)
\r\n
}
\r\n
}, []);
\r\n\r\n
const places = [{\r
\n
name:
\"
한라산(hallasan)
\"
,
\r\n
address:
\"
제주 서귀포시 토평동 산15-1
\"
,
\r\n
img:
\"
data:image/png;base64,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
\"
,
\r\n
// img:
\"
https://upload.wikimedia.org/wikipedia/commons/thumb/e/eb/KOCIS_Halla_Mountain_in_Jeju-do_%286387785543%29.jpg/269px-KOCIS_Halla_Mountain_in_Jeju-do_%286387785543%29.jpg?size=200x200
\"
,
\r\n
// }, {\r
\n
// name:
\"
성산일출봉(sungsan)
\"
,
\r\n
// address:
\"
제주 서귀포시 성산읍 성산리 1
\"
,
\r\n
// img:
\"
https://www.jeju.go.kr/pub/site/geopark/images/sub/sub03/02%EC%A7%80%EC%A7%88%EB%A7%88%EC%9D%84%EC%9D%B4%EC%95%BC%EA%B8%B0/%EC%A7%80%EC%A7%88%EB%A7%88%EC%9D%84/%EC%A7%80%EC%A7%88%EB%A7%88%EC%9D%84_%EC%84%B1%EC%82%B0%EC%9D%BC%EC%B6%9C%EB%B4%89/1412402261.jpg?400/400
\"
,
\r\n
// }, {\r
\n
// name:
\"
해녀의 집(haenyeo)
\"
,
\r\n
// address:
\"
제주 서귀포시 성산읍 한도로 141-13지번오조리 3 오조해녀의집
\"
,
\r\n
// img:
\"
https://mblogthumb-phinf.pstatic.net/MjAxNjExMTdfMTc0/MDAxNDc5MzU3ODU0ODQy.KZYXCjzsXT3rCsE4HXBfxyCg2buvluBvN_7NxVp7BSwg.loJc89d8JjGXdNCn-4yMd7aMWPjfrZn21TI9Hyzemkog.JPEG.icocam11/20161010_100205.jpg?type=w800
\"
,
\r\n
// }, {\r
\n
// name:
\"
오설록 티 뮤지엄(osulloc)
\"
,
\r\n
// address:
\"
제주 서귀포시 안덕면 신화역사로 15 오설록지번서광리 1235-1 오설록
\"
,
\r\n
// img:
\"
https://cdnweb01.wikitree.co.kr/webdata/editor/202007/01/img_20200701143323_2ced7627.webp
\"
,
\r\n
// }, {\r
\n
// name:
\"
오설록 티 뮤지엄(osulloc)
\"
,
\r\n
// address:
\"
제주 서귀포시 안덕면 신화역사로 15 오설록지번서광리 1235-1 오설록
\"
,
\r\n
// img:
\"
https://upload.wikimedia.org/wikipedia/commons/thumb/e/eb/KOCIS_Halla_Mountain_in_Jeju-do_%286387785543%29.jpg/269px-KOCIS_Halla_Mountain_in_Jeju-do_%286387785543%29.jpg
\"
,
\r\n
}]
\r\n\r\n
if (state !== false) {\r
\n
return <Redirect to={{\r
\n
pathname: `/search/${search}`,
\r\n
state: { id: search },
\r\n
}} />;
\r\n
}
\r\n\r\n
const handlePage = (num) => {\r
\n
setIndex(num);
\r\n
}
\r\n\r\n
// async function bookmarkSave() {\r
\n
// await axios.put('/api/users', {userId:userId, bookmarkId:bookmarkId})
\r\n
// }
\r\n\r\n
const handleChange = (e) => {\r
\n
setSearch(e.target.value);
\r\n
}
\r\n\r\n
async function handleSubmit(e){\r
\n
setState(true); //버튼이 눌려서 handlesubmit이될때 setState값이 true로 바뀐다
\r\n
}
\r\n\r\n
function paginate(items, pageNumber, itemNumber) {\r
\n
const page = []; //페이지를 빈배열로 설정
\r\n
const startIndex = (pageNumber - 1) * itemNumber // 처음인덱스 값이 페이지넘버 -1 * 아이템 넘버로
\r\n
for (var i = 0; i < itemNumber; i++) {
\r\n
page.push(items[(startIndex + i)])
\r\n
}
\r\n
return page
\r\n
}
\r\n\r\n
const pagePlace = paginate(places, index, 1)
\r\n\r\n
return (
\r\n
<Container >
\r\n
<Link to=
\"
/
\"
className=
\"
d-flex justify-content-center
\"
><Image src=
{
ohuh
}
/></Link>
\r\n
<Row className=
\"
mb-2
\"
className=
\"
d-flex justify-content-center
\"
>
\r\n
<Form style={{ width:
\"
90vw
\"
}} onSubmit=
{
handleSubmit
}
>
\r\n
<InputGroup size=
\"
lg
\"
>
\r\n
<FormControl
\r\n
placeholder=
\"
검색어를 입력하세요.
\"\r\n
value=
{
search
}
\r\n
aria-label=
\"
Large
\"\r\n
aria-describedby=
\"
inputGroup-sizing-sm
\"\r\n
onChange=
{
handleChange
}
\r\n
/>
\r\n
<InputGroup.Append>
\r\n
<Button type=
\"
submit
\"
variant=
\"
outline-secondary
\"
style={{ maxHeight:
\"
8vh
\"
, maxWidth:
\"
14vh
\"
}} >검색</Button>
\r\n
</InputGroup.Append>
\r\n
</InputGroup>
\r\n
</Form>
\r\n
</Row>
\r\n
<Row className=
\"
d-flex flex-wrap
\"
>
\r\n
{pagePlace.map((place, index) => {\r
\n
return (
\r\n
<Col key=
{
index
}
md=
{
6
}
>
\r\n
<Card align=
\"
center
\"
border=
\"
info
\"
style={{ margin:
\"
3%
\"
}}>
\r\n
{/* <Button onSubmit=
{
handleSubmit
}
variant=
\"
outline-info
\"
style={{ marginLeft:
\"
55vh
\"
}} type='submit'><Icon.BookmarkStar size=
{
30
}
/></Button> */}
\r\n
<Card.Title style={{ margin:
\"
3%
\"
, fontSize: '200%', fontWeight: 'bold' }}>
{
place.name
}
\r\n
</Card.Title>
\r\n
<Card.Img variant=
\"
top
\"
style={{ padding:
\"
5%
\"
, width:
\"
100%
\"
, height:
\"
340px
\"
}} src=
{
place.img
}
/>
\r\n
<Card.Body >
\r\n
<Card.Text style={{ overflow: 'auto', fontSize: '25px', width: '100%', height:
\"
80px
\"
}} >
\r\n
{
place.address
}
</Card.Text>
\r\n
<Button variant=
\"
primary
\"
onClick={() => {\r
\n
const showArr = [false, false, false, false]
\r\n
showArr[index] = true
\r\n
setShowSet(showArr)
\r\n
}}>
{
place.name
}
자세히 살펴보기</Button>
\r\n
<Place search=
{
place
}
index=
{
index
}
show=
{
showSet[index]
}
onHide={() => setShowSet([false, false, false, false])} />
\r\n
</Card.Body>
\r\n
</Card>
\r\n
</Col>
\r\n
)
\r\n
})}
\r\n
</Row>
\r\n
{ console.log(showSet)}
\r\n
{/* show가 전부 true로 바뀌어서 전부 다 보이게 되는 것이다. */}
\r\n
<Row className=
\"
mt-2 d-flex justify-content-center
\"
>
\r\n
<Paginations index=
{
index
}
endPage=
{
endPage
}
handlePage=
{
handlePage
}
></Paginations>
\r\n
</Row>
\r\n
</Container>
\r\n\r\n
);
\r\n
}
\r\n\r\n
export default Search
\r\n
"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
App.js"
,[
"75"
,
"76"
,
"77"
,
"78"
],
"import React, { useEffect, useState } from 'react';
\r\n
import { Link, Redirect } from 'react-router-dom';
\r\n
import ohuh from './ohuh.PNG'
\r\n
import { Container, Row, Form, Image, InputGroup, Button, Col, FormControl, Navbar, Nav } from 'react-bootstrap';
\r\n
import { handleLogout, isAuthenticated } from './utils/auth.js'
\r\n\r\n
function App() {\r
\n
const [state, setState] = useState(false);
\r\n
const [search, setSearch] = useState(
\"\"
);
\r\n
const user = isAuthenticated()
\r\n\r\n
if (state !== false) {\r
\n
return <Redirect to=
{
`/search?keyword=${search}`
}
/>;
\r\n
}
\r\n\r\n
const handleChange = (e) => {\r
\n
setSearch(e.target.value);
\r\n
} //바뀌는 것이 있을때 이벤트 발생
\r\n\r\n
const handleSubmit = () => {\r
\n
setState(true);
\r\n
} //submit 버튼을 누르면 state 값을 true로 바뀐다
\r\n\r\n
return (
\r\n
<Container className=
\"
vh-100 d-flex justify-content-md-center align-items-center
\"
>
\r\n
<Col md=
{
6
}
style={{ marginTop: 140 }}>
\r\n
<Nav className=
\"
justify-content-end
\"
bg=
\"
#fff
\"
variant=
\"
light
\"
>
\r\n
{user ? <Nav.Link onClick={() => handleLogout()}>로그아웃</Nav.Link>
\r\n
: (
\r\n
<>
\r\n
<Nav.Link href=
\"
/signup
\"
>회원가입</Nav.Link>
\r\n
<Nav.Link href=
\"
/login
\"
>로그인</Nav.Link>
\r\n
</>
\r\n
)}
\r\n
<Nav.Link href='/bookmark'>북마크</Nav.Link>
\r\n
</Nav>
\r\n
<Row style={{ marginBottom: 20 }}>
\r\n
<Image src=
{
ohuh
}
/>
\r\n
</Row>
\r\n
<Row style={{ marginBottom: 500 }}>
\r\n
<Form className=
\"
vw-100
\"
onSubmit=
{
handleSubmit
}
>
\r\n
<InputGroup style={{ width: 560 }}>
\r\n
<Form.Control
\r\n
size=
\"
lg
\"\r\n
placeholder=
\"
검색어를 입력하세요.
\"\r\n
aria-label=
\"
Large
\"\r\n
aria-describedby=
\"
inputGroup-sizing-sm
\"\r\n
onChange=
{
handleChange
}
\r\n
/>
\r\n
<InputGroup.Append>
\r\n
<Button type='submit' variant=
\"
outline-secondary
\"
>검색</Button>
\r\n
</InputGroup.Append>
\r\n
</InputGroup>
\r\n
</Form>
\r\n
</Row>
\r\n
</Col>
\r\n
</Container>
\r\n
);
\r\n
}
\r\n\r\n
export default App;
\r\n
"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
PrivateRoute.js"
,[],
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Bookmark.js"
,[
"79"
,
"80"
,
"81"
,
"82"
,
"83"
,
"84"
,
"85"
,
"86"
,
"87"
,
"88"
,
"89"
,
"90"
,
"91"
,
"92"
,
"93"
],
"import React, { useState, useEffect } from 'react'
\r\n
import { Alert, Col, Card, Container, Form, Row, Button, Nav, Navbar, ListGroup, Image, Table } from
\"
react-bootstrap
\"\r\n
import axios from
\"
axios
\"\r\n
import catchErrors from './utils/catchErrors.js'
\r\n
import { isAuthenticated } from './utils/auth'
\r\n\r\n\r\n
const INIT_PAGE = {\r
\n
bookmark: ['성산일출봉', '제주도', '한라산', '주상절리', '오설록 티 뮤지엄'],
\r\n
\r\n
}
\r\n\r\n
const user = isAuthenticated()
\r\n\r\n
function Bookmark() {\r
\n
const [page, setPage] = useState(INIT_PAGE)
\r\n
const [error, setError] = useState('')
\r\n
const [success, setSuccess] = useState(false)
\r\n
const [state, setState] = useState(false);
\r\n\r\n
const user = isAuthenticated()
\r\n\r\n
const userId = localStorage.getItem('loginStatus')
\r\n\r\n
async function getBookmark( ) {\r
\n
try {\r
\n
setError('')
\r\n
console.log(page)
\r\n
console.log(userId)
\r\n
await axios.post(`/api/users/bookmark`, {bookmark: page, userId: userId})
\r\n
\r\n
} catch (error) {\r
\n
catchErrors(error, setError)
\r\n
}
\r\n
}
\r\n\r\n
// async function handleSubmit(e){\r
\n
// setState(true); //버튼이 눌려서 handlesubmit이될때 setState값이 true로 바뀐다
\r\n
// try { //respons 서버에 post로 요청하여 데이터를 받아온다
\r\n
// const response = await axios.post('/api/users/bookmark', page)
\r\n
// setSuccess(true)
\r\n
// } catch (error) {\r
\n
// console.log(error)
\r\n
// catchErrors(error, setError)
\r\n
// }
\r\n
// }
\r\n\r\n
// useEffect(() => {\r
\n
// getBookmark(user)
\r\n
// }, [user])
\r\n\r\n\r\n\r\n
return (
\r\n
<Container>
\r\n
<Navbar bg=
\"
primary
\"
variant=
\"
dark
\"
>
\r\n
<Navbar.Brand href=
\"
/
\"
>북마크</Navbar.Brand>
\r\n
<Nav className=
\"
mr-auto
\"
>
\r\n
<Nav.Link href=
\"
/
\"
>Home</Nav.Link>
\r\n
</Nav>
\r\n
<Button type='submit' onClick=
{
getBookmark
}
>저장</Button>
\r\n
</Navbar>
\r\n
<Form>
\r\n
<ListGroup>
\r\n
<ListGroup.Item>
{
page.bookmark[0]
}
</ListGroup.Item>
\r\n
<ListGroup.Item>
{
page.bookmark[1]
}
</ListGroup.Item>
\r\n
<ListGroup.Item>
{
page.bookmark[2]
}
</ListGroup.Item>
\r\n
<ListGroup.Item>
{
page.bookmark[3]
}
</ListGroup.Item>
\r\n
<ListGroup.Item>
{
page.bookmark[4]
}
</ListGroup.Item>
\r\n
</ListGroup>
\r\n
</Form>
\r\n
</Container>
\r\n
)
\r\n
}
\r\n\r\n
export default Bookmark"
,{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"95"
,
"line"
:
11
,
"column"
:
8
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
11
,
"endColumn"
:
13
},{
"ruleId"
:
"98"
,
"replacedBy"
:
"99"
},{
"ruleId"
:
"100"
,
"replacedBy"
:
"101"
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"102"
,
"line"
:
7
,
"column"
:
14
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
7
,
"endColumn"
:
19
},{
"ruleId"
:
"103"
,
"severity"
:
1
,
"message"
:
"104"
,
"line"
:
21
,
"column"
:
6
,
"nodeType"
:
"105"
,
"endLine"
:
21
,
"endColumn"
:
8
,
"suggestions"
:
"106"
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"107"
,
"line"
:
5
,
"column"
:
83
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
5
,
"endColumn"
:
88
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"108"
,
"line"
:
7
,
"column"
:
8
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
7
,
"endColumn"
:
19
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"95"
,
"line"
:
9
,
"column"
:
8
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
9
,
"endColumn"
:
13
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"109"
,
"line"
:
22
,
"column"
:
12
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
22
,
"endColumn"
:
18
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"110"
,
"line"
:
23
,
"column"
:
12
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
23
,
"endColumn"
:
16
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"111"
,
"line"
:
24
,
"column"
:
12
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
24
,
"endColumn"
:
16
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"112"
,
"line"
:
24
,
"column"
:
18
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
24
,
"endColumn"
:
25
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"113"
,
"line"
:
25
,
"column"
:
12
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
25
,
"endColumn"
:
19
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"114"
,
"line"
:
25
,
"column"
:
21
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
25
,
"endColumn"
:
31
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"115"
,
"line"
:
26
,
"column"
:
12
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
26
,
"endColumn"
:
17
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"116"
,
"line"
:
26
,
"column"
:
19
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
26
,
"endColumn"
:
27
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"117"
,
"line"
:
28
,
"column"
:
11
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
28
,
"endColumn"
:
22
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"118"
,
"line"
:
29
,
"column"
:
11
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
29
,
"endColumn"
:
21
},{
"ruleId"
:
"119"
,
"severity"
:
1
,
"message"
:
"120"
,
"line"
:
99
,
"column"
:
35
,
"nodeType"
:
"121"
,
"endLine"
:
99
,
"endColumn"
:
76
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"122"
,
"line"
:
1
,
"column"
:
17
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
1
,
"endColumn"
:
26
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"123"
,
"line"
:
2
,
"column"
:
10
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
2
,
"endColumn"
:
14
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"124"
,
"line"
:
4
,
"column"
:
64
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
4
,
"endColumn"
:
75
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"125"
,
"line"
:
4
,
"column"
:
77
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
4
,
"endColumn"
:
83
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"122"
,
"line"
:
1
,
"column"
:
27
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
1
,
"endColumn"
:
36
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"126"
,
"line"
:
2
,
"column"
:
10
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
2
,
"endColumn"
:
15
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"127"
,
"line"
:
2
,
"column"
:
17
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
2
,
"endColumn"
:
20
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"128"
,
"line"
:
2
,
"column"
:
22
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
2
,
"endColumn"
:
26
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"129"
,
"line"
:
2
,
"column"
:
45
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
2
,
"endColumn"
:
48
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"130"
,
"line"
:
2
,
"column"
:
82
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
2
,
"endColumn"
:
87
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"131"
,
"line"
:
2
,
"column"
:
89
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
2
,
"endColumn"
:
94
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"132"
,
"line"
:
13
,
"column"
:
7
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
13
,
"endColumn"
:
11
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"112"
,
"line"
:
16
,
"column"
:
18
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
16
,
"endColumn"
:
25
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"115"
,
"line"
:
17
,
"column"
:
12
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
17
,
"endColumn"
:
17
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"113"
,
"line"
:
18
,
"column"
:
12
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
18
,
"endColumn"
:
19
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"114"
,
"line"
:
18
,
"column"
:
21
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
18
,
"endColumn"
:
31
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"133"
,
"line"
:
19
,
"column"
:
12
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
19
,
"endColumn"
:
17
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"134"
,
"line"
:
19
,
"column"
:
19
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
19
,
"endColumn"
:
27
},{
"ruleId"
:
"94"
,
"severity"
:
1
,
"message"
:
"132"
,
"line"
:
21
,
"column"
:
11
,
"nodeType"
:
"96"
,
"messageId"
:
"97"
,
"endLine"
:
21
,
"endColumn"
:
15
},
"no-unused-vars"
,
"'axios' is defined but never used."
,
"Identifier"
,
"unusedVar"
,
"no-native-reassign"
,[
"135"
],
"no-negated-in-lhs"
,[
"136"
],
"'setDb' is assigned a value but never used."
,
"react-hooks/exhaustive-deps"
,
"React Hook useEffect has a missing dependency: 'getReview'. Either include it or remove the dependency array."
,
"ArrayExpression"
,[
"137"
],
"'Modal' is defined but never used."
,
"'catchErrors' is defined but never used."
,
"'mobile' is assigned a value but never used."
,
"'show' is assigned a value but never used."
,
"'page' is assigned a value but never used."
,
"'setPage' is assigned a value but never used."
,
"'success' is assigned a value but never used."
,
"'setSuccess' is assigned a value but never used."
,
"'error' is assigned a value but never used."
,
"'setError' is assigned a value but never used."
,
"'handleClose' is assigned a value but never used."
,
"'handleShow' is assigned a value but never used."
,
"react/jsx-no-duplicate-props"
,
"No duplicate props allowed"
,
"JSXAttribute"
,
"'useEffect' is defined but never used."
,
"'Link' is defined but never used."
,
"'FormControl' is defined but never used."
,
"'Navbar' is defined but never used."
,
"'Alert' is defined but never used."
,
"'Col' is defined but never used."
,
"'Card' is defined but never used."
,
"'Row' is defined but never used."
,
"'Image' is defined but never used."
,
"'Table' is defined but never used."
,
"'user' is assigned a value but never used."
,
"'state' is assigned a value but never used."
,
"'setState' is assigned a value but never used."
,
"no-global-assign"
,
"no-unsafe-negation"
,{
"desc"
:
"138"
,
"fix"
:
"139"
},
"Update the dependencies array to be: [getReview]"
,{
"range"
:
"140"
,
"text"
:
"141"
},[
605
,
607
],
"[getReview]"
]
[{
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
index.js"
:
"1"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
reportWebVitals.js"
:
"2"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
Place.js"
:
"3"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
Login.js"
:
"4"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
utils
\\
catchErrors.js"
:
"5"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
Signup.js"
:
"6"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
utils
\\
auth.js"
:
"7"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
Paginations.js"
:
"8"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Search.js"
:
"9"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
App.js"
:
"10"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
PrivateRoute.js"
:
"11"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Bookmark.js"
:
"12"
},{
"size"
:
1267
,
"mtime"
:
1611500254459
,
"results"
:
"13"
,
"hashOfConfig"
:
"14"
},{
"size"
:
362
,
"mtime"
:
499162500000
,
"results"
:
"15"
,
"hashOfConfig"
:
"14"
},{
"size"
:
1650
,
"mtime"
:
1611552739016
,
"results"
:
"16"
,
"hashOfConfig"
:
"14"
},{
"size"
:
3147
,
"mtime"
:
1611553267391
,
"results"
:
"17"
,
"hashOfConfig"
:
"14"
},{
"size"
:
405
,
"mtime"
:
1609915408569
,
"results"
:
"18"
,
"hashOfConfig"
:
"14"
},{
"size"
:
2995
,
"mtime"
:
1611489922054
,
"results"
:
"19"
,
"hashOfConfig"
:
"14"
},{
"size"
:
726
,
"mtime"
:
1611495738863
,
"results"
:
"20"
,
"hashOfConfig"
:
"14"
},{
"size"
:
2199
,
"mtime"
:
1610503781980
,
"results"
:
"21"
,
"hashOfConfig"
:
"14"
},{
"size"
:
10588
,
"mtime"
:
1611552795555
,
"results"
:
"22"
,
"hashOfConfig"
:
"14"
},{
"size"
:
2167
,
"mtime"
:
1611500202857
,
"results"
:
"23"
,
"hashOfConfig"
:
"14"
},{
"size"
:
486
,
"mtime"
:
1611489922054
,
"results"
:
"24"
,
"hashOfConfig"
:
"14"
},{
"size"
:
2609
,
"mtime"
:
1611551384114
,
"results"
:
"25"
,
"hashOfConfig"
:
"14"
},{
"filePath"
:
"26"
,
"messages"
:
"27"
,
"errorCount"
:
0
,
"warningCount"
:
1
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
"28"
,
"usedDeprecatedRules"
:
"29"
},
"1t9w6go"
,{
"filePath"
:
"30"
,
"messages"
:
"31"
,
"errorCount"
:
0
,
"warningCount"
:
0
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"usedDeprecatedRules"
:
"29"
},{
"filePath"
:
"32"
,
"messages"
:
"33"
,
"errorCount"
:
0
,
"warningCount"
:
2
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
"34"
,
"usedDeprecatedRules"
:
"35"
},{
"filePath"
:
"36"
,
"messages"
:
"37"
,
"errorCount"
:
0
,
"warningCount"
:
0
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"usedDeprecatedRules"
:
"29"
},{
"filePath"
:
"38"
,
"messages"
:
"39"
,
"errorCount"
:
0
,
"warningCount"
:
0
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"usedDeprecatedRules"
:
"29"
},{
"filePath"
:
"40"
,
"messages"
:
"41"
,
"errorCount"
:
0
,
"warningCount"
:
0
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"usedDeprecatedRules"
:
"29"
},{
"filePath"
:
"42"
,
"messages"
:
"43"
,
"errorCount"
:
0
,
"warningCount"
:
0
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"usedDeprecatedRules"
:
"29"
},{
"filePath"
:
"44"
,
"messages"
:
"45"
,
"errorCount"
:
0
,
"warningCount"
:
0
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"usedDeprecatedRules"
:
"29"
},{
"filePath"
:
"46"
,
"messages"
:
"47"
,
"errorCount"
:
0
,
"warningCount"
:
14
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
"48"
,
"usedDeprecatedRules"
:
"29"
},{
"filePath"
:
"49"
,
"messages"
:
"50"
,
"errorCount"
:
0
,
"warningCount"
:
4
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
"51"
,
"usedDeprecatedRules"
:
"29"
},{
"filePath"
:
"52"
,
"messages"
:
"53"
,
"errorCount"
:
0
,
"warningCount"
:
0
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"usedDeprecatedRules"
:
"29"
},{
"filePath"
:
"54"
,
"messages"
:
"55"
,
"errorCount"
:
0
,
"warningCount"
:
15
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
"56"
,
"usedDeprecatedRules"
:
"29"
},
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
index.js"
,[
"57"
],
"import React from 'react';
\r\n
import ReactDOM from 'react-dom';
\r\n
import './index.css';
\r\n
import 'bootstrap/dist/css/bootstrap.min.css';
\r\n
import App from './App'
\r\n
import Search from './Search';
\r\n
import reportWebVitals from './reportWebVitals';
\r\n
import Signup from './Components/Signup'
\r\n
import Login from './Components/Login'
\r\n
import PrivateRoute from
\"
./Components/PrivateRoute
\"
;
\r\n
import axios from 'axios'
\r\n
import Bookmark from
\"
./Bookmark
\"\r\n
import {\r
\n
BrowserRouter as Router,
\r\n
Switch,
\r\n
Route,
\r\n
Redirect,
\r\n
} from
\"
react-router-dom
\"
;
\r\n\r\n
ReactDOM.render(
\r\n
<React.StrictMode>
\r\n
<Router>
\r\n
<Switch>
\r\n
<Route exact path=
\"
/
\"
component=
{
App
}
/>
\r\n
<Route path=
\"
/search
\"
component=
{
Search
}
/>
\r\n
<Route path='/signup' component=
{
Signup
}
/>
\r\n
<Route path='/login' component=
{
Login
}
/>
\r\n
<PrivateRoute path='/bookmark'><Bookmark/></PrivateRoute>
\r\n
<Redirect path=
\"
/search
\"
to=
\"
/search
\"
/>
\r\n
</Switch>
\r\n
</Router>
\r\n
</React.StrictMode>,
\r\n
document.getElementById('root')
\r\n
);
\r\n\r\n
// If you want to start measuring performance in your app, pass a function
\r\n
// to log results (for example: reportWebVitals(console.log))
\r\n
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
\r\n
reportWebVitals();
\r\n
"
,[
"58"
,
"59"
],
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
reportWebVitals.js"
,[],
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
Place.js"
,[
"60"
,
"61"
],
"import axios from 'axios';
\r\n
import React, { useEffect, useState } from 'react';
\r\n
import { Modal, Container, Row, Button, } from 'react-bootstrap';
\r\n\r\n
function Place(props) {\r
\n
const [reviews, setReviews] = useState()
\r\n
const [db, setDb] = useState(false)
\r\n
const getReview = () => {\r
\n
axios({ url: `/api/review?keyword=${props.place.name}`, method: 'post', data: { db: db } })
\r\n
.then(res => {\r
\n
console.log(
\"
place res.data
\"
, res.data)
\r\n
setReviews(res.data)
\r\n
})
\r\n
.catch(err => {\r
\n
console.log(err)
\r\n
})
\r\n
}
\r\n\r\n
useEffect(() => {\r
\n
getReview();
\r\n
}, [])
\r\n\r\n
return (
\r\n
<Modal
{
...props
}
\r\n
size=
\"
xl
\"\r\n
keyboard=
\"
true
\"\r\n
variant=
\"
backdrop.in
\"\r\n
aria-labelledby=
\"
example-modal-sizes-title-lg
\"
>
\r\n
<Modal.Header closeButton>
\r\n
<Modal.Title id=
\"
contained-modal-title-vcenter
\"
style={{ fontSize: '40px' }}>
\r\n
{props.index + 1}.
{
props.place.name
}
\r\n
</Modal.Title>
\r\n
</Modal.Header>
\r\n
<Modal.Body className=
\"
show-grid
\"
>
\r\n
<Container style={{ fontSize: '40px' }}>
\r\n
{Array.isArray(reviews) ? reviews.map((review, index) => {\r
\n
return (
\r\n
<Row className=
\"
mt-4
\"
>
\r\n
<a href=
{
review.link}>{review.title
}
</a>
\r\n
<div>
{
review.summary
}
</div>
\r\n
<div>
{
review.content
}
</div>
\r\n
</Row>
\r\n
)
\r\n
})
\r\n
:
\"
리뷰가 없습니다.
\"
}
\r\n
</Container>
\r\n\r\n
</Modal.Body>
\r\n
<Modal.Footer>
\r\n
<Button block onClick=
{
props.onHide
}
>Close</Button>
\r\n
</Modal.Footer>
\r\n
</Modal>
\r\n
);
\r\n
}
\r\n\r\n
export default Place;
\r\n
"
,[
"62"
,
"63"
],
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
Login.js"
,[],
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
utils
\\
catchErrors.js"
,[],
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
Signup.js"
,[],
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
utils
\\
auth.js"
,[],
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
Paginations.js"
,[],
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Search.js"
,[
"64"
,
"65"
,
"66"
,
"67"
,
"68"
,
"69"
,
"70"
,
"71"
,
"72"
,
"73"
,
"74"
,
"75"
,
"76"
,
"77"
],
"import React, { useState, useEffect } from 'react';
\r\n
import { Link, Redirect } from 'react-router-dom';
\r\n
import ohuh from './ohuh-sm.PNG';
\r\n
import Place from './Components/Place';
\r\n
import { Container, Form, Row, Col, Card, Image, InputGroup, FormControl, Button, Modal } from 'react-bootstrap';
\r\n
import Paginations from './Components/Paginations.js'
\r\n
import catchErrors from './utils/catchErrors.js'
\r\n
// import * as Icon from 'react-bootstrap-icons';
\r\n
import axios from
\"
axios
\"
;
\r\n\r\n
const INIT_PAGE = {\r
\n
title: '',
\r\n
url: '',
\r\n
} //초기페이지에 타이틀이랑 url 저장
\r\n\r\n
function Search(props) {\r
\n
const endPage = 10;
\r\n
const [state, setState] = useState(false);
\r\n
const [index, setIndex] = useState(1);
\r\n
const [showSet, setShowSet] = useState([false, false, false, false]);
\r\n
const [search, setSearch] = useState(props.location.state.id);
\r\n
const [mobile, setMobile] = useState();
\r\n
const [show, setShow] = useState(false);
\r\n
const [page, setPage] = useState(INIT_PAGE)
\r\n
const [success, setSuccess] = useState(false)
\r\n
const [error, setError] = useState('')
\r\n\r\n
const handleClose = () => setShow(false);
\r\n
const handleShow = () => setShow(true);
\r\n\r\n
useEffect(() => {\r
\n
if (window.innerWidth < 960) {\r
\n
setMobile(true)
\r\n
} else {\r
\n
setMobile(false)
\r\n
}
\r\n
}, []);
\r\n\r\n
const places = [{\r
\n
name:
\"
한라산(hallasan)
\"
,
\r\n
address:
\"
제주 서귀포시 토평동 산15-1
\"
,
\r\n
img:
\"
data:image/png;base64,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
\"
,
\r\n
// img:
\"
https://upload.wikimedia.org/wikipedia/commons/thumb/e/eb/KOCIS_Halla_Mountain_in_Jeju-do_%286387785543%29.jpg/269px-KOCIS_Halla_Mountain_in_Jeju-do_%286387785543%29.jpg?size=200x200
\"
,
\r\n
// }, {\r
\n
// name:
\"
성산일출봉(sungsan)
\"
,
\r\n
// address:
\"
제주 서귀포시 성산읍 성산리 1
\"
,
\r\n
// img:
\"
https://www.jeju.go.kr/pub/site/geopark/images/sub/sub03/02%EC%A7%80%EC%A7%88%EB%A7%88%EC%9D%84%EC%9D%B4%EC%95%BC%EA%B8%B0/%EC%A7%80%EC%A7%88%EB%A7%88%EC%9D%84/%EC%A7%80%EC%A7%88%EB%A7%88%EC%9D%84_%EC%84%B1%EC%82%B0%EC%9D%BC%EC%B6%9C%EB%B4%89/1412402261.jpg?400/400
\"
,
\r\n
// }, {\r
\n
// name:
\"
해녀의 집(haenyeo)
\"
,
\r\n
// address:
\"
제주 서귀포시 성산읍 한도로 141-13지번오조리 3 오조해녀의집
\"
,
\r\n
// img:
\"
https://mblogthumb-phinf.pstatic.net/MjAxNjExMTdfMTc0/MDAxNDc5MzU3ODU0ODQy.KZYXCjzsXT3rCsE4HXBfxyCg2buvluBvN_7NxVp7BSwg.loJc89d8JjGXdNCn-4yMd7aMWPjfrZn21TI9Hyzemkog.JPEG.icocam11/20161010_100205.jpg?type=w800
\"
,
\r\n
// }, {\r
\n
// name:
\"
오설록 티 뮤지엄(osulloc)
\"
,
\r\n
// address:
\"
제주 서귀포시 안덕면 신화역사로 15 오설록지번서광리 1235-1 오설록
\"
,
\r\n
// img:
\"
https://cdnweb01.wikitree.co.kr/webdata/editor/202007/01/img_20200701143323_2ced7627.webp
\"
,
\r\n
// }, {\r
\n
// name:
\"
오설록 티 뮤지엄(osulloc)
\"
,
\r\n
// address:
\"
제주 서귀포시 안덕면 신화역사로 15 오설록지번서광리 1235-1 오설록
\"
,
\r\n
// img:
\"
https://upload.wikimedia.org/wikipedia/commons/thumb/e/eb/KOCIS_Halla_Mountain_in_Jeju-do_%286387785543%29.jpg/269px-KOCIS_Halla_Mountain_in_Jeju-do_%286387785543%29.jpg
\"
,
\r\n
}]
\r\n\r\n
if (state !== false) {\r
\n
return <Redirect to={{\r
\n
pathname: `/search/${search}`,
\r\n
state: { id: search },
\r\n
}} />;
\r\n
}
\r\n\r\n
const handlePage = (num) => {\r
\n
setIndex(num);
\r\n
}
\r\n\r\n
// async function bookmarkSave() {\r
\n
// await axios.put('/api/users', {userId:userId, bookmarkId:bookmarkId})
\r\n
// }
\r\n\r\n
const handleChange = (e) => {\r
\n
setSearch(e.target.value);
\r\n
}
\r\n\r\n
async function handleSubmit(e){\r
\n
setState(true); //버튼이 눌려서 handlesubmit이될때 setState값이 true로 바뀐다
\r\n
}
\r\n\r\n
function paginate(items, pageNumber, itemNumber) {\r
\n
const page = []; //페이지를 빈배열로 설정
\r\n
const startIndex = (pageNumber - 1) * itemNumber // 처음인덱스 값이 페이지넘버 -1 * 아이템 넘버로
\r\n
for (var i = 0; i < itemNumber; i++) {
\r\n
page.push(items[(startIndex + i)])
\r\n
}
\r\n
return page
\r\n
}
\r\n\r\n
const pagePlace = paginate(places, index, 1)
\r\n\r\n
return (
\r\n
<Container >
\r\n
<Link to=
\"
/
\"
className=
\"
d-flex justify-content-center
\"
><Image src=
{
ohuh
}
/></Link>
\r\n
<Row className=
\"
mb-2
\"
className=
\"
d-flex justify-content-center
\"
>
\r\n
<Form style={{ width:
\"
90vw
\"
}} onSubmit=
{
handleSubmit
}
>
\r\n
<InputGroup size=
\"
lg
\"
>
\r\n
<FormControl
\r\n
placeholder=
\"
검색어를 입력하세요.
\"\r\n
value=
{
search
}
\r\n
aria-label=
\"
Large
\"\r\n
aria-describedby=
\"
inputGroup-sizing-sm
\"\r\n
onChange=
{
handleChange
}
\r\n
/>
\r\n
<InputGroup.Append>
\r\n
<Button type=
\"
submit
\"
variant=
\"
outline-secondary
\"
style={{ maxHeight:
\"
8vh
\"
, maxWidth:
\"
14vh
\"
}} >검색</Button>
\r\n
</InputGroup.Append>
\r\n
</InputGroup>
\r\n
</Form>
\r\n
</Row>
\r\n
<Row className=
\"
d-flex flex-wrap
\"
>
\r\n
{pagePlace.map((place, index) => {\r
\n
return (
\r\n
<Col key=
{
index
}
md=
{
6
}
>
\r\n
<Card align=
\"
center
\"
border=
\"
info
\"
style={{ margin:
\"
3%
\"
}}>
\r\n
{/* <Button onSubmit=
{
handleSubmit
}
variant=
\"
outline-info
\"
style={{ marginLeft:
\"
55vh
\"
}} type='submit'><Icon.BookmarkStar size=
{
30
}
/></Button> */}
\r\n
<Card.Title style={{ margin:
\"
3%
\"
, fontSize: '200%', fontWeight: 'bold' }}>
{
place.name
}
\r\n
</Card.Title>
\r\n
<Card.Img variant=
\"
top
\"
style={{ padding:
\"
5%
\"
, width:
\"
100%
\"
, height:
\"
340px
\"
}} src=
{
place.img
}
/>
\r\n
<Card.Body >
\r\n
<Card.Text style={{ overflow: 'auto', fontSize: '25px', width: '100%', height:
\"
80px
\"
}} >
\r\n
{
place.address
}
</Card.Text>
\r\n
<Button variant=
\"
primary
\"
onClick={() => {\r
\n
const showArr = [false, false, false, false]
\r\n
showArr[index] = true
\r\n
setShowSet(showArr)
\r\n
}}>
{
place.name
}
자세히 살펴보기</Button>
\r\n
<Place search=
{
place
}
index=
{
index
}
show=
{
showSet[index]
}
onHide={() => setShowSet([false, false, false, false])} />
\r\n
</Card.Body>
\r\n
</Card>
\r\n
</Col>
\r\n
)
\r\n
})}
\r\n
</Row>
\r\n
{ console.log(showSet)}
\r\n
{/* show가 전부 true로 바뀌어서 전부 다 보이게 되는 것이다. */}
\r\n
<Row className=
\"
mt-2 d-flex justify-content-center
\"
>
\r\n
<Paginations index=
{
index
}
endPage=
{
endPage
}
handlePage=
{
handlePage
}
></Paginations>
\r\n
</Row>
\r\n
</Container>
\r\n\r\n
);
\r\n
}
\r\n\r\n
export default Search
\r\n
"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
App.js"
,[
"78"
,
"79"
,
"80"
,
"81"
],
"import React, { useEffect, useState } from 'react';
\r\n
import { Link, Redirect } from 'react-router-dom';
\r\n
import ohuh from './ohuh.PNG'
\r\n
import { Container, Row, Form, Image, InputGroup, Button, Col, FormControl, Navbar, Nav } from 'react-bootstrap';
\r\n
import { handleLogout, isAuthenticated } from './utils/auth.js'
\r\n\r\n
function App() {\r
\n
const [state, setState] = useState(false);
\r\n
const [search, setSearch] = useState(
\"\"
);
\r\n
const user = isAuthenticated()
\r\n\r\n
if (state !== false) {\r
\n
return <Redirect to=
{
`/search?keyword=${search}`
}
/>;
\r\n
}
\r\n\r\n
const handleChange = (e) => {\r
\n
setSearch(e.target.value);
\r\n
} //바뀌는 것이 있을때 이벤트 발생
\r\n\r\n
const handleSubmit = () => {\r
\n
setState(true);
\r\n
} //submit 버튼을 누르면 state 값을 true로 바뀐다
\r\n\r\n
return (
\r\n
<Container className=
\"
vh-100 d-flex justify-content-md-center align-items-center
\"
>
\r\n
<Col md=
{
6
}
style={{ marginTop: 140 }}>
\r\n
<Nav className=
\"
justify-content-end
\"
bg=
\"
#fff
\"
variant=
\"
light
\"
>
\r\n
{user ? <Nav.Link onClick={() => handleLogout()}>로그아웃</Nav.Link>
\r\n
: (
\r\n
<>
\r\n
<Nav.Link href=
\"
/signup
\"
>회원가입</Nav.Link>
\r\n
<Nav.Link href=
\"
/login
\"
>로그인</Nav.Link>
\r\n
</>
\r\n
)}
\r\n
<Nav.Link href='/bookmark'>북마크</Nav.Link>
\r\n
</Nav>
\r\n
<Row style={{ marginBottom: 20 }}>
\r\n
<Image src=
{
ohuh
}
/>
\r\n
</Row>
\r\n
<Row style={{ marginBottom: 500 }}>
\r\n
<Form className=
\"
vw-100
\"
onSubmit=
{
handleSubmit
}
>
\r\n
<InputGroup style={{ width: 560 }}>
\r\n
<Form.Control
\r\n
size=
\"
lg
\"\r\n
placeholder=
\"
검색어를 입력하세요.
\"\r\n
aria-label=
\"
Large
\"\r\n
aria-describedby=
\"
inputGroup-sizing-sm
\"\r\n
onChange=
{
handleChange
}
\r\n
/>
\r\n
<InputGroup.Append>
\r\n
<Button type='submit' variant=
\"
outline-secondary
\"
>검색</Button>
\r\n
</InputGroup.Append>
\r\n
</InputGroup>
\r\n
</Form>
\r\n
</Row>
\r\n
</Col>
\r\n
</Container>
\r\n
);
\r\n
}
\r\n\r\n
export default App;
\r\n
"
,
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Components
\\
PrivateRoute.js"
,[],
"C:
\\
Users
\\
hello
\\
Desktop
\\
project
\\
search-page
\\
client
\\
src
\\
Bookmark.js"
,[
"82"
,
"83"
,
"84"
,
"85"
,
"86"
,
"87"
,
"88"
,
"89"
,
"90"
,
"91"
,
"92"
,
"93"
,
"94"
,
"95"
,
"96"
],
"import React, { useState, useEffect } from 'react'
\r\n
import { Alert, Col, Card, Container, Form, Row, Button, Nav, Navbar, ListGroup, Image, Table } from
\"
react-bootstrap
\"\r\n
import axios from
\"
axios
\"\r\n
import catchErrors from './utils/catchErrors.js'
\r\n
import { isAuthenticated } from './utils/auth'
\r\n\r\n\r\n
const INIT_PAGE = {\r
\n
bookmark: ['성산일출봉', '제주도', '한라산', '주상절리', '오설록 티 뮤지엄'],
\r\n
\r\n
}
\r\n\r\n
const user = isAuthenticated()
\r\n\r\n
function Bookmark() {\r
\n
const [page, setPage] = useState(INIT_PAGE)
\r\n
const [error, setError] = useState('')
\r\n
const [success, setSuccess] = useState(false)
\r\n
const [state, setState] = useState(false);
\r\n\r\n
const user = isAuthenticated()
\r\n\r\n
const userId = localStorage.getItem('loginStatus')
\r\n\r\n
async function getBookmark( ) {\r
\n
try {\r
\n
setError('')
\r\n
console.log(page)
\r\n
console.log(userId)
\r\n
await axios.post(`/api/users/bookmark`, {bookmark: page, userId: userId})
\r\n
\r\n
} catch (error) {\r
\n
catchErrors(error, setError)
\r\n
}
\r\n
}
\r\n\r\n
// async function handleSubmit(e){\r
\n
// setState(true); //버튼이 눌려서 handlesubmit이될때 setState값이 true로 바뀐다
\r\n
// try { //respons 서버에 post로 요청하여 데이터를 받아온다
\r\n
// const response = await axios.post('/api/users/bookmark', page)
\r\n
// setSuccess(true)
\r\n
// } catch (error) {\r
\n
// console.log(error)
\r\n
// catchErrors(error, setError)
\r\n
// }
\r\n
// }
\r\n\r\n
// useEffect(() => {\r
\n
// getBookmark(user)
\r\n
// }, [user])
\r\n\r\n\r\n\r\n
return (
\r\n
<Container>
\r\n
<Navbar bg=
\"
primary
\"
variant=
\"
dark
\"
>
\r\n
<Navbar.Brand href=
\"
/
\"
>북마크</Navbar.Brand>
\r\n
<Nav className=
\"
mr-auto
\"
>
\r\n
<Nav.Link href=
\"
/
\"
>Home</Nav.Link>
\r\n
</Nav>
\r\n
<Button type='submit' onClick=
{
getBookmark
}
>저장</Button>
\r\n
</Navbar>
\r\n
<Form>
\r\n
<ListGroup>
\r\n
<ListGroup.Item>
{
page.bookmark[0]
}
</ListGroup.Item>
\r\n
<ListGroup.Item>
{
page.bookmark[1]
}
</ListGroup.Item>
\r\n
<ListGroup.Item>
{
page.bookmark[2]
}
</ListGroup.Item>
\r\n
<ListGroup.Item>
{
page.bookmark[3]
}
</ListGroup.Item>
\r\n
<ListGroup.Item>
{
page.bookmark[4]
}
</ListGroup.Item>
\r\n
</ListGroup>
\r\n
</Form>
\r\n
</Container>
\r\n
)
\r\n
}
\r\n\r\n
export default Bookmark"
,{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"98"
,
"line"
:
11
,
"column"
:
8
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
11
,
"endColumn"
:
13
},{
"ruleId"
:
"101"
,
"replacedBy"
:
"102"
},{
"ruleId"
:
"103"
,
"replacedBy"
:
"104"
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"105"
,
"line"
:
7
,
"column"
:
14
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
7
,
"endColumn"
:
19
},{
"ruleId"
:
"106"
,
"severity"
:
1
,
"message"
:
"107"
,
"line"
:
21
,
"column"
:
6
,
"nodeType"
:
"108"
,
"endLine"
:
21
,
"endColumn"
:
8
,
"suggestions"
:
"109"
},{
"ruleId"
:
"101"
,
"replacedBy"
:
"110"
},{
"ruleId"
:
"103"
,
"replacedBy"
:
"111"
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"112"
,
"line"
:
5
,
"column"
:
83
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
5
,
"endColumn"
:
88
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"113"
,
"line"
:
7
,
"column"
:
8
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
7
,
"endColumn"
:
19
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"98"
,
"line"
:
9
,
"column"
:
8
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
9
,
"endColumn"
:
13
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"114"
,
"line"
:
22
,
"column"
:
12
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
22
,
"endColumn"
:
18
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"115"
,
"line"
:
23
,
"column"
:
12
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
23
,
"endColumn"
:
16
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"116"
,
"line"
:
24
,
"column"
:
12
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
24
,
"endColumn"
:
16
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"117"
,
"line"
:
24
,
"column"
:
18
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
24
,
"endColumn"
:
25
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"118"
,
"line"
:
25
,
"column"
:
12
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
25
,
"endColumn"
:
19
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"119"
,
"line"
:
25
,
"column"
:
21
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
25
,
"endColumn"
:
31
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"120"
,
"line"
:
26
,
"column"
:
12
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
26
,
"endColumn"
:
17
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"121"
,
"line"
:
26
,
"column"
:
19
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
26
,
"endColumn"
:
27
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"122"
,
"line"
:
28
,
"column"
:
11
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
28
,
"endColumn"
:
22
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"123"
,
"line"
:
29
,
"column"
:
11
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
29
,
"endColumn"
:
21
},{
"ruleId"
:
"124"
,
"severity"
:
1
,
"message"
:
"125"
,
"line"
:
99
,
"column"
:
35
,
"nodeType"
:
"126"
,
"endLine"
:
99
,
"endColumn"
:
76
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"127"
,
"line"
:
1
,
"column"
:
17
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
1
,
"endColumn"
:
26
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"128"
,
"line"
:
2
,
"column"
:
10
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
2
,
"endColumn"
:
14
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"129"
,
"line"
:
4
,
"column"
:
64
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
4
,
"endColumn"
:
75
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"130"
,
"line"
:
4
,
"column"
:
77
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
4
,
"endColumn"
:
83
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"127"
,
"line"
:
1
,
"column"
:
27
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
1
,
"endColumn"
:
36
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"131"
,
"line"
:
2
,
"column"
:
10
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
2
,
"endColumn"
:
15
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"132"
,
"line"
:
2
,
"column"
:
17
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
2
,
"endColumn"
:
20
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"133"
,
"line"
:
2
,
"column"
:
22
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
2
,
"endColumn"
:
26
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"134"
,
"line"
:
2
,
"column"
:
45
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
2
,
"endColumn"
:
48
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"135"
,
"line"
:
2
,
"column"
:
82
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
2
,
"endColumn"
:
87
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"136"
,
"line"
:
2
,
"column"
:
89
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
2
,
"endColumn"
:
94
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"137"
,
"line"
:
13
,
"column"
:
7
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
13
,
"endColumn"
:
11
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"117"
,
"line"
:
16
,
"column"
:
18
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
16
,
"endColumn"
:
25
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"120"
,
"line"
:
17
,
"column"
:
12
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
17
,
"endColumn"
:
17
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"118"
,
"line"
:
18
,
"column"
:
12
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
18
,
"endColumn"
:
19
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"119"
,
"line"
:
18
,
"column"
:
21
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
18
,
"endColumn"
:
31
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"138"
,
"line"
:
19
,
"column"
:
12
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
19
,
"endColumn"
:
17
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"139"
,
"line"
:
19
,
"column"
:
19
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
19
,
"endColumn"
:
27
},{
"ruleId"
:
"97"
,
"severity"
:
1
,
"message"
:
"137"
,
"line"
:
21
,
"column"
:
11
,
"nodeType"
:
"99"
,
"messageId"
:
"100"
,
"endLine"
:
21
,
"endColumn"
:
15
},
"no-unused-vars"
,
"'axios' is defined but never used."
,
"Identifier"
,
"unusedVar"
,
"no-native-reassign"
,[
"140"
],
"no-negated-in-lhs"
,[
"141"
],
"'setDb' is assigned a value but never used."
,
"react-hooks/exhaustive-deps"
,
"React Hook useEffect has a missing dependency: 'getReview'. Either include it or remove the dependency array."
,
"ArrayExpression"
,[
"142"
],[
"140"
],[
"141"
],
"'Modal' is defined but never used."
,
"'catchErrors' is defined but never used."
,
"'mobile' is assigned a value but never used."
,
"'show' is assigned a value but never used."
,
"'page' is assigned a value but never used."
,
"'setPage' is assigned a value but never used."
,
"'success' is assigned a value but never used."
,
"'setSuccess' is assigned a value but never used."
,
"'error' is assigned a value but never used."
,
"'setError' is assigned a value but never used."
,
"'handleClose' is assigned a value but never used."
,
"'handleShow' is assigned a value but never used."
,
"react/jsx-no-duplicate-props"
,
"No duplicate props allowed"
,
"JSXAttribute"
,
"'useEffect' is defined but never used."
,
"'Link' is defined but never used."
,
"'FormControl' is defined but never used."
,
"'Navbar' is defined but never used."
,
"'Alert' is defined but never used."
,
"'Col' is defined but never used."
,
"'Card' is defined but never used."
,
"'Row' is defined but never used."
,
"'Image' is defined but never used."
,
"'Table' is defined but never used."
,
"'user' is assigned a value but never used."
,
"'state' is assigned a value but never used."
,
"'setState' is assigned a value but never used."
,
"no-global-assign"
,
"no-unsafe-negation"
,{
"desc"
:
"143"
,
"fix"
:
"144"
},
"Update the dependencies array to be: [getReview]"
,{
"range"
:
"145"
,
"text"
:
"146"
},[
605
,
607
],
"[getReview]"
]
\ No newline at end of file
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment