diff --git a/frontend/src/Movie/Index/Table/MovieIndexHeader.css b/frontend/src/Movie/Index/Table/MovieIndexHeader.css index 31aac7112..cc771c8f4 100644 --- a/frontend/src/Movie/Index/Table/MovieIndexHeader.css +++ b/frontend/src/Movie/Index/Table/MovieIndexHeader.css @@ -31,6 +31,7 @@ flex: 0 0 180px; } +.movieStatus, .certification { composes: headerCell from '~Components/Table/VirtualTableHeaderCell.css'; diff --git a/frontend/src/Movie/Index/Table/MovieIndexRow.css b/frontend/src/Movie/Index/Table/MovieIndexRow.css index a75849059..2585cd57b 100644 --- a/frontend/src/Movie/Index/Table/MovieIndexRow.css +++ b/frontend/src/Movie/Index/Table/MovieIndexRow.css @@ -31,6 +31,7 @@ flex: 0 0 180px; } +.movieStatus, .certification { composes: cell from '~Components/Table/Cells/VirtualTableRowCell.css'; diff --git a/frontend/src/Movie/Index/Table/MovieIndexRow.js b/frontend/src/Movie/Index/Table/MovieIndexRow.js index 7bb10e17a..939016435 100644 --- a/frontend/src/Movie/Index/Table/MovieIndexRow.js +++ b/frontend/src/Movie/Index/Table/MovieIndexRow.js @@ -15,6 +15,7 @@ import MovieTitleLink from 'Movie/MovieTitleLink'; import EditMovieModalConnector from 'Movie/Edit/EditMovieModalConnector'; import DeleteMovieModal from 'Movie/Delete/DeleteMovieModal'; import MovieStatusCell from './MovieStatusCell'; +import MovieStatusConnector from 'Movie/MovieStatusConnector'; import VirtualTableSelectCell from 'Components/Table/Cells/VirtualTableSelectCell'; import styles from './MovieIndexRow.css'; @@ -226,6 +227,19 @@ class MovieIndexRow extends Component { ); } + if (name === 'movieStatus') { + return ( + + + + ); + } + if (name === 'ratings') { return ( + + } + /> + + ); + } + + if (grabbed) { + return ( +
+ +
+ ); + } + + if (hasMovieFile) { + const quality = movieFile.quality; + const isCutoffNotMet = movieFile.qualityCutoffNotMet; + + return ( +
+ +
+ ); + } + + if (!inCinemas) { + return ( +
+ +
+ ); + } + + if (!monitored) { + return ( +
+ +
+ ); + } + + if (hasAired) { + return ( +
+ +
+ ); + } + + return ( +
+ +
+ ); +} + +MovieStatus.propTypes = { + inCinemas: PropTypes.string, + monitored: PropTypes.bool.isRequired, + grabbed: PropTypes.bool, + queueItem: PropTypes.object, + movieFile: PropTypes.object +}; + +export default MovieStatus; diff --git a/frontend/src/Movie/MovieStatusConnector.js b/frontend/src/Movie/MovieStatusConnector.js new file mode 100644 index 000000000..91e934e96 --- /dev/null +++ b/frontend/src/Movie/MovieStatusConnector.js @@ -0,0 +1,50 @@ +import _ from 'lodash'; +import PropTypes from 'prop-types'; +import React, { Component } from 'react'; +import { connect } from 'react-redux'; +import { createSelector } from 'reselect'; +import createMovieSelector from 'Store/Selectors/createMovieSelector'; +import createQueueItemSelector from 'Store/Selectors/createQueueItemSelector'; +import MovieStatus from './MovieStatus'; + +function createMapStateToProps() { + return createSelector( + createMovieSelector(), + createQueueItemSelector(), + (movie, queueItem) => { + const result = _.pick(movie, [ + 'inCinemas', + 'monitored', + 'grabbed' + ]); + + result.queueItem = queueItem; + result.movieFile = movie.movieFile; + + return result; + } + ); +} + +const mapDispatchToProps = { +}; + +class MovieStatusConnector extends Component { + + // + // Render + + render() { + return ( + + ); + } +} + +MovieStatusConnector.propTypes = { + movieId: PropTypes.number.isRequired +}; + +export default connect(createMapStateToProps, mapDispatchToProps)(MovieStatusConnector); diff --git a/frontend/src/Store/Actions/movieIndexActions.js b/frontend/src/Store/Actions/movieIndexActions.js index ba65b0c67..ce46d9500 100644 --- a/frontend/src/Store/Actions/movieIndexActions.js +++ b/frontend/src/Store/Actions/movieIndexActions.js @@ -120,6 +120,12 @@ export const defaultState = { isSortable: false, isVisible: false }, + { + name: 'movieStatus', + label: 'Status', + isSortable: true, + isVisible: true + }, { name: 'ratings', label: 'Rating',