New: Persist search settings in add new artist and album

(cherry picked from commit fc3bea370facb22fd1b2f3cc264bf5d0a84f30e1)

Closes #1967
This commit is contained in:
Michael Casey 2021-02-07 13:18:47 +10:00 committed by Bogdan
commit 651abf9faa
6 changed files with 36 additions and 46 deletions

View file

@ -15,26 +15,11 @@ import styles from './AddNewAlbumModalContent.css';
class AddNewAlbumModalContent extends Component { class AddNewAlbumModalContent extends Component {
//
// Lifecycle
constructor(props, context) {
super(props, context);
this.state = {
searchForNewAlbum: false
};
}
// //
// Listeners // Listeners
onSearchForNewAlbumChange = ({ value }) => {
this.setState({ searchForNewAlbum: value });
};
onAddAlbumPress = () => { onAddAlbumPress = () => {
this.props.onAddAlbumPress(this.state.searchForNewAlbum); this.props.onAddAlbumPress();
}; };
// //
@ -47,10 +32,12 @@ class AddNewAlbumModalContent extends Component {
disambiguation, disambiguation,
overview, overview,
images, images,
searchForNewAlbum,
isAdding, isAdding,
isExistingArtist, isExistingArtist,
isSmallScreen, isSmallScreen,
onModalClose, onModalClose,
onInputChange,
...otherProps ...otherProps
} = this.props; } = this.props;
@ -105,6 +92,7 @@ class AddNewAlbumModalContent extends Component {
<AddArtistOptionsForm <AddArtistOptionsForm
artistName={artistName} artistName={artistName}
includeNoneMetadataProfile={true} includeNoneMetadataProfile={true}
onInputChange={onInputChange}
{...otherProps} {...otherProps}
/> />
} }
@ -115,15 +103,15 @@ class AddNewAlbumModalContent extends Component {
<ModalFooter className={styles.modalFooter}> <ModalFooter className={styles.modalFooter}>
<label className={styles.searchForNewAlbumLabelContainer}> <label className={styles.searchForNewAlbumLabelContainer}>
<span className={styles.searchForNewAlbumLabel}> <span className={styles.searchForNewAlbumLabel}>
Start search for new album {translate('AddNewAlbumSearchForNewAlbum')}
</span> </span>
<CheckInput <CheckInput
containerClassName={styles.searchForNewAlbumContainer} containerClassName={styles.searchForNewAlbumContainer}
className={styles.searchForNewAlbumInput} className={styles.searchForNewAlbumInput}
name="searchForNewAlbum" name="searchForNewAlbum"
value={this.state.searchForNewAlbum} onChange={onInputChange}
onChange={this.onSearchForNewAlbumChange} {...searchForNewAlbum}
/> />
</label> </label>
@ -133,7 +121,7 @@ class AddNewAlbumModalContent extends Component {
isSpinning={isAdding} isSpinning={isAdding}
onPress={this.onAddAlbumPress} onPress={this.onAddAlbumPress}
> >
Add {albumTitle} {translate('AddAlbumWithTitle', { albumTitle })}
</SpinnerButton> </SpinnerButton>
</ModalFooter> </ModalFooter>
</ModalContent> </ModalContent>
@ -149,9 +137,11 @@ AddNewAlbumModalContent.propTypes = {
images: PropTypes.arrayOf(PropTypes.object).isRequired, images: PropTypes.arrayOf(PropTypes.object).isRequired,
isAdding: PropTypes.bool.isRequired, isAdding: PropTypes.bool.isRequired,
addError: PropTypes.object, addError: PropTypes.object,
searchForNewAlbum: PropTypes.object.isRequired,
isExistingArtist: PropTypes.bool.isRequired, isExistingArtist: PropTypes.bool.isRequired,
isSmallScreen: PropTypes.bool.isRequired, isSmallScreen: PropTypes.bool.isRequired,
onModalClose: PropTypes.func.isRequired, onModalClose: PropTypes.func.isRequired,
onInputChange: PropTypes.func.isRequired,
onAddAlbumPress: PropTypes.func.isRequired onAddAlbumPress: PropTypes.func.isRequired
}; };

View file

@ -83,7 +83,7 @@ class AddNewAlbumModalContentConnector extends Component {
this.props.setAddDefault({ [name]: value }); this.props.setAddDefault({ [name]: value });
}; };
onAddAlbumPress = (searchForNewAlbum) => { onAddAlbumPress = () => {
const { const {
foreignAlbumId, foreignAlbumId,
rootFolderPath, rootFolderPath,
@ -91,6 +91,7 @@ class AddNewAlbumModalContentConnector extends Component {
monitorNewItems, monitorNewItems,
qualityProfileId, qualityProfileId,
metadataProfileId, metadataProfileId,
searchForNewAlbum,
tags tags
} = this.props; } = this.props;
@ -101,8 +102,8 @@ class AddNewAlbumModalContentConnector extends Component {
monitorNewItems: monitorNewItems.value, monitorNewItems: monitorNewItems.value,
qualityProfileId: qualityProfileId.value, qualityProfileId: qualityProfileId.value,
metadataProfileId: metadataProfileId.value, metadataProfileId: metadataProfileId.value,
tags: tags.value, searchForNewAlbum: searchForNewAlbum.value,
searchForNewAlbum tags: tags.value
}); });
}; };
@ -129,6 +130,7 @@ AddNewAlbumModalContentConnector.propTypes = {
qualityProfileId: PropTypes.object, qualityProfileId: PropTypes.object,
metadataProfileId: PropTypes.object, metadataProfileId: PropTypes.object,
noneMetadataProfileId: PropTypes.number.isRequired, noneMetadataProfileId: PropTypes.number.isRequired,
searchForNewAlbum: PropTypes.object.isRequired,
tags: PropTypes.object.isRequired, tags: PropTypes.object.isRequired,
onModalClose: PropTypes.func.isRequired, onModalClose: PropTypes.func.isRequired,
setAddDefault: PropTypes.func.isRequired, setAddDefault: PropTypes.func.isRequired,

View file

@ -15,26 +15,11 @@ import styles from './AddNewArtistModalContent.css';
class AddNewArtistModalContent extends Component { class AddNewArtistModalContent extends Component {
//
// Lifecycle
constructor(props, context) {
super(props, context);
this.state = {
searchForMissingAlbums: false
};
}
// //
// Listeners // Listeners
onSearchForMissingAlbumsChange = ({ value }) => {
this.setState({ searchForMissingAlbums: value });
};
onAddArtistPress = () => { onAddArtistPress = () => {
this.props.onAddArtistPress(this.state.searchForMissingAlbums); this.props.onAddArtistPress();
}; };
// //
@ -46,9 +31,11 @@ class AddNewArtistModalContent extends Component {
disambiguation, disambiguation,
overview, overview,
images, images,
searchForMissingAlbums,
isAdding, isAdding,
isSmallScreen, isSmallScreen,
onModalClose, onModalClose,
onInputChange,
...otherProps ...otherProps
} = this.props; } = this.props;
@ -96,6 +83,7 @@ class AddNewArtistModalContent extends Component {
<AddArtistOptionsForm <AddArtistOptionsForm
includeNoneMetadataProfile={false} includeNoneMetadataProfile={false}
onInputChange={onInputChange}
{...otherProps} {...otherProps}
/> />
@ -106,15 +94,15 @@ class AddNewArtistModalContent extends Component {
<ModalFooter className={styles.modalFooter}> <ModalFooter className={styles.modalFooter}>
<label className={styles.searchForMissingAlbumsLabelContainer}> <label className={styles.searchForMissingAlbumsLabelContainer}>
<span className={styles.searchForMissingAlbumsLabel}> <span className={styles.searchForMissingAlbumsLabel}>
Start search for missing albums {translate('AddNewArtistSearchForMissingAlbums')}
</span> </span>
<CheckInput <CheckInput
containerClassName={styles.searchForMissingAlbumsContainer} containerClassName={styles.searchForMissingAlbumsContainer}
className={styles.searchForMissingAlbumsInput} className={styles.searchForMissingAlbumsInput}
name="searchForMissingAlbums" name="searchForMissingAlbums"
value={this.state.searchForMissingAlbums} onChange={onInputChange}
onChange={this.onSearchForMissingAlbumsChange} {...searchForMissingAlbums}
/> />
</label> </label>
@ -124,7 +112,7 @@ class AddNewArtistModalContent extends Component {
isSpinning={isAdding} isSpinning={isAdding}
onPress={this.onAddArtistPress} onPress={this.onAddArtistPress}
> >
Add {artistName} {translate('AddArtistWithName', { artistName })}
</SpinnerButton> </SpinnerButton>
</ModalFooter> </ModalFooter>
</ModalContent> </ModalContent>
@ -139,9 +127,11 @@ AddNewArtistModalContent.propTypes = {
images: PropTypes.arrayOf(PropTypes.object).isRequired, images: PropTypes.arrayOf(PropTypes.object).isRequired,
isAdding: PropTypes.bool.isRequired, isAdding: PropTypes.bool.isRequired,
addError: PropTypes.object, addError: PropTypes.object,
searchForMissingAlbums: PropTypes.object.isRequired,
isSmallScreen: PropTypes.bool.isRequired, isSmallScreen: PropTypes.bool.isRequired,
isWindows: PropTypes.bool.isRequired, isWindows: PropTypes.bool.isRequired,
onModalClose: PropTypes.func.isRequired, onModalClose: PropTypes.func.isRequired,
onInputChange: PropTypes.func.isRequired,
onAddArtistPress: PropTypes.func.isRequired onAddArtistPress: PropTypes.func.isRequired
}; };

View file

@ -55,7 +55,7 @@ class AddNewArtistModalContentConnector extends Component {
this.props.setAddDefault({ [name]: value }); this.props.setAddDefault({ [name]: value });
}; };
onAddArtistPress = (searchForMissingAlbums) => { onAddArtistPress = () => {
const { const {
foreignArtistId, foreignArtistId,
rootFolderPath, rootFolderPath,
@ -63,6 +63,7 @@ class AddNewArtistModalContentConnector extends Component {
monitorNewItems, monitorNewItems,
qualityProfileId, qualityProfileId,
metadataProfileId, metadataProfileId,
searchForMissingAlbums,
tags tags
} = this.props; } = this.props;
@ -73,8 +74,8 @@ class AddNewArtistModalContentConnector extends Component {
monitorNewItems: monitorNewItems.value, monitorNewItems: monitorNewItems.value,
qualityProfileId: qualityProfileId.value, qualityProfileId: qualityProfileId.value,
metadataProfileId: metadataProfileId.value, metadataProfileId: metadataProfileId.value,
tags: tags.value, searchForMissingAlbums: searchForMissingAlbums.value,
searchForMissingAlbums tags: tags.value
}); });
}; };
@ -99,6 +100,7 @@ AddNewArtistModalContentConnector.propTypes = {
monitorNewItems: PropTypes.object.isRequired, monitorNewItems: PropTypes.object.isRequired,
qualityProfileId: PropTypes.object, qualityProfileId: PropTypes.object,
metadataProfileId: PropTypes.object, metadataProfileId: PropTypes.object,
searchForMissingAlbums: PropTypes.object.isRequired,
tags: PropTypes.object.isRequired, tags: PropTypes.object.isRequired,
onModalClose: PropTypes.func.isRequired, onModalClose: PropTypes.func.isRequired,
setAddDefault: PropTypes.func.isRequired, setAddDefault: PropTypes.func.isRequired,

View file

@ -36,6 +36,8 @@ export const defaultState = {
monitorNewItems: monitorNewItemsOptions[0].key, monitorNewItems: monitorNewItemsOptions[0].key,
qualityProfileId: 0, qualityProfileId: 0,
metadataProfileId: 0, metadataProfileId: 0,
searchForMissingAlbums: false,
searchForNewAlbum: false,
tags: [] tags: []
} }
}; };

View file

@ -8,6 +8,8 @@
"Actions": "Actions", "Actions": "Actions",
"Activity": "Activity", "Activity": "Activity",
"Add": "Add", "Add": "Add",
"AddAlbumWithTitle": "Add {albumTitle}",
"AddArtistWithName": "Add {artistName}",
"AddAutoTag": "Add Auto Tag", "AddAutoTag": "Add Auto Tag",
"AddAutoTagError": "Unable to add a new auto tag, please try again.", "AddAutoTagError": "Unable to add a new auto tag, please try again.",
"AddCondition": "Add Condition", "AddCondition": "Add Condition",
@ -30,8 +32,10 @@
"AddMissing": "Add missing", "AddMissing": "Add missing",
"AddNew": "Add New", "AddNew": "Add New",
"AddNewAlbum": "Add New Album", "AddNewAlbum": "Add New Album",
"AddNewAlbumSearchForNewAlbum": "Start search for new album",
"AddNewArtist": "Add New Artist", "AddNewArtist": "Add New Artist",
"AddNewArtistRootFolderHelpText": "'{folder}' subfolder will be created automatically", "AddNewArtistRootFolderHelpText": "'{folder}' subfolder will be created automatically",
"AddNewArtistSearchForMissingAlbums": "Start search for missing albums",
"AddNewItem": "Add New Item", "AddNewItem": "Add New Item",
"AddQualityProfile": "Add Quality Profile", "AddQualityProfile": "Add Quality Profile",
"AddReleaseProfile": "Add Release Profile", "AddReleaseProfile": "Add Release Profile",