From 7d023e013c7fe0362a14de2c84611f544de4c992 Mon Sep 17 00:00:00 2001 From: Krainova Anastasia Date: Sat, 25 Jan 2025 12:46:22 +0200 Subject: [PATCH 1/2] add task solution --- src/components/NewMovie/NewMovie.tsx | 104 ++++++++++++++++++++++++--- 1 file changed, 95 insertions(+), 9 deletions(-) diff --git a/src/components/NewMovie/NewMovie.tsx b/src/components/NewMovie/NewMovie.tsx index 85bace9dd..f5ce17720 100644 --- a/src/components/NewMovie/NewMovie.tsx +++ b/src/components/NewMovie/NewMovie.tsx @@ -1,30 +1,113 @@ import { useState } from 'react'; import { TextField } from '../TextField'; +import { MoviesList } from '../MoviesList'; -export const NewMovie = () => { +export interface Movie { + title: string; + description: string; + imgUrl: string; + imdbUrl: string; + imdbId: string; +} + +interface NewMovieProps { + onAdd: (movie: Movie) => void; +} + +export const NewMovie: React.FC = ({ onAdd }) => { // Increase the count after successful form submission // to reset touched status of all the `Field`s - const [count] = useState(0); + const [count, setCount] = useState(0); + + const [title, setTitle] = useState(''); + + + const [description, setDescription] = useState(''); + + const [imgUrl, setImgUrl] = useState(''); + + + const [imdbUrl, setImdbUrl] = useState(''); + + + const [imdbId, setImdbId] = useState(''); + + + const [movies, setMovies] = useState([]); + + const isFormValid = + title.trim() && imgUrl.trim() && imdbUrl.trim() && imdbId.trim(); + + const reset = () => { + setTitle(''); + setImgUrl(''); + setDescription(''); + setImdbUrl(''); + setImdbId(''); + }; + + const handleAdd = (event: React.FormEvent) => { + event.preventDefault(); + + + if (!isFormValid) { + return; + } + + const newMovie: Movie = { title, imgUrl, imdbUrl, imdbId, description }; + + setMovies(prevMovies => [...prevMovies, newMovie]); + + onAdd(newMovie); + + reset(); + + setCount(prev => prev + 1); + }; return ( -
+ <> +

Add a movie

{}} + value={title} + onChange={setTitle} required /> - + - + - + - +
@@ -32,11 +115,14 @@ export const NewMovie = () => { type="submit" data-cy="submit-button" className="button is-link" + disabled={!isFormValid} > Add
+ + ); }; From 9f68135ad518a4a7fc86194349c0124c4b011aaf Mon Sep 17 00:00:00 2001 From: Krainova Anastasia Date: Sat, 25 Jan 2025 13:09:50 +0200 Subject: [PATCH 2/2] add task solution --- src/components/NewMovie/NewMovie.tsx | 117 +++++++++++++-------------- 1 file changed, 56 insertions(+), 61 deletions(-) diff --git a/src/components/NewMovie/NewMovie.tsx b/src/components/NewMovie/NewMovie.tsx index f5ce17720..ce1a69a17 100644 --- a/src/components/NewMovie/NewMovie.tsx +++ b/src/components/NewMovie/NewMovie.tsx @@ -21,18 +21,14 @@ export const NewMovie: React.FC = ({ onAdd }) => { const [title, setTitle] = useState(''); - const [description, setDescription] = useState(''); const [imgUrl, setImgUrl] = useState(''); - const [imdbUrl, setImdbUrl] = useState(''); - const [imdbId, setImdbId] = useState(''); - const [movies, setMovies] = useState([]); const isFormValid = @@ -49,7 +45,6 @@ export const NewMovie: React.FC = ({ onAdd }) => { const handleAdd = (event: React.FormEvent) => { event.preventDefault(); - if (!isFormValid) { return; } @@ -67,62 +62,62 @@ export const NewMovie: React.FC = ({ onAdd }) => { return ( <> -
-

Add a movie

- - - - - - - - - - - -
-
- + +

Add a movie

+ + setTitle(value)} + required + /> + + setDescription(value)} + value={description} + /> + + setImgUrl(value)} + required + /> + + setImdbUrl(value)} + required + /> + + setImdbId(value)} + required + /> + +
+
+ +
-
- - - + + + ); };