import PropTypes from 'prop-types'; import React, { Component } from 'react'; import IconButton from 'Components/Link/IconButton'; import RelativeDateCellConnector from 'Components/Table/Cells/RelativeDateCellConnector'; import TableRowCell from 'Components/Table/Cells/TableRowCell'; import TableRow from 'Components/Table/TableRow'; import { icons } from 'Helpers/Props'; import CapabilitiesLabel from 'Indexer/Index/Table/CapabilitiesLabel'; import HistoryDetailsModal from './Details/HistoryDetailsModal'; import HistoryEventTypeCell from './HistoryEventTypeCell'; import HistoryRowParameter from './HistoryRowParameter'; import styles from './HistoryRow.css'; class HistoryRow extends Component { // // Lifecycle constructor(props, context) { super(props, context); this.state = { isDetailsModalOpen: false }; } componentDidUpdate(prevProps) { if ( prevProps.isMarkingAsFailed && !this.props.isMarkingAsFailed && !this.props.markAsFailedError ) { this.setState({ isDetailsModalOpen: false }); } } // // Listeners onSearchPress = () => { const { indexer, data } = this.props; let categories = []; if (data.categories) { categories = data.categories.split(',').map((item) => { return parseInt(item); }); } this.props.onSearchPress(data.query, indexer.id, categories); }; onDetailsPress = () => { this.setState({ isDetailsModalOpen: true }); }; onDetailsModalClose = () => { this.setState({ isDetailsModalOpen: false }); }; // // Render render() { const { indexer, eventType, date, data, successful, isMarkingAsFailed, columns, shortDateFormat, timeFormat, onMarkAsFailedPress } = this.props; if (!indexer) { return null; } return ( { columns.map((column) => { const { name, isVisible } = column; if (!isVisible) { return null; } if (name === 'eventType') { return ( ); } if (name === 'indexer') { return ( {indexer.name} ); } if (name === 'query') { return ( {data.query} ); } if (name === 'parameters') { return ( { data.imdbId ? : null } { data.tmdbId ? : null } { data.tvdbId ? : null } { data.traktId ? : null } { data.rId ? : null } { data.tvMazeId ? : null } { data.season ? : null } { data.episode ? : null } { data.artist ? : null } { data.album ? : null } { data.label ? : null } { data.track ? : null } { data.year ? : null } { data.genre ? : null } { data.author ? : null } { data.bookTitle ? : null } { data.publisher ? : null } ); } if (name === 'grabTitle') { return ( { data.title ? data.title : null } ); } if (name === 'categories') { return ( { data.categories ? : null } ); } if (name === 'source') { return ( { data.source ? data.source : null } ); } if (name === 'elapsedTime') { return ( { data.elapsedTime ? `${data.elapsedTime}ms` : null } ); } if (name === 'date') { return ( ); } if (name === 'details') { return ( { eventType === 'indexerQuery' ? : null } ); } return null; }) } ); } } HistoryRow.propTypes = { indexerId: PropTypes.number, indexer: PropTypes.object.isRequired, eventType: PropTypes.string.isRequired, successful: PropTypes.bool.isRequired, date: PropTypes.string.isRequired, data: PropTypes.object.isRequired, isMarkingAsFailed: PropTypes.bool, markAsFailedError: PropTypes.object, columns: PropTypes.arrayOf(PropTypes.object).isRequired, shortDateFormat: PropTypes.string.isRequired, timeFormat: PropTypes.string.isRequired, onMarkAsFailedPress: PropTypes.func.isRequired, onSearchPress: PropTypes.func.isRequired }; export default HistoryRow;