[UI Work] Misc UI Fixes and Tweaks

pull/84/head
Qstick 7 years ago
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…
Cancel
Save