import ClearIcon from "@mui/icons-material/Clear"; import { Alert, FormControl, FormControlLabel, FormLabel, IconButton, Paper, Radio, RadioGroup, Tab, Tabs, } from "@mui/material"; import React from "react"; import { useParams } from "react-router-dom"; import { buildAscendingTree, buildDescendingTree, } from "../../utils/family_tree"; import { useFamily } from "../../widgets/BaseFamilyRoute"; import { MemberItem } from "../../widgets/MemberItem"; import { RouterLink } from "../../widgets/RouterLink"; import { BasicFamilyTree } from "../../widgets/BasicFamilyTree"; import { ComplexFamilyTree } from "../../widgets/complex_family_tree/ComplexFamilyTree"; enum CurrTab { BasicTree, AdvancedTree, } enum TreeMode { Ascending, Descending, } export function FamilyMemberTreeRoute(): React.ReactElement { const { memberId } = useParams(); const family = useFamily(); const [currTab, setCurrTab] = React.useState(CurrTab.AdvancedTree); const [currMode, setCurrMode] = React.useState(TreeMode.Descending); const member = family.members.get(Number(memberId)); const tree = React.useMemo( () => !member ? null : currMode === TreeMode.Ascending ? buildAscendingTree(member.id, family.members, family.couples) : buildDescendingTree(member.id, family.members, family.couples), [member, currMode, family.members, family.couples] ); if (!member) { return ( <Alert severity="error"> L'arbre ne peut pas ĂȘtre constuit : le membre n'existe pas ! </Alert> ); } return ( <div style={{ flex: "1", display: "flex", flexDirection: "column", marginBottom: "10px", }} > {/* parent bar */} <div style={{ display: "flex" }}> <MemberItem dense member={member} secondary={ <RouterLink to={family.family.URL("tree")}> <IconButton> <ClearIcon /> </IconButton> </RouterLink> } /> <div style={{ flex: "10" }}></div> <FormControl> <FormLabel>Arbre</FormLabel> <RadioGroup row value={currMode} onChange={(_e, v) => setCurrMode(Number(v))} > <FormControlLabel value={TreeMode.Descending} control={<Radio />} label="Descendant" /> <FormControlLabel value={TreeMode.Ascending} control={<Radio />} label="Ascendant" /> </RadioGroup> </FormControl> <div style={{ flex: "2" }}></div> <Tabs value={currTab} onChange={(_e, v) => setCurrTab(v)} aria-label="basic tabs example" > <Tab tabIndex={CurrTab.BasicTree} label="Basique" /> <Tab tabIndex={CurrTab.AdvancedTree} label="AvancĂ©" /> </Tabs> </div> {/* the tree itself */} <Paper style={{ flex: "1" }}> {currTab === CurrTab.BasicTree ? ( <BasicFamilyTree tree={tree!} /> ) : ( <ComplexFamilyTree tree={tree!} isUp={currMode === TreeMode.Ascending} /> )} </Paper> </div> ); }