import { mdiAccountMultiple, mdiCog, mdiCrowd, mdiFamilyTree, mdiHumanMaleFemale, mdiLockCheck, } from "@mdi/js"; import Icon from "@mdi/react"; import HomeIcon from "@mui/icons-material/Home"; import { Box, Divider, List, ListItemButton, ListItemIcon, ListItemText, ListSubheader, Tooltip, } from "@mui/material"; import React from "react"; import { Outlet, useLocation, useParams } from "react-router-dom"; import { Family, FamilyApi } from "../api/FamilyApi"; import { AsyncWidget } from "./AsyncWidget"; import { RouterLink } from "./RouterLink"; import { useSnackbar } from "./SnackbarProvider"; interface FamilyContext { family: Family; reloadFamilyInfo: () => void; } const FamilyContextK = React.createContext(null); export function BaseFamilyRoute(): React.ReactElement { const { familyId } = useParams(); const snackbar = useSnackbar(); const [family, setFamily] = React.useState(null); const loadKey = React.useRef(1); const load = async () => { setFamily(await FamilyApi.GetSingle(Number(familyId))); }; const onReload = () => { loadKey.current += 1; setFamily(null); }; const copyInvitationCode = async () => { navigator.clipboard.writeText(family!.invitation_code); snackbar("Le code d'invitation a été copié dans le presse papier !"); }; return ( ( theme.palette.mode === "light" ? theme.palette.grey[100] : "background.paper", }} > } label="Accueil" uri="" /> } label="Membres" uri="members" /> } label="Couples" uri="couples" /> } label="Arbre" uri="tree" /> Administration } label="Utilisateurs" uri="users" /> } label="Paramètres" uri="settings" /> {/* Invitation code */} )} /> ); } export function useFamily(): FamilyContext { return React.useContext(FamilyContextK)!; } function FamilyLink(p: { icon: React.ReactElement; uri: string; label: string; }): React.ReactElement { const family = useFamily(); const location = useLocation(); const link = family.family.URL(p.uri); return ( {p.icon} ); }