mirror of https://github.com/lidarr/Lidarr
[UI Work] Misc UI Fixes and Tweaks
This commit is contained in:
parent
2a6decdc4c
commit
44cc642ad4
|
@ -64,12 +64,12 @@ class BlacklistRow extends Component {
|
|||
return null;
|
||||
}
|
||||
|
||||
if (name === 'series.sortTitle') {
|
||||
if (name === 'series.sortName') {
|
||||
return (
|
||||
<TableRowCell key={name}>
|
||||
<ArtistNameLink
|
||||
titleSlug={series.titleSlug}
|
||||
title={series.title}
|
||||
nameSlug={series.nameSlug}
|
||||
artistName={series.artistName}
|
||||
/>
|
||||
</TableRowCell>
|
||||
);
|
||||
|
|
|
@ -115,7 +115,7 @@ class HistoryRow extends Component {
|
|||
episodeEntity={episodeEntities.EPISODES}
|
||||
artistId={artist.id}
|
||||
episodeTitle={album.title}
|
||||
showOpenSeriesButton={true}
|
||||
showOpenArtistButton={true}
|
||||
/>
|
||||
</TableRowCell>
|
||||
);
|
||||
|
|
|
@ -163,7 +163,7 @@ class QueueRow extends Component {
|
|||
episodeFileId={episode.episodeFileId}
|
||||
episodeEntity={episodeEntity}
|
||||
episodeTitle={episode.title}
|
||||
showOpenSeriesButton={true}
|
||||
showOpenArtistButton={true}
|
||||
/>
|
||||
</TableRowCell>
|
||||
);
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
height: 250px;
|
||||
}
|
||||
|
||||
.title {
|
||||
.name {
|
||||
font-weight: 300;
|
||||
font-size: 36px;
|
||||
}
|
||||
|
|
|
@ -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 &&
|
||||
<Label size={sizes.LARGE}>
|
||||
{seasons}
|
||||
</Label>
|
||||
|
@ -138,7 +138,7 @@ class AddNewArtistSearchResult extends Component {
|
|||
</div>
|
||||
|
||||
<AddNewArtistModal
|
||||
isOpen={this.state.isNewAddSeriesModalOpen && !isExistingArtist}
|
||||
isOpen={this.state.isNewAddArtistModalOpen && !isExistingArtist}
|
||||
foreignArtistId={foreignArtistId}
|
||||
artistName={artistName}
|
||||
year={year}
|
||||
|
@ -159,7 +159,7 @@ AddNewArtistSearchResult.propTypes = {
|
|||
network: PropTypes.string,
|
||||
status: PropTypes.string.isRequired,
|
||||
overview: PropTypes.string,
|
||||
seasonCount: PropTypes.number,
|
||||
albumCount: PropTypes.number,
|
||||
ratings: PropTypes.object.isRequired,
|
||||
images: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
isExistingArtist: PropTypes.bool.isRequired,
|
||||
|
|
|
@ -17,7 +17,7 @@ function ImportArtistRow(props) {
|
|||
languageProfileId,
|
||||
albumFolder,
|
||||
// seriesType,
|
||||
selectedSeries,
|
||||
selectedArtist,
|
||||
isExistingArtist,
|
||||
showLanguageProfile,
|
||||
isSelected,
|
||||
|
@ -31,7 +31,7 @@ function ImportArtistRow(props) {
|
|||
inputClassName={styles.selectInput}
|
||||
id={id}
|
||||
isSelected={isSelected}
|
||||
isDisabled={!selectedSeries || isExistingArtist}
|
||||
isDisabled={!selectedArtist || isExistingArtist}
|
||||
onSelectedChange={onSelectedChange}
|
||||
/>
|
||||
|
||||
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
|||
<div className={styles.artistName}>
|
||||
{artistName}
|
||||
</div>
|
||||
<div className={styles.overview}>
|
||||
{overview}
|
||||
</div>
|
||||
|
||||
{
|
||||
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
|
||||
};
|
||||
|
||||
|
|
|
@ -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 {
|
|||
>
|
||||
<ImportArtistName
|
||||
artistName={artistName}
|
||||
overview={overview}
|
||||
// overview={overview}
|
||||
// year={year}
|
||||
// network={network}
|
||||
isExistingArtist={isExistingArtist}
|
||||
/>
|
||||
</Link>
|
||||
|
@ -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
|
||||
};
|
||||
|
|
|
@ -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 &&
|
||||
<Icon
|
||||
className={styles.warningIcon}
|
||||
name={icons.WARNING}
|
||||
|
@ -155,18 +155,17 @@ class ImportArtistSelectArtist extends Component {
|
|||
}
|
||||
|
||||
{
|
||||
isPopulated && selectedSeries &&
|
||||
isPopulated && selectedArtist &&
|
||||
<ImportArtistName
|
||||
artistName={selectedSeries.artistName}
|
||||
overview={selectedSeries.overview}
|
||||
// year={selectedSeries.year}
|
||||
// network={selectedSeries.network}
|
||||
artistName={selectedArtist.artistName}
|
||||
overview={selectedArtist.overview}
|
||||
// year={selectedArtist.year}
|
||||
isExistingArtist={isExistingArtist}
|
||||
/>
|
||||
}
|
||||
|
||||
{
|
||||
isPopulated && !selectedSeries &&
|
||||
isPopulated && !selectedArtist &&
|
||||
<div>
|
||||
<Icon
|
||||
className={styles.warningIcon}
|
||||
|
@ -230,9 +229,8 @@ class ImportArtistSelectArtist extends Component {
|
|||
key={item.foreignArtistId}
|
||||
foreignArtistId={item.foreignArtistId}
|
||||
artistName={item.artistName}
|
||||
overview={item.overview}
|
||||
// overview={item.overview}
|
||||
// year={item.year}
|
||||
// network={item.network}
|
||||
onPress={this.onArtistSelect}
|
||||
/>
|
||||
);
|
||||
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
||||
|
|
|
@ -172,7 +172,7 @@ class AlbumStudio extends Component {
|
|||
filterValue={filterValue}
|
||||
onPress={onFilterSelect}
|
||||
>
|
||||
Missing Episodes
|
||||
Missing Albums
|
||||
</FilterMenuItem>
|
||||
</MenuContent>
|
||||
</FilterMenu>
|
||||
|
|
|
@ -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' });
|
||||
|
|
|
@ -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 {
|
|||
|
||||
<Button
|
||||
kind={kinds.DANGER}
|
||||
onPress={this.onDeleteSeriesConfirmed}
|
||||
onPress={this.onDeleteArtistConfirmed}
|
||||
>
|
||||
Delete
|
||||
</Button>
|
||||
|
|
|
@ -115,7 +115,7 @@ class AlbumRow extends Component {
|
|||
episodeId={id}
|
||||
artistId={artistId}
|
||||
episodeTitle={title}
|
||||
showOpenSeriesButton={false}
|
||||
showOpenArtistButton={false}
|
||||
/>
|
||||
</TableRowCell>
|
||||
);
|
||||
|
@ -216,4 +216,11 @@ AlbumRow.propTypes = {
|
|||
onMonitorAlbumPress: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
AlbumRow.defaultProps = {
|
||||
statistics: {
|
||||
trackCount: 0,
|
||||
trackFileCount: 0
|
||||
}
|
||||
};
|
||||
|
||||
export default AlbumRow;
|
||||
|
|
|
@ -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 {
|
|||
<PageToolbarButton
|
||||
label="Edit"
|
||||
iconName={icons.EDIT}
|
||||
onPress={this.onEditSeriesPress}
|
||||
onPress={this.onEditArtistPress}
|
||||
/>
|
||||
|
||||
<PageToolbarButton
|
||||
label="Delete"
|
||||
iconName={icons.DELETE}
|
||||
onPress={this.onDeleteSeriesPress}
|
||||
onPress={this.onDeleteArtistPress}
|
||||
/>
|
||||
</PageToolbarSection>
|
||||
|
||||
|
@ -517,8 +517,8 @@ class ArtistDetails extends Component {
|
|||
<EditArtistModalConnector
|
||||
isOpen={isEditArtistModalOpen}
|
||||
artistId={id}
|
||||
onModalClose={this.onEditSeriesModalClose}
|
||||
onDeleteSeriesPress={this.onDeleteSeriesPress}
|
||||
onModalClose={this.onEditArtistModalClose}
|
||||
onDeleteArtistPress={this.onDeleteArtistPress}
|
||||
/>
|
||||
|
||||
<DeleteArtistModal
|
||||
|
|
|
@ -20,17 +20,17 @@ function createMapStateToProps() {
|
|||
(state) => 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;
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
|
|
@ -27,7 +27,7 @@ class EditArtistModalContent extends Component {
|
|||
onInputChange,
|
||||
onSavePress,
|
||||
onModalClose,
|
||||
onDeleteSeriesPress,
|
||||
onDeleteArtistPress,
|
||||
...otherProps
|
||||
} = this.props;
|
||||
|
||||
|
@ -127,7 +127,7 @@ class EditArtistModalContent extends Component {
|
|||
<Button
|
||||
className={styles.deleteButton}
|
||||
kind={kinds.DANGER}
|
||||
onPress={onDeleteSeriesPress}
|
||||
onPress={onDeleteArtistPress}
|
||||
>
|
||||
Delete
|
||||
</Button>
|
||||
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
|
|
@ -220,7 +220,7 @@ class ArtistEditor extends Component {
|
|||
filterValue={filterValue}
|
||||
onPress={onFilterSelect}
|
||||
>
|
||||
Missing Episodes
|
||||
Missing Albums
|
||||
</FilterMenuItem>
|
||||
</MenuContent>
|
||||
</FilterMenu>
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.selectedSeriesLabel {
|
||||
.selectedArtistLabel {
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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 {
|
|||
|
||||
<Button
|
||||
kind={kinds.DANGER}
|
||||
onPress={this.onDeleteSeriesConfirmed}
|
||||
onPress={this.onDeleteArtistConfirmed}
|
||||
>
|
||||
Delete
|
||||
</Button>
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
});
|
||||
|
||||
|
|
|
@ -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;
|
||||
});
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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'
|
||||
);
|
||||
|
|
|
@ -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 }) {
|
|||
<DescriptionList>
|
||||
<DescriptionListItem
|
||||
title="Tracks"
|
||||
data={episodes}
|
||||
data={tracks}
|
||||
/>
|
||||
|
||||
<DescriptionListItem
|
||||
title="Files"
|
||||
data={episodeFiles}
|
||||
data={trackFiles}
|
||||
/>
|
||||
</DescriptionList>
|
||||
</div>
|
||||
|
|
|
@ -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
|
||||
};
|
||||
}
|
||||
);
|
||||
|
|
|
@ -60,7 +60,7 @@ function ArtistIndexFilterMenu(props) {
|
|||
filterValue={filterValue}
|
||||
onPress={onFilterSelect}
|
||||
>
|
||||
Missing Episodes
|
||||
Missing Albums
|
||||
</FilterMenuItem>
|
||||
</MenuContent>
|
||||
</FilterMenu>
|
||||
|
|
|
@ -24,15 +24,6 @@ function ArtistIndexSortMenu(props) {
|
|||
Name
|
||||
</SortMenuItem>
|
||||
|
||||
<SortMenuItem
|
||||
name="network"
|
||||
sortKey={sortKey}
|
||||
sortDirection={sortDirection}
|
||||
onPress={onSortSelect}
|
||||
>
|
||||
Network
|
||||
</SortMenuItem>
|
||||
|
||||
<SortMenuItem
|
||||
name="qualityProfileId"
|
||||
sortKey={sortKey}
|
||||
|
@ -106,12 +97,12 @@ function ArtistIndexSortMenu(props) {
|
|||
</SortMenuItem>
|
||||
|
||||
<SortMenuItem
|
||||
name="latestSeason"
|
||||
name="latestAlbum"
|
||||
sortKey={sortKey}
|
||||
sortDirection={sortDirection}
|
||||
onPress={onSortSelect}
|
||||
>
|
||||
Latest Season
|
||||
Latest Album
|
||||
</SortMenuItem>
|
||||
|
||||
<SortMenuItem
|
||||
|
|
|
@ -30,15 +30,15 @@ class ArtistIndexPoster extends Component {
|
|||
//
|
||||
// Listeners
|
||||
|
||||
onEditSeriesPress = () => {
|
||||
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}
|
||||
/>
|
||||
</Label>
|
||||
|
||||
|
@ -183,8 +183,8 @@ class ArtistIndexPoster extends Component {
|
|||
<EditArtistModalConnector
|
||||
isOpen={isEditArtistModalOpen}
|
||||
artistId={id}
|
||||
onModalClose={this.onEditSeriesModalClose}
|
||||
onDeleteSeriesPress={this.onDeleteSeriesPress}
|
||||
onModalClose={this.onEditArtistModalClose}
|
||||
onDeleteArtistPress={this.onDeleteArtistPress}
|
||||
/>
|
||||
|
||||
<DeleteArtistModal
|
||||
|
@ -218,7 +218,7 @@ ArtistIndexPoster.propTypes = {
|
|||
showRelativeDates: PropTypes.bool.isRequired,
|
||||
shortDateFormat: PropTypes.string.isRequired,
|
||||
timeFormat: PropTypes.string.isRequired,
|
||||
isRefreshingSeries: PropTypes.bool.isRequired,
|
||||
isRefreshingArtist: PropTypes.bool.isRequired,
|
||||
onRefreshArtistPress: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
|
|
|
@ -6,7 +6,6 @@ import styles from './ArtistIndexPosterInfo.css';
|
|||
|
||||
function ArtistIndexPosterInfo(props) {
|
||||
const {
|
||||
network,
|
||||
qualityProfile,
|
||||
previousAiring,
|
||||
added,
|
||||
|
@ -19,14 +18,6 @@ function ArtistIndexPosterInfo(props) {
|
|||
timeFormat
|
||||
} = props;
|
||||
|
||||
if (sortKey === 'network' && network) {
|
||||
return (
|
||||
<div className={styles.info}>
|
||||
{network}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
if (sortKey === 'qualityProfileId') {
|
||||
return (
|
||||
<div className={styles.info}>
|
||||
|
@ -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 (
|
||||
<div className={styles.info}>
|
||||
{seasons}
|
||||
{albums}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
@ -107,7 +98,6 @@ function ArtistIndexPosterInfo(props) {
|
|||
}
|
||||
|
||||
ArtistIndexPosterInfo.propTypes = {
|
||||
network: PropTypes.string,
|
||||
qualityProfile: PropTypes.object.isRequired,
|
||||
previousAiring: PropTypes.string,
|
||||
added: PropTypes.string,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -124,13 +124,13 @@ class ArtistIndexPosterOptionsModalContent extends Component {
|
|||
</FormGroup>
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>Show Title</FormLabel>
|
||||
<FormLabel>Show Name</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="showTitle"
|
||||
value={showTitle}
|
||||
helpText="Show series title under poster"
|
||||
helpText="Show artist name under poster"
|
||||
onChange={this.onChangePosterOption}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
|
@ -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 {
|
|||
<SpinnerIconButton
|
||||
name={icons.REFRESH}
|
||||
title="Refresh Artist"
|
||||
isSpinning={isRefreshingSeries}
|
||||
isSpinning={isRefreshingArtist}
|
||||
onPress={onRefreshArtistPress}
|
||||
/>
|
||||
|
||||
<IconButton
|
||||
name={icons.EDIT}
|
||||
title="Edit Artist"
|
||||
onPress={this.onEditSeriesPress}
|
||||
onPress={this.onEditArtistPress}
|
||||
/>
|
||||
|
||||
<EditArtistModalConnector
|
||||
isOpen={isEditArtistModalOpen}
|
||||
artistId={id}
|
||||
onModalClose={this.onEditSeriesModalClose}
|
||||
onDeleteSeriesPress={this.onDeleteSeriesPress}
|
||||
onModalClose={this.onEditArtistModalClose}
|
||||
onDeleteArtistPress={this.onDeleteArtistPress}
|
||||
/>
|
||||
|
||||
<DeleteArtistModal
|
||||
|
@ -95,7 +95,7 @@ class ArtistIndexActionsCell extends Component {
|
|||
|
||||
ArtistIndexActionsCell.propTypes = {
|
||||
id: PropTypes.number.isRequired,
|
||||
isRefreshingSeries: PropTypes.bool.isRequired,
|
||||
isRefreshingArtist: PropTypes.bool.isRequired,
|
||||
onRefreshArtistPress: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
|
|
|
@ -10,12 +10,6 @@
|
|||
flex: 4 0 110px;
|
||||
}
|
||||
|
||||
.network {
|
||||
composes: headerCell from 'Components/Table/VirtualTableHeaderCell.css';
|
||||
|
||||
flex: 2 0 90px;
|
||||
}
|
||||
|
||||
.qualityProfileId,
|
||||
.languageProfileId {
|
||||
composes: headerCell from 'Components/Table/VirtualTableHeaderCell.css';
|
||||
|
@ -38,7 +32,7 @@
|
|||
}
|
||||
|
||||
.trackProgress,
|
||||
.latestSeason {
|
||||
.latestAlbum {
|
||||
composes: headerCell from 'Components/Table/VirtualTableHeaderCell.css';
|
||||
|
||||
flex: 0 0 150px;
|
||||
|
|
|
@ -10,12 +10,6 @@
|
|||
flex: 4 0 110px;
|
||||
}
|
||||
|
||||
.network {
|
||||
composes: cell from 'Components/Table/Cells/VirtualTableRowCell.css';
|
||||
|
||||
flex: 2 0 90px;
|
||||
}
|
||||
|
||||
.qualityProfileId,
|
||||
.languageProfileId {
|
||||
composes: cell from 'Components/Table/Cells/VirtualTableRowCell.css';
|
||||
|
@ -38,7 +32,7 @@
|
|||
}
|
||||
|
||||
.trackProgress,
|
||||
.latestSeason {
|
||||
.latestAlbum {
|
||||
composes: cell from 'Components/Table/Cells/VirtualTableRowCell.css';
|
||||
|
||||
display: flex;
|
||||
|
|
|
@ -31,15 +31,15 @@ class ArtistIndexRow extends Component {
|
|||
};
|
||||
}
|
||||
|
||||
onEditSeriesPress = () => {
|
||||
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 (
|
||||
<VirtualTableRowCell
|
||||
key={name}
|
||||
className={styles[name]}
|
||||
>
|
||||
{network}
|
||||
</VirtualTableRowCell>
|
||||
);
|
||||
}
|
||||
|
||||
if (name === 'qualityProfileId') {
|
||||
return (
|
||||
<VirtualTableRowCell
|
||||
|
@ -227,9 +215,9 @@ class ArtistIndexRow extends Component {
|
|||
);
|
||||
}
|
||||
|
||||
if (name === 'latestSeason') {
|
||||
const seasonStatistics = latestSeason.statistics;
|
||||
const progress = seasonStatistics.episodeCount ? seasonStatistics.episodeFileCount / seasonStatistics.episodeCount * 100 : 100;
|
||||
if (name === 'latestAlbum') {
|
||||
const albumStatistics = latestAlbum.statistics;
|
||||
const progress = albumStatistics.trackCount ? albumStatistics.trackFileCount / albumStatistics.trackCount * 100 : 100;
|
||||
|
||||
return (
|
||||
<VirtualTableRowCell
|
||||
|
@ -240,8 +228,8 @@ class ArtistIndexRow extends Component {
|
|||
progress={progress}
|
||||
kind={getProgressBarKind(status, monitored, progress)}
|
||||
showText={true}
|
||||
text={`${seasonStatistics.episodeFileCount} / ${seasonStatistics.episodeCount}`}
|
||||
title={`${seasonStatistics.episodeFileCount} / ${seasonStatistics.episodeCount} (Total: ${seasonStatistics.totalEpisodeCount})`}
|
||||
text={`${albumStatistics.trackFileCount} / ${albumStatistics.trackCount}`}
|
||||
title={`${albumStatistics.trackFileCount} / ${albumStatistics.trackCount} (Total: ${albumStatistics.totalTrackCount})`}
|
||||
width={125}
|
||||
/>
|
||||
</VirtualTableRowCell>
|
||||
|
@ -320,14 +308,14 @@ class ArtistIndexRow extends Component {
|
|||
<SpinnerIconButton
|
||||
name={icons.REFRESH}
|
||||
title="Refresh Artist"
|
||||
isSpinning={isRefreshingSeries}
|
||||
isSpinning={isRefreshingArtist}
|
||||
onPress={onRefreshArtistPress}
|
||||
/>
|
||||
|
||||
<IconButton
|
||||
name={icons.EDIT}
|
||||
title="Edit Artist"
|
||||
onPress={this.onEditSeriesPress}
|
||||
onPress={this.onEditArtistPress}
|
||||
/>
|
||||
</VirtualTableRowCell>
|
||||
);
|
||||
|
@ -340,8 +328,8 @@ class ArtistIndexRow extends Component {
|
|||
<EditArtistModalConnector
|
||||
isOpen={isEditArtistModalOpen}
|
||||
artistId={id}
|
||||
onModalClose={this.onEditSeriesModalClose}
|
||||
onDeleteSeriesPress={this.onDeleteSeriesPress}
|
||||
onModalClose={this.onEditArtistModalClose}
|
||||
onDeleteArtistPress={this.onDeleteArtistPress}
|
||||
/>
|
||||
|
||||
<DeleteArtistModal
|
||||
|
@ -361,7 +349,6 @@ ArtistIndexRow.propTypes = {
|
|||
status: PropTypes.string.isRequired,
|
||||
artistName: PropTypes.string.isRequired,
|
||||
nameSlug: PropTypes.string.isRequired,
|
||||
network: PropTypes.string,
|
||||
qualityProfile: PropTypes.object.isRequired,
|
||||
languageProfile: PropTypes.object.isRequired,
|
||||
nextAiring: PropTypes.string,
|
||||
|
@ -371,13 +358,13 @@ ArtistIndexRow.propTypes = {
|
|||
trackCount: PropTypes.number,
|
||||
trackFileCount: PropTypes.number,
|
||||
totalTrackCount: PropTypes.number,
|
||||
latestSeason: PropTypes.object,
|
||||
latestAlbum: PropTypes.object,
|
||||
path: PropTypes.string.isRequired,
|
||||
sizeOnDisk: PropTypes.number,
|
||||
tags: PropTypes.arrayOf(PropTypes.number).isRequired,
|
||||
// useSceneNumbering: PropTypes.bool.isRequired,
|
||||
columns: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
isRefreshingSeries: PropTypes.bool.isRequired,
|
||||
isRefreshingArtist: PropTypes.bool.isRequired,
|
||||
onRefreshArtistPress: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ class ArtistIndexTable extends Component {
|
|||
const items = this.props.items;
|
||||
|
||||
const row = _.findIndex(items, (item) => {
|
||||
const firstCharacter = item.sortTitle.charAt(0);
|
||||
const firstCharacter = item.sortName.charAt(0);
|
||||
|
||||
if (character === '#') {
|
||||
return !isNaN(firstCharacter);
|
||||
|
|
|
@ -30,5 +30,5 @@ export default connectSection(
|
|||
createMapDispatchToProps,
|
||||
undefined,
|
||||
{ withRef: true },
|
||||
{ section: 'series', uiSection: 'seriesIndex' }
|
||||
{ section: 'series', uiSection: 'artistIndex' }
|
||||
)(ArtistIndexTable);
|
||||
|
|
|
@ -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 (
|
||||
<VirtualTableRowCell
|
||||
key={cellKey}
|
||||
|
@ -61,18 +60,6 @@ export default function artistIndexCellRenderers(cellProps) {
|
|||
);
|
||||
}
|
||||
|
||||
if (dataKey === 'network') {
|
||||
return (
|
||||
<VirtualTableRowCell
|
||||
key={cellKey}
|
||||
{...otherProps}
|
||||
>
|
||||
{network}
|
||||
</VirtualTableRowCell>
|
||||
|
||||
);
|
||||
}
|
||||
|
||||
if (dataKey === 'qualityProfileId') {
|
||||
return (
|
||||
<VirtualTableRowCell
|
||||
|
@ -97,7 +84,7 @@ export default function artistIndexCellRenderers(cellProps) {
|
|||
);
|
||||
}
|
||||
|
||||
if (dataKey === 'seasonCount') {
|
||||
if (dataKey === 'albumCount') {
|
||||
return (
|
||||
<VirtualTableRowCell
|
||||
key={cellKey}
|
||||
|
@ -108,7 +95,7 @@ export default function artistIndexCellRenderers(cellProps) {
|
|||
);
|
||||
}
|
||||
|
||||
if (dataKey === 'episodeProgress') {
|
||||
if (dataKey === 'trackProgress') {
|
||||
return (
|
||||
<VirtualTableRowCell
|
||||
key={cellKey}
|
||||
|
|
|
@ -70,8 +70,8 @@
|
|||
composes: missing from 'Calendar/Events/CalendarEvent.css';
|
||||
}
|
||||
|
||||
.unaired {
|
||||
composes: unaired from 'Calendar/Events/CalendarEvent.css';
|
||||
.unreleased {
|
||||
composes: unreleased from 'Calendar/Events/CalendarEvent.css';
|
||||
}
|
||||
|
||||
@media only screen and (max-width: $breakpointSmall) {
|
||||
|
|
|
@ -123,7 +123,7 @@ class AgendaEvent extends Component {
|
|||
episodeEntity={episodeEntities.CALENDAR}
|
||||
artistId={artist.id}
|
||||
episodeTitle={title}
|
||||
showOpenSeriesButton={true}
|
||||
showOpenArtistButton={true}
|
||||
onModalClose={this.onDetailsModalClose}
|
||||
/>
|
||||
</div>
|
||||
|
|
|
@ -61,7 +61,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
.unaired {
|
||||
.unreleased {
|
||||
border-left-color: $primaryColor;
|
||||
|
||||
&:global(.colorImpaired) {
|
||||
|
|
|
@ -116,7 +116,7 @@ class CalendarEvent extends Component {
|
|||
episodeEntity={episodeEntities.CALENDAR}
|
||||
artistId={artist.id}
|
||||
episodeTitle={title}
|
||||
showOpenSeriesButton={true}
|
||||
showOpenArtistButton={true}
|
||||
onModalClose={this.onDetailsModalClose}
|
||||
/>
|
||||
</div>
|
||||
|
|
|
@ -22,7 +22,7 @@ function Legend({ colorImpairedMode }) {
|
|||
|
||||
<div>
|
||||
<LegendItem
|
||||
status="unaired"
|
||||
status="unreleased"
|
||||
tooltip="Album hasn't released yet"
|
||||
colorImpairedMode={colorImpairedMode}
|
||||
/>
|
||||
|
|
|
@ -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';
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ function getStatusStyle(episodeNumber, downloading, startTime, isMonitored) {
|
|||
return 'missing';
|
||||
}
|
||||
|
||||
return 'unaired';
|
||||
return 'unreleased';
|
||||
}
|
||||
|
||||
export default getStatusStyle;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
|
@ -1,4 +1,4 @@
|
|||
.seriesTitle {
|
||||
.artistName {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ class EpisodeDetailsModalContent extends Component {
|
|||
episodeId,
|
||||
episodeEntity,
|
||||
artistId,
|
||||
seriesTitle,
|
||||
artistName,
|
||||
nameSlug,
|
||||
albumLabel,
|
||||
artistMonitored,
|
||||
|
@ -55,7 +55,7 @@ class EpisodeDetailsModalContent extends Component {
|
|||
releaseDate,
|
||||
monitored,
|
||||
isSaving,
|
||||
showOpenSeriesButton,
|
||||
showOpenArtistButton,
|
||||
startInteractiveSearch,
|
||||
onMonitorAlbumPress,
|
||||
onModalClose
|
||||
|
@ -78,8 +78,8 @@ class EpisodeDetailsModalContent extends Component {
|
|||
onPress={onMonitorAlbumPress}
|
||||
/>
|
||||
|
||||
<span className={styles.seriesTitle}>
|
||||
{seriesTitle}
|
||||
<span className={styles.artistName}>
|
||||
{artistName}
|
||||
</span>
|
||||
|
||||
<span className={styles.separator}>-</span>
|
||||
|
@ -146,7 +146,7 @@ class EpisodeDetailsModalContent extends Component {
|
|||
|
||||
<ModalFooter>
|
||||
{
|
||||
showOpenSeriesButton &&
|
||||
showOpenArtistButton &&
|
||||
<Button
|
||||
className={styles.openSeriesButton}
|
||||
to={seriesLink}
|
||||
|
@ -171,7 +171,7 @@ EpisodeDetailsModalContent.propTypes = {
|
|||
episodeId: PropTypes.number.isRequired,
|
||||
episodeEntity: PropTypes.string.isRequired,
|
||||
artistId: PropTypes.number.isRequired,
|
||||
seriesTitle: PropTypes.string.isRequired,
|
||||
artistName: PropTypes.string.isRequired,
|
||||
nameSlug: PropTypes.string.isRequired,
|
||||
artistMonitored: PropTypes.bool.isRequired,
|
||||
releaseDate: PropTypes.string.isRequired,
|
||||
|
@ -179,7 +179,7 @@ EpisodeDetailsModalContent.propTypes = {
|
|||
episodeTitle: PropTypes.string.isRequired,
|
||||
monitored: PropTypes.bool.isRequired,
|
||||
isSaving: PropTypes.bool,
|
||||
showOpenSeriesButton: PropTypes.bool,
|
||||
showOpenArtistButton: PropTypes.bool,
|
||||
selectedTab: PropTypes.string.isRequired,
|
||||
startInteractiveSearch: PropTypes.bool.isRequired,
|
||||
onMonitorAlbumPress: PropTypes.func.isRequired,
|
||||
|
|
|
@ -15,14 +15,14 @@ function createMapStateToProps() {
|
|||
createArtistSelector(),
|
||||
(episode, series) => {
|
||||
const {
|
||||
artistName: seriesTitle,
|
||||
artistName,
|
||||
nameSlug,
|
||||
monitored: artistMonitored,
|
||||
seriesType
|
||||
} = series;
|
||||
|
||||
return {
|
||||
seriesTitle,
|
||||
artistName,
|
||||
nameSlug,
|
||||
artistMonitored,
|
||||
seriesType,
|
||||
|
|
|
@ -147,14 +147,14 @@ class InteractiveImportRow extends Component {
|
|||
isSelectQualityModalOpen
|
||||
} = this.state;
|
||||
|
||||
const seriesTitle = artist ? artist.artistName : '';
|
||||
const artistName = artist ? artist.artistName : '';
|
||||
const albumTitle = album ? album.title : '';
|
||||
const trackNumbers = tracks.map((episode) => episode.trackNumber)
|
||||
.join(', ');
|
||||
|
||||
const showSeriesPlaceholder = isSelected && !artist;
|
||||
const showSeasonNumberPlaceholder = isSelected && !!artist && !album;
|
||||
const showEpisodeNumbersPlaceholder = isSelected && !!album && !tracks.length;
|
||||
const showArtistPlaceholder = isSelected && !artist;
|
||||
const showAlbumNumberPlaceholder = isSelected && !!artist && !album;
|
||||
const showTrackNumbersPlaceholder = isSelected && !!album && !tracks.length;
|
||||
|
||||
return (
|
||||
<TableRow>
|
||||
|
@ -175,7 +175,7 @@ class InteractiveImportRow extends Component {
|
|||
onPress={this.onSelectArtistPress}
|
||||
>
|
||||
{
|
||||
showSeriesPlaceholder ? <InteractiveImportRowCellPlaceholder /> : seriesTitle
|
||||
showArtistPlaceholder ? <InteractiveImportRowCellPlaceholder /> : artistName
|
||||
}
|
||||
</TableRowCellButton>
|
||||
|
||||
|
@ -184,7 +184,7 @@ class InteractiveImportRow extends Component {
|
|||
onPress={this.onSelectAlbumPress}
|
||||
>
|
||||
{
|
||||
showSeasonNumberPlaceholder ? <InteractiveImportRowCellPlaceholder /> : albumTitle
|
||||
showAlbumNumberPlaceholder ? <InteractiveImportRowCellPlaceholder /> : albumTitle
|
||||
}
|
||||
</TableRowCellButton>
|
||||
|
||||
|
@ -193,7 +193,7 @@ class InteractiveImportRow extends Component {
|
|||
onPress={this.onSelectTrackPress}
|
||||
>
|
||||
{
|
||||
showEpisodeNumbersPlaceholder ? <InteractiveImportRowCellPlaceholder /> : trackNumbers
|
||||
showTrackNumbersPlaceholder ? <InteractiveImportRowCellPlaceholder /> : trackNumbers
|
||||
}
|
||||
</TableRowCellButton>
|
||||
|
||||
|
|
|
@ -78,7 +78,7 @@ class MediaManagement extends Component {
|
|||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="createEmptyArtistFolders"
|
||||
helpText="Create missing series folders during disk scan"
|
||||
helpText="Create missing artist folders during disk scan"
|
||||
onChange={onInputChange}
|
||||
{...settings.createEmptyArtistFolders}
|
||||
/>
|
||||
|
@ -284,7 +284,7 @@ class MediaManagement extends Component {
|
|||
<FormInputGroup
|
||||
type={inputTypes.TEXT}
|
||||
name="folderChmod"
|
||||
helpText="Octal, applied to series/season folders created by Lidarr"
|
||||
helpText="Octal, applied to artist/album folders created by Lidarr"
|
||||
values={fileDateOptions}
|
||||
onChange={onInputChange}
|
||||
{...settings.folderChmod}
|
||||
|
|
|
@ -18,10 +18,10 @@ const albumStudioActionHandlers = {
|
|||
|
||||
let monitoringOptions = null;
|
||||
const series = [];
|
||||
const allSeries = getState().series.items;
|
||||
const allArtists = getState().series.items;
|
||||
|
||||
artistIds.forEach((id) => {
|
||||
const s = _.find(allSeries, { id });
|
||||
const s = _.find(allArtists, { id });
|
||||
const seriesToUpdate = { id };
|
||||
|
||||
if (payload.hasOwnProperty('monitored')) {
|
||||
|
|
|
@ -8,7 +8,7 @@ export const deleteArtist = artistActionHandlers[types.DELETE_ARTIST];
|
|||
export const toggleSeriesMonitored = artistActionHandlers[types.TOGGLE_ARTIST_MONITORED];
|
||||
export const toggleSeasonMonitored = artistActionHandlers[types.TOGGLE_ALBUM_MONITORED];
|
||||
|
||||
export const setSeriesValue = createAction(types.SET_ARTIST_VALUE, (payload) => {
|
||||
export const setArtistValue = createAction(types.SET_ARTIST_VALUE, (payload) => {
|
||||
return {
|
||||
section: 'series',
|
||||
...payload
|
||||
|
|
|
@ -80,7 +80,7 @@ const importArtistActionHandlers = {
|
|||
error: null,
|
||||
items: data,
|
||||
queued: false,
|
||||
selectedSeries: queued.selectedSeries || data[0]
|
||||
selectedArtist: queued.selectedArtist || data[0]
|
||||
}));
|
||||
});
|
||||
|
||||
|
@ -112,12 +112,12 @@ const importArtistActionHandlers = {
|
|||
|
||||
const allNewSeries = ids.reduce((acc, id) => {
|
||||
const item = _.find(items, { id });
|
||||
const selectedSeries = item.selectedSeries;
|
||||
const selectedArtist = item.selectedArtist;
|
||||
|
||||
// Make sure we have a selected series and
|
||||
// the same series hasn't been added yet.
|
||||
if (selectedSeries && !_.some(acc, { foreignArtistId: selectedSeries.foreignArtistId })) {
|
||||
const newSeries = getNewSeries(_.cloneDeep(selectedSeries), item);
|
||||
if (selectedArtist && !_.some(acc, { foreignArtistId: selectedArtist.foreignArtistId })) {
|
||||
const newSeries = getNewSeries(_.cloneDeep(selectedArtist), item);
|
||||
newSeries.path = item.path;
|
||||
|
||||
addedIds.push(id);
|
||||
|
|
|
@ -2,7 +2,7 @@ import { createAction } from 'redux-actions';
|
|||
import * as types from './actionTypes';
|
||||
import importArtistActionHandlers from './importArtistActionHandlers';
|
||||
|
||||
export const queueLookupSeries = importArtistActionHandlers[types.QUEUE_LOOKUP_ARTIST];
|
||||
export const queueLookupArtist = importArtistActionHandlers[types.QUEUE_LOOKUP_ARTIST];
|
||||
export const startLookupSeries = importArtistActionHandlers[types.START_LOOKUP_ARTIST];
|
||||
export const importArtist = importArtistActionHandlers[types.IMPORT_ARTIST];
|
||||
export const clearImportArtist = createAction(types.CLEAR_IMPORT_ARTIST);
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { applyMiddleware, compose } from 'redux';
|
||||
import Raven from 'raven-js';
|
||||
import createRavenMiddleware from 'raven-for-redux';
|
||||
// import ravenMiddleware from 'redux-raven-middleware';
|
||||
import thunk from 'redux-thunk';
|
||||
import { routerMiddleware } from 'react-router-redux';
|
||||
import persistState from './persistState';
|
||||
|
|
|
@ -8,9 +8,9 @@ import createSetClientSideCollectionFilterReducer from './Creators/createSetClie
|
|||
export const defaultState = {
|
||||
isSaving: false,
|
||||
saveError: null,
|
||||
sortKey: 'sortTitle',
|
||||
sortKey: 'sortName',
|
||||
sortDirection: sortDirections.ASCENDING,
|
||||
secondarySortKey: 'sortTitle',
|
||||
secondarySortKey: 'sortName',
|
||||
secondarySortDirection: sortDirections.ASCENDING,
|
||||
filterKey: null,
|
||||
filterValue: null,
|
||||
|
|
|
@ -10,9 +10,9 @@ export const defaultState = {
|
|||
saveError: null,
|
||||
isDeleting: false,
|
||||
deleteError: null,
|
||||
sortKey: 'sortTitle',
|
||||
sortKey: 'sortName',
|
||||
sortDirection: sortDirections.ASCENDING,
|
||||
secondarySortKey: 'sortTitle',
|
||||
secondarySortKey: 'sortName',
|
||||
secondarySortDirection: sortDirections.ASCENDING,
|
||||
filterKey: null,
|
||||
filterValue: null,
|
||||
|
|
|
@ -8,9 +8,9 @@ import createSetClientSideCollectionSortReducer from './Creators/createSetClient
|
|||
import createSetClientSideCollectionFilterReducer from './Creators/createSetClientSideCollectionFilterReducer';
|
||||
|
||||
export const defaultState = {
|
||||
sortKey: 'sortTitle',
|
||||
sortKey: 'sortName',
|
||||
sortDirection: sortDirections.ASCENDING,
|
||||
secondarySortKey: 'sortTitle',
|
||||
secondarySortKey: 'sortName',
|
||||
secondarySortDirection: sortDirections.ASCENDING,
|
||||
filterKey: null,
|
||||
filterValue: null,
|
||||
|
@ -38,12 +38,6 @@ export const defaultState = {
|
|||
isVisible: true,
|
||||
isModifiable: false
|
||||
},
|
||||
{
|
||||
name: 'network',
|
||||
label: 'Network',
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'qualityProfileId',
|
||||
label: 'Quality Profile',
|
||||
|
@ -93,8 +87,8 @@ export const defaultState = {
|
|||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'latestSeason',
|
||||
label: 'Latest Season',
|
||||
name: 'latestAlbum',
|
||||
label: 'Latest Album',
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
|
@ -116,12 +110,6 @@ export const defaultState = {
|
|||
isSortable: false,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'useSceneNumbering',
|
||||
label: 'Scene Numbering',
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'actions',
|
||||
columnLabel: 'Actions',
|
||||
|
@ -131,12 +119,6 @@ export const defaultState = {
|
|||
],
|
||||
|
||||
sortPredicates: {
|
||||
network: function(item) {
|
||||
const network = item.network;
|
||||
|
||||
return network ? network.toLowerCase() : '';
|
||||
},
|
||||
|
||||
nextAiring: function(item, direction) {
|
||||
const nextAiring = item.nextAiring;
|
||||
|
||||
|
@ -151,37 +133,37 @@ export const defaultState = {
|
|||
return Number.MAX_VALUE;
|
||||
},
|
||||
|
||||
episodeProgress: function(item) {
|
||||
trackProgress: function(item) {
|
||||
const {
|
||||
episodeCount = 0,
|
||||
episodeFileCount
|
||||
trackCount = 0,
|
||||
trackFileCount
|
||||
} = item;
|
||||
|
||||
const progress = episodeCount ? episodeFileCount / episodeCount * 100 : 100;
|
||||
const progress = trackCount ? trackFileCount / trackCount * 100 : 100;
|
||||
|
||||
return progress + episodeCount / 1000000;
|
||||
return progress + trackCount / 1000000;
|
||||
}
|
||||
},
|
||||
|
||||
filterPredicates: {
|
||||
missing: function(item) {
|
||||
return item.episodeCount - item.episodeFileCount > 0;
|
||||
return item.trackCount - item.trackFileCount > 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export const persistState = [
|
||||
'seriesIndex.sortKey',
|
||||
'seriesIndex.sortDirection',
|
||||
'seriesIndex.filterKey',
|
||||
'seriesIndex.filterValue',
|
||||
'seriesIndex.filterType',
|
||||
'seriesIndex.view',
|
||||
'seriesIndex.columns',
|
||||
'seriesIndex.posterOptions'
|
||||
'artistIndex.sortKey',
|
||||
'artistIndex.sortDirection',
|
||||
'artistIndex.filterKey',
|
||||
'artistIndex.filterValue',
|
||||
'artistIndex.filterType',
|
||||
'artistIndex.view',
|
||||
'artistIndex.columns',
|
||||
'artistIndex.posterOptions'
|
||||
];
|
||||
|
||||
const reducerSection = 'seriesIndex';
|
||||
const reducerSection = 'artistIndex';
|
||||
|
||||
const artistIndexReducers = handleActions({
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ export const defaultState = {
|
|||
isSaving: false,
|
||||
saveError: null,
|
||||
items: [],
|
||||
sortKey: 'sortTitle',
|
||||
sortKey: 'sortName',
|
||||
sortDirection: sortDirections.ASCENDING,
|
||||
pendingChanges: {}
|
||||
};
|
||||
|
|
|
@ -19,8 +19,8 @@ export const defaultState = {
|
|||
|
||||
columns: [
|
||||
{
|
||||
name: 'series.sortTitle',
|
||||
label: 'Series Title',
|
||||
name: 'series.sortName',
|
||||
label: 'Artist Name',
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
|
|
|
@ -4,8 +4,8 @@ import { routerReducer } from 'react-router-redux';
|
|||
import app, { defaultState as defaultappState } from './appReducers';
|
||||
import addArtist, { defaultState as defaultAddSeriesState } from './addArtistReducers';
|
||||
import importArtist, { defaultState as defaultImportArtistState } from './importArtistReducers';
|
||||
import series, { defaultState as defaultSeriesState } from './artistReducers';
|
||||
import seriesIndex, { defaultState as defaultSeriesIndexState } from './artistIndexReducers';
|
||||
import series, { defaultState as defaultArtistState } from './artistReducers';
|
||||
import artistIndex, { defaultState as defaultArtistIndexState } from './artistIndexReducers';
|
||||
import artistEditor, { defaultState as defaultArtistEditorState } from './artistEditorReducers';
|
||||
import albumStudio, { defaultState as defaultAlbumStudioState } from './albumStudioReducers';
|
||||
import calendar, { defaultState as defaultCalendarState } from './calendarReducers';
|
||||
|
@ -32,8 +32,8 @@ export const defaultState = {
|
|||
app: defaultappState,
|
||||
addArtist: defaultAddSeriesState,
|
||||
importArtist: defaultImportArtistState,
|
||||
series: defaultSeriesState,
|
||||
seriesIndex: defaultSeriesIndexState,
|
||||
series: defaultArtistState,
|
||||
artistIndex: defaultArtistIndexState,
|
||||
artistEditor: defaultArtistEditorState,
|
||||
albumStudio: defaultAlbumStudioState,
|
||||
calendar: defaultCalendarState,
|
||||
|
@ -62,7 +62,7 @@ export default enableBatching(combineReducers({
|
|||
addArtist,
|
||||
importArtist,
|
||||
series,
|
||||
seriesIndex,
|
||||
artistIndex,
|
||||
artistEditor,
|
||||
albumStudio,
|
||||
calendar,
|
||||
|
|
|
@ -20,7 +20,7 @@ export const defaultState = {
|
|||
series: function(item, direction) {
|
||||
const series = item.series;
|
||||
|
||||
return series ? series.sortTitle : '';
|
||||
return series ? series.sortName : '';
|
||||
},
|
||||
|
||||
quality: function(item, direction) {
|
||||
|
|
|
@ -71,8 +71,8 @@ export const defaultState = {
|
|||
|
||||
columns: [
|
||||
{
|
||||
name: 'series.sortTitle',
|
||||
label: 'Series Title',
|
||||
name: 'series.sortName',
|
||||
label: 'Artist Name',
|
||||
isSortable: true,
|
||||
isVisible: true
|
||||
},
|
||||
|
|
|
@ -10,8 +10,8 @@ function createImportArtistItemSelector() {
|
|||
createAllArtistSelector(),
|
||||
(id, addArtist, importArtist, series) => {
|
||||
const item = _.find(importArtist.items, { id }) || {};
|
||||
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 {
|
||||
defaultMonitor: addArtist.defaults.monitor,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
const scrollPositions = {
|
||||
seriesIndex: 0
|
||||
artistIndex: 0
|
||||
};
|
||||
|
||||
export default scrollPositions;
|
||||
|
|
|
@ -45,7 +45,7 @@ class CutoffUnmet extends Component {
|
|||
this.setState((state) => {
|
||||
return removeOldSelectedState(state, prevProps.items);
|
||||
});
|
||||
}s;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -50,7 +50,7 @@ function CutoffUnmetRow(props) {
|
|||
return null;
|
||||
}
|
||||
|
||||
if (name === 'series.sortTitle') {
|
||||
if (name === 'series.sortName') {
|
||||
return (
|
||||
<TableRowCell key={name}>
|
||||
<ArtistNameLink
|
||||
|
@ -88,7 +88,7 @@ function CutoffUnmetRow(props) {
|
|||
artistId={series.id}
|
||||
episodeEntity={episodeEntities.WANTED_CUTOFF_UNMET}
|
||||
episodeTitle={title}
|
||||
showOpenSeriesButton={true}
|
||||
showOpenArtistButton={true}
|
||||
/>
|
||||
</TableRowCell>
|
||||
);
|
||||
|
@ -139,7 +139,7 @@ function CutoffUnmetRow(props) {
|
|||
artistId={series.id}
|
||||
episodeTitle={title}
|
||||
episodeEntity={episodeEntities.WANTED_CUTOFF_UNMET}
|
||||
showOpenSeriesButton={true}
|
||||
showOpenArtistButton={true}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -87,7 +87,7 @@ function MissingRow(props) {
|
|||
artistId={artist.id}
|
||||
episodeEntity={episodeEntities.WANTED_MISSING}
|
||||
episodeTitle={title}
|
||||
showOpenSeriesButton={true}
|
||||
showOpenArtistButton={true}
|
||||
/>
|
||||
</TableRowCell>
|
||||
);
|
||||
|
@ -125,7 +125,7 @@ function MissingRow(props) {
|
|||
artistId={artist.id}
|
||||
episodeTitle={title}
|
||||
episodeEntity={episodeEntities.WANTED_MISSING}
|
||||
showOpenSeriesButton={true}
|
||||
showOpenArtistButton={true}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue