import { useEffect, useState } from "react"; import { Activite, Athlete, Session } from "../../classes"; import { dateToString, hoursToString } from "../edt"; import { Modal } from "../Modal"; import CreateActivite from "../createActivite"; import Loading from "../loading"; import { addActiviteToSession, createActivityAPI, delay, deletActiviteFromSession, getSessionOfActivite, subscribeSessionAPI, unsubscribeSessionAPI } from "../../requetes"; import { useLocalData } from "../../context/useLocalData"; type Props = { session:Session; open:boolean; setOpen:(b:boolean)=>void } function DetailSession({session,open,setOpen}:Props){ const {user,setUser} = useLocalData() const [activites,setActivites] = useState([]); const [open2, setOpen2] = useState(false); const [loading,setLoading] = useState(false); const [join,setJoin] = useState(user instanceof Athlete && user.sessions.includes(session)); const sDate = session.creneau; function handleDeleteActivite(activite:Activite): void { session.activites.splice(session.activites.indexOf(activite), 1); deletActiviteFromSession(activite); setActivites([...session.activites]) } function handleAddActivite(): void { setOpen2(true) } async function updateActivites(){ const newActivites = await getSessionOfActivite(session); if(newActivites!=null){ session.activites=newActivites; } setLoading(false); } useEffect(() => { if(open){ setLoading(true); updateActivites() } },[open]) async function subscribeSession(){ if(user instanceof Athlete){ await subscribeSessionAPI(user,session); user.sessions.push(session); setJoin(true); } } async function unsubscribeSession(){ if(user instanceof Athlete){ await unsubscribeSessionAPI(user,session); user.sessions = user.sessions.filter(s => s !== session); setJoin(false); } } async function returnActivite(activite: Activite|null){ if(activite!==null){ activite.session = session; const newActivite = await createActivityAPI(activite); await addActiviteToSession(session,newActivite); if(newActivite!=null){ session.activites.push(newActivite); setActivites([...session.activites]) } } setOpen2(false); } useEffect(() => { if(!loading){ setActivites([...session.activites]) } },[loading]) if(!open2){ return( setOpen(false)}>

{session.name}

{hoursToString(sDate)}
{dateToString(sDate)}
{user instanceof Athlete &&
{user.sessions.includes(session) ? :}
}
Activités :
{activites.map((activite,index)=>(
{activite.nom}
))} {loading &&
}
) }else{ return( returnActivite(activite)} session={session}/> ) } } export default DetailSession;