Fixed: Toolbar buttons enabled when no tracks exist for Album

This commit is contained in:
Qstick 2019-04-05 21:55:03 -04:00
parent 98b610b12e
commit 3cd58d5866
2 changed files with 37 additions and 4 deletions

View File

@ -192,6 +192,7 @@ class AlbumDetails extends Component {
isPopulated, isPopulated,
albumsError, albumsError,
trackFilesError, trackFilesError,
hasTrackFiles,
shortDateFormat, shortDateFormat,
artist, artist,
previousAlbum, previousAlbum,
@ -243,18 +244,21 @@ class AlbumDetails extends Component {
<PageToolbarButton <PageToolbarButton
label="Preview Rename" label="Preview Rename"
iconName={icons.ORGANIZE} iconName={icons.ORGANIZE}
isDisabled={!hasTrackFiles}
onPress={this.onOrganizePress} onPress={this.onOrganizePress}
/> />
<PageToolbarButton <PageToolbarButton
label="Preview Retag" label="Preview Retag"
iconName={icons.RETAG} iconName={icons.RETAG}
isDisabled={!hasTrackFiles}
onPress={this.onRetagPress} onPress={this.onRetagPress}
/> />
<PageToolbarButton <PageToolbarButton
label="Manage Tracks" label="Manage Tracks"
iconName={icons.TRACK_FILE} iconName={icons.TRACK_FILE}
isDisabled={!hasTrackFiles}
onPress={this.onManageTracksPress} onPress={this.onManageTracksPress}
/> />
@ -576,6 +580,7 @@ AlbumDetails.propTypes = {
albumsError: PropTypes.object, albumsError: PropTypes.object,
tracksError: PropTypes.object, tracksError: PropTypes.object,
trackFilesError: PropTypes.object, trackFilesError: PropTypes.object,
hasTrackFiles: PropTypes.bool.isRequired,
artist: PropTypes.object, artist: PropTypes.object,
previousAlbum: PropTypes.object, previousAlbum: PropTypes.object,
nextAlbum: PropTypes.object, nextAlbum: PropTypes.object,

View File

@ -16,11 +16,32 @@ import AlbumDetails from './AlbumDetails';
import createAllArtistSelector from 'Store/Selectors/createAllArtistSelector'; import createAllArtistSelector from 'Store/Selectors/createAllArtistSelector';
import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector'; import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';
const selectTrackFiles = createSelector(
(state) => state.trackFiles,
(trackFiles) => {
const {
items,
isFetching,
isPopulated,
error
} = trackFiles;
const hasTrackFiles = !!items.length;
return {
isTrackFilesFetching: isFetching,
isTrackFilesPopulated: isPopulated,
trackFilesError: error,
hasTrackFiles
};
}
);
function createMapStateToProps() { function createMapStateToProps() {
return createSelector( return createSelector(
(state, { foreignAlbumId }) => foreignAlbumId, (state, { foreignAlbumId }) => foreignAlbumId,
(state) => state.tracks, (state) => state.tracks,
(state) => state.trackFiles, selectTrackFiles,
(state) => state.albums, (state) => state.albums,
createAllArtistSelector(), createAllArtistSelector(),
createCommandsSelector(), createCommandsSelector(),
@ -35,14 +56,20 @@ function createMapStateToProps() {
return {}; return {};
} }
const {
isTrackFilesFetching,
isTrackFilesPopulated,
trackFilesError,
hasTrackFiles
} = trackFiles;
const previousAlbum = sortedAlbums[albumIndex - 1] || _.last(sortedAlbums); const previousAlbum = sortedAlbums[albumIndex - 1] || _.last(sortedAlbums);
const nextAlbum = sortedAlbums[albumIndex + 1] || _.first(sortedAlbums); const nextAlbum = sortedAlbums[albumIndex + 1] || _.first(sortedAlbums);
const isSearching = !!findCommand(commands, { name: commandNames.ALBUM_SEARCH }); const isSearching = !!findCommand(commands, { name: commandNames.ALBUM_SEARCH });
const isFetching = tracks.isFetching || trackFiles.isFetching; const isFetching = tracks.isFetching || isTrackFilesFetching;
const isPopulated = tracks.isPopulated && trackFiles.isPopulated; const isPopulated = tracks.isPopulated && isTrackFilesPopulated;
const tracksError = tracks.error; const tracksError = tracks.error;
const trackFilesError = trackFiles.error;
return { return {
...album, ...album,
@ -53,6 +80,7 @@ function createMapStateToProps() {
isPopulated, isPopulated,
tracksError, tracksError,
trackFilesError, trackFilesError,
hasTrackFiles,
previousAlbum, previousAlbum,
nextAlbum nextAlbum
}; };