import { mdiAccountMultiple, mdiCog, mdiContentCopy, mdiCrowd, mdiFamilyTree, mdiHumanMaleFemale, mdiLockCheck, } from "@mdi/js"; import Icon from "@mdi/react"; import HomeIcon from "@mui/icons-material/Home"; import { Box, Divider, IconButton, List, ListItem, ListItemButton, ListItemIcon, ListItemText, ListSubheader, Tooltip, } from "@mui/material"; import { mdiRefresh } from "@mdi/js"; 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 "../context_providers/SnackbarProvider"; import { useConfirm } from "../context_providers/ConfirmDialogProvider"; import { useAlert } from "../context_providers/AlertDialogProvider"; interface FamilyContext { family: Family; reloadFamilyInfo: () => void; } const FamilyContextK = React.createContext(null); export function BaseFamilyRoute(): React.ReactElement { const { familyId } = useParams(); const snackbar = useSnackbar(); const alert = useAlert(); const confirm = useConfirm(); 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 !"); }; const changeInvitationCode = async () => { try { if ( !(await confirm( "Voulez-vous vraiment générer un nouveau code d'invitation pour cette famille ? Cette action aura pour effet d'invalider l'ancien code !" )) ) return; await FamilyApi.RenewInvitationCode(family!.family_id); snackbar("Le code d'invitation a été changé avec succès !"); onReload(); } catch (e) { console.error(e); alert("Echec du renouvellement du code d'invitation !"); } }; return ( ( } 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 */} {family!.is_admin && ( )} } > )} /> ); } 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} ); }