87 lines
2.7 KiB
JavaScript
87 lines
2.7 KiB
JavaScript
import React from "react"
|
|
import PropTypes from "prop-types"
|
|
import { OrderedMap, Map } from "immutable"
|
|
import { connect } from "react-redux"
|
|
import { selectMovie, updateFilter } from "../../actions/movies"
|
|
|
|
import ListDetails from "../list/details"
|
|
import ListPosters from "../list/posters"
|
|
|
|
import { inLibrary } from "../../utils"
|
|
|
|
import { ShowMore } from "../buttons/showMore"
|
|
|
|
import { MovieSubtitlesButton } from "./subtitlesButton"
|
|
import { MovieTorrentsButton } from "./torrentsButton"
|
|
|
|
function mapStateToProps(state) {
|
|
return {
|
|
loading : state.movieStore.get("loading"),
|
|
movies : state.movieStore.get("movies"),
|
|
filter : state.movieStore.get("filter"),
|
|
selectedImdbId : state.movieStore.get("selectedImdbId"),
|
|
exploreOptions : state.movieStore.get("exploreOptions"),
|
|
};
|
|
}
|
|
const mapDispatchToProps = {
|
|
selectMovie, updateFilter,
|
|
};
|
|
|
|
const MovieList = (props) => {
|
|
let selectedMovie = Map();
|
|
if (props.movies !== undefined &&
|
|
props.movies.has(props.selectedImdbId)) {
|
|
selectedMovie = props.movies.get(props.selectedImdbId);
|
|
}
|
|
|
|
return (
|
|
<div className="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}>
|
|
<ShowMore
|
|
id={selectedMovie.get("imdb_id")}
|
|
inLibrary={inLibrary(selectedMovie)}
|
|
>
|
|
<MovieTorrentsButton
|
|
torrents={selectedMovie.get("torrents")}
|
|
imdbId={selectedMovie.get("imdb_id")}
|
|
title={selectedMovie.get("title")}
|
|
searching={selectedMovie.get("fetchingDetails", false)}
|
|
/>
|
|
<MovieSubtitlesButton
|
|
subtitles={selectedMovie.get("subtitles")}
|
|
inLibrary={inLibrary(selectedMovie)}
|
|
imdbId={selectedMovie.get("imdb_id")}
|
|
searching={selectedMovie.get("fetchingSubtitles", false)}
|
|
/>
|
|
</ShowMore>
|
|
</ListDetails>
|
|
</div>
|
|
);
|
|
}
|
|
MovieList.propTypes = {
|
|
movies: PropTypes.instanceOf(OrderedMap),
|
|
exploreOptions: PropTypes.instanceOf(Map),
|
|
selectedImdbId: PropTypes.string,
|
|
filter: PropTypes.string,
|
|
loading: PropTypes.bool,
|
|
updateFilter: PropTypes.func,
|
|
selectMovie: PropTypes.func,
|
|
match: PropTypes.object,
|
|
};
|
|
|
|
export default connect(mapStateToProps, mapDispatchToProps)(MovieList);
|