"use client"; import Link from "next/link"; import Image from "next/image"; import { Disc } from "lucide-react"; import { Podcast } from "../types"; import { memo } from "react"; import { api } from "@/lib/api"; import { HorizontalCarousel, CarouselItem } from "@/components/ui/HorizontalCarousel"; interface PodcastsGridProps { podcasts: Podcast[]; } interface PodcastCardProps { podcast: Podcast; index: number; } // Always proxy images through the backend for caching and mobile compatibility const getProxiedImageUrl = (podcast: Podcast): string | null => { const imageUrl = podcast.coverUrl || podcast.coverArt || podcast.imageUrl; if (!imageUrl) return null; return api.getCoverArtUrl(imageUrl, 300); }; const PodcastCard = memo( function PodcastCard({ podcast, index }: PodcastCardProps) { const imageUrl = getProxiedImageUrl(podcast); return (
{imageUrl ? ( {podcast.title} ) : ( )}

{podcast.title}

{podcast.author || "Podcast"}

); }, (prevProps, nextProps) => { return prevProps.podcast.id === nextProps.podcast.id && prevProps.index === nextProps.index; } ); const PodcastsGrid = memo(function PodcastsGrid({ podcasts, }: PodcastsGridProps) { return ( {podcasts.map((podcast, index) => ( ))} ); }); export { PodcastsGrid };