All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import React from "react";
 | 
						|
import { Outlet } from "react-router-dom";
 | 
						|
import { CoupleApi, CouplesList } from "../../api/genealogy/CoupleApi";
 | 
						|
import { MemberApi, MembersList } from "../../api/genealogy/MemberApi";
 | 
						|
import { AsyncWidget } from "../AsyncWidget";
 | 
						|
import { useFamily } from "../BaseFamilyRoute";
 | 
						|
 | 
						|
interface GenealogyContext {
 | 
						|
  members: MembersList;
 | 
						|
  couples: CouplesList;
 | 
						|
  reloadMembersList: () => Promise<void>;
 | 
						|
  reloadCouplesList: () => Promise<void>;
 | 
						|
}
 | 
						|
 | 
						|
const GenealogyContextK = React.createContext<GenealogyContext | null>(null);
 | 
						|
 | 
						|
export function BaseGenealogyRoute(): React.ReactElement {
 | 
						|
  const family = useFamily();
 | 
						|
 | 
						|
  const [members, setMembers] = React.useState<null | MembersList>(null);
 | 
						|
  const [couples, setCouples] = React.useState<null | CouplesList>(null);
 | 
						|
 | 
						|
  const loadKey = React.useRef(1);
 | 
						|
 | 
						|
  const loadPromise = React.useRef<() => void>(null);
 | 
						|
 | 
						|
  const load = async () => {
 | 
						|
    setMembers(await MemberApi.GetEntireList(family.familyId));
 | 
						|
    setCouples(await CoupleApi.GetEntireList(family.familyId));
 | 
						|
  };
 | 
						|
 | 
						|
  const onReload = async () => {
 | 
						|
    loadKey.current += 1;
 | 
						|
    setMembers(null);
 | 
						|
    setCouples(null);
 | 
						|
 | 
						|
    return new Promise<void>((res, _rej) => {
 | 
						|
      loadPromise.current = () => res();
 | 
						|
    });
 | 
						|
  };
 | 
						|
 | 
						|
  return (
 | 
						|
    <AsyncWidget
 | 
						|
      ready={members !== null && couples !== null}
 | 
						|
      loadKey={`${family.familyId}-${loadKey.current}`}
 | 
						|
      load={load}
 | 
						|
      errMsg="Échec du chargement des informations de généalogie de la famille !"
 | 
						|
      build={() => {
 | 
						|
        if (loadPromise.current != null) {
 | 
						|
          loadPromise.current?.();
 | 
						|
          loadPromise.current = null;
 | 
						|
        }
 | 
						|
 | 
						|
        return (
 | 
						|
          <GenealogyContextK.Provider
 | 
						|
            value={{
 | 
						|
              members: members!,
 | 
						|
              couples: couples!,
 | 
						|
              reloadMembersList: onReload,
 | 
						|
              reloadCouplesList: onReload,
 | 
						|
            }}
 | 
						|
          >
 | 
						|
            <Outlet />
 | 
						|
          </GenealogyContextK.Provider>
 | 
						|
        );
 | 
						|
      }}
 | 
						|
    />
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
export function useGenealogy(): GenealogyContext {
 | 
						|
  return React.useContext(GenealogyContextK)!;
 | 
						|
}
 |