import classNames from 'classnames'; import moment from 'moment'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; import getStatusStyle from 'Calendar/getStatusStyle'; import Icon from 'Components/Icon'; import Link from 'Components/Link/Link'; import EpisodeDetailsModal from 'Episode/EpisodeDetailsModal'; import episodeEntities from 'Episode/episodeEntities'; import getFinaleTypeName from 'Episode/getFinaleTypeName'; import { icons, kinds } from 'Helpers/Props'; import formatTime from 'Utilities/Date/formatTime'; import padNumber from 'Utilities/Number/padNumber'; import translate from 'Utilities/String/translate'; import CalendarEventQueueDetails from './CalendarEventQueueDetails'; import styles from './CalendarEvent.css'; class CalendarEvent extends Component { // // Lifecycle constructor(props, context) { super(props, context); this.state = { isDetailsModalOpen: false }; } // // Listeners onPress = () => { this.setState({ isDetailsModalOpen: true }, () => { this.props.onEventModalOpenToggle(true); }); }; onDetailsModalClose = () => { this.setState({ isDetailsModalOpen: false }, () => { this.props.onEventModalOpenToggle(false); }); }; // // Render render() { const { id, series, episodeFile, title, seasonNumber, episodeNumber, absoluteEpisodeNumber, airDateUtc, monitored, unverifiedSceneNumbering, finaleType, hasFile, grabbed, queueItem, showEpisodeInformation, showFinaleIcon, showSpecialIcon, showCutoffUnmetIcon, fullColorEvents, timeFormat, colorImpairedMode } = this.props; if (!series) { return null; } const startTime = moment(airDateUtc); const endTime = moment(airDateUtc).add(series.runtime, 'minutes'); const isDownloading = !!(queueItem || grabbed); const isMonitored = series.monitored && monitored; const statusStyle = getStatusStyle(hasFile, isDownloading, startTime, endTime, isMonitored); const missingAbsoluteNumber = series.seriesType === 'anime' && seasonNumber > 0 && !absoluteEpisodeNumber; return (