1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/src/components/mediainfo/PrimaryMediaInfo.tsx

96 lines
2.8 KiB
TypeScript
Raw Normal View History

import React, { type FC } from 'react';
import classNames from 'classnames';
import Box from '@mui/material/Box';
import usePrimaryMediaInfo from './usePrimaryMediaInfo';
import MediaInfoItem from './MediaInfoItem';
import StarIcons from './StarIcons';
import CaptionMediaInfo from './CaptionMediaInfo';
import CriticRatingMediaInfo from './CriticRatingMediaInfo';
import EndsAt from './EndsAt';
import { ItemMediaKind } from 'types/base/models/item-media-kind';
2024-03-03 01:31:35 +03:00
import type { ItemDto } from 'types/base/models/item-dto';
import type { MiscInfo } from 'types/mediaInfoItem';
2024-08-10 04:09:59 +03:00
import type { PrimaryInfoOpts } from './type';
2024-08-10 04:09:59 +03:00
interface PrimaryMediaInfoProps extends PrimaryInfoOpts {
className?: string;
item: ItemDto;
2024-08-10 04:09:59 +03:00
showStarRatingInfo?: boolean;
showCaptionIndicatorInfo?: boolean;
showCriticRatingInfo?: boolean;
showEndsAtInfo?: boolean;
showMissingIndicatorInfo?: boolean;
getMissingIndicator?: () => React.JSX.Element | null
}
const PrimaryMediaInfo: FC<PrimaryMediaInfoProps> = ({
className,
item,
2024-08-10 04:09:59 +03:00
showYearInfo,
showAudioContainerInfo,
showEpisodeTitleInfo,
showOriginalAirDateInfo,
showRuntimeInfo,
showProgramIndicatorInfo,
includeEpisodeTitleIndexNumber,
showOfficialRatingInfo,
showStarRatingInfo = false,
showCaptionIndicatorInfo = false,
showCriticRatingInfo = false,
showEndsAtInfo = false,
getMissingIndicator
}) => {
const miscInfo = usePrimaryMediaInfo({
item,
2024-08-10 04:09:59 +03:00
showYearInfo,
showAudioContainerInfo,
showEpisodeTitleInfo,
showOriginalAirDateInfo,
showRuntimeInfo,
showProgramIndicatorInfo,
includeEpisodeTitleIndexNumber,
showOfficialRatingInfo
});
const {
StartDate,
HasSubtitles,
MediaType,
RunTimeTicks,
CommunityRating,
CriticRating
} = item;
const cssClass = classNames(className);
const renderMediaInfo = (info: MiscInfo | undefined, index: number) => (
<MediaInfoItem key={index} miscInfo={info} />
);
return (
<Box className={cssClass}>
{miscInfo.map((info, index) => renderMediaInfo(info, index))}
2024-08-10 04:09:59 +03:00
{showStarRatingInfo && CommunityRating && (
<StarIcons communityRating={CommunityRating} />
)}
2024-08-10 04:09:59 +03:00
{showCaptionIndicatorInfo && HasSubtitles && <CaptionMediaInfo />}
2024-08-10 04:09:59 +03:00
{showCriticRatingInfo && CriticRating && (
<CriticRatingMediaInfo criticRating={CriticRating} />
)}
2024-08-10 04:09:59 +03:00
{showEndsAtInfo
&& MediaType === ItemMediaKind.Video
&& RunTimeTicks
&& !StartDate && <EndsAt runTimeTicks={RunTimeTicks} />}
2024-08-10 04:09:59 +03:00
{getMissingIndicator?.()}
</Box>
);
};
export default PrimaryMediaInfo;