From 005422630724a55933c6e0787b32b7914b1d8b9d Mon Sep 17 00:00:00 2001 From: Qstick Date: Mon, 11 Sep 2017 23:11:32 -0400 Subject: [PATCH] [UI Work] Artist Detail Page, Album Studio, Wanted, NavSearch, Rename --- .../AddNewArtist/AddNewArtistSearchResult.js | 2 +- .../Import/ImportArtistRowConnector.js | 4 +- .../ImportArtist/Import/ImportArtistTable.js | 2 +- .../Import/ImportArtistTableConnector.js | 4 +- .../SelectArtist/ImportArtistSelectArtist.js | 4 +- .../AlbumStudio.js} | 24 ++-- .../AlbumStudioAlbum.css} | 0 .../AlbumStudioAlbum.js} | 40 +++--- .../AlbumStudioConnector.js} | 32 ++--- .../AlbumStudioFooter.css} | 0 .../AlbumStudioFooter.js} | 14 +-- .../AlbumStudioRow.css} | 0 .../AlbumStudioRow.js} | 34 ++--- .../AlbumStudioRowConnector.js} | 18 +-- frontend/src/App/App.js | 14 +-- frontend/src/Artist/ArtistNameLink.js | 2 +- .../DeleteArtistModalContentConnector.js | 2 +- frontend/src/Artist/Details/SeriesDetails.js | 36 +++--- .../Artist/Details/SeriesDetailsConnector.js | 32 ++--- .../src/Artist/Details/SeriesDetailsLinks.js | 8 +- .../Details/SeriesDetailsPageConnector.js | 22 ++-- .../Details/SeriesDetailsSeasonConnector.js | 2 +- .../Edit/EditArtistModalContentConnector.js | 2 +- .../{SeriesEditor.js => ArtistEditor.js} | 64 +++++----- ...rConnector.js => ArtistEditorConnector.js} | 32 ++--- ...ditorFooter.css => ArtistEditorFooter.css} | 0 ...sEditorFooter.js => ArtistEditorFooter.js} | 82 +++++-------- ...rLabel.css => ArtistEditorFooterLabel.css} | 0 ...terLabel.js => ArtistEditorFooterLabel.js} | 10 +- ...eriesEditorRow.css => ArtistEditorRow.css} | 2 +- ...{SeriesEditorRow.js => ArtistEditorRow.js} | 36 +++--- ...nnector.js => ArtistEditorRowConnector.js} | 10 +- .../Editor/Delete/DeleteArtistModalContent.js | 12 +- .../DeleteArtistModalContentConnector.js | 12 +- ...eSeriesModal.js => OrganizeArtistModal.js} | 10 +- ...ent.css => OrganizeArtistModalContent.css} | 0 ...ntent.js => OrganizeArtistModalContent.js} | 30 ++--- ...=> OrganizeArtistModalContentConnector.js} | 26 ++-- .../Editor/Tags/TagsModalContentConnector.js | 4 +- frontend/src/Artist/Index/ArtistIndex.js | 8 +- .../src/Artist/Index/ArtistIndexConnector.js | 10 +- .../Artist/Index/ArtistIndexItemConnector.js | 8 +- .../Artist/Index/Posters/ArtistIndexPoster.js | 12 +- .../Index/Table/ArtistIndexActionsCell.js | 10 +- .../src/Artist/Index/Table/ArtistIndexRow.js | 10 +- frontend/src/Commands/commandNames.js | 6 +- frontend/src/Components/Page/ErrorPage.js | 4 +- ...sSearchInput.css => ArtistSearchInput.css} | 0 ...iesSearchInput.js => ArtistSearchInput.js} | 22 ++-- ...ector.js => ArtistSearchInputConnector.js} | 14 +-- ...earchResult.css => ArtistSearchResult.css} | 0 ...sSearchResult.js => ArtistSearchResult.js} | 34 ++--- .../src/Components/Page/Header/PageHeader.js | 4 +- frontend/src/Components/Page/PageConnector.js | 2 +- .../Page/Sidebar/Messages/Message.js | 2 +- .../Components/Page/Sidebar/PageSidebar.js | 4 +- frontend/src/Components/keyboardShortcuts.js | 2 +- .../src/Episode/EpisodeDetailsModalContent.js | 2 +- .../SelectArtistModalContentConnector.js | 4 +- .../Organize/OrganizePreviewModalContent.css | 2 +- .../Organize/OrganizePreviewModalContent.js | 14 +-- .../OrganizePreviewModalContentConnector.js | 16 +-- frontend/src/Store/Actions/actionTypes.js | 6 +- ...ndlers.js => albumStudioActionHandlers.js} | 10 +- .../src/Store/Actions/albumStudioActions.js | 7 ++ .../{seriesActions.js => artistActions.js} | 0 ...dlers.js => artistEditorActionHandlers.js} | 10 +- .../src/Store/Actions/artistEditorActions.js | 8 ++ .../Actions/importArtistActionHandlers.js | 2 +- .../src/Store/Actions/seasonPassActions.js | 7 -- .../src/Store/Actions/seriesEditorActions.js | 8 -- frontend/src/Store/Middleware/persistState.js | 8 +- ...PassReducers.js => albumStudioReducers.js} | 16 +-- ...torReducers.js => artistEditorReducers.js} | 20 +-- .../{seriesReducers.js => artistReducers.js} | 4 +- frontend/src/Store/Reducers/index.js | 14 +-- frontend/src/Store/Reducers/wantedReducers.js | 34 ++--- ...Selector.js => createAllArtistSelector.js} | 4 +- .../Store/Selectors/createArtistSelector.js | 4 +- .../Selectors/createExistingArtistSelector.js | 4 +- .../createImportArtistItemSelector.js | 6 +- .../Selectors/createProfileInUseSelector.js | 4 +- frontend/src/System/Status/Health/Health.js | 4 +- .../src/Wanted/CutoffUnmet/CutoffUnmet.js | 6 +- .../CutoffUnmet/CutoffUnmetConnector.js | 4 +- frontend/src/Wanted/Missing/Missing.js | 16 +-- .../src/Wanted/Missing/MissingConnector.js | 8 +- frontend/src/Wanted/Missing/MissingRow.js | 116 +++++++++--------- src/Lidarr.Api.V3/Artist/ArtistModule.cs | 28 +++-- src/Lidarr.Api.V3/Artist/ArtistResource.cs | 5 +- src/Lidarr.Api.V3/Tracks/RenameTrackModule.cs | 4 +- .../Organizer/FileNameBuilder.cs | 4 +- .../Organizer/FileNameValidation.cs | 4 +- 93 files changed, 590 insertions(+), 603 deletions(-) rename frontend/src/{SeasonPass/SeasonPass.js => AlbumStudio/AlbumStudio.js} (94%) rename frontend/src/{SeasonPass/SeasonPassSeason.css => AlbumStudio/AlbumStudioAlbum.css} (100%) rename frontend/src/{SeasonPass/SeasonPassSeason.js => AlbumStudio/AlbumStudioAlbum.js} (60%) rename frontend/src/{SeasonPass/SeasonPassConnector.js => AlbumStudio/AlbumStudioConnector.js} (59%) rename frontend/src/{SeasonPass/SeasonPassFooter.css => AlbumStudio/AlbumStudioFooter.css} (100%) rename frontend/src/{SeasonPass/SeasonPassFooter.js => AlbumStudio/AlbumStudioFooter.js} (92%) rename frontend/src/{SeasonPass/SeasonPassRow.css => AlbumStudio/AlbumStudioRow.css} (100%) rename frontend/src/{SeasonPass/SeasonPassRow.js => AlbumStudio/AlbumStudioRow.js} (78%) rename frontend/src/{SeasonPass/SeasonPassRowConnector.js => AlbumStudio/AlbumStudioRowConnector.js} (84%) rename frontend/src/Artist/Editor/{SeriesEditor.js => ArtistEditor.js} (84%) rename frontend/src/Artist/Editor/{SeriesEditorConnector.js => ArtistEditorConnector.js} (67%) rename frontend/src/Artist/Editor/{SeriesEditorFooter.css => ArtistEditorFooter.css} (100%) rename frontend/src/Artist/Editor/{SeriesEditorFooter.js => ArtistEditorFooter.js} (79%) rename frontend/src/Artist/Editor/{SeriesEditorFooterLabel.css => ArtistEditorFooterLabel.css} (100%) rename frontend/src/Artist/Editor/{SeriesEditorFooterLabel.js => ArtistEditorFooterLabel.js} (74%) rename frontend/src/Artist/Editor/{SeriesEditorRow.css => ArtistEditorRow.css} (84%) rename frontend/src/Artist/Editor/{SeriesEditorRow.js => ArtistEditorRow.js} (78%) rename frontend/src/Artist/Editor/{SeriesEditorRowConnector.js => ArtistEditorRowConnector.js} (76%) rename frontend/src/Artist/Editor/Organize/{OrganizeSeriesModal.js => OrganizeArtistModal.js} (64%) rename frontend/src/Artist/Editor/Organize/{OrganizeSeriesModalContent.css => OrganizeArtistModalContent.css} (100%) rename frontend/src/Artist/Editor/Organize/{OrganizeSeriesModalContent.js => OrganizeArtistModalContent.js} (63%) rename frontend/src/Artist/Editor/Organize/{OrganizeSeriesModalContentConnector.js => OrganizeArtistModalContentConnector.js} (63%) rename frontend/src/Components/Page/Header/{SeriesSearchInput.css => ArtistSearchInput.css} (100%) rename frontend/src/Components/Page/Header/{SeriesSearchInput.js => ArtistSearchInput.js} (90%) rename frontend/src/Components/Page/Header/{SeriesSearchInputConnector.js => ArtistSearchInputConnector.js} (61%) rename frontend/src/Components/Page/Header/{SeriesSearchResult.css => ArtistSearchResult.css} (100%) rename frontend/src/Components/Page/Header/{SeriesSearchResult.js => ArtistSearchResult.js} (55%) rename frontend/src/Store/Actions/{seasonPassActionHandlers.js => albumStudioActionHandlers.js} (90%) create mode 100644 frontend/src/Store/Actions/albumStudioActions.js rename frontend/src/Store/Actions/{seriesActions.js => artistActions.js} (100%) rename frontend/src/Store/Actions/{seriesEditorActionHandlers.js => artistEditorActionHandlers.js} (90%) create mode 100644 frontend/src/Store/Actions/artistEditorActions.js delete mode 100644 frontend/src/Store/Actions/seasonPassActions.js delete mode 100644 frontend/src/Store/Actions/seriesEditorActions.js rename frontend/src/Store/Reducers/{seasonPassReducers.js => albumStudioReducers.js} (79%) rename frontend/src/Store/Reducers/{seriesEditorReducers.js => artistEditorReducers.js} (70%) rename frontend/src/Store/Reducers/{seriesReducers.js => artistReducers.js} (94%) rename frontend/src/Store/Selectors/{createAllSeriesSelector.js => createAllArtistSelector.js} (67%) diff --git a/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.js b/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.js index be4254cd0..b90593696 100644 --- a/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.js +++ b/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.js @@ -58,7 +58,7 @@ class AddNewArtistSearchResult extends Component { isSmallScreen } = this.props; - const linkProps = isExistingArtist ? { to: `/series/${nameSlug}` } : { onPress: this.onPress }; + const linkProps = isExistingArtist ? { to: `/artist/${nameSlug}` } : { onPress: this.onPress }; let seasons = '1 Season'; if (seasonCount > 1) { diff --git a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistRowConnector.js b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistRowConnector.js index 8f180e9fa..d72afc6bf 100644 --- a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistRowConnector.js +++ b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistRowConnector.js @@ -4,7 +4,7 @@ import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; import { queueLookupSeries, setImportArtistValue } from 'Store/Actions/importArtistActions'; -import createAllSeriesSelector from 'Store/Selectors/createAllSeriesSelector'; +import createAllArtistSelector from 'Store/Selectors/createAllArtistSelector'; import ImportArtistRow from './ImportArtistRow'; function createImportArtistItemSelector() { @@ -20,7 +20,7 @@ function createImportArtistItemSelector() { function createMapStateToProps() { return createSelector( createImportArtistItemSelector(), - createAllSeriesSelector(), + createAllArtistSelector(), (item, series) => { const selectedSeries = item && item.selectedSeries; const isExistingArtist = !!selectedSeries && _.some(series, { foreignArtistId: selectedSeries.foreignArtistId }); diff --git a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistTable.js b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistTable.js index a4358b0a4..cce61ac82 100644 --- a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistTable.js +++ b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistTable.js @@ -76,7 +76,7 @@ class ImportArtistTable extends Component { const isSelected = selectedState[id]; const isExistingArtist = !!selectedSeries && - _.some(prevProps.allSeries, { tvdbId: selectedSeries.tvdbId }); + _.some(prevProps.allSeries, { foreignArtistId: selectedSeries.foreignArtistId }); // Props doesn't have a selected series or // the selected series is an existing series. diff --git a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistTableConnector.js b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistTableConnector.js index dfd6f3848..aaeec9b1f 100644 --- a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistTableConnector.js +++ b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistTableConnector.js @@ -1,7 +1,7 @@ import { connect } from 'react-redux'; import { createSelector } from 'reselect'; import { queueLookupSeries, setImportArtistValue } from 'Store/Actions/importArtistActions'; -import createAllSeriesSelector from 'Store/Selectors/createAllSeriesSelector'; +import createAllArtistSelector from 'Store/Selectors/createAllArtistSelector'; import ImportArtistTable from './ImportArtistTable'; function createMapStateToProps() { @@ -9,7 +9,7 @@ function createMapStateToProps() { (state) => state.addArtist, (state) => state.importArtist, (state) => state.app.dimensions, - createAllSeriesSelector(), + createAllArtistSelector(), (addArtist, importArtist, dimensions, allSeries) => { return { defaultMonitor: addArtist.defaults.monitor, diff --git a/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistSelectArtist.js b/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistSelectArtist.js index 77ca52eff..9e0a85f59 100644 --- a/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistSelectArtist.js +++ b/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistSelectArtist.js @@ -99,10 +99,10 @@ class ImportArtistSelectArtist extends Component { }); } - onSeriesSelect = (tvdbId) => { + onSeriesSelect = (foreignArtistId) => { this.setState({ isOpen: false }); - this.props.onSeriesSelect(tvdbId); + this.props.onSeriesSelect(foreignArtistId); } // diff --git a/frontend/src/SeasonPass/SeasonPass.js b/frontend/src/AlbumStudio/AlbumStudio.js similarity index 94% rename from frontend/src/SeasonPass/SeasonPass.js rename to frontend/src/AlbumStudio/AlbumStudio.js index 681b68fd2..67f916ec6 100644 --- a/frontend/src/SeasonPass/SeasonPass.js +++ b/frontend/src/AlbumStudio/AlbumStudio.js @@ -15,8 +15,8 @@ import FilterMenuItem from 'Components/Menu/FilterMenuItem'; import Table from 'Components/Table/Table'; import TableBody from 'Components/Table/TableBody'; import NoArtist from 'Artist/NoArtist'; -import SeasonPassRowConnector from './SeasonPassRowConnector'; -import SeasonPassFooter from './SeasonPassFooter'; +import AlbumStudioRowConnector from './AlbumStudioRowConnector'; +import AlbumStudioFooter from './AlbumStudioFooter'; const columns = [ { @@ -24,8 +24,8 @@ const columns = [ isVisible: true }, { - name: 'sortTitle', - label: 'Title', + name: 'sortName', + label: 'Name', isSortable: true, isVisible: true }, @@ -34,14 +34,14 @@ const columns = [ isVisible: true }, { - name: 'seasonCount', - label: 'Seasons', + name: 'albumCount', + label: 'Albums', isSortable: true, isVisible: true } ]; -class SeasonPass extends Component { +class AlbumStudio extends Component { // // Lifecycle @@ -121,7 +121,7 @@ class SeasonPass extends Component { } = this.state; return ( - + @@ -207,7 +207,7 @@ class SeasonPass extends Component { { items.map((item) => { return ( - - { const { - seasonNumber, + id, monitored } = this.props; - this.props.onSeasonMonitoredPress(seasonNumber, !monitored); + this.props.onSeasonMonitoredPress(id, !monitored); } // @@ -24,16 +24,17 @@ class SeasonPassSeason extends Component { render() { const { - seasonNumber, + id, + title, monitored, statistics, isSaving } = this.props; const { - episodeFileCount, - totalEpisodeCount, - percentOfEpisodes + trackFileCount, + totalTrackCount, + percentOfTracks } = statistics; return ( @@ -47,7 +48,7 @@ class SeasonPassSeason extends Component { { - seasonNumber === 0 ? 'Specials' : `S${padNumber(seasonNumber, 2)}` + `${title}` } @@ -55,12 +56,12 @@ class SeasonPassSeason extends Component {
{ - totalEpisodeCount === 0 ? '0/0' : `${episodeFileCount}/${totalEpisodeCount}` + totalTrackCount === 0 ? '0/0' : `${trackFileCount}/${totalTrackCount}` }
@@ -68,21 +69,22 @@ class SeasonPassSeason extends Component { } } -SeasonPassSeason.propTypes = { - seasonNumber: PropTypes.number.isRequired, +AlbumStudioAlbum.propTypes = { + id: PropTypes.number.isRequired, + title: PropTypes.string.isRequired, monitored: PropTypes.bool.isRequired, statistics: PropTypes.object.isRequired, isSaving: PropTypes.bool.isRequired, onSeasonMonitoredPress: PropTypes.func.isRequired }; -SeasonPassSeason.defaultProps = { +AlbumStudioAlbum.defaultProps = { isSaving: false, statistics: { - episodeFileCount: 0, - totalEpisodeCount: 0, - percentOfEpisodes: 0 + trackFileCount: 0, + totalTrackCount: 0, + percentOfTracks: 0 } }; -export default SeasonPassSeason; +export default AlbumStudioAlbum; diff --git a/frontend/src/SeasonPass/SeasonPassConnector.js b/frontend/src/AlbumStudio/AlbumStudioConnector.js similarity index 59% rename from frontend/src/SeasonPass/SeasonPassConnector.js rename to frontend/src/AlbumStudio/AlbumStudioConnector.js index 653db2b02..8fa784f0e 100644 --- a/frontend/src/SeasonPass/SeasonPassConnector.js +++ b/frontend/src/AlbumStudio/AlbumStudioConnector.js @@ -3,8 +3,8 @@ import React, { Component } from 'react'; import { createSelector } from 'reselect'; import connectSection from 'Store/connectSection'; import createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector'; -import { setSeasonPassSort, setSeasonPassFilter, saveSeasonPass } from 'Store/Actions/seasonPassActions'; -import SeasonPass from './SeasonPass'; +import { setAlbumStudioSort, setAlbumStudioFilter, saveAlbumStudio } from 'Store/Actions/albumStudioActions'; +import AlbumStudio from './AlbumStudio'; function createMapStateToProps() { return createSelector( @@ -18,26 +18,26 @@ function createMapStateToProps() { } const mapDispatchToProps = { - setSeasonPassSort, - setSeasonPassFilter, - saveSeasonPass + setAlbumStudioSort, + setAlbumStudioFilter, + saveAlbumStudio }; -class SeasonPassConnector extends Component { +class AlbumStudioConnector extends Component { // // Listeners onSortPress = (sortKey) => { - this.props.setSeasonPassSort({ sortKey }); + this.props.setAlbumStudioSort({ sortKey }); } onFilterSelect = (filterKey, filterValue, filterType) => { - this.props.setSeasonPassFilter({ filterKey, filterValue, filterType }); + this.props.setAlbumStudioFilter({ filterKey, filterValue, filterType }); } onUpdateSelectedPress = (payload) => { - this.props.saveSeasonPass(payload); + this.props.saveAlbumStudio(payload); } // @@ -45,7 +45,7 @@ class SeasonPassConnector extends Component { render() { return ( -
- Monitor Series + Monitor Artist
- Monitor Episodes + Monitor Albums
- {selectedCount} Series Selected + {selectedCount} Artist(s) Selected
@@ -64,10 +64,10 @@ class SeasonPassRow extends Component { { - seasons.map((season) => { + albums.map((season) => { return ( - @@ -80,13 +80,13 @@ class SeasonPassRow extends Component { } } -SeasonPassRow.propTypes = { +AlbumStudioRow.propTypes = { artistId: PropTypes.number.isRequired, status: PropTypes.string.isRequired, - titleSlug: PropTypes.string.isRequired, - title: PropTypes.string.isRequired, + nameSlug: PropTypes.string.isRequired, + artistName: PropTypes.string.isRequired, monitored: PropTypes.bool.isRequired, - seasons: PropTypes.arrayOf(PropTypes.object).isRequired, + albums: PropTypes.arrayOf(PropTypes.object).isRequired, isSaving: PropTypes.bool.isRequired, isSelected: PropTypes.bool, onSelectedChange: PropTypes.func.isRequired, @@ -94,8 +94,8 @@ SeasonPassRow.propTypes = { onSeasonMonitoredPress: PropTypes.func.isRequired }; -SeasonPassRow.defaultProps = { +AlbumStudioRow.defaultProps = { isSaving: false }; -export default SeasonPassRow; +export default AlbumStudioRow; diff --git a/frontend/src/SeasonPass/SeasonPassRowConnector.js b/frontend/src/AlbumStudio/AlbumStudioRowConnector.js similarity index 84% rename from frontend/src/SeasonPass/SeasonPassRowConnector.js rename to frontend/src/AlbumStudio/AlbumStudioRowConnector.js index 366170634..ac7b79927 100644 --- a/frontend/src/SeasonPass/SeasonPassRowConnector.js +++ b/frontend/src/AlbumStudio/AlbumStudioRowConnector.js @@ -4,8 +4,8 @@ import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; import createArtistSelector from 'Store/Selectors/createArtistSelector'; -import { toggleSeriesMonitored, toggleSeasonMonitored } from 'Store/Actions/seriesActions'; -import SeasonPassRow from './SeasonPassRow'; +import { toggleSeriesMonitored, toggleSeasonMonitored } from 'Store/Actions/artistActions'; +import AlbumStudioRow from './AlbumStudioRow'; function createMapStateToProps() { return createSelector( @@ -13,10 +13,10 @@ function createMapStateToProps() { (series) => { return _.pick(series, [ 'status', - 'titleSlug', - 'title', + 'nameSlug', + 'artistName', 'monitored', - 'seasons', + 'albums', 'isSaving' ]); } @@ -28,7 +28,7 @@ const mapDispatchToProps = { toggleSeasonMonitored }; -class SeasonPassRowConnector extends Component { +class AlbumStudioRowConnector extends Component { // // Listeners @@ -58,7 +58,7 @@ class SeasonPassRowConnector extends Component { render() { return ( - diff --git a/frontend/src/Artist/ArtistNameLink.js b/frontend/src/Artist/ArtistNameLink.js index 506881cac..aafc97912 100644 --- a/frontend/src/Artist/ArtistNameLink.js +++ b/frontend/src/Artist/ArtistNameLink.js @@ -3,7 +3,7 @@ import React from 'react'; import Link from 'Components/Link/Link'; function ArtistNameLink({ nameSlug, artistName }) { - const link = `/series/${nameSlug}`; + const link = `/artist/${nameSlug}`; return ( diff --git a/frontend/src/Artist/Delete/DeleteArtistModalContentConnector.js b/frontend/src/Artist/Delete/DeleteArtistModalContentConnector.js index 4790780e7..15b99e84b 100644 --- a/frontend/src/Artist/Delete/DeleteArtistModalContentConnector.js +++ b/frontend/src/Artist/Delete/DeleteArtistModalContentConnector.js @@ -3,7 +3,7 @@ import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; import createArtistSelector from 'Store/Selectors/createArtistSelector'; -import { deleteArtist } from 'Store/Actions/seriesActions'; +import { deleteArtist } from 'Store/Actions/artistActions'; import DeleteArtistModalContent from './DeleteArtistModalContent'; function createMapStateToProps() { diff --git a/frontend/src/Artist/Details/SeriesDetails.js b/frontend/src/Artist/Details/SeriesDetails.js index bdf1c2d53..769fea6bd 100644 --- a/frontend/src/Artist/Details/SeriesDetails.js +++ b/frontend/src/Artist/Details/SeriesDetails.js @@ -99,7 +99,7 @@ class SeriesDetails extends Component { }); } - onDeleteSeriesModalClose = () => { + onDeleteArtistModalClose = () => { this.setState({ isDeleteArtistModalOpen: false }); } @@ -132,10 +132,10 @@ class SeriesDetails extends Component { render() { const { id, - tvdbId, + foreignArtistId, tvMazeId, imdbId, - title, + artistName, runtime, ratings, sizeOnDisk, @@ -146,7 +146,7 @@ class SeriesDetails extends Component { network, overview, images, - seasons, + albums, alternateTitles, tags, isRefreshing, @@ -190,7 +190,7 @@ class SeriesDetails extends Component { } return ( - +
- {title} + {artistName} { !!alternateTitles.length && @@ -294,16 +294,16 @@ class SeriesDetails extends Component { className={styles.seriesNavigationButton} name={icons.ARROW_LEFT} size={30} - title={`Go to ${previousSeries.title}`} - to={`/series/${previousSeries.titleSlug}`} + title={`Go to ${previousSeries.artistName}`} + to={`/artist/${previousSeries.nameSlug}`} />
@@ -426,7 +426,7 @@ class SeriesDetails extends Component { } tooltip={ @@ -485,10 +485,10 @@ class SeriesDetails extends Component { } { - isPopulated && !!seasons.length && + isPopulated && !!albums.length &&
{ - seasons.slice(0).reverse().map((season) => { + albums.slice(0).reverse().map((season) => { return ( No episode information is available.
@@ -534,7 +534,7 @@ class SeriesDetails extends Component {
@@ -544,10 +544,10 @@ class SeriesDetails extends Component { SeriesDetails.propTypes = { id: PropTypes.number.isRequired, - tvdbId: PropTypes.number.isRequired, + foreignArtistId: PropTypes.string.isRequired, tvMazeId: PropTypes.number, imdbId: PropTypes.string, - title: PropTypes.string.isRequired, + artistName: PropTypes.string.isRequired, runtime: PropTypes.number.isRequired, ratings: PropTypes.object.isRequired, sizeOnDisk: PropTypes.number.isRequired, @@ -558,7 +558,7 @@ SeriesDetails.propTypes = { network: PropTypes.string, overview: PropTypes.string.isRequired, images: PropTypes.arrayOf(PropTypes.object).isRequired, - seasons: PropTypes.arrayOf(PropTypes.object).isRequired, + albums: PropTypes.arrayOf(PropTypes.object).isRequired, alternateTitles: PropTypes.arrayOf(PropTypes.string).isRequired, tags: PropTypes.arrayOf(PropTypes.number).isRequired, isRefreshing: PropTypes.bool.isRequired, diff --git a/frontend/src/Artist/Details/SeriesDetailsConnector.js b/frontend/src/Artist/Details/SeriesDetailsConnector.js index e7892341a..7ec84f95e 100644 --- a/frontend/src/Artist/Details/SeriesDetailsConnector.js +++ b/frontend/src/Artist/Details/SeriesDetailsConnector.js @@ -4,7 +4,7 @@ import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; import { findCommand } from 'Utilities/Command'; -import createAllSeriesSelector from 'Store/Selectors/createAllSeriesSelector'; +import createAllArtistSelector from 'Store/Selectors/createAllArtistSelector'; import createCommandsSelector from 'Store/Selectors/createCommandsSelector'; import { fetchEpisodes, clearEpisodes } from 'Store/Actions/episodeActions'; import { fetchEpisodeFiles, clearEpisodeFiles } from 'Store/Actions/episodeFileActions'; @@ -15,28 +15,28 @@ import SeriesDetails from './SeriesDetails'; function createMapStateToProps() { return createSelector( - (state, { titleSlug }) => titleSlug, + (state, { nameSlug }) => nameSlug, (state) => state.episodes, (state) => state.episodeFiles, - createAllSeriesSelector(), + createAllArtistSelector(), createCommandsSelector(), - (titleSlug, episodes, episodeFiles, allSeries, commands) => { - const sortedSeries = _.orderBy(allSeries, 'sortTitle'); - const seriesIndex = _.findIndex(sortedSeries, { titleSlug }); - const series = sortedSeries[seriesIndex]; + (nameSlug, episodes, episodeFiles, allSeries, commands) => { + const sortedArtist = _.orderBy(allSeries, 'sortTitle'); + const seriesIndex = _.findIndex(sortedArtist, { nameSlug }); + const series = sortedArtist[seriesIndex]; if (!series) { return {}; } - const previousSeries = sortedSeries[seriesIndex - 1] || _.last(sortedSeries); - const nextSeries = sortedSeries[seriesIndex + 1] || _.first(sortedSeries); - const isSeriesRefreshing = !!findCommand(commands, { name: commandNames.REFRESH_SERIES, artistId: series.id }); - const allSeriesRefreshing = _.some(commands, (command) => command.name === commandNames.REFRESH_SERIES && !command.body.artistId); + const previousSeries = sortedArtist[seriesIndex - 1] || _.last(sortedArtist); + const nextSeries = sortedArtist[seriesIndex + 1] || _.first(sortedArtist); + const isSeriesRefreshing = !!findCommand(commands, { name: commandNames.REFRESH_ARTIST, artistId: series.id }); + const allSeriesRefreshing = _.some(commands, (command) => command.name === commandNames.REFRESH_ARTIST && !command.body.artistId); const isRefreshing = isSeriesRefreshing || allSeriesRefreshing; - const isSearching = !!findCommand(commands, { name: commandNames.SERIES_SEARCH, artistId: series.id }); + const isSearching = !!findCommand(commands, { name: commandNames.ARTIST_SEARCH, artistId: series.id }); const isRenamingFiles = !!findCommand(commands, { name: commandNames.RENAME_FILES, artistId: series.id }); - const isRenamingSeriesCommand = findCommand(commands, { name: commandNames.RENAME_SERIES }); + const isRenamingSeriesCommand = findCommand(commands, { name: commandNames.RENAME_ARTIST }); const isRenamingSeries = !!(isRenamingSeriesCommand && isRenamingSeriesCommand.body.artistId.indexOf(series.id) > -1); const isFetching = episodes.isFetching || episodeFiles.isFetching; @@ -140,14 +140,14 @@ class SeriesDetailsConnector extends Component { onRefreshPress = () => { this.props.executeCommand({ - name: commandNames.REFRESH_SERIES, + name: commandNames.REFRESH_ARTIST, artistId: this.props.id }); } onSearchPress = () => { this.props.executeCommand({ - name: commandNames.SERIES_SEARCH, + name: commandNames.ARTIST_SEARCH, artistId: this.props.id }); } @@ -168,7 +168,7 @@ class SeriesDetailsConnector extends Component { SeriesDetailsConnector.propTypes = { id: PropTypes.number.isRequired, - titleSlug: PropTypes.string.isRequired, + nameSlug: PropTypes.string.isRequired, isRefreshing: PropTypes.bool.isRequired, isRenamingFiles: PropTypes.bool.isRequired, isRenamingSeries: PropTypes.bool.isRequired, diff --git a/frontend/src/Artist/Details/SeriesDetailsLinks.js b/frontend/src/Artist/Details/SeriesDetailsLinks.js index 9cacdb1a3..2733c0edb 100644 --- a/frontend/src/Artist/Details/SeriesDetailsLinks.js +++ b/frontend/src/Artist/Details/SeriesDetailsLinks.js @@ -7,7 +7,7 @@ import styles from './SeriesDetailsLinks.css'; function SeriesDetailsLinks(props) { const { - tvdbId, + foreignArtistId, tvMazeId, imdbId } = props; @@ -16,7 +16,7 @@ function SeriesDetailsLinks(props) {