From 44cc642ad42a2e30e1305a682b85a4159cb8913b Mon Sep 17 00:00:00 2001 From: Qstick Date: Sat, 16 Sep 2017 16:22:06 -0400 Subject: [PATCH] [UI Work] Misc UI Fixes and Tweaks --- .../src/Activity/Blacklist/BlacklistRow.js | 6 +- frontend/src/Activity/History/HistoryRow.js | 2 +- frontend/src/Activity/Queue/QueueRow.js | 2 +- .../AddNewArtist/AddNewArtistSearchResult.css | 2 +- .../AddNewArtist/AddNewArtistSearchResult.js | 18 +++--- .../ImportArtist/Import/ImportArtistRow.js | 6 +- .../Import/ImportArtistRowConnector.js | 10 ++-- .../ImportArtist/Import/ImportArtistTable.js | 24 ++++---- .../Import/ImportArtistTableConnector.js | 8 +-- .../Import/SelectArtist/ImportArtistName.js | 7 --- .../SelectArtist/ImportArtistSearchResult.js | 9 +-- .../SelectArtist/ImportArtistSelectArtist.js | 20 +++---- .../ImportArtistSelectArtistConnector.js | 12 ++-- frontend/src/AlbumStudio/AlbumStudio.js | 2 +- frontend/src/Artist/ArtistPoster.js | 2 +- .../Artist/Delete/DeleteArtistModalContent.js | 4 +- frontend/src/Artist/Details/AlbumRow.js | 9 ++- frontend/src/Artist/Details/ArtistDetails.js | 14 ++--- .../Artist/Details/ArtistDetailsConnector.js | 12 ++-- .../Details/ArtistDetailsPageConnector.js | 6 +- .../src/Artist/Edit/EditArtistModalContent.js | 6 +- .../Edit/EditArtistModalContentConnector.js | 8 +-- frontend/src/Artist/Editor/ArtistEditor.js | 2 +- .../src/Artist/Editor/ArtistEditorFooter.css | 2 +- .../src/Artist/Editor/ArtistEditorFooter.js | 2 +- .../Editor/Delete/DeleteArtistModalContent.js | 4 +- .../DeleteArtistModalContentConnector.js | 6 +- .../OrganizeArtistModalContentConnector.js | 4 +- .../Editor/Tags/TagsModalContentConnector.js | 4 +- frontend/src/Artist/Index/ArtistIndex.js | 8 +-- .../src/Artist/Index/ArtistIndexConnector.js | 12 ++-- .../src/Artist/Index/ArtistIndexFooter.js | 12 ++-- .../Artist/Index/ArtistIndexItemConnector.js | 12 ++-- .../Index/Menus/ArtistIndexFilterMenu.js | 2 +- .../Artist/Index/Menus/ArtistIndexSortMenu.js | 13 +--- .../Artist/Index/Posters/ArtistIndexPoster.js | 18 +++--- .../Index/Posters/ArtistIndexPosterInfo.js | 18 ++---- .../Index/Posters/ArtistIndexPosters.js | 7 +-- .../Posters/ArtistIndexPostersConnector.js | 4 +- .../ArtistIndexPosterOptionsModalContent.js | 4 +- ...IndexPosterOptionsModalContentConnector.js | 6 +- .../Index/Table/ArtistIndexActionsCell.js | 18 +++--- .../Artist/Index/Table/ArtistIndexHeader.css | 8 +-- .../src/Artist/Index/Table/ArtistIndexRow.css | 8 +-- .../src/Artist/Index/Table/ArtistIndexRow.js | 45 +++++--------- .../Artist/Index/Table/ArtistIndexTable.js | 2 +- .../Index/Table/ArtistIndexTableConnector.js | 2 +- .../Index/Table/artistIndexCellRenderers.js | 19 +----- frontend/src/Calendar/Agenda/AgendaEvent.css | 4 +- frontend/src/Calendar/Agenda/AgendaEvent.js | 2 +- .../src/Calendar/Events/CalendarEvent.css | 2 +- frontend/src/Calendar/Events/CalendarEvent.js | 2 +- frontend/src/Calendar/Legend/Legend.js | 2 +- frontend/src/Calendar/Legend/LegendItem.css | 4 +- frontend/src/Calendar/getStatusStyle.js | 2 +- .../Page/Header/ArtistSearchInput.js | 8 +-- .../src/Content/Images/poster-dark-square.png | Bin 0 -> 1898 bytes .../Episode/EpisodeDetailsModalContent.css | 2 +- .../src/Episode/EpisodeDetailsModalContent.js | 14 ++--- .../EpisodeDetailsModalContentConnector.js | 4 +- .../Interactive/InteractiveImportRow.js | 14 ++--- .../MediaManagement/MediaManagement.js | 4 +- .../Actions/albumStudioActionHandlers.js | 4 +- frontend/src/Store/Actions/artistActions.js | 2 +- .../Actions/importArtistActionHandlers.js | 8 +-- .../src/Store/Actions/importArtistActions.js | 2 +- frontend/src/Store/Middleware/middlewares.js | 1 - .../src/Store/Reducers/albumStudioReducers.js | 4 +- .../Store/Reducers/artistEditorReducers.js | 4 +- .../src/Store/Reducers/artistIndexReducers.js | 56 ++++++------------ frontend/src/Store/Reducers/artistReducers.js | 2 +- .../src/Store/Reducers/blacklistReducers.js | 4 +- frontend/src/Store/Reducers/index.js | 10 ++-- .../Reducers/interactiveImportReducers.js | 2 +- frontend/src/Store/Reducers/wantedReducers.js | 4 +- .../createImportArtistItemSelector.js | 4 +- frontend/src/Store/scrollPositions.js | 2 +- .../src/Wanted/CutoffUnmet/CutoffUnmet.js | 2 +- .../src/Wanted/CutoffUnmet/CutoffUnmetRow.js | 6 +- frontend/src/Wanted/Missing/MissingRow.js | 4 +- 80 files changed, 267 insertions(+), 349 deletions(-) create mode 100644 frontend/src/Content/Images/poster-dark-square.png diff --git a/frontend/src/Activity/Blacklist/BlacklistRow.js b/frontend/src/Activity/Blacklist/BlacklistRow.js index 50d71c30f..af7db6372 100644 --- a/frontend/src/Activity/Blacklist/BlacklistRow.js +++ b/frontend/src/Activity/Blacklist/BlacklistRow.js @@ -64,12 +64,12 @@ class BlacklistRow extends Component { return null; } - if (name === 'series.sortTitle') { + if (name === 'series.sortName') { return ( ); diff --git a/frontend/src/Activity/History/HistoryRow.js b/frontend/src/Activity/History/HistoryRow.js index 145185ebe..550b373dd 100644 --- a/frontend/src/Activity/History/HistoryRow.js +++ b/frontend/src/Activity/History/HistoryRow.js @@ -115,7 +115,7 @@ class HistoryRow extends Component { episodeEntity={episodeEntities.EPISODES} artistId={artist.id} episodeTitle={album.title} - showOpenSeriesButton={true} + showOpenArtistButton={true} /> ); diff --git a/frontend/src/Activity/Queue/QueueRow.js b/frontend/src/Activity/Queue/QueueRow.js index 0f9138911..451fd4b99 100644 --- a/frontend/src/Activity/Queue/QueueRow.js +++ b/frontend/src/Activity/Queue/QueueRow.js @@ -163,7 +163,7 @@ class QueueRow extends Component { episodeFileId={episode.episodeFileId} episodeEntity={episodeEntity} episodeTitle={episode.title} - showOpenSeriesButton={true} + showOpenArtistButton={true} /> ); diff --git a/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.css b/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.css index 38ccffb4d..a1b48638b 100644 --- a/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.css +++ b/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.css @@ -20,7 +20,7 @@ height: 250px; } -.title { +.name { font-weight: 300; font-size: 36px; } diff --git a/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.js b/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.js index b90593696..9a63518f8 100644 --- a/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.js +++ b/frontend/src/AddArtist/AddNewArtist/AddNewArtistSearchResult.js @@ -18,7 +18,7 @@ class AddNewArtistSearchResult extends Component { super(props, context); this.state = { - isNewAddSeriesModalOpen: false + isNewAddArtistModalOpen: false }; } @@ -32,11 +32,11 @@ class AddNewArtistSearchResult extends Component { // Listeners onPress = () => { - this.setState({ isNewAddSeriesModalOpen: true }); + this.setState({ isNewAddArtistModalOpen: true }); } onAddSerisModalClose = () => { - this.setState({ isNewAddSeriesModalOpen: false }); + this.setState({ isNewAddArtistModalOpen: false }); } // @@ -51,7 +51,7 @@ class AddNewArtistSearchResult extends Component { network, status, overview, - seasonCount, + albumCount, ratings, images, isExistingArtist, @@ -61,8 +61,8 @@ class AddNewArtistSearchResult extends Component { const linkProps = isExistingArtist ? { to: `/artist/${nameSlug}` } : { onPress: this.onPress }; let seasons = '1 Season'; - if (seasonCount > 1) { - seasons = `${seasonCount} Seasons`; + if (albumCount > 1) { + seasons = `${albumCount} Seasons`; } return ( @@ -115,7 +115,7 @@ class AddNewArtistSearchResult extends Component { } { - !!seasonCount && + !!albumCount && @@ -138,7 +138,7 @@ class AddNewArtistSearchResult extends Component { @@ -95,7 +95,7 @@ ImportArtistRow.propTypes = { languageProfileId: PropTypes.number.isRequired, // seriesType: PropTypes.string.isRequired, albumFolder: PropTypes.bool.isRequired, - selectedSeries: PropTypes.object, + selectedArtist: PropTypes.object, isExistingArtist: PropTypes.bool.isRequired, items: PropTypes.arrayOf(PropTypes.object).isRequired, queued: PropTypes.bool.isRequired, diff --git a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistRowConnector.js b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistRowConnector.js index a16183125..48c7ecbf5 100644 --- a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistRowConnector.js +++ b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistRowConnector.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; -import { queueLookupSeries, setImportArtistValue } from 'Store/Actions/importArtistActions'; +import { queueLookupArtist, setImportArtistValue } from 'Store/Actions/importArtistActions'; import createAllArtistSelector from 'Store/Selectors/createAllArtistSelector'; import ImportArtistRow from './ImportArtistRow'; @@ -22,8 +22,8 @@ function createMapStateToProps() { createImportArtistItemSelector(), createAllArtistSelector(), (item, series) => { - const selectedSeries = item && item.selectedSeries; - const isExistingArtist = !!selectedSeries && _.some(series, { foreignArtistId: selectedSeries.foreignArtistId }); + const selectedArtist = item && item.selectedArtist; + const isExistingArtist = !!selectedArtist && _.some(series, { foreignArtistId: selectedArtist.foreignArtistId }); return { ...item, @@ -34,7 +34,7 @@ function createMapStateToProps() { } const mapDispatchToProps = { - queueLookupSeries, + queueLookupArtist, setImportArtistValue }; @@ -84,7 +84,7 @@ ImportArtistRowConnector.propTypes = { // seriesType: PropTypes.string, albumFolder: PropTypes.bool, items: PropTypes.arrayOf(PropTypes.object), - queueLookupSeries: PropTypes.func.isRequired, + queueLookupArtist: PropTypes.func.isRequired, setImportArtistValue: PropTypes.func.isRequired }; diff --git a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistTable.js b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistTable.js index cce61ac82..0db24c7ee 100644 --- a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistTable.js +++ b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistTable.js @@ -72,30 +72,30 @@ class ImportArtistTable extends Component { return; } - const selectedSeries = item.selectedSeries; + const selectedArtist = item.selectedArtist; const isSelected = selectedState[id]; - const isExistingArtist = !!selectedSeries && - _.some(prevProps.allSeries, { foreignArtistId: selectedSeries.foreignArtistId }); + const isExistingArtist = !!selectedArtist && + _.some(prevProps.allArtists, { foreignArtistId: selectedArtist.foreignArtistId }); - // Props doesn't have a selected series or - // the selected series is an existing series. - if ((selectedSeries && !prevItem.selectedSeries) || (isExistingArtist && !prevItem.selectedSeries)) { + // Props doesn't have a selected artist or + // the selected artist is an existing artist. + if ((selectedArtist && !prevItem.selectedArtist) || (isExistingArtist && !prevItem.selectedArtist)) { onSelectedChange({ id, value: false }); return; } - // State is selected, but a series isn't selected or - // the selected series is an existing series. - if (isSelected && (!selectedSeries || isExistingArtist)) { + // State is selected, but a artist isn't selected or + // the selected artist is an existing artist. + if (isSelected && (!selectedArtist || isExistingArtist)) { onSelectedChange({ id, value: false }); return; } - // A series is being selected that wasn't previously selected. - if (selectedSeries && selectedSeries !== prevItem.selectedSeries) { + // A artist is being selected that wasn't previously selected. + if (selectedArtist && selectedArtist !== prevItem.selectedArtist) { onSelectedChange({ id, value: true }); return; @@ -198,7 +198,7 @@ ImportArtistTable.propTypes = { allUnselected: PropTypes.bool.isRequired, selectedState: PropTypes.object.isRequired, isSmallScreen: PropTypes.bool.isRequired, - allSeries: PropTypes.arrayOf(PropTypes.object), + allArtists: PropTypes.arrayOf(PropTypes.object), contentBody: PropTypes.object.isRequired, showLanguageProfile: PropTypes.bool.isRequired, scrollTop: PropTypes.number.isRequired, diff --git a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistTableConnector.js b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistTableConnector.js index aaeec9b1f..c30ad3dc7 100644 --- a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistTableConnector.js +++ b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistTableConnector.js @@ -1,6 +1,6 @@ import { connect } from 'react-redux'; import { createSelector } from 'reselect'; -import { queueLookupSeries, setImportArtistValue } from 'Store/Actions/importArtistActions'; +import { queueLookupArtist, setImportArtistValue } from 'Store/Actions/importArtistActions'; import createAllArtistSelector from 'Store/Selectors/createAllArtistSelector'; import ImportArtistTable from './ImportArtistTable'; @@ -10,7 +10,7 @@ function createMapStateToProps() { (state) => state.importArtist, (state) => state.app.dimensions, createAllArtistSelector(), - (addArtist, importArtist, dimensions, allSeries) => { + (addArtist, importArtist, dimensions, allArtists) => { return { defaultMonitor: addArtist.defaults.monitor, defaultQualityProfileId: addArtist.defaults.qualityProfileId, @@ -19,7 +19,7 @@ function createMapStateToProps() { defaultAlbumFolder: addArtist.defaults.albumFolder, items: importArtist.items, isSmallScreen: dimensions.isSmallScreen, - allSeries + allArtists }; } ); @@ -28,7 +28,7 @@ function createMapStateToProps() { function createMapDispatchToProps(dispatch, props) { return { onSeriesLookup(name, path) { - dispatch(queueLookupSeries({ + dispatch(queueLookupArtist({ name, path, term: name diff --git a/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistName.js b/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistName.js index 52a99b731..a88839bb6 100644 --- a/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistName.js +++ b/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistName.js @@ -7,9 +7,7 @@ import styles from './ImportArtistName.css'; function ImportArtistName(props) { const { artistName, - overview, // year, - // network, isExistingArtist } = props; @@ -18,9 +16,6 @@ function ImportArtistName(props) {
{artistName}
-
- {overview} -
{ isExistingArtist && @@ -36,9 +31,7 @@ function ImportArtistName(props) { ImportArtistName.propTypes = { artistName: PropTypes.string.isRequired, - overview: PropTypes.string.isRequired, // year: PropTypes.number.isRequired, - // network: PropTypes.string, isExistingArtist: PropTypes.bool.isRequired }; diff --git a/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistSearchResult.js b/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistSearchResult.js index 2fd017e91..d4d3bd104 100644 --- a/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistSearchResult.js +++ b/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistSearchResult.js @@ -19,9 +19,8 @@ class ImportArtistSearchResult extends Component { render() { const { artistName, - overview, + // overview, // year, - // network, isExistingArtist } = this.props; @@ -32,9 +31,8 @@ class ImportArtistSearchResult extends Component { > @@ -45,9 +43,8 @@ class ImportArtistSearchResult extends Component { ImportArtistSearchResult.propTypes = { foreignArtistId: PropTypes.string.isRequired, artistName: PropTypes.string.isRequired, - overview: PropTypes.string.isRequired, + // overview: PropTypes.string.isRequired, // year: PropTypes.number.isRequired, - // network: PropTypes.string, isExistingArtist: PropTypes.bool.isRequired, onPress: PropTypes.func.isRequired }; diff --git a/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistSelectArtist.js b/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistSelectArtist.js index dcabc12a0..7557ae0c5 100644 --- a/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistSelectArtist.js +++ b/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistSelectArtist.js @@ -110,7 +110,7 @@ class ImportArtistSelectArtist extends Component { render() { const { - selectedSeries, + selectedArtist, isExistingArtist, isFetching, isPopulated, @@ -146,7 +146,7 @@ class ImportArtistSelectArtist extends Component { } { - isPopulated && selectedSeries && isExistingArtist && + isPopulated && selectedArtist && isExistingArtist && } { - isPopulated && !selectedSeries && + isPopulated && !selectedArtist &&
); @@ -249,7 +247,7 @@ class ImportArtistSelectArtist extends Component { ImportArtistSelectArtist.propTypes = { id: PropTypes.string.isRequired, - selectedSeries: PropTypes.object, + selectedArtist: PropTypes.object, isExistingArtist: PropTypes.bool.isRequired, isFetching: PropTypes.bool.isRequired, isPopulated: PropTypes.bool.isRequired, diff --git a/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistSelectArtistConnector.js b/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistSelectArtistConnector.js index cc55f53cd..21662faa7 100644 --- a/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistSelectArtistConnector.js +++ b/frontend/src/AddArtist/ImportArtist/Import/SelectArtist/ImportArtistSelectArtistConnector.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; -import { queueLookupSeries, setImportArtistValue } from 'Store/Actions/importArtistActions'; +import { queueLookupArtist, setImportArtistValue } from 'Store/Actions/importArtistActions'; import createImportArtistItemSelector from 'Store/Selectors/createImportArtistItemSelector'; import ImportArtistSelectArtist from './ImportArtistSelectArtist'; @@ -17,7 +17,7 @@ function createMapStateToProps() { } const mapDispatchToProps = { - queueLookupSeries, + queueLookupArtist, setImportArtistValue }; @@ -27,7 +27,7 @@ class ImportArtistSelectArtistConnector extends Component { // Listeners onSearchInputChange = (term) => { - this.props.queueLookupSeries({ + this.props.queueLookupArtist({ name: this.props.id, term }); @@ -41,7 +41,7 @@ class ImportArtistSelectArtistConnector extends Component { this.props.setImportArtistValue({ id, - selectedSeries: _.find(items, { foreignArtistId }) + selectedArtist: _.find(items, { foreignArtistId }) }); } @@ -62,9 +62,9 @@ class ImportArtistSelectArtistConnector extends Component { ImportArtistSelectArtistConnector.propTypes = { id: PropTypes.string.isRequired, items: PropTypes.arrayOf(PropTypes.object), - selectedSeries: PropTypes.object, + selectedArtist: PropTypes.object, isSelected: PropTypes.bool, - queueLookupSeries: PropTypes.func.isRequired, + queueLookupArtist: PropTypes.func.isRequired, setImportArtistValue: PropTypes.func.isRequired }; diff --git a/frontend/src/AlbumStudio/AlbumStudio.js b/frontend/src/AlbumStudio/AlbumStudio.js index 67f916ec6..8b62a0d81 100644 --- a/frontend/src/AlbumStudio/AlbumStudio.js +++ b/frontend/src/AlbumStudio/AlbumStudio.js @@ -172,7 +172,7 @@ class AlbumStudio extends Component { filterValue={filterValue} onPress={onFilterSelect} > - Missing Episodes + Missing Albums diff --git a/frontend/src/Artist/ArtistPoster.js b/frontend/src/Artist/ArtistPoster.js index 80bc979f9..964e4f684 100644 --- a/frontend/src/Artist/ArtistPoster.js +++ b/frontend/src/Artist/ArtistPoster.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; import LazyLoad from 'react-lazyload'; -const posterPlaceholder = 'data:image/png;base64,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'; +const posterPlaceholder = 'data:image/png;base64,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'; function findPoster(images) { return _.find(images, { coverType: 'poster' }); diff --git a/frontend/src/Artist/Delete/DeleteArtistModalContent.js b/frontend/src/Artist/Delete/DeleteArtistModalContent.js index d30a589de..444b75bc8 100644 --- a/frontend/src/Artist/Delete/DeleteArtistModalContent.js +++ b/frontend/src/Artist/Delete/DeleteArtistModalContent.js @@ -33,7 +33,7 @@ class DeleteArtistModalContent extends Component { this.setState({ deleteFiles: value }); } - onDeleteSeriesConfirmed = () => { + onDeleteArtistConfirmed = () => { const deleteFiles = this.state.deleteFiles; this.setState({ deleteFiles: false }); @@ -113,7 +113,7 @@ class DeleteArtistModalContent extends Component { diff --git a/frontend/src/Artist/Details/AlbumRow.js b/frontend/src/Artist/Details/AlbumRow.js index 8c0e2b804..0285030d4 100644 --- a/frontend/src/Artist/Details/AlbumRow.js +++ b/frontend/src/Artist/Details/AlbumRow.js @@ -115,7 +115,7 @@ class AlbumRow extends Component { episodeId={id} artistId={artistId} episodeTitle={title} - showOpenSeriesButton={false} + showOpenArtistButton={false} /> ); @@ -216,4 +216,11 @@ AlbumRow.propTypes = { onMonitorAlbumPress: PropTypes.func.isRequired }; +AlbumRow.defaultProps = { + statistics: { + trackCount: 0, + trackFileCount: 0 + } +}; + export default AlbumRow; diff --git a/frontend/src/Artist/Details/ArtistDetails.js b/frontend/src/Artist/Details/ArtistDetails.js index 842c60363..77a0a6c83 100644 --- a/frontend/src/Artist/Details/ArtistDetails.js +++ b/frontend/src/Artist/Details/ArtistDetails.js @@ -102,15 +102,15 @@ class ArtistDetails extends Component { this.setState({ isManageEpisodesOpen: false }); } - onEditSeriesPress = () => { + onEditArtistPress = () => { this.setState({ isEditArtistModalOpen: true }); } - onEditSeriesModalClose = () => { + onEditArtistModalClose = () => { this.setState({ isEditArtistModalOpen: false }); } - onDeleteSeriesPress = () => { + onDeleteArtistPress = () => { this.setState({ isEditArtistModalOpen: false, isDeleteArtistModalOpen: true @@ -243,13 +243,13 @@ class ArtistDetails extends Component { @@ -517,8 +517,8 @@ class ArtistDetails extends Component { state.episodeFiles, createAllArtistSelector(), createCommandsSelector(), - (nameSlug, episodes, episodeFiles, allSeries, commands) => { - const sortedArtist = _.orderBy(allSeries, 'sortName'); - const seriesIndex = _.findIndex(sortedArtist, { nameSlug }); - const series = sortedArtist[seriesIndex]; + (nameSlug, episodes, episodeFiles, allArtists, commands) => { + const sortedArtist = _.orderBy(allArtists, 'sortName'); + const artistIndex = _.findIndex(sortedArtist, { nameSlug }); + const series = sortedArtist[artistIndex]; if (!series) { return {}; } - const previousArtist = sortedArtist[seriesIndex - 1] || _.last(sortedArtist); - const nextArtist = sortedArtist[seriesIndex + 1] || _.first(sortedArtist); + const previousArtist = sortedArtist[artistIndex - 1] || _.last(sortedArtist); + const nextArtist = sortedArtist[artistIndex + 1] || _.first(sortedArtist); const isArtistRefreshing = !!findCommand(commands, { name: commandNames.REFRESH_ARTIST, artistId: series.id }); const allArtistRefreshing = _.some(commands, (command) => command.name === commandNames.REFRESH_ARTIST && !command.body.artistId); const isRefreshing = isArtistRefreshing || allArtistRefreshing; diff --git a/frontend/src/Artist/Details/ArtistDetailsPageConnector.js b/frontend/src/Artist/Details/ArtistDetailsPageConnector.js index 29817c512..f4e52b344 100644 --- a/frontend/src/Artist/Details/ArtistDetailsPageConnector.js +++ b/frontend/src/Artist/Details/ArtistDetailsPageConnector.js @@ -12,11 +12,11 @@ function createMapStateToProps() { return createSelector( (state, { match }) => match, createAllArtistSelector(), - (match, allSeries) => { + (match, allArtists) => { const nameSlug = match.params.nameSlug; - const seriesIndex = _.findIndex(allSeries, { nameSlug }); + const artistIndex = _.findIndex(allArtists, { nameSlug }); - if (seriesIndex > -1) { + if (artistIndex > -1) { return { nameSlug }; diff --git a/frontend/src/Artist/Edit/EditArtistModalContent.js b/frontend/src/Artist/Edit/EditArtistModalContent.js index b8494c525..d9a872e66 100644 --- a/frontend/src/Artist/Edit/EditArtistModalContent.js +++ b/frontend/src/Artist/Edit/EditArtistModalContent.js @@ -27,7 +27,7 @@ class EditArtistModalContent extends Component { onInputChange, onSavePress, onModalClose, - onDeleteSeriesPress, + onDeleteArtistPress, ...otherProps } = this.props; @@ -127,7 +127,7 @@ class EditArtistModalContent extends Component { @@ -159,7 +159,7 @@ EditArtistModalContent.propTypes = { onInputChange: PropTypes.func.isRequired, onSavePress: PropTypes.func.isRequired, onModalClose: PropTypes.func.isRequired, - onDeleteSeriesPress: PropTypes.func.isRequired + onDeleteArtistPress: PropTypes.func.isRequired }; export default EditArtistModalContent; diff --git a/frontend/src/Artist/Edit/EditArtistModalContentConnector.js b/frontend/src/Artist/Edit/EditArtistModalContentConnector.js index fb6dd77d4..2564de7e2 100644 --- a/frontend/src/Artist/Edit/EditArtistModalContentConnector.js +++ b/frontend/src/Artist/Edit/EditArtistModalContentConnector.js @@ -5,7 +5,7 @@ import { connect } from 'react-redux'; import { createSelector } from 'reselect'; import selectSettings from 'Store/Selectors/selectSettings'; import createArtistSelector from 'Store/Selectors/createArtistSelector'; -import { setSeriesValue, saveArtist } from 'Store/Actions/artistActions'; +import { setArtistValue, saveArtist } from 'Store/Actions/artistActions'; import EditArtistModalContent from './EditArtistModalContent'; function createMapStateToProps() { @@ -46,7 +46,7 @@ function createMapStateToProps() { } const mapDispatchToProps = { - setSeriesValue, + setArtistValue, saveArtist }; @@ -65,7 +65,7 @@ class EditArtistModalContentConnector extends Component { // Listeners onInputChange = ({ name, value }) => { - this.props.setSeriesValue({ name, value }); + this.props.setArtistValue({ name, value }); } onSavePress = () => { @@ -90,7 +90,7 @@ EditArtistModalContentConnector.propTypes = { artistId: PropTypes.number, isSaving: PropTypes.bool.isRequired, saveError: PropTypes.object, - setSeriesValue: PropTypes.func.isRequired, + setArtistValue: PropTypes.func.isRequired, saveArtist: PropTypes.func.isRequired, onModalClose: PropTypes.func.isRequired }; diff --git a/frontend/src/Artist/Editor/ArtistEditor.js b/frontend/src/Artist/Editor/ArtistEditor.js index 3599695b1..17b0fa91a 100644 --- a/frontend/src/Artist/Editor/ArtistEditor.js +++ b/frontend/src/Artist/Editor/ArtistEditor.js @@ -220,7 +220,7 @@ class ArtistEditor extends Component { filterValue={filterValue} onPress={onFilterSelect} > - Missing Episodes + Missing Albums diff --git a/frontend/src/Artist/Editor/ArtistEditorFooter.css b/frontend/src/Artist/Editor/ArtistEditorFooter.css index 5b509936b..cc01c33ea 100644 --- a/frontend/src/Artist/Editor/ArtistEditorFooter.css +++ b/frontend/src/Artist/Editor/ArtistEditorFooter.css @@ -51,7 +51,7 @@ justify-content: space-between; } - .selectedSeriesLabel { + .selectedArtistLabel { text-align: left; } } diff --git a/frontend/src/Artist/Editor/ArtistEditorFooter.js b/frontend/src/Artist/Editor/ArtistEditorFooter.js index 319dd004a..95ae60675 100644 --- a/frontend/src/Artist/Editor/ArtistEditorFooter.js +++ b/frontend/src/Artist/Editor/ArtistEditorFooter.js @@ -5,7 +5,7 @@ import SelectInput from 'Components/Form/SelectInput'; import LanguageProfileSelectInputConnector from 'Components/Form/LanguageProfileSelectInputConnector'; import QualityProfileSelectInputConnector from 'Components/Form/QualityProfileSelectInputConnector'; import RootFolderSelectInputConnector from 'Components/Form/RootFolderSelectInputConnector'; -import SeriesTypeSelectInput from 'Components/Form/SeriesTypeSelectInput'; +// import SeriesTypeSelectInput from 'Components/Form/SeriesTypeSelectInput'; import SpinnerButton from 'Components/Link/SpinnerButton'; import PageContentFooter from 'Components/Page/PageContentFooter'; import TagsModal from './Tags/TagsModal'; diff --git a/frontend/src/Artist/Editor/Delete/DeleteArtistModalContent.js b/frontend/src/Artist/Editor/Delete/DeleteArtistModalContent.js index fb1a407be..c39f7f285 100644 --- a/frontend/src/Artist/Editor/Delete/DeleteArtistModalContent.js +++ b/frontend/src/Artist/Editor/Delete/DeleteArtistModalContent.js @@ -31,7 +31,7 @@ class DeleteArtistModalContent extends Component { this.setState({ deleteFiles: value }); } - onDeleteSeriesConfirmed = () => { + onDeleteArtistConfirmed = () => { const deleteFiles = this.state.deleteFiles; this.setState({ deleteFiles: false }); @@ -104,7 +104,7 @@ class DeleteArtistModalContent extends Component { diff --git a/frontend/src/Artist/Editor/Delete/DeleteArtistModalContentConnector.js b/frontend/src/Artist/Editor/Delete/DeleteArtistModalContentConnector.js index 2130824a1..83787010d 100644 --- a/frontend/src/Artist/Editor/Delete/DeleteArtistModalContentConnector.js +++ b/frontend/src/Artist/Editor/Delete/DeleteArtistModalContentConnector.js @@ -9,12 +9,12 @@ function createMapStateToProps() { return createSelector( (state, { artistIds }) => artistIds, createAllArtistSelector(), - (artistIds, allSeries) => { - const selectedSeries = _.intersectionWith(allSeries, artistIds, (s, id) => { + (artistIds, allArtists) => { + const selectedArtist = _.intersectionWith(allArtists, artistIds, (s, id) => { return s.id === id; }); - const sortedArtist = _.orderBy(selectedSeries, 'sortName'); + const sortedArtist = _.orderBy(selectedArtist, 'sortName'); const series = _.map(sortedArtist, (s) => { return { artistName: s.artistName, diff --git a/frontend/src/Artist/Editor/Organize/OrganizeArtistModalContentConnector.js b/frontend/src/Artist/Editor/Organize/OrganizeArtistModalContentConnector.js index 002437858..063b85e2d 100644 --- a/frontend/src/Artist/Editor/Organize/OrganizeArtistModalContentConnector.js +++ b/frontend/src/Artist/Editor/Organize/OrganizeArtistModalContentConnector.js @@ -12,8 +12,8 @@ function createMapStateToProps() { return createSelector( (state, { artistIds }) => artistIds, createAllArtistSelector(), - (artistIds, allSeries) => { - const series = _.intersectionWith(allSeries, artistIds, (s, id) => { + (artistIds, allArtists) => { + const series = _.intersectionWith(allArtists, artistIds, (s, id) => { return s.id === id; }); diff --git a/frontend/src/Artist/Editor/Tags/TagsModalContentConnector.js b/frontend/src/Artist/Editor/Tags/TagsModalContentConnector.js index de19248d7..5acae0402 100644 --- a/frontend/src/Artist/Editor/Tags/TagsModalContentConnector.js +++ b/frontend/src/Artist/Editor/Tags/TagsModalContentConnector.js @@ -10,8 +10,8 @@ function createMapStateToProps() { (state, { artistIds }) => artistIds, createAllArtistSelector(), createTagsSelector(), - (artistIds, allSeries, tagList) => { - const series = _.intersectionWith(allSeries, artistIds, (s, id) => { + (artistIds, allArtists, tagList) => { + const series = _.intersectionWith(allArtists, artistIds, (s, id) => { return s.id === id; }); diff --git a/frontend/src/Artist/Index/ArtistIndex.js b/frontend/src/Artist/Index/ArtistIndex.js index 9559240d8..b4d646636 100644 --- a/frontend/src/Artist/Index/ArtistIndex.js +++ b/frontend/src/Artist/Index/ArtistIndex.js @@ -85,7 +85,7 @@ class ArtistIndex extends Component { sortDirection } = this.props; - // Reset if not sorting by sortTitle + // Reset if not sorting by sortName if (sortKey !== 'sortName') { this.setState({ jumpBarItems: [] }); return; @@ -162,7 +162,7 @@ class ArtistIndex extends Component { sortKey, sortDirection, view, - isRefreshingSeries, + isRefreshingArtist, isRssSyncExecuting, scrollTop, onSortSelect, @@ -191,7 +191,7 @@ class ArtistIndex extends Component { label="Update all" iconName={icons.REFRESH} spinningName={icons.REFRESH} - isSpinning={isRefreshingSeries} + isSpinning={isRefreshingArtist} onPress={onRefreshArtistPress} /> @@ -311,7 +311,7 @@ ArtistIndex.propTypes = { sortKey: PropTypes.string, sortDirection: PropTypes.oneOf(sortDirections.all), view: PropTypes.string.isRequired, - isRefreshingSeries: PropTypes.bool.isRequired, + isRefreshingArtist: PropTypes.bool.isRequired, isRssSyncExecuting: PropTypes.bool.isRequired, scrollTop: PropTypes.number.isRequired, isSmallScreen: PropTypes.bool.isRequired, diff --git a/frontend/src/Artist/Index/ArtistIndexConnector.js b/frontend/src/Artist/Index/ArtistIndexConnector.js index 784b9d100..8687c7b3c 100644 --- a/frontend/src/Artist/Index/ArtistIndexConnector.js +++ b/frontend/src/Artist/Index/ArtistIndexConnector.js @@ -40,17 +40,17 @@ function getScrollTop(view, scrollTop, isSmallScreen) { function createMapStateToProps() { return createSelector( (state) => state.series, - (state) => state.seriesIndex, + (state) => state.artistIndex, createCommandSelector(commandNames.REFRESH_ARTIST), createCommandSelector(commandNames.RSS_SYNC), createDimensionsSelector(), - (series, seriesIndex, isRefreshingSeries, isRssSyncExecuting, dimensionsState) => { + (series, artistIndex, isRefreshingArtist, isRssSyncExecuting, dimensionsState) => { return { - isRefreshingSeries, + isRefreshingArtist, isRssSyncExecuting, isSmallScreen: dimensionsState.isSmallScreen, ...series, - ...seriesIndex + ...artistIndex }; } ); @@ -109,7 +109,7 @@ class ArtistIndexConnector extends Component { this.setState({ scrollTop }, () => { - scrollPositions.seriesIndex = scrollTop; + scrollPositions.artistIndex = scrollTop; }); } @@ -156,5 +156,5 @@ ArtistIndexConnector.propTypes = { export default withScrollPosition( connect(createMapStateToProps, mapDispatchToProps)(ArtistIndexConnector), - 'seriesIndex' + 'artistIndex' ); diff --git a/frontend/src/Artist/Index/ArtistIndexFooter.js b/frontend/src/Artist/Index/ArtistIndexFooter.js index 70664e528..9ffc8262a 100644 --- a/frontend/src/Artist/Index/ArtistIndexFooter.js +++ b/frontend/src/Artist/Index/ArtistIndexFooter.js @@ -6,15 +6,15 @@ import styles from './ArtistIndexFooter.css'; function ArtistIndexFooter({ series }) { const count = series.length; - let episodes = 0; - let episodeFiles = 0; + let tracks = 0; + let trackFiles = 0; let ended = 0; let continuing = 0; let monitored = 0; series.forEach((s) => { - episodes += s.trackCount || 0; - episodeFiles += s.trackFileCount || 0; + tracks += s.trackCount || 0; + trackFiles += s.trackFileCount || 0; if (s.status === 'ended') { ended++; @@ -84,12 +84,12 @@ function ArtistIndexFooter({ series }) {
diff --git a/frontend/src/Artist/Index/ArtistIndexItemConnector.js b/frontend/src/Artist/Index/ArtistIndexItemConnector.js index 7b848f366..216c3fbbe 100644 --- a/frontend/src/Artist/Index/ArtistIndexItemConnector.js +++ b/frontend/src/Artist/Index/ArtistIndexItemConnector.js @@ -12,23 +12,23 @@ import * as commandNames from 'Commands/commandNames'; function createMapStateToProps() { return createSelector( (state, { id }) => id, - (state, { seasons }) => seasons, + (state, { albums }) => albums, createQualityProfileSelector(), createLanguageProfileSelector(), createCommandsSelector(), - (artistId, seasons, qualityProfile, languageProfile, commands) => { - const isRefreshingSeries = _.some(commands, (command) => { + (artistId, albums, qualityProfile, languageProfile, commands) => { + const isRefreshingArtist = _.some(commands, (command) => { return command.name === commandNames.REFRESH_ARTIST && command.body.artistId === artistId; }); - const latestSeason = _.maxBy(seasons, (season) => season.seasonNumber); + const latestAlbum = _.first(_.orderBy(albums, 'releaseDate', 'desc')); return { qualityProfile, languageProfile, - latestSeason, - isRefreshingSeries + latestAlbum, + isRefreshingArtist }; } ); diff --git a/frontend/src/Artist/Index/Menus/ArtistIndexFilterMenu.js b/frontend/src/Artist/Index/Menus/ArtistIndexFilterMenu.js index 2fab66a36..5b78ce44d 100644 --- a/frontend/src/Artist/Index/Menus/ArtistIndexFilterMenu.js +++ b/frontend/src/Artist/Index/Menus/ArtistIndexFilterMenu.js @@ -60,7 +60,7 @@ function ArtistIndexFilterMenu(props) { filterValue={filterValue} onPress={onFilterSelect} > - Missing Episodes + Missing Albums diff --git a/frontend/src/Artist/Index/Menus/ArtistIndexSortMenu.js b/frontend/src/Artist/Index/Menus/ArtistIndexSortMenu.js index 6941e0536..d618b96ba 100644 --- a/frontend/src/Artist/Index/Menus/ArtistIndexSortMenu.js +++ b/frontend/src/Artist/Index/Menus/ArtistIndexSortMenu.js @@ -24,15 +24,6 @@ function ArtistIndexSortMenu(props) { Name - - Network - - - Latest Season + Latest Album { + onEditArtistPress = () => { this.setState({ isEditArtistModalOpen: true }); } - onEditSeriesModalClose = () => { + onEditArtistModalClose = () => { this.setState({ isEditArtistModalOpen: false }); } - onDeleteSeriesPress = () => { + onDeleteArtistPress = () => { this.setState({ isEditArtistModalOpen: false, isDeleteArtistModalOpen: true @@ -73,7 +73,7 @@ class ArtistIndexPoster extends Component { showRelativeDates, shortDateFormat, timeFormat, - isRefreshingSeries, + isRefreshingArtist, onRefreshArtistPress, ...otherProps } = this.props; @@ -99,7 +99,7 @@ class ArtistIndexPoster extends Component { className={styles.action} name={icons.REFRESH} title="Refresh Artist" - isSpinning={isRefreshingSeries} + isSpinning={isRefreshingArtist} onPress={onRefreshArtistPress} /> @@ -107,7 +107,7 @@ class ArtistIndexPoster extends Component { className={styles.action} name={icons.EDIT} title="Edit Artist" - onPress={this.onEditSeriesPress} + onPress={this.onEditArtistPress} /> @@ -183,8 +183,8 @@ class ArtistIndexPoster extends Component { - {network} - - ); - } - if (sortKey === 'qualityProfileId') { return (
@@ -72,17 +63,17 @@ function ArtistIndexPosterInfo(props) { } if (sortKey === 'albumCount') { - let seasons = '1 season'; + let albums = '1 album'; if (albumCount === 0) { - seasons = 'No seasons'; + albums = 'No albums'; } else if (albumCount > 1) { - seasons = `${albumCount} seasons`; + albums = `${albumCount} albums`; } return (
- {seasons} + {albums}
); } @@ -107,7 +98,6 @@ function ArtistIndexPosterInfo(props) { } ArtistIndexPosterInfo.propTypes = { - network: PropTypes.string, qualityProfile: PropTypes.object.isRequired, previousAiring: PropTypes.string, added: PropTypes.string, diff --git a/frontend/src/Artist/Index/Posters/ArtistIndexPosters.js b/frontend/src/Artist/Index/Posters/ArtistIndexPosters.js index b815d5708..69c5db179 100644 --- a/frontend/src/Artist/Index/Posters/ArtistIndexPosters.js +++ b/frontend/src/Artist/Index/Posters/ArtistIndexPosters.js @@ -60,7 +60,6 @@ function calculateRowHeight(posterHeight, sortKey, isSmallScreen, posterOptions) } switch (sortKey) { - case 'network': case 'seasons': case 'previousAiring': case 'added': @@ -79,7 +78,7 @@ function calculateRowHeight(posterHeight, sortKey, isSmallScreen, posterOptions) } function calculatePosterHeight(posterWidth) { - return Math.ceil((250 / 170) * posterWidth); + return Math.ceil(posterWidth); } class ArtistIndexPosters extends Component { @@ -94,7 +93,7 @@ class ArtistIndexPosters extends Component { width: 0, columnWidth: 182, columnCount: 1, - posterWidth: 162, + posterWidth: 238, posterHeight: 238, rowHeight: calculateRowHeight(238, null, props.isSmallScreen, {}) }; @@ -149,7 +148,7 @@ class ArtistIndexPosters extends Component { } = this.state; const index = _.findIndex(items, (item) => { - const firstCharacter = item.sortTitle.charAt(0); + const firstCharacter = item.sortName.charAt(0); if (character === '#') { return !isNaN(firstCharacter); diff --git a/frontend/src/Artist/Index/Posters/ArtistIndexPostersConnector.js b/frontend/src/Artist/Index/Posters/ArtistIndexPostersConnector.js index 9e200cfa6..58ce328a4 100644 --- a/frontend/src/Artist/Index/Posters/ArtistIndexPostersConnector.js +++ b/frontend/src/Artist/Index/Posters/ArtistIndexPostersConnector.js @@ -7,7 +7,7 @@ import ArtistIndexPosters from './ArtistIndexPosters'; function createMapStateToProps() { return createSelector( - (state) => state.seriesIndex.posterOptions, + (state) => state.artistIndex.posterOptions, createClientSideCollectionSelector(), createUISettingsSelector(), createDimensionsSelector(), @@ -29,5 +29,5 @@ export default connectSection( undefined, undefined, { withRef: true }, - { section: 'series', uiSection: 'seriesIndex' } + { section: 'series', uiSection: 'artistIndex' } )(ArtistIndexPosters); diff --git a/frontend/src/Artist/Index/Posters/Options/ArtistIndexPosterOptionsModalContent.js b/frontend/src/Artist/Index/Posters/Options/ArtistIndexPosterOptionsModalContent.js index 275af0528..6e0a5aa54 100644 --- a/frontend/src/Artist/Index/Posters/Options/ArtistIndexPosterOptionsModalContent.js +++ b/frontend/src/Artist/Index/Posters/Options/ArtistIndexPosterOptionsModalContent.js @@ -124,13 +124,13 @@ class ArtistIndexPosterOptionsModalContent extends Component { - Show Title + Show Name diff --git a/frontend/src/Artist/Index/Posters/Options/ArtistIndexPosterOptionsModalContentConnector.js b/frontend/src/Artist/Index/Posters/Options/ArtistIndexPosterOptionsModalContentConnector.js index 878518647..72af268ad 100644 --- a/frontend/src/Artist/Index/Posters/Options/ArtistIndexPosterOptionsModalContentConnector.js +++ b/frontend/src/Artist/Index/Posters/Options/ArtistIndexPosterOptionsModalContentConnector.js @@ -5,9 +5,9 @@ import ArtistIndexPosterOptionsModalContent from './ArtistIndexPosterOptionsModa function createMapStateToProps() { return createSelector( - (state) => state.seriesIndex, - (seriesIndex) => { - return seriesIndex.posterOptions; + (state) => state.artistIndex, + (artistIndex) => { + return artistIndex.posterOptions; } ); } diff --git a/frontend/src/Artist/Index/Table/ArtistIndexActionsCell.js b/frontend/src/Artist/Index/Table/ArtistIndexActionsCell.js index ccacb73b2..3f37cd56a 100644 --- a/frontend/src/Artist/Index/Table/ArtistIndexActionsCell.js +++ b/frontend/src/Artist/Index/Table/ArtistIndexActionsCell.js @@ -24,15 +24,15 @@ class ArtistIndexActionsCell extends Component { // // Listeners - onEditSeriesPress = () => { + onEditArtistPress = () => { this.setState({ isEditArtistModalOpen: true }); } - onEditSeriesModalClose = () => { + onEditArtistModalClose = () => { this.setState({ isEditArtistModalOpen: false }); } - onDeleteSeriesPress = () => { + onDeleteArtistPress = () => { this.setState({ isEditArtistModalOpen: false, isDeleteArtistModalOpen: true @@ -49,7 +49,7 @@ class ArtistIndexActionsCell extends Component { render() { const { id, - isRefreshingSeries, + isRefreshingArtist, onRefreshArtistPress, ...otherProps } = this.props; @@ -66,21 +66,21 @@ class ArtistIndexActionsCell extends Component { { + onEditArtistPress = () => { this.setState({ isEditArtistModalOpen: true }); } - onEditSeriesModalClose = () => { + onEditArtistModalClose = () => { this.setState({ isEditArtistModalOpen: false }); } - onDeleteSeriesPress = () => { + onDeleteArtistPress = () => { this.setState({ isEditArtistModalOpen: false, isDeleteArtistModalOpen: true @@ -66,7 +66,6 @@ class ArtistIndexRow extends Component { status, artistName, nameSlug, - network, qualityProfile, languageProfile, nextAiring, @@ -76,13 +75,13 @@ class ArtistIndexRow extends Component { trackCount, trackFileCount, totalTrackCount, - latestSeason, + latestAlbum, path, sizeOnDisk, tags, // useSceneNumbering, columns, - isRefreshingSeries, + isRefreshingArtist, onRefreshArtistPress } = this.props; @@ -130,17 +129,6 @@ class ArtistIndexRow extends Component { ); } - if (name === 'network') { - return ( - - {network} - - ); - } - if (name === 'qualityProfileId') { return ( @@ -320,14 +308,14 @@ class ArtistIndexRow extends Component { ); @@ -340,8 +328,8 @@ class ArtistIndexRow extends Component { { - const firstCharacter = item.sortTitle.charAt(0); + const firstCharacter = item.sortName.charAt(0); if (character === '#') { return !isNaN(firstCharacter); diff --git a/frontend/src/Artist/Index/Table/ArtistIndexTableConnector.js b/frontend/src/Artist/Index/Table/ArtistIndexTableConnector.js index f94950b87..0bf6af71f 100644 --- a/frontend/src/Artist/Index/Table/ArtistIndexTableConnector.js +++ b/frontend/src/Artist/Index/Table/ArtistIndexTableConnector.js @@ -30,5 +30,5 @@ export default connectSection( createMapDispatchToProps, undefined, { withRef: true }, - { section: 'series', uiSection: 'seriesIndex' } + { section: 'series', uiSection: 'artistIndex' } )(ArtistIndexTable); diff --git a/frontend/src/Artist/Index/Table/artistIndexCellRenderers.js b/frontend/src/Artist/Index/Table/artistIndexCellRenderers.js index b15554482..b5ea45e4f 100644 --- a/frontend/src/Artist/Index/Table/artistIndexCellRenderers.js +++ b/frontend/src/Artist/Index/Table/artistIndexCellRenderers.js @@ -23,7 +23,6 @@ export default function artistIndexCellRenderers(cellProps) { status, name, nameSlug, - network, qualityProfileId, nextAiring, previousAiring, @@ -46,7 +45,7 @@ export default function artistIndexCellRenderers(cellProps) { ); } - if (dataKey === 'sortTitle') { + if (dataKey === 'sortName') { return ( - {network} - - - ); - } - if (dataKey === 'qualityProfileId') { return (
diff --git a/frontend/src/Calendar/Events/CalendarEvent.css b/frontend/src/Calendar/Events/CalendarEvent.css index ac055a531..dcb7d4308 100644 --- a/frontend/src/Calendar/Events/CalendarEvent.css +++ b/frontend/src/Calendar/Events/CalendarEvent.css @@ -61,7 +61,7 @@ } } -.unaired { +.unreleased { border-left-color: $primaryColor; &:global(.colorImpaired) { diff --git a/frontend/src/Calendar/Events/CalendarEvent.js b/frontend/src/Calendar/Events/CalendarEvent.js index 9773ba137..1f16ce3e0 100644 --- a/frontend/src/Calendar/Events/CalendarEvent.js +++ b/frontend/src/Calendar/Events/CalendarEvent.js @@ -116,7 +116,7 @@ class CalendarEvent extends Component { episodeEntity={episodeEntities.CALENDAR} artistId={artist.id} episodeTitle={title} - showOpenSeriesButton={true} + showOpenArtistButton={true} onModalClose={this.onDetailsModalClose} /> diff --git a/frontend/src/Calendar/Legend/Legend.js b/frontend/src/Calendar/Legend/Legend.js index 15ace7de2..759ebf5a7 100644 --- a/frontend/src/Calendar/Legend/Legend.js +++ b/frontend/src/Calendar/Legend/Legend.js @@ -22,7 +22,7 @@ function Legend({ colorImpairedMode }) {
diff --git a/frontend/src/Calendar/Legend/LegendItem.css b/frontend/src/Calendar/Legend/LegendItem.css index e15a58472..fb49d8608 100644 --- a/frontend/src/Calendar/Legend/LegendItem.css +++ b/frontend/src/Calendar/Legend/LegendItem.css @@ -32,6 +32,6 @@ composes: missing from 'Calendar/Events/CalendarEvent.css'; } -.unaired { - composes: unaired from 'Calendar/Events/CalendarEvent.css'; +.unreleased { + composes: unreleased from 'Calendar/Events/CalendarEvent.css'; } diff --git a/frontend/src/Calendar/getStatusStyle.js b/frontend/src/Calendar/getStatusStyle.js index 3016a10c1..5e60b301f 100644 --- a/frontend/src/Calendar/getStatusStyle.js +++ b/frontend/src/Calendar/getStatusStyle.js @@ -19,7 +19,7 @@ function getStatusStyle(episodeNumber, downloading, startTime, isMonitored) { return 'missing'; } - return 'unaired'; + return 'unreleased'; } export default getStatusStyle; diff --git a/frontend/src/Components/Page/Header/ArtistSearchInput.js b/frontend/src/Components/Page/Header/ArtistSearchInput.js index bb043c73d..0de1dedb9 100644 --- a/frontend/src/Components/Page/Header/ArtistSearchInput.js +++ b/frontend/src/Components/Page/Header/ArtistSearchInput.js @@ -76,7 +76,7 @@ class ArtistSearchInput extends Component { ); } - goToSeries(series) { + goToArtist(series) { this.setState({ value: '' }); this.props.onGoToSeries(series.nameSlug); } @@ -121,9 +121,9 @@ class ArtistSearchInput extends Component { // otherwise go to the selected series. if (highlightedSuggestionIndex == null) { - this.goToSeries(suggestions[0]); + this.goToArtist(suggestions[0]); } else { - this.goToSeries(suggestions[highlightedSuggestionIndex]); + this.goToArtist(suggestions[highlightedSuggestionIndex]); } } @@ -155,7 +155,7 @@ class ArtistSearchInput extends Component { if (suggestion.type === ADD_NEW_TYPE) { this.props.onGoToAddNewArtist(this.state.value); } else { - this.goToSeries(suggestion); + this.goToArtist(suggestion); } } diff --git a/frontend/src/Content/Images/poster-dark-square.png b/frontend/src/Content/Images/poster-dark-square.png new file mode 100644 index 0000000000000000000000000000000000000000..2d7608f3d4eeef2377a30861d135109c743ae849 GIT binary patch literal 1898 zcmV-w2bK7VP)_Sc7SHR! zQ@``*d_Hvgw|Qs$F;KXjI{hq%iGOLuuIT6aUcyU@4-)T$&n-Skyn{~NQ^BW?oW_?9 z&+pmzq%~NJ&)B$gxSvh)(>|A6Iws(4(_A-A^Nl_(hRywLQ_E{596uX2_pg;mF0{Fm zkAr4UdSB{e25^zBhv*)Crfdu-!P#i~=L39ZX}}tBI(S%~BT;W~LJ}@A6tCE3`wq_) z;o=k9bQ8C7A*)2=${k%Z?$STN+!H5V{>@xGZgo6c6J>ERWp4V%@PBxQnp=WAsf{jI zd70`*8HqJVcQGwp>gT_->GWFWvNhd;p*dQ5tS2E?j)BF8bazZk*Ah2d!pnB?XAH%g zrAzGqHQ{9Lby)SVTi@XqnKdAe(2MY%1;tl*WEINdxcVfl`q*uZV^jg+XKphsf*wD= z#N!rJfOwf&-MtUmZ5io@N4bxq&~?yq#%|{ke$Up!XZ8p_3)<~I!iUPk3+s19=%^{H z-@t%ntzGBB-mpq(HvW7>9BIxHSkAHo59vWuTs)vJKn=cI$B@bNe1(_O&u zu~qVB7cZ?@7lGUHoP2lN!L_$W?$3Q*^Nwawcku;nnppt9N8iOWqs33?=AQ+;rqZ)K zHi}O>_>A`4ydT$o5s7E^v~BS>WcZ>VFAVM!-+cb&sos29(eJZ>+X!BVWuI)2M|h9d zg40P6q208TYrOgV6UUYQMZen_{1i7k?6;;nD!3gqW75oN8e8xua(Z9Y1G1; ze&QPO|39jqkij;f_^ib#SOBL#3E`3Uy-Id)y?soaa@C7Z96ndR(*SM)%%pe6PSB|m z^t~NCBe(3uOT?EtoblaF<5T^Yiwy&R3_)oJH#giD+>#u8D_XlDE^oN_BW*YN0Ka?9 zzzf7x2RFWutX|=HG3&dY5jS?*#W#eXh4Ise_%!F?O5@9&$)`e1^VcHfNKYSWyG0#b znaG4CUF$r~w^Ah@UTe8G`KuJ7h2Yv_xS%>~Pxaj%lum|=i~qnkdC+j=HZcYk9iLAS z=Xl-G=|g-9M{Ib@=y^Y;`^|S+#97ki_94E8lOTx09aKX);2#&}db(sB7v`{%c(3@l ziOEFhuzJ$s(mQDzOo;^Zq)k*8uOSaAqY!SciF+jzy+fpmTE7udrlXTcr2W@KjNx2{ zpRPQ`-$GO(r<^MiBRY|KieF=Fbj!v&H>}=opz;127Q+KsyBf1SYmD7aC>;q!7Y}0+ zNI(}s97CgI2bXBDSLl0z$Z9UK>xN>nANG2lqSQb>Kw%-)08AwLokEja!~$U<1*L7d z@a>PrX1}FAJp)0hu;2d7)kl@hy$fDQ4AIHtA;L{S55l*?!D>l9$e7(SAgi~ycy(;e=;(tQjlvnC> zg;t!t#-Y-i3SOZV%e=O<`?tmuHK5E(Mdmcp&?O{qNfntb%q%ifiCem)J5z0yH(cWO z3+y2MIX*B8?0$J4@Vc!LGs^q8)wa^%Rom3%bQH0*VOtv1onW^%sIgL89PP$$toUsm zhx6My)KqE+hafNEH - - {seriesTitle} + + {artistName} - @@ -146,7 +146,7 @@ class EpisodeDetailsModalContent extends Component { { - showOpenSeriesButton && + showOpenArtistButton &&