diff --git a/src/App.tsx b/src/App.tsx index 34be670b0..9b63f6a58 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -2,15 +2,23 @@ import './App.scss'; import { MoviesList } from './components/MoviesList'; import { NewMovie } from './components/NewMovie'; import moviesFromServer from './api/movies.json'; +import { useState } from 'react'; +import { Movie } from './types/Movie'; export const App = () => { + const [movies, setMovies] = useState([...moviesFromServer]); + + const handleAddMovie = (newMovie: Movie) => { + setMovies(prevMovies => [...prevMovies, newMovie]); + }; + return (
- +
- {}} */ /> +
); diff --git a/src/components/NewMovie/NewMovie.tsx b/src/components/NewMovie/NewMovie.tsx index 85bace9dd..332de5c64 100644 --- a/src/components/NewMovie/NewMovie.tsx +++ b/src/components/NewMovie/NewMovie.tsx @@ -1,30 +1,90 @@ import { useState } from 'react'; import { TextField } from '../TextField'; +import { Movie } from '../../types/Movie'; -export const NewMovie = () => { - // Increase the count after successful form submission - // to reset touched status of all the `Field`s - const [count] = useState(0); +type Props = { + onAdd: (newMovie: Movie) => void; +}; + +export const NewMovie: React.FC = ({ onAdd }) => { + const [movieTitle, setMovieTitle] = useState(''); + const [movieDescription, setMovieDescription] = useState(''); + const [movieImgUrl, setMovieImgUrl] = useState(''); + const [movieImdbUrl, setMovieImdbUrl] = useState(''); + const [movieimdbId, setMovieimdbId] = useState(''); + const isFormValid = movieTitle && movieImgUrl && movieImdbUrl && movieimdbId; + const handleAddMovie = (event: React.FormEvent) => { + event.preventDefault(); + + const newMovie: Movie = { + title: movieTitle, + description: movieDescription, + imgUrl: movieImgUrl, + imdbUrl: movieImdbUrl, + imdbId: movieimdbId, + }; + + onAdd(newMovie); + + setMovieTitle(''); + setMovieDescription(''); + setMovieImgUrl(''); + setMovieImdbUrl(''); + setMovieimdbId(''); + }; return ( -
+

Add a movie

{}} + value={movieTitle} + onChange={(event: string) => { + setMovieTitle(event); + }} required /> - + { + setMovieDescription(event); + }} + /> - + { + setMovieImgUrl(event); + }} + required + /> - + { + setMovieImdbUrl(event); + }} + required + /> - + { + setMovieimdbId(event); + }} + required + />
@@ -32,6 +92,7 @@ export const NewMovie = () => { type="submit" data-cy="submit-button" className="button is-link" + disabled={!isFormValid} > Add