import {Trans} from '@common/i18n/trans'; import {ChartLayout, ChartLayoutProps} from '@common/charts/chart-layout'; import React, {Fragment, ReactElement} from 'react'; import {ReportMetric} from '@common/admin/analytics/report-metric'; import {ChartLoadingIndicator} from '@common/charts/chart-loading-indicator'; import {TopModelDatasetItem} from '@app/admin/reports/requests/use-insights-report'; import {InfoIcon} from '@common/icons/material/Info'; import {FormattedNumber} from '@common/i18n/formatted-number'; import {Link} from 'react-router-dom'; import {UserAvatar} from '@common/ui/images/user-avatar'; import {TitlePoster} from '@app/titles/title-poster/title-poster'; import {TitleLink} from '@app/titles/title-link'; import {UserProfileLink} from '@common/users/user-profile-link'; import {MediaPlayIcon} from '@common/icons/media/media-play'; import {getWatchLink} from '@app/videos/watch-page/get-watch-link'; import {SeasonPoster} from '@app/seasons/season-poster'; import {SeasonLink} from '@app/seasons/season-link'; import {EpisodePoster} from '@app/episodes/episode-poster/episode-poster'; import {EpisodeLink} from '@app/episodes/episode-link'; import clsx from 'clsx'; interface Props extends Partial { data?: ReportMetric; title: ReactElement; } export function TopModelsChartLayout({data, isLoading, ...layoutProps}: Props) { const dataItems = data?.datasets[0].data || []; return ( {isLoading && } {dataItems.map(item => (
}} />
))} {!isLoading && !dataItems.length ? (
) : null}
); } interface ImageProps { model: TopModelDatasetItem['model']; size: string; className: string; } function Image({model, size, className}: ImageProps) { const link = `/admin/${model.model_type}s/${model.id}`; switch (model.model_type) { case 'title': return ( ); case 'season': return ( ); case 'episode': return ( ); case 'video': return model.thumbnail ? ( ) : ( ); case 'user': // there's no separate insights page for user return ; } } interface NameProps { model: TopModelDatasetItem['model']; } function Name({model}: NameProps) { switch (model.model_type) { case 'title': return ; case 'season': return ( ); case 'episode': return ( ); case 'video': return ( {model.name} ); case 'user': return model.id ? ( ) : ( {model.display_name} ); } } interface DescriptionProps { model: TopModelDatasetItem['model']; } function Description({model}: DescriptionProps) { switch (model.model_type) { case 'title': return {model.year}; case 'season': return ; case 'episode': return ; case 'user': return null; case 'video': return ; } }