Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { useState } from "react";
- import { Container, InputGroup, FormControl, Button } from "react-bootstrap";
- import axios from "axios";
- interface Movie {
- Title: string;
- Year: string;
- imdbID: string;
- Type: string;
- Poster: string;
- }
- const MovieSearch = () => {
- const [searchTerm, setSearchTerm] = useState("");
- const [searchResults, setSearchResults] = useState<Movie[]>([]);
- const [favorites, setFavorites] = useState<Movie[]>([]);
- const searchMovies = async () => {
- const response = await axios.get(
- `http://www.omdbapi.com/?s=${searchTerm}&apikey=<your-api-key>`
- );
- setSearchResults(response.data.Search);
- };
- const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {
- setSearchTerm(e.target.value);
- };
- const handleAddToFavorites = (movie: Movie) => {
- setFavorites((prevFavorites) => [...prevFavorites, movie]);
- };
- return (
- <Container>
- <h1>Movie Search</h1>
- <InputGroup className="mb-3">
- <FormControl
- placeholder="Search movies..."
- onChange={handleInputChange}
- />
- <Button variant="outline-secondary" onClick={searchMovies}>
- Search
- </Button>
- </InputGroup>
- <div className="row">
- {searchResults.map((movie) => (
- <div key={movie.imdbID} className="col-md-4">
- <div className="card mb-4 shadow-sm">
- <img
- src={movie.Poster}
- alt={`${movie.Title} poster`}
- className="card-img-top"
- />
- <div className="card-body">
- <h5 className="card-title">{movie.Title}</h5>
- <p className="card-text">
- <strong>Year: </strong>
- {movie.Year}
- <br />
- <strong>Type: </strong>
- {movie.Type}
- </p>
- <Button variant="primary" onClick={() => handleAddToFavorites(movie)}>
- Add to Favorites
- </Button>
- </div>
- </div>
- </div>
- ))}
- </div>
- <hr />
- <h2>Favorites</h2>
- <div className="row">
- {favorites.map((favorite) => (
- <div key={favorite.imdbID} className="col-md-4">
- <div className="card mb-4 shadow-sm">
- <img
- src={favorite.Poster}
- alt={`${favorite.Title} poster`}
- className="card-img-top"
- />
- <div className="card-body">
- <h5 className="card-title">{favorite.Title}</h5>
- <p className="card-text">
- <strong>Year: </strong>
- {favorite.Year}
- <br />
- <strong>Type: </strong>
- {favorite.Type}
- </p>
- </div>
- </div>
- </div>
- ))}
- </div>
- </Container>
- );
- };
- export default MovieSearch;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement