diff --git a/frontend/src/Activity/History/HistoryConnector.js b/frontend/src/Activity/History/HistoryConnector.js index c3eb9d8b1..c43c1aa43 100644 --- a/frontend/src/Activity/History/HistoryConnector.js +++ b/frontend/src/Activity/History/HistoryConnector.js @@ -43,7 +43,11 @@ class HistoryConnector extends Component { componentDidUpdate(prevProps) { if (hasDifferentItems(prevProps.items, this.props.items)) { const albumIds = selectUniqueIds(this.props.items, 'albumId'); - this.props.fetchEpisodes({ albumIds }); + if (albumIds.length) { + this.props.fetchEpisodes({ albumIds }); + } else { + this.props.clearEpisodes(); + } } } diff --git a/frontend/src/Activity/Queue/QueueConnector.js b/frontend/src/Activity/Queue/QueueConnector.js index 2e5c36ced..966e46900 100644 --- a/frontend/src/Activity/Queue/QueueConnector.js +++ b/frontend/src/Activity/Queue/QueueConnector.js @@ -52,7 +52,11 @@ class QueueConnector extends Component { componentDidUpdate(prevProps) { if (hasDifferentItems(prevProps.items, this.props.items)) { const albumIds = selectUniqueIds(this.props.items, 'albumId'); - this.props.fetchEpisodes({ albumIds }); + if (albumIds.length) { + this.props.fetchEpisodes({ albumIds }); + } else { + this.props.clearEpisodes(); + } } } diff --git a/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.js b/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.js index 5cae6fbb4..e1fe3a2b9 100644 --- a/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.js +++ b/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.js @@ -44,7 +44,7 @@ class AddNewArtistSearchResult extends Component { componentDidUpdate(prevProps) { if (!prevProps.isExistingArtist && this.props.isExistingArtist) { - this.onAddSerisModalClose(); + this.onAddArtistModalClose(); } } @@ -55,7 +55,7 @@ class AddNewArtistSearchResult extends Component { this.setState({ isNewAddArtistModalOpen: true }); } - onAddSerisModalClose = () => { + onAddArtistModalClose = () => { this.setState({ isNewAddArtistModalOpen: false }); } @@ -183,7 +183,7 @@ class AddNewArtistSearchResult extends Component { year={year} overview={overview} images={images} - onModalClose={this.onAddSerisModalClose} + onModalClose={this.onAddArtistModalClose} /> ); diff --git a/frontend/src/Album/EpisodeDetailsModalContentConnector.js b/frontend/src/Album/EpisodeDetailsModalContentConnector.js index 0e84426f5..42790757e 100644 --- a/frontend/src/Album/EpisodeDetailsModalContentConnector.js +++ b/frontend/src/Album/EpisodeDetailsModalContentConnector.js @@ -2,13 +2,12 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; -import { clearReleases } from 'Store/Actions/releaseActions'; +import { cancelFetchReleases, clearReleases } from 'Store/Actions/releaseActions'; import { toggleEpisodeMonitored } from 'Store/Actions/episodeActions'; import createEpisodeSelector from 'Store/Selectors/createEpisodeSelector'; import createArtistSelector from 'Store/Selectors/createArtistSelector'; import episodeEntities from 'Album/episodeEntities'; import { fetchTracks, clearTracks } from 'Store/Actions/trackActions'; -import { fetchTrackFiles, clearTrackFiles } from 'Store/Actions/trackFileActions'; import EpisodeDetailsModalContent from './EpisodeDetailsModalContent'; function createMapStateToProps() { @@ -32,14 +31,38 @@ function createMapStateToProps() { ); } -const mapDispatchToProps = { - clearReleases, - fetchTracks, - clearTracks, - fetchTrackFiles, - clearTrackFiles, - toggleEpisodeMonitored -}; +function createMapDispatchToProps(dispatch, props) { + return { + dispatchCancelFetchReleases() { + dispatch(cancelFetchReleases()); + }, + + dispatchClearReleases() { + dispatch(clearReleases()); + }, + + dispatchFetchTracks({ artistId, albumId }) { + dispatch(fetchTracks({ artistId, albumId })); + }, + + dispatchClearTracks() { + dispatch(clearTracks()); + }, + + onMonitorAlbumPress(monitored) { + const { + albumId, + episodeEntity + } = this.props; + + dispatch(toggleEpisodeMonitored({ + episodeEntity, + albumId, + monitored + })); + } + }; +} class EpisodeDetailsModalContentConnector extends Component { @@ -53,7 +76,8 @@ class EpisodeDetailsModalContentConnector extends Component { // Clear pending releases here so we can reshow the search // results even after switching tabs. this._unpopulate(); - this.props.clearReleases(); + this.props.dispatchCancelFetchReleases(); + this.props.dispatchClearReleases(); } // @@ -62,40 +86,24 @@ class EpisodeDetailsModalContentConnector extends Component { _populate() { const artistId = this.props.artistId; const albumId = this.props.albumId; - this.props.fetchTracks({ artistId, albumId }); - // this.props.fetchTrackFiles({ artistId, albumId }); + this.props.dispatchFetchTracks({ artistId, albumId }); } _unpopulate() { - this.props.clearTracks(); - // this.props.clearTrackFiles(); + this.props.dispatchClearTracks(); } // - // Listeners + // Render - onMonitorAlbumPress = (monitored) => { + render() { const { - albumId, - episodeEntity + dispatchClearReleases, + ...otherProps } = this.props; - this.props.toggleEpisodeMonitored({ - episodeEntity, - albumId, - monitored - }); - } - - // - // Render - - render() { return ( - + ); } } @@ -104,16 +112,14 @@ EpisodeDetailsModalContentConnector.propTypes = { albumId: PropTypes.number.isRequired, episodeEntity: PropTypes.string.isRequired, artistId: PropTypes.number.isRequired, - fetchTracks: PropTypes.func.isRequired, - clearTracks: PropTypes.func.isRequired, - fetchTrackFiles: PropTypes.func.isRequired, - clearTrackFiles: PropTypes.func.isRequired, - clearReleases: PropTypes.func.isRequired, - toggleEpisodeMonitored: PropTypes.func.isRequired + dispatchFetchTracks: PropTypes.func.isRequired, + dispatchClearTracks: PropTypes.func.isRequired, + dispatchCancelFetchReleases: PropTypes.func.isRequired, + dispatchClearReleases: PropTypes.func.isRequired }; EpisodeDetailsModalContentConnector.defaultProps = { episodeEntity: episodeEntities.EPISODES }; -export default connect(createMapStateToProps, mapDispatchToProps)(EpisodeDetailsModalContentConnector); +export default connect(createMapStateToProps, createMapDispatchToProps)(EpisodeDetailsModalContentConnector); diff --git a/frontend/src/Album/EpisodeLanguage.js b/frontend/src/Album/EpisodeLanguage.js index fc784ef51..7a5a24963 100644 --- a/frontend/src/Album/EpisodeLanguage.js +++ b/frontend/src/Album/EpisodeLanguage.js @@ -3,20 +3,24 @@ import React from 'react'; import Label from 'Components/Label'; function EpisodeLanguage(props) { - const language = props.language; + const { + className, + language + } = props; if (!language) { return null; } return ( -