import _ from 'lodash'; import PropTypes from 'prop-types'; import React from 'react'; import DescriptionList from 'Components/DescriptionList/DescriptionList'; import DescriptionListItem from 'Components/DescriptionList/DescriptionListItem'; import padNumber from 'Utilities/Number/padNumber'; import translate from 'Utilities/String/translate'; import styles from './SceneInfo.css'; function SceneInfo(props) { const { seasonNumber, episodeNumber, sceneSeasonNumber, sceneEpisodeNumber, sceneAbsoluteEpisodeNumber, alternateTitles, seriesType } = props; const reducedAlternateTitles = alternateTitles.map((alternateTitle) => { let suffix = ''; const altSceneSeasonNumber = sceneSeasonNumber === undefined ? seasonNumber : sceneSeasonNumber; const altSceneEpisodeNumber = sceneEpisodeNumber === undefined ? episodeNumber : sceneEpisodeNumber; const mappingSeasonNumber = alternateTitle.sceneOrigin === 'tvdb' ? seasonNumber : altSceneSeasonNumber; const altSeasonNumber = (alternateTitle.sceneSeasonNumber !== -1 && alternateTitle.sceneSeasonNumber !== undefined) ? alternateTitle.sceneSeasonNumber : mappingSeasonNumber; const altEpisodeNumber = alternateTitle.sceneOrigin === 'tvdb' ? episodeNumber : altSceneEpisodeNumber; if (altEpisodeNumber !== altSceneEpisodeNumber) { suffix = `S${padNumber(altSeasonNumber, 2)}E${padNumber(altEpisodeNumber, 2)}`; } else if (altSeasonNumber !== altSceneSeasonNumber) { suffix = `S${padNumber(altSeasonNumber, 2)}`; } return { alternateTitle, title: alternateTitle.title, suffix, comment: alternateTitle.comment }; }); const groupedAlternateTitles = _.map(_.groupBy(reducedAlternateTitles, (item) => `${item.title} ${item.suffix}`), (group) => { return { title: group[0].title, suffix: group[0].suffix, comment: _.uniq(group.map((item) => item.comment)).join('/') }; }); return ( { sceneSeasonNumber !== undefined && } { sceneEpisodeNumber !== undefined && } { seriesType === 'anime' && sceneAbsoluteEpisodeNumber !== undefined && } { !!alternateTitles.length && { groupedAlternateTitles.map(({ title, suffix, comment }) => { return (
{title} { suffix && ({suffix}) } { comment && {comment} }
); }) } } /> }
); } SceneInfo.propTypes = { seasonNumber: PropTypes.number, episodeNumber: PropTypes.number, sceneSeasonNumber: PropTypes.number, sceneEpisodeNumber: PropTypes.number, sceneAbsoluteEpisodeNumber: PropTypes.number, alternateTitles: PropTypes.arrayOf(PropTypes.object).isRequired, seriesType: PropTypes.string }; export default SceneInfo;