From 70dfe9642b38a9ad389d5f0fb650032c8b7afd74 Mon Sep 17 00:00:00 2001 From: Aaron Belmore Date: Sat, 1 Jul 2023 21:18:43 -0400 Subject: [PATCH 1/5] completed first two tasks in editin a movie --- src/App.js | 33 +++++----- src/components/EditMovieForm.js | 86 ++++++++++++++++++------- src/components/Movie.js | 107 +++++++++++++++++++------------- 3 files changed, 145 insertions(+), 81 deletions(-) diff --git a/src/App.js b/src/App.js index edd0e16e..f3b2bb35 100644 --- a/src/App.js +++ b/src/App.js @@ -1,40 +1,40 @@ import React, { useEffect, useState } from "react"; import { Route, Routes, Navigate } from "react-router-dom"; -import MovieList from './components/MovieList'; -import Movie from './components/Movie'; +import MovieList from "./components/MovieList"; +import Movie from "./components/Movie"; +EditMovieForm; -import MovieHeader from './components/MovieHeader'; +import MovieHeader from "./components/MovieHeader"; -import FavoriteMovieList from './components/FavoriteMovieList'; +import FavoriteMovieList from "./components/FavoriteMovieList"; -import axios from 'axios'; +import axios from "axios"; +import EditMovieForm from "./components/EditMovieForm"; const App = (props) => { const [movies, setMovies] = useState([]); const [favoriteMovies, setFavoriteMovies] = useState([]); useEffect(() => { - axios.get('http://localhost:9000/api/movies') - .then(res => { + axios + .get("http://localhost:9000/api/movies") + .then((res) => { setMovies(res.data); }) - .catch(err => { + .catch((err) => { console.log(err); }); }, []); - const deleteMovie = (id) => { - } + const deleteMovie = (id) => {}; - const addToFavorites = (movie) => { - - } + const addToFavorites = (movie) => {}; return (
@@ -43,9 +43,9 @@ const App = (props) => { - + } /> - + } /> } /> @@ -57,5 +57,4 @@ const App = (props) => { ); }; - export default App; diff --git a/src/components/EditMovieForm.js b/src/components/EditMovieForm.js index 4a229e18..a28e68a5 100644 --- a/src/components/EditMovieForm.js +++ b/src/components/EditMovieForm.js @@ -1,11 +1,12 @@ -import React, { useState, useEffect } from 'react'; -import { useParams, useNavigate } from 'react-router-dom'; -import { Link } from 'react-router-dom'; +import React, { useState, useEffect } from "react"; +import { useParams, useNavigate } from "react-router-dom"; +import { Link } from "react-router-dom"; -import axios from 'axios'; +import axios from "axios"; const EditMovieForm = (props) => { const navigate = useNavigate(); + const { id } = useParams(); const { setMovies } = props; const [movie, setMovie] = useState({ @@ -13,27 +14,35 @@ const EditMovieForm = (props) => { director: "", genre: "", metascore: 0, - description: "" + description: "", }); const handleChange = (e) => { setMovie({ ...movie, - [e.target.name]: e.target.value + [e.target.name]: e.target.value, }); - } + }; + + useEffect(() => { + axios + .get(`http://localhost:9000/api/movies/${id}`) + .then((res) => console.log(res)) + .catch((err) => console.log(err)); + }, []); const handleSubmit = (e) => { e.preventDefault(); - axios.put(`http://localhost:9000/api/movies/${id}`, movie) - .then(res => { + axios + .put(`http://localhost:9000/api/movies/${id}`, movie) + .then((res) => { setMovies(res.data); navigate(`/movies/${movie.id}`); }) - .catch(err => { + .catch((err) => { console.log(err); - }) - } + }); + }; const { title, director, genre, metascore, description } = movie; @@ -42,38 +51,71 @@ const EditMovieForm = (props) => {
-

Editing {movie.title}

+

+ Editing {movie.title} +

- +
- +
- +
- +
- +
-
- + + +
-
); -} +
+ ); +}; export default EditMovieForm; diff --git a/src/components/Movie.js b/src/components/Movie.js index 9b2159f1..f744e212 100644 --- a/src/components/Movie.js +++ b/src/components/Movie.js @@ -1,64 +1,87 @@ -import React, { useEffect, useState } from 'react'; -import { Link, useParams, useNavigate } from 'react-router-dom'; +import React, { useEffect, useState } from "react"; +import { Link, useParams, useNavigate } from "react-router-dom"; -import axios from 'axios'; +import axios from "axios"; const Movie = (props) => { const { addToFavorites } = props; - const [movie, setMovie] = useState(''); + const [movie, setMovie] = useState(""); const { id } = useParams(); const navigate = useNavigate(); useEffect(() => { - axios.get(`http://localhost:9000/api/movies/${id}`) - .then(res => { + axios + .get(`http://localhost:9000/api/movies/${id}`) + .then((res) => { setMovie(res.data); }) - .catch(err => { + .catch((err) => { console.log(err.response); - }) + }); }, [id]); - return (
-
-
-
-

{movie.title} Details

-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -

{movie.description}

-
-
+ return ( +
+
+
+
+

{movie.title} Details

+
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +

+ {movie.description} +

+
+
-
- Favorite - Edit - -
+
+ Favorite + + Edit + + + + +
+
-
); -} + ); +}; export default Movie; From 4d9395e2ade081704d7f3553f6b6aca2497b2f81 Mon Sep 17 00:00:00 2001 From: Aaron Belmore Date: Sat, 1 Jul 2023 21:20:05 -0400 Subject: [PATCH 2/5] completed first three tasks in editing a movie --- src/components/EditMovieForm.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/EditMovieForm.js b/src/components/EditMovieForm.js index a28e68a5..a781d3f3 100644 --- a/src/components/EditMovieForm.js +++ b/src/components/EditMovieForm.js @@ -27,7 +27,7 @@ const EditMovieForm = (props) => { useEffect(() => { axios .get(`http://localhost:9000/api/movies/${id}`) - .then((res) => console.log(res)) + .then((res) => setMovie(res.data)) .catch((err) => console.log(err)); }, []); From 7331440ee9583a9066e467515e83a401ce5fe648 Mon Sep 17 00:00:00 2001 From: Aaron Belmore Date: Sat, 1 Jul 2023 21:27:34 -0400 Subject: [PATCH 3/5] completed tasks in editing a movie --- src/App.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/App.js b/src/App.js index f3b2bb35..335b05e2 100644 --- a/src/App.js +++ b/src/App.js @@ -43,7 +43,10 @@ const App = (props) => { - } /> + } + /> } /> From 19c5860c1294dda0d321a159acca934140ad325d Mon Sep 17 00:00:00 2001 From: Aaron Belmore Date: Sat, 1 Jul 2023 21:46:00 -0400 Subject: [PATCH 4/5] completed tasks in Deleting a movie --- src/App.js | 9 +++++++-- src/components/Movie.js | 11 +++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/App.js b/src/App.js index 335b05e2..fcac546d 100644 --- a/src/App.js +++ b/src/App.js @@ -27,7 +27,9 @@ const App = (props) => { }); }, []); - const deleteMovie = (id) => {}; + const deleteMovie = (id) => { + setMovies(movies.filter((movie) => movie.id != id)); + }; const addToFavorites = (movie) => {}; @@ -48,7 +50,10 @@ const App = (props) => { element={} /> - } /> + } + /> } /> diff --git a/src/components/Movie.js b/src/components/Movie.js index f744e212..8c9025b2 100644 --- a/src/components/Movie.js +++ b/src/components/Movie.js @@ -11,6 +11,16 @@ const Movie = (props) => { const { id } = useParams(); const navigate = useNavigate(); + const handleDelete = () => { + axios + .delete(`http://localhost:9000/api/movies/${id}`) + .then((res) => { + props.deleteMovie(id); + navigate("/movies"); + }) + .catch((err) => console.log(err)); + }; + useEffect(() => { axios .get(`http://localhost:9000/api/movies/${id}`) @@ -71,6 +81,7 @@ const Movie = (props) => { From e1c27e9c7d80595c309e20484bd56f518452c814 Mon Sep 17 00:00:00 2001 From: Aaron Belmore Date: Mon, 3 Jul 2023 20:26:23 -0400 Subject: [PATCH 5/5] Copleted Proj --- src/App.js | 6 ++ src/components/AddMovieForm.js | 113 +++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 src/components/AddMovieForm.js diff --git a/src/App.js b/src/App.js index fcac546d..9009d5bb 100644 --- a/src/App.js +++ b/src/App.js @@ -11,6 +11,7 @@ import FavoriteMovieList from "./components/FavoriteMovieList"; import axios from "axios"; import EditMovieForm from "./components/EditMovieForm"; +import AddMovieForm from "./components/AddMovieForm"; const App = (props) => { const [movies, setMovies] = useState([]); @@ -57,6 +58,11 @@ const App = (props) => { } /> + } + /> + } />
diff --git a/src/components/AddMovieForm.js b/src/components/AddMovieForm.js new file mode 100644 index 00000000..eec65d6b --- /dev/null +++ b/src/components/AddMovieForm.js @@ -0,0 +1,113 @@ +import React, { useState, useEffect } from "react"; +import { useParams, useNavigate } from "react-router-dom"; +import { Link } from "react-router-dom"; + +import axios from "axios"; + +const AddMovieForm = (props) => { + const navigate = useNavigate(); + + const { setMovies } = props; + const [movie, setMovie] = useState({ + title: "", + director: "", + genre: "", + metascore: 0, + description: "", + }); + + const handleChange = (e) => { + setMovie({ + ...movie, + [e.target.name]: e.target.value, + }); + }; + + const handleSubmit = (e) => { + e.preventDefault(); + axios + .post(`http://localhost:9000/api/movies`, movie) + .then((res) => { + props.setMovies(res.data); + navigate("/movies"); + }) + .catch((err) => { + console.log(err); + }); + }; + + const { title, director, genre, metascore, description } = movie; + + return ( +
+
+
+
+

+ Add {movie.title} +

+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + + + +
+
+
+
+ ); +}; + +export default AddMovieForm;