diff --git a/frontend/src/Movie/Delete/DeleteMovieModalContent.js b/frontend/src/Movie/Delete/DeleteMovieModalContent.js index c6a4662d8..446bc4912 100644 --- a/frontend/src/Movie/Delete/DeleteMovieModalContent.js +++ b/frontend/src/Movie/Delete/DeleteMovieModalContent.js @@ -23,8 +23,7 @@ class DeleteMovieModalContent extends Component { super(props, context); this.state = { - deleteFiles: false, - addImportExclusion: false + deleteFiles: false }; } @@ -35,15 +34,11 @@ class DeleteMovieModalContent extends Component { this.setState({ deleteFiles: value }); }; - onAddImportExclusionChange = ({ value }) => { - this.setState({ addImportExclusion: value }); - }; - onDeleteMovieConfirmed = () => { const deleteFiles = this.state.deleteFiles; - const addImportExclusion = this.state.addImportExclusion; + const addImportExclusion = this.props.deleteOptions.addImportExclusion; - this.setState({ deleteFiles: false, addImportExclusion: false }); + this.setState({ deleteFiles: false }); this.props.onDeletePress(deleteFiles, addImportExclusion); }; @@ -55,12 +50,14 @@ class DeleteMovieModalContent extends Component { title, path, hasFile, + deleteOptions, sizeOnDisk, - onModalClose + onModalClose, + onDeleteOptionChange } = this.props; const deleteFiles = this.state.deleteFiles; - const addImportExclusion = this.state.addImportExclusion; + const addImportExclusion = deleteOptions.addImportExclusion; let deleteFilesLabel = hasFile ? translate('DeleteFileLabel', [1]) : translate('DeleteFilesLabel', [0]); let deleteFilesHelpText = translate('DeleteFilesHelpText'); @@ -99,7 +96,7 @@ class DeleteMovieModalContent extends Component { value={addImportExclusion} helpText={translate('AddImportExclusionHelpText')} kind={kinds.DANGER} - onChange={this.onAddImportExclusionChange} + onChange={onDeleteOptionChange} /> @@ -156,6 +153,8 @@ DeleteMovieModalContent.propTypes = { path: PropTypes.string.isRequired, hasFile: PropTypes.bool.isRequired, sizeOnDisk: PropTypes.number.isRequired, + deleteOptions: PropTypes.object.isRequired, + onDeleteOptionChange: PropTypes.func.isRequired, onDeletePress: PropTypes.func.isRequired, onModalClose: PropTypes.func.isRequired }; diff --git a/frontend/src/Movie/Delete/DeleteMovieModalContentConnector.js b/frontend/src/Movie/Delete/DeleteMovieModalContentConnector.js index 15b405dc7..2f995a523 100644 --- a/frontend/src/Movie/Delete/DeleteMovieModalContentConnector.js +++ b/frontend/src/Movie/Delete/DeleteMovieModalContentConnector.js @@ -1,64 +1,44 @@ -import { push } from 'connected-react-router'; -import PropTypes from 'prop-types'; -import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; -import { deleteMovie } from 'Store/Actions/movieActions'; +import { deleteMovie, setDeleteOption } from 'Store/Actions/movieActions'; import createMovieSelector from 'Store/Selectors/createMovieSelector'; import DeleteMovieModalContent from './DeleteMovieModalContent'; function createMapStateToProps() { return createSelector( + (state) => state.movies.deleteOptions, createMovieSelector(), - (movie) => { - return movie; + (deleteOptions, movie) => { + return { + ...movie, + deleteOptions + }; } ); } -const mapDispatchToProps = { - deleteMovie, - push -}; +function createMapDispatchToProps(dispatch, props) { + return { + onDeleteOptionChange(option) { + dispatch( + setDeleteOption({ + [option.name]: option.value + }) + ); + }, -class DeleteMovieModalContentConnector extends Component { + onDeletePress(deleteFiles, addImportExclusion) { + dispatch( + deleteMovie({ + id: props.movieId, + deleteFiles, + addImportExclusion + }) + ); - // - // Listeners - - onDeletePress = (deleteFiles, addImportExclusion) => { - this.props.deleteMovie({ - id: this.props.movieId, - deleteFiles, - addImportExclusion - }); - - this.props.onModalClose(true); - - if (this.props.nextMovieRelativePath) { - this.props.push(window.Radarr.urlBase + this.props.nextMovieRelativePath); + props.onModalClose(true); } }; - - // - // Render - - render() { - return ( - - ); - } } -DeleteMovieModalContentConnector.propTypes = { - movieId: PropTypes.number.isRequired, - onModalClose: PropTypes.func.isRequired, - deleteMovie: PropTypes.func.isRequired, - push: PropTypes.func.isRequired, - nextMovieRelativePath: PropTypes.string -}; - -export default connect(createMapStateToProps, mapDispatchToProps)(DeleteMovieModalContentConnector); +export default connect(createMapStateToProps, createMapDispatchToProps)(DeleteMovieModalContent); diff --git a/frontend/src/Movie/Index/Select/Delete/DeleteMovieModalContent.tsx b/frontend/src/Movie/Index/Select/Delete/DeleteMovieModalContent.tsx index cfaa1bc17..f7e578701 100644 --- a/frontend/src/Movie/Index/Select/Delete/DeleteMovieModalContent.tsx +++ b/frontend/src/Movie/Index/Select/Delete/DeleteMovieModalContent.tsx @@ -22,14 +22,14 @@ interface DeleteMovieModalContentProps { } const selectDeleteOptions = createSelector( - (state) => state.movie.deleteOptions, + (state) => state.movies.deleteOptions, (deleteOptions) => deleteOptions ); function DeleteMovieModalContent(props: DeleteMovieModalContentProps) { const { movieIds, onModalClose } = props; - const { addImportListExclusion } = useSelector(selectDeleteOptions); + const { addImportExclusion } = useSelector(selectDeleteOptions); const allMovies = useSelector(createAllMoviesSelector()); const dispatch = useDispatch(); @@ -68,7 +68,7 @@ function DeleteMovieModalContent(props: DeleteMovieModalContentProps) { bulkDeleteMovie({ movieIds, deleteFiles, - addImportListExclusion, + addImportExclusion, }) ); @@ -76,7 +76,7 @@ function DeleteMovieModalContent(props: DeleteMovieModalContentProps) { }, [ movieIds, deleteFiles, - addImportListExclusion, + addImportExclusion, setDeleteFiles, dispatch, onModalClose, @@ -93,8 +93,8 @@ function DeleteMovieModalContent(props: DeleteMovieModalContentProps) { diff --git a/frontend/src/Movie/Index/Table/MovieIndexRow.tsx b/frontend/src/Movie/Index/Table/MovieIndexRow.tsx index a7e4ad5d5..0651ea7d9 100644 --- a/frontend/src/Movie/Index/Table/MovieIndexRow.tsx +++ b/frontend/src/Movie/Index/Table/MovieIndexRow.tsx @@ -70,6 +70,9 @@ function MovieIndexRow(props: MovieIndexRowProps) { tags = [], tmdbId, imdbId, + isAvailable, + grabbed, + movieFile, youTubeTrailerId, isSaving = false, movieRuntimeFormat, @@ -310,7 +313,10 @@ function MovieIndexRow(props: MovieIndexRowProps) { return ( diff --git a/frontend/src/Movie/MovieFileStatusConnector.js b/frontend/src/Movie/MovieFileStatusConnector.js index 215227e5e..755a295d1 100644 --- a/frontend/src/Movie/MovieFileStatusConnector.js +++ b/frontend/src/Movie/MovieFileStatusConnector.js @@ -2,21 +2,14 @@ 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 createUISettingsSelector from 'Store/Selectors/createUISettingsSelector'; import MovieFileStatus from './MovieFileStatus'; function createMapStateToProps() { return createSelector( - createMovieSelector(), createUISettingsSelector(), - (movie, uiSettings) => { + (uiSettings) => { return { - inCinemas: movie.inCinemas, - isAvailable: movie.isAvailable, - monitored: movie.monitored, - grabbed: movie.grabbed, - movieFile: movie.movieFile, colorImpairedMode: uiSettings.enableColorImpairedMode }; } @@ -41,7 +34,10 @@ class MovieFileStatusConnector extends Component { } MovieFileStatusConnector.propTypes = { - movieId: PropTypes.number.isRequired, + isAvailable: PropTypes.bool, + monitored: PropTypes.bool, + grabbed: PropTypes.bool, + movieFile: PropTypes.object, queueStatus: PropTypes.string, queueState: PropTypes.string };