Make links live
This commit is contained in:
		| @@ -1,7 +1,26 @@ | ||||
| import { Outlet, useParams } from "react-router-dom"; | ||||
| import { Family, FamilyApi } from "../api/FamilyApi"; | ||||
| import { | ||||
|   mdiAccountMultiple, | ||||
|   mdiCog, | ||||
|   mdiCrowd, | ||||
|   mdiFamilyTree, | ||||
|   mdiHumanMaleFemale, | ||||
| } from "@mdi/js"; | ||||
| import Icon from "@mdi/react"; | ||||
| import HomeIcon from "@mui/icons-material/Home"; | ||||
| import { | ||||
|   Box, | ||||
|   Divider, | ||||
|   List, | ||||
|   ListItemButton, | ||||
|   ListItemIcon, | ||||
|   ListItemText, | ||||
|   ListSubheader, | ||||
| } 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"; | ||||
|  | ||||
| interface FamilyContext { | ||||
|   family: Family; | ||||
| @@ -39,10 +58,61 @@ export function BaseFamilyRoute(): React.ReactElement { | ||||
|             reloadFamilyInfo: onReload, | ||||
|           }} | ||||
|         > | ||||
|           <div> | ||||
|             <p>base family route</p> | ||||
|             <Outlet /> | ||||
|           </div> | ||||
|           <Box sx={{ display: "flex", flex: "2" }}> | ||||
|             <List component="nav"> | ||||
|               <FamilyLink icon={<HomeIcon />} label="Accueil" uri="" /> | ||||
|  | ||||
|               <FamilyLink | ||||
|                 icon={<Icon path={mdiCrowd} size={1} />} | ||||
|                 label="Membres" | ||||
|                 uri="members" | ||||
|               /> | ||||
|  | ||||
|               <FamilyLink | ||||
|                 icon={<Icon path={mdiHumanMaleFemale} size={1} />} | ||||
|                 label="Couples" | ||||
|                 uri="couples" | ||||
|               /> | ||||
|  | ||||
|               <FamilyLink | ||||
|                 icon={<Icon path={mdiFamilyTree} size={1} />} | ||||
|                 label="Arbre" | ||||
|                 uri="tree" | ||||
|               /> | ||||
|  | ||||
|               <Divider sx={{ my: 1 }} /> | ||||
|               <ListSubheader component="div" inset> | ||||
|                 Administration | ||||
|               </ListSubheader> | ||||
|  | ||||
|               <FamilyLink | ||||
|                 icon={<Icon path={mdiAccountMultiple} size={1} />} | ||||
|                 label="Utilisateurs" | ||||
|                 uri="users" | ||||
|               /> | ||||
|  | ||||
|               <FamilyLink | ||||
|                 icon={<Icon path={mdiCog} size={1} />} | ||||
|                 label="Paramètres" | ||||
|                 uri="settings" | ||||
|               /> | ||||
|             </List> | ||||
|  | ||||
|             <Box | ||||
|               component="main" | ||||
|               sx={{ | ||||
|                 backgroundColor: (theme) => | ||||
|                   theme.palette.mode === "light" | ||||
|                     ? theme.palette.grey[100] | ||||
|                     : theme.palette.grey[900], | ||||
|                 flexGrow: 1, | ||||
|                 overflow: "auto", | ||||
|                 padding: "20px", | ||||
|               }} | ||||
|             > | ||||
|               <Outlet /> | ||||
|             </Box> | ||||
|           </Box> | ||||
|         </FamilyContextK.Provider> | ||||
|       )} | ||||
|     /> | ||||
| @@ -52,3 +122,22 @@ export function BaseFamilyRoute(): React.ReactElement { | ||||
| 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 ( | ||||
|     <RouterLink to={link}> | ||||
|       <ListItemButton selected={link === location.pathname}> | ||||
|         <ListItemIcon>{p.icon}</ListItemIcon> | ||||
|         <ListItemText primary={p.label} /> | ||||
|       </ListItemButton> | ||||
|     </RouterLink> | ||||
|   ); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user