import classNames from 'classnames'; import moment from 'moment'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; import CalendarEventConnector from 'Calendar/Events/CalendarEventConnector'; import getStatusStyle from 'Calendar/getStatusStyle'; import Icon from 'Components/Icon'; import Link from 'Components/Link/Link'; 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 styles from './CalendarEventGroup.css'; function getEventsInfo(series, events) { let files = 0; let queued = 0; let monitored = 0; let absoluteEpisodeNumbers = 0; events.forEach((event) => { if (event.episodeFileId) { files++; } if (event.queued) { queued++; } if (series.monitored && event.monitored) { monitored++; } if (event.absoluteEpisodeNumber) { absoluteEpisodeNumbers++; } }); return { allDownloaded: files === events.length, anyQueued: queued > 0, anyMonitored: monitored > 0, allAbsoluteEpisodeNumbers: absoluteEpisodeNumbers === events.length }; } class CalendarEventGroup extends Component { // // Lifecycle constructor(props, context) { super(props, context); this.state = { isExpanded: false }; } // // Listeners onExpandPress = () => { this.setState({ isExpanded: !this.state.isExpanded }); }; // // Render render() { const { series, events, isDownloading, showEpisodeInformation, showFinaleIcon, timeFormat, fullColorEvents, colorImpairedMode, onEventModalOpenToggle } = this.props; const { isExpanded } = this.state; const { allDownloaded, anyQueued, anyMonitored, allAbsoluteEpisodeNumbers } = getEventsInfo(series, events); const anyDownloading = isDownloading || anyQueued; const firstEpisode = events[0]; const lastEpisode = events[events.length -1]; const airDateUtc = firstEpisode.airDateUtc; const startTime = moment(airDateUtc); const endTime = moment(lastEpisode.airDateUtc).add(series.runtime, 'minutes'); const seasonNumber = firstEpisode.seasonNumber; const statusStyle = getStatusStyle(allDownloaded, anyDownloading, startTime, endTime, anyMonitored); const isMissingAbsoluteNumber = series.seriesType === 'anime' && seasonNumber > 0 && !allAbsoluteEpisodeNumbers; if (isExpanded) { return (