import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { sizes } from 'Helpers/Props'; import FieldSet from 'Components/FieldSet'; import Button from 'Components/Link/Button'; import SelectInput from 'Components/Form/SelectInput'; import TextInput from 'Components/Form/TextInput'; import Modal from 'Components/Modal/Modal'; import ModalContent from 'Components/Modal/ModalContent'; import ModalHeader from 'Components/Modal/ModalHeader'; import ModalBody from 'Components/Modal/ModalBody'; import ModalFooter from 'Components/Modal/ModalFooter'; import NamingOption from './NamingOption'; import styles from './NamingModal.css'; class NamingModal extends Component { // // Lifecycle constructor(props, context) { super(props, context); this._selectionStart = null; this._selectionEnd = null; this.state = { separator: ' ', case: 'title' }; } // // Listeners onTokenSeparatorChange = (event) => { this.setState({ separator: event.value }); } onTokenCaseChange = (event) => { this.setState({ case: event.value }); } onInputSelectionChange = (selectionStart, selectionEnd) => { this._selectionStart = selectionStart; this._selectionEnd = selectionEnd; } onOptionPress = ({ isFullFilename, tokenValue }) => { const { name, value, onInputChange } = this.props; const selectionStart = this._selectionStart; const selectionEnd = this._selectionEnd; if (isFullFilename) { onInputChange({ name, value: tokenValue }); } else if (selectionStart == null) { onInputChange({ name, value: `${value}${tokenValue}` }); } else { const start = value.substring(0, selectionStart); const end = value.substring(selectionEnd); const newValue = `${start}${tokenValue}${end}`; onInputChange({ name, value: newValue }); this._selectionStart = newValue.length - 1; this._selectionEnd = newValue.length - 1; } } // // Render render() { const { name, value, isOpen, advancedSettings, additional, onInputChange, onModalClose } = this.props; const { separator: tokenSeparator, case: tokenCase } = this.state; const separatorOptions = [ { key: ' ', value: 'Space ( )' }, { key: '.', value: 'Period (.)' }, { key: '_', value: 'Underscore (_)' }, { key: '-', value: 'Dash (-)' } ]; const caseOptions = [ { key: 'title', value: 'Default Case' }, { key: 'lower', value: 'Lower Case' }, { key: 'upper', value: 'Upper Case' } ]; const fileNameTokens = [ { token: '{Movie Title} - {Quality Full}', example: 'Movie Title (2010) - HDTV-720p Proper' } ]; const movieTokens = [ { token: '{Movie Title}', example: 'Movie Title!' }, { token: '{Movie CleanTitle}', example: 'Movie Title' }, { token: '{Movie TitleThe}', example: 'Movie Title, The' } ]; const movieIdTokens = [ { token: '{ImdbId}', example: 'tt12345' }, { token: '{TmdbId}', example: '123456' } ]; const qualityTokens = [ { token: '{Quality Full}', example: 'HDTV 720p Proper' }, { token: '{Quality Title}', example: 'HDTV 720p' } ]; const mediaInfoTokens = [ { token: '{MediaInfo Simple}', example: 'x264 DTS' }, { token: '{MediaInfo Full}', example: 'x264 DTS [EN+DE]' }, { token: '{MediaInfo VideoCodec}', example: 'x264' }, { token: '{MediaInfo AudioCodec}', example: 'DTS' }, { token: '{MediaInfo AudioChannels}', example: '5.1' }, { token: '{MediaInfo AudioLanguages}', example: '[EN+DE]' }, { token: '{MediaInfo SubtitleLanguages}', example: '[DE]' }, { token: '{MediaInfo VideoCodec}', example: 'x264' }, { token: '{MediaInfo VideoBitDepth}', example: '10' }, { token: '{MediaInfo VideoDynamicRange}', example: 'HDR' } ]; const releaseGroupTokens = [ { token: '{Release Group}', example: 'Rls Grp' } ]; const originalTokens = [ { token: '{Original Title}', example: 'Movie.Title.HDTV.x264-EVOLVE' }, { token: '{Original Filename}', example: 'Movie.title.hdtv.x264-EVOLVE' } ]; return ( File Name Tokens
{ !advancedSettings &&
{ fileNameTokens.map(({ token, example }) => { return ( ); } ) }
}
{ movieTokens.map(({ token, example }) => { return ( ); } ) }
{ movieIdTokens.map(({ token, example }) => { return ( ); } ) }
{ additional &&
{ qualityTokens.map(({ token, example }) => { return ( ); } ) }
{ mediaInfoTokens.map(({ token, example }) => { return ( ); } ) }
{ releaseGroupTokens.map(({ token, example }) => { return ( ); } ) }
{ originalTokens.map(({ token, example }) => { return ( ); } ) }
}
); } } NamingModal.propTypes = { name: PropTypes.string.isRequired, value: PropTypes.string.isRequired, isOpen: PropTypes.bool.isRequired, advancedSettings: PropTypes.bool.isRequired, additional: PropTypes.bool.isRequired, onInputChange: PropTypes.func.isRequired, onModalClose: PropTypes.func.isRequired }; NamingModal.defaultProps = { additional: false }; export default NamingModal;