Muthu Kumar
4 years ago
1 changed files with 111 additions and 0 deletions
@ -0,0 +1,111 @@ |
|||
import React, { useState } from "react"; |
|||
import { Link } from "@reach/router"; |
|||
import styled from "styled-components"; |
|||
|
|||
const Page = styled.div` |
|||
text-align: center; |
|||
`;
|
|||
|
|||
const SearchBox = styled.div` |
|||
input { |
|||
height: 50px; |
|||
padding: 10px; |
|||
border-radius: 25px; |
|||
width: 800px; |
|||
outline-width: 0; |
|||
display: inline-block; |
|||
} |
|||
|
|||
button { |
|||
height: 50px; |
|||
width: 150px; |
|||
background: #ffeb3b; |
|||
border: none; |
|||
color: #000; |
|||
border-radius: 25px; |
|||
outline: 0; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
button:hover, |
|||
.form-box button:active { |
|||
background: #43a047; |
|||
} |
|||
`;
|
|||
|
|||
const List = styled.ul` |
|||
list-style-type: none; |
|||
display: flex; |
|||
flex-direction: column; |
|||
align-items: flex-start; |
|||
gap: 12px; |
|||
margin-bottom: 50px; |
|||
`;
|
|||
|
|||
const MovieImg = styled.img` |
|||
height: 250px; |
|||
`;
|
|||
|
|||
function Search() { |
|||
const [search, setSearch] = useState(""); |
|||
const [results, setResults] = useState([]); |
|||
const [error, setError] = useState(""); |
|||
|
|||
const searchMovies = async e => { |
|||
e.preventDefault(); |
|||
|
|||
if (!search) return; |
|||
|
|||
const Token = window.localStorage.getItem("Token"); |
|||
|
|||
try { |
|||
const response = await fetch( |
|||
"https://mkr.thefeathers.in/search/" + search, |
|||
{ |
|||
method: "GET", |
|||
headers: new Headers({ Authentication: Token }), |
|||
}, |
|||
); |
|||
|
|||
const data = await response.json(); |
|||
if (!data.success || !data.results) { |
|||
return setError("Error occured. " + data.error || ""); |
|||
} else { |
|||
setError(""); |
|||
setResults(data.results); |
|||
} |
|||
} catch (e) { |
|||
setError(e.message); |
|||
} |
|||
}; |
|||
|
|||
return ( |
|||
<Page> |
|||
{error ? <p>{error}</p> : ""} |
|||
<SearchBox> |
|||
<input |
|||
type="text" |
|||
onInput={e => setSearch(e.target.value)} |
|||
placeholder="Search movies" |
|||
/> |
|||
<button type="button" onClick={searchMovies}> |
|||
Search |
|||
</button> |
|||
</SearchBox> |
|||
<List> |
|||
{results.map(result => { |
|||
return ( |
|||
<li key={result.movieId}> |
|||
<Link to={"/movie/" + result.movieId}> |
|||
<MovieImg src={result.poster}></MovieImg> |
|||
<h2>{result.title}</h2> |
|||
</Link> |
|||
</li> |
|||
); |
|||
})} |
|||
</List> |
|||
</Page> |
|||
); |
|||
} |
|||
|
|||
export default Search; |
Loading…
Reference in new issue