);
}
-export default AddMovieForm;
\ No newline at end of file
+export default connect(null, {addMovie})(AddMovieForm);
\ No newline at end of file
diff --git a/src/components/FavoriteMovieList.js b/src/components/FavoriteMovieList.js
index 54f4383f..3cd483a4 100644
--- a/src/components/FavoriteMovieList.js
+++ b/src/components/FavoriteMovieList.js
@@ -1,19 +1,25 @@
import React from 'react';
import { Link } from 'react-router-dom';
+import { connect } from 'react-redux';
+import { deleteFavorite } from '../actions/favoriteActions';
const FavoriteMovieList = (props) => {
- const favorites = [];
+
+ const handleDeleteFavorite = (id) => {
+ props.deleteFavorite(id)
+
+ }
return (
Favorite Movies
{
- favorites.map(movie=>{
+ props.favorites.map(movie=>{
return
{movie.title}
- remove_circle
+ {handleDeleteFavorite(movie.id)}}>remove_circle
})
@@ -21,5 +27,9 @@ const FavoriteMovieList = (props) => {
);
}
-
-export default FavoriteMovieList;
\ No newline at end of file
+const mapStateToProps = (state) => {
+ return ({
+ favorites: state.favoriteMovie.favorites
+ })
+}
+export default connect(mapStateToProps, {deleteFavorite})(FavoriteMovieList);
\ No newline at end of file
diff --git a/src/components/Movie.js b/src/components/Movie.js
index 373201e5..bc9170f5 100644
--- a/src/components/Movie.js
+++ b/src/components/Movie.js
@@ -1,13 +1,27 @@
-import React from 'react';
+import React, { useState } from 'react';
import { useParams, useHistory } from 'react-router-dom';
+import { connect } from 'react-redux';
+import { deleteMovie } from '../actions/movieActions';
+
+import { addFavorite } from '../actions/favoriteActions';
const Movie = (props) => {
const { id } = useParams();
- const { push } = useHistory();
+ const history = useHistory();
+
+ const [favButton, setFavButton] = useState(true)
- const movies = [];
- const movie = movies.find(movie=>movie.id===Number(id));
+ const movie = props.movies.find(movie=>movie.id===Number(id));
+ const handleDeleteMovie = () => {
+ props.deleteMovie(movie.id)
+ history.push(`/movies`)
+ }
+
+ const handleAddFavorite = (obj) => {
+ props.addFavorite(obj)
+ }
+
return(
@@ -37,8 +51,8 @@ const Movie = (props) => {
@@ -47,4 +61,11 @@ const Movie = (props) => {
);
}
-export default Movie;
\ No newline at end of file
+const mapStateToProps =(state)=> {
+ return({
+ movies: state.movie.movies,
+ favButton: state.favoriteMovie.favButton
+ })
+}
+
+export default connect(mapStateToProps, { deleteMovie, addFavorite })(Movie);
\ No newline at end of file
diff --git a/src/components/MovieHeader.js b/src/components/MovieHeader.js
index e3443e5f..b31f1d3d 100644
--- a/src/components/MovieHeader.js
+++ b/src/components/MovieHeader.js
@@ -1,17 +1,23 @@
-import React from 'react';
+import React, { useState } from 'react';
import { Link } from 'react-router-dom';
+import { connect } from 'react-redux';
+import { displayFavorites } from '../actions/favoriteActions';
const MovieHeader = (props) => {
- const appTitle = "";
- const displayFavorites = true;
-
+
+ const [button, setButton] = useState(true)
+
+ const handleDisplayFavorites = () => {
+ props.displayFavorites()
+ setButton(!button)
+ }
return(
-
{appTitle}
+ {props.appTitle}
-
{ displayFavorites ? "Hide" : "Show"} Favorites
+
{ button ? "Hide" : "Show"} Favorites
View All Movies
Add New Movie
@@ -19,4 +25,10 @@ const MovieHeader = (props) => {
);
}
-export default MovieHeader;
\ No newline at end of file
+const mapStateToProps = (state) => {
+ return({
+ appTitle: state.movie.appTitle,
+ displayFavorites: state.favoriteMovie.displayFavorites
+ })
+}
+export default connect(mapStateToProps, {displayFavorites})(MovieHeader);
\ No newline at end of file
diff --git a/src/components/MovieList.js b/src/components/MovieList.js
index 268c7809..3aae3b94 100644
--- a/src/components/MovieList.js
+++ b/src/components/MovieList.js
@@ -2,10 +2,9 @@ import React from 'react';
import MovieListItem from './MovieListItem';
import MovieFooter from './MovieFooter';
+import { connect } from 'react-redux';
const MovieList = (props)=> {
- const movies = [];
-
return (
@@ -21,14 +20,20 @@ const MovieList = (props)=> {
{
- movies.map(movie=>)
+ props.movies.map(movie=>)
}
-
+
);
}
-export default MovieList;
\ No newline at end of file
+const mapStateToProps = (state) => {
+ return({
+ movies: state.movie.movies
+ })
+}
+
+export default connect(mapStateToProps)(MovieList);
\ No newline at end of file
diff --git a/src/index.js b/src/index.js
index dfc70e99..63081671 100644
--- a/src/index.js
+++ b/src/index.js
@@ -9,9 +9,13 @@ import App from './App'
import { BrowserRouter as Router } from 'react-router-dom';
import './index.css';
+const store = createStore(reducer);
+
ReactDOM.render(
+
- ,
+
+ ,
document.getElementById('root')
);
diff --git a/src/reducers/favoriteMovieReducer.js b/src/reducers/favoriteMovieReducer.js
new file mode 100644
index 00000000..dfe6742f
--- /dev/null
+++ b/src/reducers/favoriteMovieReducer.js
@@ -0,0 +1,33 @@
+import movies from "../data"
+import { DISPLAY_FAVORITES, ADD_FAVORITE, DELETE_FAVORITE } from "../actions/favoriteActions";
+
+const initialState = {
+ favorites: [],
+ displayFavorites: true,
+ favButton: true
+}
+
+const favoriteMovieReducer = (state = initialState, action) => {
+ switch(action.type){
+ case(DISPLAY_FAVORITES):
+ return({
+ ...state,
+ displayFavorites: !state.displayFavorites
+ })
+ case(ADD_FAVORITE):
+ return({
+ ...state,
+ favorites: [...state.favorites, action.payload],
+ favButton: !state.favButton
+ })
+ case(DELETE_FAVORITE):
+ return({
+ ...state,
+ favorites: state.favorites.filter(item=>(action.payload !== item.id)),
+ favButton: !state.favButton
+ })
+ default:
+ return state;
+}}
+
+export default favoriteMovieReducer;
\ No newline at end of file
diff --git a/src/reducers/index.js b/src/reducers/index.js
index 6629609c..2369b3c8 100644
--- a/src/reducers/index.js
+++ b/src/reducers/index.js
@@ -1,5 +1,10 @@
import { combineReducers } from 'redux';
import movieReducer from './movieReducer';
+import favoriteMovieReducer from './favoriteMovieReducer';
-export default movieReducer;
\ No newline at end of file
+
+export default combineReducers({
+ movie: movieReducer,
+ favoriteMovie: favoriteMovieReducer
+});
\ No newline at end of file
diff --git a/src/reducers/movieReducer.js b/src/reducers/movieReducer.js
index 16f33bcd..5f2793ec 100644
--- a/src/reducers/movieReducer.js
+++ b/src/reducers/movieReducer.js
@@ -6,12 +6,17 @@ const initialState = {
appTitle: "IMDB Movie Database"
}
-const reducer = (state, action) => {
+const reducer = (state = initialState, action) => {
switch(action.type) {
case DELETE_MOVIE:
return {
movies: state.movies.filter(item=>(action.payload !== item.id))
}
+ case ADD_MOVIE:
+ return {
+ ...state,
+ movies: [...state.movies, action.payload]
+ }
default:
return state;
}