import PropTypes from 'prop-types'; import React, { Component } from 'react'; import TextTruncate from 'react-text-truncate'; import AuthorPoster from 'Author/AuthorPoster'; import { getAuthorStatusDetails } from 'Author/AuthorStatus'; import HeartRating from 'Components/HeartRating'; import Icon from 'Components/Icon'; import Label from 'Components/Label'; import Marquee from 'Components/Marquee'; import Measure from 'Components/Measure'; import MonitorToggleButton from 'Components/MonitorToggleButton'; import Popover from 'Components/Tooltip/Popover'; import Tooltip from 'Components/Tooltip/Tooltip'; import { icons, kinds, sizes, tooltipPositions } from 'Helpers/Props'; import QualityProfileName from 'Settings/Profiles/Quality/QualityProfileName'; import fonts from 'Styles/Variables/fonts'; import formatBytes from 'Utilities/Number/formatBytes'; import stripHtml from 'Utilities/String/stripHtml'; import translate from 'Utilities/String/translate'; import AuthorAlternateTitles from './AuthorAlternateTitles'; import AuthorDetailsLinks from './AuthorDetailsLinks'; import AuthorTagsConnector from './AuthorTagsConnector'; import styles from './AuthorDetailsHeader.css'; const defaultFontSize = parseInt(fonts.defaultFontSize); const lineHeight = parseFloat(fonts.lineHeight); function getFanartUrl(images) { return images.find((x) => x.coverType === 'fanart')?.url; } class AuthorDetailsHeader extends Component { // // Lifecyle constructor(props) { super(props); this.state = { overviewHeight: 0, titleWidth: 0 }; } // // Listeners onOverviewMeasure = ({ height }) => { this.setState({ overviewHeight: height }); }; onTitleMeasure = ({ width }) => { this.setState({ titleWidth: width }); }; // // Render render() { const { id, width, authorName, ratings, path, statistics, qualityProfileId, monitored, status, overview, links, images, alternateTitles, tags, isSaving, isSmallScreen, onMonitorTogglePress } = this.props; const { bookFileCount, sizeOnDisk } = statistics; const { overviewHeight, titleWidth } = this.state; const statusDetails = getAuthorStatusDetails(status); const fanartUrl = getFanartUrl(images); const marqueeWidth = titleWidth - (isSmallScreen ? 85 : 160); let bookFilesCountMessage = translate('BookFilesCountMessage'); if (bookFileCount === 1) { bookFilesCountMessage = '1 book file'; } else if (bookFileCount > 1) { bookFilesCountMessage = `${bookFileCount} book files`; } return (
{ !!alternateTitles.length &&
} title={translate('AlternateTitles')} body={} position={tooltipPositions.BOTTOM} />
}
Links } tooltip={ } kind={kinds.INVERSE} position={tooltipPositions.BOTTOM} /> { !!tags.length && Tags } tooltip={} kind={kinds.INVERSE} position={tooltipPositions.BOTTOM} /> }
); } } AuthorDetailsHeader.propTypes = { id: PropTypes.number.isRequired, width: PropTypes.number.isRequired, authorName: PropTypes.string.isRequired, ratings: PropTypes.object.isRequired, path: PropTypes.string.isRequired, statistics: PropTypes.object.isRequired, qualityProfileId: PropTypes.number.isRequired, monitored: PropTypes.bool.isRequired, status: PropTypes.string.isRequired, overview: PropTypes.string, links: PropTypes.arrayOf(PropTypes.object).isRequired, images: PropTypes.arrayOf(PropTypes.object).isRequired, alternateTitles: PropTypes.arrayOf(PropTypes.string).isRequired, tags: PropTypes.arrayOf(PropTypes.number).isRequired, isSaving: PropTypes.bool.isRequired, isSmallScreen: PropTypes.bool.isRequired, onMonitorTogglePress: PropTypes.func.isRequired }; export default AuthorDetailsHeader;