import PropTypes from 'prop-types';
import React, { Component } from 'react';
import Icon from 'Components/Icon';
import ImdbRating from 'Components/ImdbRating';
import IconButton from 'Components/Link/IconButton';
import SpinnerIconButton from 'Components/Link/SpinnerIconButton';
import QualityProfileListConnector from 'Components/QualityProfileListConnector';
import RottenTomatoRating from 'Components/RottenTomatoRating';
import RelativeDateCellConnector from 'Components/Table/Cells/RelativeDateCellConnector';
import VirtualTableRowCell from 'Components/Table/Cells/VirtualTableRowCell';
import VirtualTableSelectCell from 'Components/Table/Cells/VirtualTableSelectCell';
import TagListConnector from 'Components/TagListConnector';
import TmdbRating from 'Components/TmdbRating';
import Tooltip from 'Components/Tooltip/Tooltip';
import { icons, kinds } from 'Helpers/Props';
import DeleteMovieModal from 'Movie/Delete/DeleteMovieModal';
import MovieDetailsLinks from 'Movie/Details/MovieDetailsLinks';
import EditMovieModalConnector from 'Movie/Edit/EditMovieModalConnector';
import MovieFileStatusConnector from 'Movie/MovieFileStatusConnector';
import MovieTitleLink from 'Movie/MovieTitleLink';
import formatRuntime from 'Utilities/Date/formatRuntime';
import formatBytes from 'Utilities/Number/formatBytes';
import titleCase from 'Utilities/String/titleCase';
import translate from 'Utilities/String/translate';
import MovieStatusCell from './MovieStatusCell';
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,
tmdbId,
imdbId,
youTubeTrailerId,
monitored,
status,
title,
titleSlug,
collection,
studio,
qualityProfileIds,
added,
statistics,
year,
inCinemas,
physicalRelease,
originalLanguage,
originalTitle,
digitalRelease,
runtime,
minimumAvailability,
path,
genres,
ratings,
certification,
tags,
showSearchAction,
columns,
isRefreshingMovie,
isSearchingMovie,
isMovieEditorActive,
isSelected,
onRefreshMoviePress,
onSearchPress,
onSelectedChange,
queueStatus,
queueState,
movieRuntimeFormat
} = this.props;
const {
sizeOnDisk
} = statistics;
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.title : null }
);
}
if (name === 'studio') {
return (
{studio}
);
}
if (name === 'originalLanguage') {
return (
{originalLanguage.name}
);
}
if (name === 'originalTitle') {
return (
{originalTitle}
);
}
if (name === 'qualityProfileIds') {
return (
);
}
if (name === 'added') {
return (
);
}
if (name === 'year') {
return (
{year}
);
}
if (name === 'inCinemas') {
return (
);
}
if (name === 'digitalRelease') {
return (
);
}
if (name === 'physicalRelease') {
return (
);
}
if (name === 'runtime') {
return (
{formatRuntime(runtime, movieRuntimeFormat)}
);
}
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 === 'tmdbRating') {
return (
);
}
if (name === 'rottenTomatoesRating') {
return (
);
}
if (name === 'imdbRating') {
return (
);
}
if (name === 'certification') {
return (
{certification}
);
}
if (name === 'tags') {
return (
);
}
if (name === 'actions') {
return (
}
tooltip={
}
canFlip={true}
kind={kinds.INVERSE}
/>
{
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,
originalTitle: PropTypes.string.isRequired,
originalLanguage: PropTypes.object.isRequired,
studio: PropTypes.string,
collection: PropTypes.object,
qualityProfileIds: PropTypes.arrayOf(PropTypes.number).isRequired,
added: PropTypes.string,
statistics: PropTypes.object.isRequired,
year: PropTypes.number,
inCinemas: PropTypes.string,
physicalRelease: PropTypes.string,
digitalRelease: PropTypes.string,
runtime: PropTypes.number,
minimumAvailability: PropTypes.string.isRequired,
path: PropTypes.string.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,
tmdbId: PropTypes.number.isRequired,
imdbId: PropTypes.string,
youTubeTrailerId: PropTypes.string,
queueStatus: PropTypes.string,
queueState: PropTypes.string,
movieRuntimeFormat: PropTypes.string.isRequired
};
MovieIndexRow.defaultProps = {
statistics: {
movieFileCount: 0,
releaseGroups: []
},
genres: [],
tags: []
};
export default MovieIndexRow;