import PropTypes from 'prop-types'; import React, { Component } from 'react'; import titleCase from 'Utilities/String/titleCase'; import formatBytes from 'Utilities/Number/formatBytes'; import { icons } from 'Helpers/Props'; import HeartRating from 'Components/HeartRating'; import IconButton from 'Components/Link/IconButton'; import SpinnerIconButton from 'Components/Link/SpinnerIconButton'; import TagListConnector from 'Components/TagListConnector'; import VirtualTableRowCell from 'Components/Table/Cells/VirtualTableRowCell'; import RelativeDateCellConnector from 'Components/Table/Cells/RelativeDateCellConnector'; import MovieTitleLink from 'Movie/MovieTitleLink'; import EditMovieModalConnector from 'Movie/Edit/EditMovieModalConnector'; import DeleteMovieModal from 'Movie/Delete/DeleteMovieModal'; import MovieStatusCell from './MovieStatusCell'; import MovieFileStatusConnector from 'Movie/MovieFileStatusConnector'; import VirtualTableSelectCell from 'Components/Table/Cells/VirtualTableSelectCell'; import styles from './MovieIndexRow.css'; class MovieIndexRow extends Component { // // Lifecycle constructor(props, context) { super(props, context); this.state = { isEditMovieModalOpen: false, isDeleteMovieModalOpen: false }; } onEditMoviePress = () => { this.setState({ isEditMovieModalOpen: true }); } onEditMovieModalClose = () => { this.setState({ isEditMovieModalOpen: false }); } onDeleteMoviePress = () => { this.setState({ isEditMovieModalOpen: false, isDeleteMovieModalOpen: true }); } onDeleteMovieModalClose = () => { this.setState({ isDeleteMovieModalOpen: false }); } onUseSceneNumberingChange = () => { // Mock handler to satisfy `onChange` being required for `CheckInput`. // } // // Render render() { const { id, monitored, status, title, titleSlug, collection, studio, qualityProfile, added, year, inCinemas, physicalRelease, runtime, minimumAvailability, path, sizeOnDisk, genres, ratings, certification, tags, showSearchAction, columns, isRefreshingMovie, isSearchingMovie, isMovieEditorActive, isSelected, onRefreshMoviePress, onSearchPress, onSelectedChange } = this.props; const { isEditMovieModalOpen, isDeleteMovieModalOpen } = this.state; return ( <> { columns.map((column) => { const { name, isVisible } = column; if (!isVisible) { return null; } if (isMovieEditorActive && name === 'select') { return ( ); } if (name === 'status') { return ( ); } if (name === 'sortTitle') { return ( ); } if (name === 'collection') { return ( {collection ? collection.name : null } ); } if (name === 'studio') { return ( {studio} ); } if (name === 'qualityProfileId') { return ( {qualityProfile.name} ); } if (name === 'added') { return ( ); } if (name === 'year') { return ( {year} ); } if (name === 'inCinemas') { return ( ); } if (name === 'physicalRelease') { return ( ); } if (name === 'runtime') { return ( {runtime} Minutes ); } if (name === 'minimumAvailability') { return ( {titleCase(minimumAvailability)} ); } if (name === 'path') { return ( {path} ); } if (name === 'sizeOnDisk') { return ( {formatBytes(sizeOnDisk)} ); } if (name === 'genres') { const joinedGenres = genres.join(', '); return ( {joinedGenres} ); } if (name === 'movieStatus') { return ( ); } if (name === 'ratings') { return ( ); } if (name === 'certification') { return ( {certification} ); } if (name === 'tags') { return ( ); } if (name === 'actions') { return ( { showSearchAction && } ); } return null; }) } ); } } MovieIndexRow.propTypes = { id: PropTypes.number.isRequired, monitored: PropTypes.bool.isRequired, status: PropTypes.string.isRequired, title: PropTypes.string.isRequired, titleSlug: PropTypes.string.isRequired, studio: PropTypes.string, collection: PropTypes.object, qualityProfile: PropTypes.object.isRequired, added: PropTypes.string, year: PropTypes.number, inCinemas: PropTypes.string, physicalRelease: PropTypes.string, runtime: PropTypes.number, minimumAvailability: PropTypes.string.isRequired, path: PropTypes.string.isRequired, sizeOnDisk: PropTypes.number.isRequired, genres: PropTypes.arrayOf(PropTypes.string).isRequired, ratings: PropTypes.object.isRequired, certification: PropTypes.string, tags: PropTypes.arrayOf(PropTypes.number).isRequired, showSearchAction: PropTypes.bool.isRequired, columns: PropTypes.arrayOf(PropTypes.object).isRequired, isRefreshingMovie: PropTypes.bool.isRequired, isSearchingMovie: PropTypes.bool.isRequired, onRefreshMoviePress: PropTypes.func.isRequired, onSearchPress: PropTypes.func.isRequired, isMovieEditorActive: PropTypes.bool.isRequired, isSelected: PropTypes.bool, onSelectedChange: PropTypes.func.isRequired }; MovieIndexRow.defaultProps = { genres: [], tags: [] }; export default MovieIndexRow;