import PropTypes from 'prop-types'; import React, { Component } from 'react'; import TextTruncate from 'react-text-truncate'; import { icons } from 'Helpers/Props'; import dimensions from 'Styles/Variables/dimensions'; import fonts from 'Styles/Variables/fonts'; import IconButton from 'Components/Link/IconButton'; import Link from 'Components/Link/Link'; import SpinnerIconButton from 'Components/Link/SpinnerIconButton'; import CheckInput from 'Components/Form/CheckInput'; import MoviePoster from 'Movie/MoviePoster'; import EditMovieModalConnector from 'Movie/Edit/EditMovieModalConnector'; import DeleteMovieModal from 'Movie/Delete/DeleteMovieModal'; import MovieIndexProgressBar from 'Movie/Index/ProgressBar/MovieIndexProgressBar'; import MovieIndexOverviewInfo from './MovieIndexOverviewInfo'; import styles from './MovieIndexOverview.css'; import Icon from 'Components/Icon'; import Popover from 'Components/Tooltip/Popover'; import MovieDetailsLinks from 'Movie/Details/MovieDetailsLinks'; const columnPadding = parseInt(dimensions.movieIndexColumnPadding); const columnPaddingSmallScreen = parseInt(dimensions.movieIndexColumnPaddingSmallScreen); const defaultFontSize = parseInt(fonts.defaultFontSize); const lineHeight = parseFloat(fonts.lineHeight); // Hardcoded height beased on line-height of 32 + bottom margin of 10. // Less side-effecty than using react-measure. const titleRowHeight = 42; function getContentHeight(rowHeight, isSmallScreen) { const padding = isSmallScreen ? columnPaddingSmallScreen : columnPadding; return rowHeight - padding; } class MovieIndexOverview extends Component { // // Lifecycle constructor(props, context) { super(props, context); this.state = { isEditMovieModalOpen: false, isDeleteMovieModalOpen: false }; } // // Listeners onEditMoviePress = () => { this.setState({ isEditMovieModalOpen: true }); } onEditMovieModalClose = () => { this.setState({ isEditMovieModalOpen: false }); } onDeleteMoviePress = () => { this.setState({ isEditMovieModalOpen: false, isDeleteMovieModalOpen: true }); } onDeleteMovieModalClose = () => { this.setState({ isDeleteMovieModalOpen: false }); } onChange = ({ value, shiftKey }) => { const { id, onSelectedChange } = this.props; onSelectedChange({ id, value, shiftKey }); } // // Render render() { const { id, tmdbId, imdbId, youTubeTrailerId, title, overview, monitored, hasFile, status, titleSlug, images, posterWidth, posterHeight, qualityProfile, overviewOptions, showSearchAction, showRelativeDates, shortDateFormat, longDateFormat, timeFormat, rowHeight, isSmallScreen, isRefreshingMovie, isSearchingMovie, onRefreshMoviePress, onSearchPress, isMovieEditorActive, isSelected, onSelectedChange, ...otherProps } = this.props; const { isEditMovieModalOpen, isDeleteMovieModalOpen } = this.state; const link = `/movie/${titleSlug}`; const elementStyle = { width: `${posterWidth}px`, height: `${posterHeight}px` }; const contentHeight = getContentHeight(rowHeight, isSmallScreen); const overviewHeight = contentHeight - titleRowHeight; return (
{ isMovieEditorActive &&
}
{title}
} title="Links" body={ } /> { showSearchAction && }
); } } MovieIndexOverview.propTypes = { id: PropTypes.number.isRequired, title: PropTypes.string.isRequired, overview: PropTypes.string.isRequired, monitored: PropTypes.bool.isRequired, hasFile: PropTypes.bool.isRequired, status: PropTypes.string.isRequired, titleSlug: PropTypes.string.isRequired, images: PropTypes.arrayOf(PropTypes.object).isRequired, posterWidth: PropTypes.number.isRequired, posterHeight: PropTypes.number.isRequired, rowHeight: PropTypes.number.isRequired, qualityProfile: PropTypes.object.isRequired, overviewOptions: PropTypes.object.isRequired, showSearchAction: PropTypes.bool.isRequired, showRelativeDates: PropTypes.bool.isRequired, shortDateFormat: PropTypes.string.isRequired, longDateFormat: PropTypes.string.isRequired, timeFormat: PropTypes.string.isRequired, isSmallScreen: PropTypes.bool.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, tmdbId: PropTypes.number.isRequired, imdbId: PropTypes.string, youTubeTrailerId: PropTypes.string }; export default MovieIndexOverview;