import { DateSelectArg } from "@fullcalendar/core"; import frLocale from "@fullcalendar/core/locales/fr"; import dayGridPlugin from "@fullcalendar/daygrid"; import interactionPlugin from "@fullcalendar/interaction"; import listPlugin from "@fullcalendar/list"; import FullCalendar from "@fullcalendar/react"; import { Checkbox, FormControl, FormControlLabel, FormGroup, FormLabel, } from "@mui/material"; import React from "react"; import { FamilyApi, FamilyUser } from "../../../api/FamilyApi"; import { AccommodationsReservationsApi, AccommodationsReservationsList, } from "../../../api/accommodations/AccommodationsReservationsApi"; import { useUpdateAccommodationReservation } from "../../../hooks/context_providers/accommodations/UpdateReservationDialogProvider"; import { AsyncWidget } from "../../../widgets/AsyncWidget"; import { useFamily } from "../../../widgets/BaseFamilyRoute"; import { FamilyPageTitle } from "../../../widgets/FamilyPageTitle"; import { useAccommodations } from "../../../widgets/accommodations/BaseAccommodationsRoute"; export function AccommodationsReservationsRoute(): React.ReactElement { const loadKey = React.useRef(1); const family = useFamily(); const accommodations = useAccommodations(); const updateReservation = useUpdateAccommodationReservation(); const [reservations, setReservations] = React.useState< AccommodationsReservationsList | undefined >(); const [users, setUsers] = React.useState(null); const [showValidated, setShowValidated] = React.useState(true); const [showRejected, setShowRejected] = React.useState(true); const [showPending, setShowPending] = React.useState(true); const [hiddenPeople, setHiddenPeople] = React.useState>( new Set() ); const [hiddenAccommodations, setHiddenAccommodations] = React.useState< Set >(new Set()); const load = async () => { setReservations( await AccommodationsReservationsApi.FullListOfFamily(family.family) ); setUsers(await FamilyApi.GetUsersList(family.family.family_id)); }; const reload = async () => { loadKey.current += 1; setUsers(null); }; const onSelect = (d: DateSelectArg) => { // TODO : render this functional // TODO : handle busy case console.info(d); updateReservation( { accommodation_id: -1, start: Math.floor(d.start.getTime() / 1000), end: Math.floor(d.end.getTime() / 1000), }, true ); }; return ( <> (
{/* Invitation status */} Status setShowValidated(v)} /> } label="Validé" /> setShowRejected(v)} /> } label="Rejetés" /> setShowPending(v)} /> } label="En attente de validation" /> {/* Accommodations */} Logements {accommodations.accommodations.fullList.map((a) => ( { if (v) hiddenAccommodations.delete(a.id); else hiddenAccommodations.add(a.id); setHiddenAccommodations( new Set(hiddenAccommodations) ); }} /> } label={a.name} /> ))} {/* People */} Personnes {users?.map((u) => ( { if (v) hiddenPeople.delete(u.user_id); else hiddenPeople.add(u.user_id); setHiddenPeople(new Set(hiddenPeople)); }} /> } label={u.user_name} /> ))}
{/* The calendar */}
)} /> ); }