"use client"; import React, { useState, useEffect } from "react"; import { useParams } from "next/navigation"; import { lmsApi, cmsApi, Course, Meeting } from "@/lib/api"; import { Video, Plus, Calendar as CalendarIcon, Clock, Trash2, Loader2, Globe, Link as LinkIcon, X } from "lucide-react"; import CourseEditorLayout from "@/components/CourseEditorLayout"; export default function LiveSessionsPage() { const { id } = useParams() as { id: string }; const [meetings, setMeetings] = useState([]); const [loading, setLoading] = useState(true); const [isCreateModalOpen, setIsCreateModalOpen] = useState(false); const [newMeeting, setNewMeeting] = useState({ title: "", description: "", start_at: new Date().toISOString().slice(0, 16), duration_minutes: 60, provider: "jitsi" }); const loadMeetings = async () => { try { setLoading(true); const data = await lmsApi.getMeetings(id); setMeetings(data); } catch (error) { console.error("Error loading meetings:", error); } finally { setLoading(false); } }; useEffect(() => { loadMeetings(); }, [id]); const handleCreateMeeting = async () => { try { await lmsApi.createMeeting(id, { ...newMeeting, start_at: new Date(newMeeting.start_at).toISOString() }); setIsCreateModalOpen(false); loadMeetings(); } catch (error) { console.error("Error creating meeting:", error); alert("Failed to create meeting."); } }; const handleDeleteMeeting = async (meetingId: string) => { if (!confirm("Are you sure you want to delete this meeting?")) return; try { await lmsApi.deleteMeeting(id, meetingId); loadMeetings(); } catch (error) { console.error("Error deleting meeting:", error); alert("Failed to delete meeting."); } }; if (loading) { return (
); } return ( <> setIsCreateModalOpen(true)} className="flex items-center gap-2 px-6 py-3 bg-blue-600 hover:bg-blue-500 text-white rounded-2xl font-black text-[10px] uppercase tracking-[0.2em] shadow-xl shadow-blue-500/20 transition-all active:scale-95" > PROGRAM SESSION } >
{meetings.length === 0 ? (

No active sessions

Start by scheduling your first virtual meeting for this course.

) : ( meetings.map(meeting => (

{meeting.title}

{meeting.provider} Session
{new Date(meeting.start_at).toLocaleDateString(undefined, { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })}
{new Date(meeting.start_at).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })} | {meeting.duration_minutes} MIN
{meeting.description && (

"{meeting.description}"

)}
{meeting.is_active ? 'SCHEDULED' : 'PAST'}
)) )}
{/* Create Meeting Modal */} {isCreateModalOpen && (

Schedule Session

setNewMeeting({ ...newMeeting, title: e.target.value })} placeholder="e.g., Weekly Office Hours" className="w-full bg-slate-50 dark:bg-black/20 border border-slate-200 dark:border-white/10 rounded-2xl py-4 px-5 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500/30 text-slate-900 dark:text-white placeholder:text-slate-300 transition-all font-medium shadow-inner" />