BroadcastCard.tsx 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. "use client";
  2. import Link from "next/link";
  3. import type { BroadcastInfo } from "@/types/broadcast";
  4. import HotIndicator from "@/components/ui/HotIndicator";
  5. import styles from "./styles/BroadcastCard.module.scss";
  6. interface BroadcastCardProps {
  7. broadcast: BroadcastInfo;
  8. variant?: "carousel" | "grid";
  9. }
  10. export default function BroadcastCard({ broadcast, variant = "grid" }: BroadcastCardProps) {
  11. const cardClass = variant === "carousel" ? styles["carousel-card"] : styles["video-card"];
  12. const thumbnailClass =
  13. variant === "carousel" ? styles["carousel-thumbnail"] : styles["video-thumbnail"];
  14. const infoClass = variant === "carousel" ? styles["carousel-info"] : styles["video-info"];
  15. const titleClass = variant === "carousel" ? styles["carousel-title"] : styles["video-title"];
  16. const channelClass =
  17. variant === "carousel" ? styles["carousel-channel"] : styles["video-channel"];
  18. return (
  19. <Link href={`/live/${broadcast.id}`} className={cardClass}>
  20. <div className={thumbnailClass}>
  21. <div className={styles["placeholder-thumbnail"]}>{broadcast.title}</div>
  22. <div className={styles["live-indicator"]}>🔴 LIVE</div>
  23. {variant === "carousel" && (
  24. <>
  25. <div className={styles["viewer-count"]}>
  26. 👥 {broadcast.viewerCount.toLocaleString()}
  27. </div>
  28. {/* <div className={styles['hot-indicator']}>
  29. <HotIndicator />
  30. </div> */}
  31. </>
  32. )}
  33. </div>
  34. <div className={infoClass}>
  35. <h3 className={titleClass}>{broadcast.title}</h3>
  36. {variant === "carousel" ? (
  37. <p className={channelClass}>{broadcast.channel}</p>
  38. ) : (
  39. <div className={styles["video-meta"]}>
  40. <div className={channelClass}>{broadcast.channel}</div>
  41. <div className={styles["video-stats"]}>
  42. <span className={styles["viewers"]}>
  43. 👥 {broadcast.viewerCount.toLocaleString()}명 시청중
  44. </span>
  45. <span className={styles["category"]}>#{broadcast.category}</span>
  46. <span className={styles["live-status"]}>방송 중</span>
  47. </div>
  48. </div>
  49. )}
  50. </div>
  51. </Link>
  52. );
  53. }