import { useEffect, useState } from 'react'; import { Button, Card, CardBody, Container, FormControl, FormLabel, Modal, ModalBody, ModalFooter, ModalHeader, Table } from 'react-bootstrap'; import PageBreadcrumb from '@/components/PageBreadcrumb'; import SessionVitalsModal, { rosterFromSession } from '@/components/SessionVitalsModal'; import { api } from '@/lib/api'; export default function ProgramSessionsPage() { const [items, setItems] = useState([]); const [error, setError] = useState(''); const [roster, setRoster] = useState(null); const [cancel, setCancel] = useState({ id: '', reason: '' }); const [reminding, setReminding] = useState(''); const load = async () => { const data = await api('/api/program-sessions?week=true'); setItems(data.items || []); }; useEffect(() => { load().catch((err) => setError(err.message)); }, []); const openRoster = async (session) => { setError(''); try { setRoster(rosterFromSession(await api(`/api/cohort-sessions/${session.id}`))); } catch (err) { setError(err.message); } }; return ( {error ?
{error}
: null}
This week
{items.map((session) => ( ))} {!items.length ? : null}
Date Cohort Slot Status Meet
{session.date} #{session.index} {session.cohort?.name || '—'} {session.slot} {session.status} {session.meetUrl ? Join : '—'} {session.status === 'scheduled' ? ( <> ) : null} {session.status !== 'cancelled' ? ( ) : null}
No sessions this week.
setCancel({ id: '', reason: '' })}>
Cancel and push session
Reason setCancel((current) => ({ ...current, reason: e.target.value }))} />
setRoster(null)} onSaved={load} />
); }