import PropTypes from 'prop-types'; import React, { Component } from 'react'; import Icon from 'Components/Icon'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import TableRowCell from 'Components/Table/Cells/TableRowCell'; import TableRowCellButton from 'Components/Table/Cells/TableRowCellButton'; import TableSelectCell from 'Components/Table/Cells/TableSelectCell'; import TableRow from 'Components/Table/TableRow'; import Popover from 'Components/Tooltip/Popover'; import { icons, kinds, tooltipPositions } from 'Helpers/Props'; import SelectLanguageModal from 'InteractiveImport/Language/SelectLanguageModal'; import SelectMovieModal from 'InteractiveImport/Movie/SelectMovieModal'; import SelectQualityModal from 'InteractiveImport/Quality/SelectQualityModal'; import SelectReleaseGroupModal from 'InteractiveImport/ReleaseGroup/SelectReleaseGroupModal'; import MovieLanguage from 'Movie/MovieLanguage'; import MovieQuality from 'Movie/MovieQuality'; import formatBytes from 'Utilities/Number/formatBytes'; import translate from 'Utilities/String/translate'; import InteractiveImportRowCellPlaceholder from './InteractiveImportRowCellPlaceholder'; import styles from './InteractiveImportRow.css'; class InteractiveImportRow extends Component { // // Lifecycle constructor(props, context) { super(props, context); this.state = { isSelectMovieModalOpen: false, isSelectReleaseGroupModalOpen: false, isSelectQualityModalOpen: false, isSelectLanguageModalOpen: false }; } componentDidMount() { const { id, movie, quality, languages } = this.props; if ( movie && quality && languages ) { this.props.onSelectedChange({ id, value: true }); } } componentDidUpdate(prevProps) { const { id, movie, quality, languages, isSelected, onValidRowChange } = this.props; if ( prevProps.movie === movie && prevProps.quality === quality && prevProps.languages === languages && prevProps.isSelected === isSelected ) { return; } const isValid = !!( movie && quality && languages ); if (isSelected && !isValid) { onValidRowChange(id, false); } else { onValidRowChange(id, true); } } // // Control selectRowAfterChange = (value) => { const { id, isSelected } = this.props; if (!isSelected && value === true) { this.props.onSelectedChange({ id, value }); } } // // Listeners onSelectMoviePress = () => { this.setState({ isSelectMovieModalOpen: true }); } onSelectReleaseGroupPress = () => { this.setState({ isSelectReleaseGroupModalOpen: true }); } onSelectQualityPress = () => { this.setState({ isSelectQualityModalOpen: true }); } onSelectLanguagePress = () => { this.setState({ isSelectLanguageModalOpen: true }); } onSelectMovieModalClose = (changed) => { this.setState({ isSelectMovieModalOpen: false }); this.selectRowAfterChange(changed); } onSelectReleaseGroupModalClose = (changed) => { this.setState({ isSelectReleaseGroupModalOpen: false }); this.selectRowAfterChange(changed); } onSelectQualityModalClose = (changed) => { this.setState({ isSelectQualityModalOpen: false }); this.selectRowAfterChange(changed); } onSelectLanguageModalClose = (changed) => { this.setState({ isSelectLanguageModalOpen: false }); this.selectRowAfterChange(changed); } // // Render render() { const { id, allowMovieChange, relativePath, movie, quality, languages, releaseGroup, size, rejections, isReprocessing, isSelected, onSelectedChange } = this.props; const { isSelectMovieModalOpen, isSelectQualityModalOpen, isSelectLanguageModalOpen, isSelectReleaseGroupModalOpen } = this.state; const movieTitle = movie ? movie.title + ( movie.year > 0 ? ` (${movie.year})` : '') : ''; const showMoviePlaceholder = isSelected && !movie; const showQualityPlaceholder = isSelected && !quality; const showLanguagePlaceholder = isSelected && !languages && !isReprocessing; const showReleaseGroupPlaceholder = isSelected && !releaseGroup; return ( {relativePath} { showMoviePlaceholder ? : movieTitle } { showReleaseGroupPlaceholder ? : releaseGroup } { showQualityPlaceholder && } { !showQualityPlaceholder && !!quality && } { showLanguagePlaceholder && } { !showLanguagePlaceholder && !!languages && !isReprocessing ? : null } { isReprocessing ? : null } {formatBytes(size)} { !!rejections.length && } title={translate('ReleaseRejected')} body={
    { rejections.map((rejection, index) => { return (
  • {rejection.reason}
  • ); }) }
} position={tooltipPositions.LEFT} /> }
1 : false} real={quality ? quality.revision.real > 0 : false} onModalClose={this.onSelectQualityModalClose} /> l.id) : []} onModalClose={this.onSelectLanguageModalClose} />
); } } InteractiveImportRow.propTypes = { id: PropTypes.number.isRequired, allowMovieChange: PropTypes.bool.isRequired, relativePath: PropTypes.string.isRequired, movie: PropTypes.object, quality: PropTypes.object, languages: PropTypes.arrayOf(PropTypes.object), releaseGroup: PropTypes.string, size: PropTypes.number.isRequired, rejections: PropTypes.arrayOf(PropTypes.object).isRequired, isReprocessing: PropTypes.bool, isSelected: PropTypes.bool, onSelectedChange: PropTypes.func.isRequired, onValidRowChange: PropTypes.func.isRequired }; export default InteractiveImportRow;