import React from "react"; import { Outlet } from "react-router-dom"; import { AccommodationListApi, AccommodationsList, } from "../../api/accommodations/AccommodationListApi"; import { CreateAccommodationCalendarURLDialogProvider } from "../../hooks/context_providers/accommodations/CreateAccommodationCalendarURLDialogProvider"; import { InstallCalendarDialogProvider } from "../../hooks/context_providers/accommodations/InstallCalendarDialogProvider"; import { UpdateAccommodationDialogProvider } from "../../hooks/context_providers/accommodations/UpdateAccommodationDialogProvider"; import { UpdateReservationDialogProvider } from "../../hooks/context_providers/accommodations/UpdateReservationDialogProvider"; import { AsyncWidget } from "../AsyncWidget"; import { useFamily } from "../BaseFamilyRoute"; interface AccommodationsContext { accommodations: AccommodationsList; reloadAccommodationsList: () => Promise; } const AccommodationsContextK = React.createContext(null); export function BaseAccommodationsRoute(): React.ReactElement { const family = useFamily(); const [accommodations, setAccommodations] = React.useState(null); const loadKey = React.useRef(1); const loadPromise = React.useRef<() => void>(null); const load = async () => { setAccommodations( await AccommodationListApi.GetListOfFamily(family.family) ); }; const onReload = async () => { loadKey.current += 1; setAccommodations(null); return new Promise((res, _rej) => { loadPromise.current = () => res(); }); }; return ( { if (loadPromise.current != null) { loadPromise.current?.(); loadPromise.current = null; } return ( ); }} /> ); } export function useAccommodations(): AccommodationsContext { return React.useContext(AccommodationsContextK)!; }