'use client'; import * as React from 'react'; import { useRouter } from 'next/navigation'; import Image from 'next/image'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { AppSidebar } from '@/components/app-sidebar'; import { SiteHeader } from '@/components/site-header'; import { SidebarInset, SidebarProvider } from '@/components/ui/sidebar'; import { Button } from '@/components/ui/button'; interface LikedVideoItem { id: string; videoId: string; createdAt: string; video: { id: string; title: string; thumbnail?: string; durationSec?: number; url: string; playlist: { title: string; course: { id: string; title: string; }; }; }; } export default function LikedVideosClient() { const router = useRouter(); const [likes, setLikes] = React.useState([]); const [isLoading, setIsLoading] = React.useState(true); React.useEffect(() => { const fetchLikes = async () => { try { const res = await fetch('/api/likes/all'); if (res.ok) { const data = await res.json(); setLikes(data); } } catch (err) { console.error('Failed to fetch liked videos', err); } finally { setIsLoading(false); } }; fetchLikes(); }, []); const handleVideoClick = (videoId: string) => { router.push(`/videoplayer?videoId=${videoId}`); }; const formatTime = (seconds?: number) => { if (!seconds) return '0:00'; const mins = Math.floor(seconds / 60); const secs = seconds % 60; return `${mins}:${secs.toString().padStart(2, '0')}`; }; const formatDate = (dateString: string) => { const date = new Date(dateString); return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric', }); }; if (isLoading) { return (
Liked Videos

Loading...

); } return (
Liked Videos {likes.length === 0 ? (

No liked videos yet

) : (
Thumbnail Title Playlist Course Duration Liked On Action {likes.map((item) => (
handleVideoClick(item.video.id)} > {item.video.thumbnail ? (
) : (
No image
)}

handleVideoClick(item.video.id)} > {item.video.title}

{item.video.playlist.title} {item.video.playlist.course.title} {formatTime(item.video.durationSec)} {formatDate(item.createdAt)}
))}
)}
); }