import React from 'react'; import Icon from 'Components/Icon'; import Popover from 'Components/Tooltip/Popover'; import { icons, kinds, tooltipPositions } from 'Helpers/Props'; import { AlternateTitle, SeriesType } from 'Series/Series'; import padNumber from 'Utilities/Number/padNumber'; import filterAlternateTitles from 'Utilities/Series/filterAlternateTitles'; import translate from 'Utilities/String/translate'; import SceneInfo from './SceneInfo'; import styles from './EpisodeNumber.css'; function getWarningMessage( unverifiedSceneNumbering: boolean, seriesType: SeriesType | undefined, absoluteEpisodeNumber: number | undefined ) { const messages = []; if (unverifiedSceneNumbering) { messages.push(translate('SceneNumberNotVerified')); } if (seriesType === 'anime' && !absoluteEpisodeNumber) { messages.push(translate('EpisodeMissingAbsoluteNumber')); } return messages.join('\n'); } export interface EpisodeNumberProps { seasonNumber: number; episodeNumber: number; absoluteEpisodeNumber?: number; sceneSeasonNumber?: number; sceneEpisodeNumber?: number; sceneAbsoluteEpisodeNumber?: number; useSceneNumbering?: boolean; unverifiedSceneNumbering?: boolean; alternateTitles?: AlternateTitle[]; seriesType?: SeriesType; showSeasonNumber?: boolean; } function EpisodeNumber(props: EpisodeNumberProps) { const { seasonNumber, episodeNumber, absoluteEpisodeNumber, sceneSeasonNumber, sceneEpisodeNumber, sceneAbsoluteEpisodeNumber, useSceneNumbering = false, unverifiedSceneNumbering = false, alternateTitles: seriesAlternateTitles = [], seriesType, showSeasonNumber = false, } = props; const alternateTitles = filterAlternateTitles( seriesAlternateTitles, null, useSceneNumbering, seasonNumber, sceneSeasonNumber ); const hasSceneInformation = sceneSeasonNumber !== undefined || sceneEpisodeNumber !== undefined || (seriesType === 'anime' && sceneAbsoluteEpisodeNumber !== undefined) || !!alternateTitles.length; const warningMessage = getWarningMessage( unverifiedSceneNumbering, seriesType, absoluteEpisodeNumber ); return ( {hasSceneInformation ? ( {showSeasonNumber && seasonNumber != null && <>{seasonNumber}x} {showSeasonNumber ? padNumber(episodeNumber, 2) : episodeNumber} {seriesType === 'anime' && !!absoluteEpisodeNumber && ( ({absoluteEpisodeNumber}) )} } title={translate('SceneInformation')} body={ } position={tooltipPositions.RIGHT} /> ) : ( {showSeasonNumber && seasonNumber != null && <>{seasonNumber}x} {showSeasonNumber ? padNumber(episodeNumber, 2) : episodeNumber} {seriesType === 'anime' && !!absoluteEpisodeNumber && ( ({absoluteEpisodeNumber}) )} )} {warningMessage ? ( ) : null} ); } export default EpisodeNumber;