import moment from 'moment'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; import classNames from 'classnames'; import formatTime from 'Utilities/Date/formatTime'; import padNumber from 'Utilities/Number/padNumber'; import { icons, kinds } from 'Helpers/Props'; import Icon from 'Components/Icon'; import Link from 'Components/Link/Link'; import getStatusStyle from 'Calendar/getStatusStyle'; import CalendarEventConnector from 'Calendar/Events/CalendarEventConnector'; import styles from './CalendarEventGroup.css'; function getEventsInfo(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 (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, colorImpairedMode, onEventModalOpenToggle } = this.props; const { isExpanded } = this.state; const { allDownloaded, anyQueued, anyMonitored, allAbsoluteEpisodeNumbers } = getEventsInfo(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 (