import { RecommendationDto, RecommendationType } from '@jellyfin/sdk/lib/generated-client'; import React, { FC } from 'react'; import escapeHTML from 'escape-html'; import { useGetMovieRecommendations, useGetSuggestionSectionsWithItems } from 'hooks/useFetchItems'; import { appRouter } from 'components/router/appRouter'; import globalize from 'scripts/globalize'; import Loading from 'components/loading/LoadingComponent'; import SectionContainer from './SectionContainer'; import { ParentId } from 'types/library'; import { Section, SectionType } from 'types/sections'; interface SuggestionsSectionViewProps { parentId: ParentId; sectionType: SectionType[]; isMovieRecommendationEnabled: boolean | undefined; } const SuggestionsSectionView: FC = ({ parentId, sectionType, isMovieRecommendationEnabled = false }) => { const { isLoading, data: sectionsWithItems } = useGetSuggestionSectionsWithItems(parentId, sectionType); const { isLoading: isRecommendationsLoading, data: movieRecommendationsItems } = useGetMovieRecommendations(isMovieRecommendationEnabled, parentId); if (isLoading || isRecommendationsLoading) { return ; } if (!sectionsWithItems?.length && !movieRecommendationsItems?.length) { return (

{globalize.translate('MessageNothingHere')}

{globalize.translate('MessageNoItemsAvailable')}

); } const getRouteUrl = (section: Section) => { return appRouter.getRouteUrl('list', { serverId: window.ApiClient.serverId(), itemTypes: section.itemTypes, parentId: parentId }); }; const getRecommendationTittle = (recommendation: RecommendationDto) => { let title = ''; switch (recommendation.RecommendationType) { case RecommendationType.SimilarToRecentlyPlayed: title = globalize.translate( 'RecommendationBecauseYouWatched', recommendation.BaselineItemName ); break; case RecommendationType.SimilarToLikedItem: title = globalize.translate( 'RecommendationBecauseYouLike', recommendation.BaselineItemName ); break; case RecommendationType.HasDirectorFromRecentlyPlayed: case RecommendationType.HasLikedDirector: title = globalize.translate( 'RecommendationDirectedBy', recommendation.BaselineItemName ); break; case RecommendationType.HasActorFromRecentlyPlayed: case RecommendationType.HasLikedActor: title = globalize.translate( 'RecommendationStarring', recommendation.BaselineItemName ); break; } return escapeHTML(title); }; return ( <> {sectionsWithItems?.map(({ section, items }) => ( ))} {movieRecommendationsItems?.map((recommendation, index) => ( ))} ); }; export default SuggestionsSectionView;