import PropTypes from 'prop-types'; import React, { Component } from 'react'; import BookSearchCellConnector from 'Book/BookSearchCellConnector'; import BookTitleLink from 'Book/BookTitleLink'; import IndexerFlags from 'Book/IndexerFlags'; import Icon from 'Components/Icon'; import MonitorToggleButton from 'Components/MonitorToggleButton'; import StarRating from 'Components/StarRating'; import RelativeDateCellConnector from 'Components/Table/Cells/RelativeDateCellConnector'; import TableRowCell from 'Components/Table/Cells/TableRowCell'; 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 translate from 'Utilities/String/translate'; import BookStatus from './BookStatus'; import styles from './BookRow.css'; class BookRow extends Component { // // Lifecycle constructor(props, context) { super(props, context); this.state = { isDetailsModalOpen: false, isEditBookModalOpen: false }; } // // Listeners onManualSearchPress = () => { this.setState({ isDetailsModalOpen: true }); }; onDetailsModalClose = () => { this.setState({ isDetailsModalOpen: false }); }; onEditBookPress = () => { this.setState({ isEditBookModalOpen: true }); }; onEditBookModalClose = () => { this.setState({ isEditBookModalOpen: false }); }; onMonitorBookPress = (monitored, options) => { this.props.onMonitorBookPress(this.props.id, monitored, options); }; // // Render render() { const { id, authorId, monitored, releaseDate, title, seriesTitle, authorName, position, pageCount, ratings, isSaving, authorMonitored, titleSlug, bookFiles, indexerFlags, isEditorActive, isSelected, onSelectedChange, columns } = this.props; const bookFile = bookFiles[0]; const isAvailable = Date.parse(releaseDate) < new Date(); return ( { columns.map((column) => { const { name, isVisible } = column; if (!isVisible) { return null; } if (isEditorActive && name === 'select') { return ( ); } if (name === 'monitored') { return ( ); } if (name === 'title') { return ( ); } if (name === 'series') { return ( {seriesTitle || ''} ); } if (name === 'position') { return ( {position || ''} ); } if (name === 'rating') { return ( { } ); } if (name === 'releaseDate') { return ( ); } if (name === 'pageCount') { return ( {pageCount || ''} ); } if (name === 'indexerFlags') { return ( {indexerFlags ? ( } title={translate('IndexerFlags')} body={} position={tooltipPositions.LEFT} /> ) : null} ); } if (name === 'status') { return ( ); } if (name === 'actions') { return ( ); } return null; }) } ); } } BookRow.propTypes = { id: PropTypes.number.isRequired, authorId: PropTypes.number.isRequired, monitored: PropTypes.bool.isRequired, releaseDate: PropTypes.string, title: PropTypes.string.isRequired, seriesTitle: PropTypes.string.isRequired, authorName: PropTypes.string.isRequired, position: PropTypes.string, pageCount: PropTypes.number, ratings: PropTypes.object.isRequired, indexerFlags: PropTypes.number.isRequired, titleSlug: PropTypes.string.isRequired, isSaving: PropTypes.bool, authorMonitored: PropTypes.bool.isRequired, bookFiles: PropTypes.arrayOf(PropTypes.object).isRequired, isEditorActive: PropTypes.bool.isRequired, isSelected: PropTypes.bool, onSelectedChange: PropTypes.func.isRequired, columns: PropTypes.arrayOf(PropTypes.object).isRequired, onMonitorBookPress: PropTypes.func.isRequired }; BookRow.defaultProps = { indexerFlags: 0 }; export default BookRow;