37 lines
1012 B
TypeScript
37 lines
1012 B
TypeScript
interface EpisodeCardLabelItem {
|
|
type?: string;
|
|
title?: string;
|
|
series_title?: string;
|
|
season_number?: number | null;
|
|
episode_number?: number | null;
|
|
}
|
|
|
|
export interface EpisodeCardLabels {
|
|
seriesTitle: string;
|
|
episodeTitle?: string;
|
|
episodeCode: string;
|
|
}
|
|
|
|
function formatEpisodeCode(seasonNumber: number, episodeNumber: number): string {
|
|
return `S${String(seasonNumber).padStart(2, "0")}E${String(episodeNumber).padStart(2, "0")}`;
|
|
}
|
|
|
|
export function buildEpisodeCardLabels(item: EpisodeCardLabelItem): EpisodeCardLabels | null {
|
|
if (
|
|
item.type !== "episode" ||
|
|
item.season_number == null ||
|
|
item.episode_number == null ||
|
|
!item.title
|
|
) {
|
|
return null;
|
|
}
|
|
|
|
const hasSeriesTitle = Boolean(item.series_title && item.series_title !== item.title);
|
|
|
|
return {
|
|
seriesTitle: hasSeriesTitle ? item.series_title! : item.title,
|
|
episodeTitle: hasSeriesTitle ? item.title : undefined,
|
|
episodeCode: formatEpisodeCode(item.season_number, item.episode_number),
|
|
};
|
|
}
|