89 lines
2.9 KiB
JavaScript

import React from "react"
import PropTypes from "prop-types"
import { OrderedMap, Map } from "immutable"
import { connect } from "react-redux"
import { addTorrent } from "../../actions/torrents"
import { refreshSubtitles } from "../../actions/subtitles"
import { addMovieToWishlist, deleteMovie, deleteMovieFromWishlist,
getMovieDetails, selectMovie, updateFilter } from "../../actions/movies"
import ListPosters from "../list/posters"
import ListDetails from "../list/details"
import MovieButtons from "./buttons"
import Row from "react-bootstrap/Row"
function mapStateToProps(state) {
return {
loading : state.movieStore.get("loading"),
movies : state.movieStore.get("movies"),
filter : state.movieStore.get("filter"),
selectedImdbId : state.movieStore.get("selectedImdbId"),
lastFetchUrl : state.movieStore.get("lastFetchUrl"),
exploreOptions : state.movieStore.get("exploreOptions"),
};
}
const mapDispatchToProps = {
selectMovie, getMovieDetails, addTorrent,
addMovieToWishlist, deleteMovie, deleteMovieFromWishlist,
refreshSubtitles, updateFilter,
};
const MovieList = (props) => {
let selectedMovie = undefined;
if (props.movies !== undefined &&
props.movies.has(props.selectedImdbId)) {
selectedMovie = props.movies.get(props.selectedImdbId);
}
return (
<Row>
<ListPosters
data={props.movies}
type="movies"
placeHolder="Filter movies..."
exploreOptions={props.exploreOptions}
selectedImdbId={props.selectedImdbId}
updateFilter={props.updateFilter}
filter={props.filter}
onClick={props.selectMovie}
onDoubleClick={function() { return; }}
onKeyEnter={function() { return; }}
params={props.match.params}
loading={props.loading}
/>
<ListDetails data={selectedMovie} loading={props.loading}>
<MovieButtons
movie={selectedMovie}
getMovieDetails={props.getMovieDetails}
addTorrent={props.addTorrent}
deleteMovie={props.deleteMovie}
addToWishlist={props.addMovieToWishlist}
deleteFromWishlist={props.deleteMovieFromWishlist}
lastFetchUrl={props.lastFetchUrl}
refreshSubtitles={props.refreshSubtitles}
/>
</ListDetails>
</Row>
);
}
MovieList.propTypes = {
movies: PropTypes.instanceOf(OrderedMap),
exploreOptions: PropTypes.instanceOf(Map),
selectedImdbId: PropTypes.string,
filter: PropTypes.string,
loading: PropTypes.bool,
lastFetchUrl: PropTypes.string,
updateFilter: PropTypes.func,
selectMovie: PropTypes.func,
addMovieToWishlist: PropTypes.func,
deleteMovieFromWishlist: PropTypes.func,
deleteMovie: PropTypes.func,
addTorrent: PropTypes.func,
refreshSubtitles: PropTypes.func,
getMovieDetails: PropTypes.func,
match: PropTypes.object,
};
export default connect(mapStateToProps, mapDispatchToProps)(MovieList);