All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
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<void>;
 | 
						|
}
 | 
						|
 | 
						|
const AccommodationsContextK =
 | 
						|
  React.createContext<AccommodationsContext | null>(null);
 | 
						|
 | 
						|
export function BaseAccommodationsRoute(): React.ReactElement {
 | 
						|
  const family = useFamily();
 | 
						|
 | 
						|
  const [accommodations, setAccommodations] =
 | 
						|
    React.useState<null | AccommodationsList>(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<void>((res, _rej) => {
 | 
						|
      loadPromise.current = () => res();
 | 
						|
    });
 | 
						|
  };
 | 
						|
 | 
						|
  return (
 | 
						|
    <AsyncWidget
 | 
						|
      ready={accommodations !== null}
 | 
						|
      loadKey={`${family.familyId}-${loadKey.current}`}
 | 
						|
      load={load}
 | 
						|
      errMsg="Échec du chargement des informations sur les logements de la famille !"
 | 
						|
      build={() => {
 | 
						|
        if (loadPromise.current != null) {
 | 
						|
          loadPromise.current?.();
 | 
						|
          loadPromise.current = null;
 | 
						|
        }
 | 
						|
 | 
						|
        return (
 | 
						|
          <AccommodationsContextK.Provider
 | 
						|
            value={{
 | 
						|
              accommodations: accommodations!,
 | 
						|
              reloadAccommodationsList: onReload,
 | 
						|
            }}
 | 
						|
          >
 | 
						|
            <UpdateAccommodationDialogProvider>
 | 
						|
              <CreateAccommodationCalendarURLDialogProvider>
 | 
						|
                <InstallCalendarDialogProvider>
 | 
						|
                  <UpdateReservationDialogProvider>
 | 
						|
                    <Outlet />
 | 
						|
                  </UpdateReservationDialogProvider>
 | 
						|
                </InstallCalendarDialogProvider>
 | 
						|
              </CreateAccommodationCalendarURLDialogProvider>
 | 
						|
            </UpdateAccommodationDialogProvider>
 | 
						|
          </AccommodationsContextK.Provider>
 | 
						|
        );
 | 
						|
      }}
 | 
						|
    />
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
export function useAccommodations(): AccommodationsContext {
 | 
						|
  return React.useContext(AccommodationsContextK)!;
 | 
						|
}
 |