diff --git a/frontend/src/Series/Delete/DeleteSeriesModalContent.js b/frontend/src/Series/Delete/DeleteSeriesModalContent.js index d1873d42f..018027e95 100644 --- a/frontend/src/Series/Delete/DeleteSeriesModalContent.js +++ b/frontend/src/Series/Delete/DeleteSeriesModalContent.js @@ -22,8 +22,7 @@ class DeleteSeriesModalContent extends Component { super(props, context); this.state = { - deleteFiles: false, - addImportListExclusion: false + deleteFiles: false }; } @@ -34,15 +33,11 @@ class DeleteSeriesModalContent extends Component { this.setState({ deleteFiles: value }); }; - onAddImportListExclusionChange = ({ value }) => { - this.setState({ addImportListExclusion: value }); - }; - onDeleteSeriesConfirmed = () => { const deleteFiles = this.state.deleteFiles; - const addImportListExclusion = this.state.addImportListExclusion; + const addImportListExclusion = this.props.deleteOptions.addImportListExclusion; - this.setState({ deleteFiles: false, addImportListExclusion: false }); + this.setState({ deleteFiles: false }); this.props.onDeletePress(deleteFiles, addImportListExclusion); }; @@ -54,7 +49,9 @@ class DeleteSeriesModalContent extends Component { title, path, statistics, - onModalClose + deleteOptions, + onModalClose, + onDeleteOptionChange } = this.props; const { @@ -63,7 +60,7 @@ class DeleteSeriesModalContent extends Component { } = statistics; const deleteFiles = this.state.deleteFiles; - const addImportListExclusion = this.state.addImportListExclusion; + const addImportListExclusion = deleteOptions.addImportListExclusion; let deleteFilesLabel = `Delete ${episodeFileCount} Episode Files`; let deleteFilesHelpText = 'Delete the episode files and series folder'; @@ -98,7 +95,7 @@ class DeleteSeriesModalContent extends Component { name="addImportListExclusion" value={addImportListExclusion} helpText="Prevent series from being added to Sonarr by lists" - onChange={this.onAddImportListExclusionChange} + onChange={onDeleteOptionChange} /> @@ -150,6 +147,9 @@ DeleteSeriesModalContent.propTypes = { title: PropTypes.string.isRequired, path: PropTypes.string.isRequired, statistics: PropTypes.object.isRequired, + deleteOptions: PropTypes.object.isRequired, + onDeleteOptionChange: PropTypes.func.isRequired, + onAddImportListExclusionChange: PropTypes.func.isRequired, onDeletePress: PropTypes.func.isRequired, onModalClose: PropTypes.func.isRequired }; diff --git a/frontend/src/Series/Delete/DeleteSeriesModalContentConnector.js b/frontend/src/Series/Delete/DeleteSeriesModalContentConnector.js index 8078a06fc..17d512a19 100644 --- a/frontend/src/Series/Delete/DeleteSeriesModalContentConnector.js +++ b/frontend/src/Series/Delete/DeleteSeriesModalContentConnector.js @@ -1,56 +1,44 @@ -import PropTypes from 'prop-types'; -import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; -import { deleteSeries } from 'Store/Actions/seriesActions'; +import { deleteSeries, setDeleteOption } from 'Store/Actions/seriesActions'; import createSeriesSelector from 'Store/Selectors/createSeriesSelector'; import DeleteSeriesModalContent from './DeleteSeriesModalContent'; function createMapStateToProps() { return createSelector( + (state) => state.series.deleteOptions, createSeriesSelector(), - (series) => { - return series; + (deleteOptions, series) => { + return { + ...series, + deleteOptions + }; } ); } -const mapDispatchToProps = { - deleteSeries -}; +function createMapDispatchToProps(dispatch, props) { + return { + setDeleteOption(option) { + dispatch( + setDeleteOption({ + [option.name]: option.value + }) + ); + }, -class DeleteSeriesModalContentConnector extends Component { + onDeleteSelectedPress(deleteFiles, addImportListExclusion) { + dispatch( + deleteSeries({ + id: props.seriesId, + deleteFiles, + addImportListExclusion + }) + ); - // - // Listeners - - onDeletePress = (deleteFiles, addImportListExclusion) => { - this.props.deleteSeries({ - id: this.props.seriesId, - deleteFiles, - addImportListExclusion - }); - - this.props.onModalClose(true); + props.onModalClose(true); + } }; - - // - // Render - - render() { - return ( - - ); - } } -DeleteSeriesModalContentConnector.propTypes = { - seriesId: PropTypes.number.isRequired, - onModalClose: PropTypes.func.isRequired, - deleteSeries: PropTypes.func.isRequired -}; - -export default connect(createMapStateToProps, mapDispatchToProps)(DeleteSeriesModalContentConnector); +export default connect(createMapStateToProps, createMapDispatchToProps)(DeleteSeriesModalContent); diff --git a/frontend/src/Series/Editor/Delete/DeleteSeriesModalContent.js b/frontend/src/Series/Editor/Delete/DeleteSeriesModalContent.js index 2692c3b7c..aa173d99e 100644 --- a/frontend/src/Series/Editor/Delete/DeleteSeriesModalContent.js +++ b/frontend/src/Series/Editor/Delete/DeleteSeriesModalContent.js @@ -20,8 +20,7 @@ class DeleteSeriesModalContent extends Component { super(props, context); this.state = { - deleteFiles: false, - addImportListExclusion: false + deleteFiles: false }; } @@ -32,17 +31,11 @@ class DeleteSeriesModalContent extends Component { this.setState({ deleteFiles: value }); }; - onAddImportListExclusionChange = ({ value }) => { - this.setState({ addImportListExclusion: value }); - }; - onDeleteSeriesConfirmed = () => { - const { - addImportListExclusion, - deleteFiles - } = this.state; + const deleteFiles = this.state.deleteFiles; + const addImportListExclusion = this.props.deleteOptions.addImportListExclusion; - this.setState({ deleteFiles: false, addImportListExclusion: false }); + this.setState({ deleteFiles: false }); this.props.onDeleteSelectedPress(deleteFiles, addImportListExclusion); }; @@ -52,11 +45,12 @@ class DeleteSeriesModalContent extends Component { render() { const { series, - onModalClose + deleteOptions, + onModalClose, + setDeleteOption } = this.props; const { - addImportListExclusion, deleteFiles } = this.state; @@ -74,9 +68,9 @@ class DeleteSeriesModalContent extends Component { @@ -140,7 +134,9 @@ class DeleteSeriesModalContent extends Component { DeleteSeriesModalContent.propTypes = { series: PropTypes.arrayOf(PropTypes.object).isRequired, + deleteOptions: PropTypes.arrayOf(PropTypes.object).isRequired, onModalClose: PropTypes.func.isRequired, + setDeleteOption: PropTypes.func.isRequired, onDeleteSelectedPress: PropTypes.func.isRequired }; diff --git a/frontend/src/Series/Editor/Delete/DeleteSeriesModalContentConnector.js b/frontend/src/Series/Editor/Delete/DeleteSeriesModalContentConnector.js index b7d6b1d38..39c9ac4a4 100644 --- a/frontend/src/Series/Editor/Delete/DeleteSeriesModalContentConnector.js +++ b/frontend/src/Series/Editor/Delete/DeleteSeriesModalContentConnector.js @@ -1,6 +1,7 @@ import _ from 'lodash'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; +import { setDeleteOption } from 'Store/Actions/seriesActions'; import { bulkDeleteSeries } from 'Store/Actions/seriesEditorActions'; import createAllSeriesSelector from 'Store/Selectors/createAllSeriesSelector'; import DeleteSeriesModalContent from './DeleteSeriesModalContent'; @@ -8,8 +9,9 @@ import DeleteSeriesModalContent from './DeleteSeriesModalContent'; function createMapStateToProps() { return createSelector( (state, { seriesIds }) => seriesIds, + (state) => state.series.deleteOptions, createAllSeriesSelector(), - (seriesIds, allSeries) => { + (seriesIds, deleteOptions, allSeries) => { const selectedSeries = _.intersectionWith(allSeries, seriesIds, (s, id) => { return s.id === id; }); @@ -23,7 +25,8 @@ function createMapStateToProps() { }); return { - series + series, + deleteOptions }; } ); @@ -31,12 +34,22 @@ function createMapStateToProps() { function createMapDispatchToProps(dispatch, props) { return { + setDeleteOption(option) { + dispatch( + setDeleteOption({ + [option.name]: option.value + }) + ); + }, + onDeleteSelectedPress(deleteFiles, addImportListExclusion) { - dispatch(bulkDeleteSeries({ - seriesIds: props.seriesIds, - deleteFiles, - addImportListExclusion - })); + dispatch( + bulkDeleteSeries({ + seriesIds: props.seriesIds, + deleteFiles, + addImportListExclusion + }) + ); props.onModalClose(); } diff --git a/frontend/src/Store/Actions/seriesActions.js b/frontend/src/Store/Actions/seriesActions.js index 3efad465f..3c695b675 100644 --- a/frontend/src/Store/Actions/seriesActions.js +++ b/frontend/src/Store/Actions/seriesActions.js @@ -384,9 +384,16 @@ export const defaultState = { items: [], sortKey: 'sortTitle', sortDirection: sortDirections.ASCENDING, - pendingChanges: {} + pendingChanges: {}, + deleteOptions: { + addImportListExclusion: false + } }; +export const persistState = [ + 'series.deleteOptions' +]; + // // Actions Types @@ -399,6 +406,8 @@ export const TOGGLE_SERIES_MONITORED = 'series/toggleSeriesMonitored'; export const TOGGLE_SEASON_MONITORED = 'series/toggleSeasonMonitored'; export const UPDATE_SERIES_MONITOR = 'series/updateSeriesMonitor'; +export const SET_DELETE_OPTION = 'series/setDeleteOption'; + // // Action Creators @@ -440,6 +449,8 @@ export const setSeriesValue = createAction(SET_SERIES_VALUE, (payload) => { }; }); +export const setDeleteOption = createAction(SET_DELETE_OPTION); + // // Helpers @@ -655,6 +666,15 @@ export const actionHandlers = handleThunks({ export const reducers = createHandleActions({ - [SET_SERIES_VALUE]: createSetSettingValueReducer(section) + [SET_SERIES_VALUE]: createSetSettingValueReducer(section), + + [SET_DELETE_OPTION]: (state, { payload }) => { + return { + ...state, + deleteOptions: { + ...payload + } + }; + } }, defaultState, section);