import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { inputTypes, sizes } from 'Helpers/Props'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import FormInputButton from 'Components/Form/FormInputButton'; import FieldSet from 'Components/FieldSet'; import Form from 'Components/Form/Form'; import FormGroup from 'Components/Form/FormGroup'; import FormLabel from 'Components/Form/FormLabel'; import FormInputGroup from 'Components/Form/FormInputGroup'; import NamingModal from './NamingModal'; import styles from './Naming.css'; class Naming extends Component { // // Lifecycle constructor(props, context) { super(props, context); this.state = { isNamingModalOpen: false, namingModalOptions: null }; } // // Listeners onStandardNamingModalOpenClick = () => { this.setState({ isNamingModalOpen: true, namingModalOptions: { name: 'standardTrackFormat', album: true, track: true, additional: true } }); } onMultiDiscNamingModalOpenClick = () => { this.setState({ isNamingModalOpen: true, namingModalOptions: { name: 'multiDiscTrackFormat', album: true, track: true, additional: true } }); } onArtistFolderNamingModalOpenClick = () => { this.setState({ isNamingModalOpen: true, namingModalOptions: { name: 'artistFolderFormat' } }); } onAlbumFolderNamingModalOpenClick = () => { this.setState({ isNamingModalOpen: true, namingModalOptions: { name: 'albumFolderFormat', album: true } }); } onNamingModalClose = () => { this.setState({ isNamingModalOpen: false }); } // // Render render() { const { advancedSettings, isFetching, error, settings, hasSettings, examples, examplesPopulated, onInputChange } = this.props; const { isNamingModalOpen, namingModalOptions } = this.state; const renameTracks = hasSettings && settings.renameTracks.value; const standardTrackFormatHelpTexts = []; const standardTrackFormatErrors = []; const multiDiscTrackFormatHelpTexts = []; const multiDiscTrackFormatErrors = []; const artistFolderFormatHelpTexts = []; const artistFolderFormatErrors = []; const albumFolderFormatHelpTexts = []; const albumFolderFormatErrors = []; if (examplesPopulated) { if (examples.singleTrackExample) { standardTrackFormatHelpTexts.push(`Single Track: ${examples.singleTrackExample}`); } else { standardTrackFormatErrors.push({ message: 'Single Track: Invalid Format' }); } if (examples.multiDiscTrackExample) { multiDiscTrackFormatHelpTexts.push(`Multi Disc Track: ${examples.multiDiscTrackExample}`); } else { multiDiscTrackFormatErrors.push({ message: 'Single Track: Invalid Format' }); } if (examples.artistFolderExample) { artistFolderFormatHelpTexts.push(`Example: ${examples.artistFolderExample}`); } else { artistFolderFormatErrors.push({ message: 'Invalid Format' }); } if (examples.albumFolderExample) { albumFolderFormatHelpTexts.push(`Example: ${examples.albumFolderExample}`); } else { albumFolderFormatErrors.push({ message: 'Invalid Format' }); } } return (
{ isFetching && } { !isFetching && error &&
Unable to load Naming settings
} { hasSettings && !isFetching && !error &&
Rename Tracks Replace Illegal Characters { renameTracks &&
Standard Track Format ?} onChange={onInputChange} {...settings.standardTrackFormat} helpTexts={standardTrackFormatHelpTexts} errors={[...standardTrackFormatErrors, ...settings.standardTrackFormat.errors]} /> Multi Disc Track Format ?} onChange={onInputChange} {...settings.multiDiscTrackFormat} helpTexts={multiDiscTrackFormatHelpTexts} errors={[...multiDiscTrackFormatErrors, ...settings.multiDiscTrackFormat.errors]} />
} Artist Folder Format ?} onChange={onInputChange} {...settings.artistFolderFormat} helpTexts={['Used when adding a new artist or moving an artist via the artist editor', ...artistFolderFormatHelpTexts]} errors={[...artistFolderFormatErrors, ...settings.artistFolderFormat.errors]} /> Album Folder Format ?} onChange={onInputChange} {...settings.albumFolderFormat} helpTexts={albumFolderFormatHelpTexts} errors={[...albumFolderFormatErrors, ...settings.albumFolderFormat.errors]} /> { namingModalOptions && } }
); } } Naming.propTypes = { advancedSettings: PropTypes.bool.isRequired, isFetching: PropTypes.bool.isRequired, error: PropTypes.object, settings: PropTypes.object.isRequired, hasSettings: PropTypes.bool.isRequired, examples: PropTypes.object.isRequired, examplesPopulated: PropTypes.bool.isRequired, onInputChange: PropTypes.func.isRequired }; export default Naming;