Files
Web-Frontend/client/src/components/Sidebar/Sidebar.jsx
T

87 lines
2.9 KiB
React
Raw Normal View History

2025-07-28 15:10:57 -07:00
import { useSlotRecipe, Box, Button, IconButton } from "@chakra-ui/react";
2025-07-31 08:56:32 -07:00
import { ColorModeButton, useColorMode } from "@/components/ui/color-mode";
2026-06-04 15:30:01 -07:00
import { useState } from "react";
import { NavLink } from "react-router-dom";
2025-08-05 12:57:18 -07:00
import Tooltip from "../Canvas/CanvasComponents/Tooltip.jsx";
2026-06-04 15:30:01 -07:00
import { Mountain, House, Earth, MapPin, ShieldUser, Menu, CircleUserRound, KeyRound } from 'lucide-react';
2026-06-04 15:30:01 -07:00
export default function Sidebar() {
const { toggleColorMode } = useColorMode();
const [isOpen, setIsOpen] = useState(true);
const [activeButton, setActiveButton] = useState(0)
2025-07-29 11:08:36 -07:00
const recipe = useSlotRecipe({ key: "sidebar" });
const styles = recipe();
2025-07-17 09:45:36 -07:00
2026-06-04 15:30:01 -07:00
// const buttons = useMemo(() => {
// if (["settings", "personal", "security"].includes(view)) {
// return [
// {icon: CircleUserRound, name: "Personal Info", url: "/personal"},
// {icon: KeyRound, name: "Security", url: "/security"},
// ];
// }
// return [
// {icon: House, name: "Home", url: "/mydashboard"},
// {icon: Earth, name: "Global Map", url: "/global"},
// {icon: MapPin, name: "Regional Map", url: "/regional"},
// {icon: Mountain, name: "Volcano", url: "/volcanohome"},
// {icon: ShieldUser, name: "Admin", url: "/medataentry"}
// ];
// }, [view]);
const buttons = [
{icon: House, name: "Home", url: "/home"},
{icon: Earth, name: "Global Map", url: "/global-map"},
2026-06-04 15:30:01 -07:00
{icon: MapPin, name: "Regional Map", url: "/regional-map"},
{icon: Mountain, name: "Volcano", url: "/volcano"},
{icon: ShieldUser, name: "Admin", url: "/admin"}
2026-06-04 15:30:01 -07:00
];
2025-08-12 14:21:31 -07:00
const toggleSidebar = () => {
2025-07-17 09:45:36 -07:00
if (isOpen) setIsOpen(false);
else setIsOpen(true);
};
return (
2026-06-04 15:30:01 -07:00
<Box css={styles.root} width={isOpen ? "210px" : "71px"} transition="width 0.4s ease" position="relative">
<IconButton aria-label="Toggle Sidebar" variant="plain" size="md" onClick={toggleSidebar} width="54px">
<Menu />
</IconButton>
2025-07-17 09:45:36 -07:00
{buttons.map((button, idx) => {
const Icon = button.icon;
2025-07-29 11:08:36 -07:00
return (
2026-06-04 15:30:01 -07:00
<Tooltip key={button.name} tooltipkey={idx} content={button.name} sidebarIsOpen={isOpen}>
<Button
as={NavLink}
to={button.url}
key={button.name}
2026-06-04 15:30:01 -07:00
css={styles.buttons}
2025-07-29 11:08:36 -07:00
justifyContent="flex-start"
>
<Icon />
<span
style={{
2025-08-12 14:21:31 -07:00
opacity: isOpen ? 1 : 0,
transition: "opacity 0.4s ease",
overflow: "hidden",
whiteSpace: "nowrap",
display: "inline-block",
lineHeight: 1.2
2025-07-17 09:45:36 -07:00
}}
>
{button.name}
</span>
2025-07-29 11:08:36 -07:00
</Button>
</Tooltip>
2025-07-29 11:08:36 -07:00
)
2025-07-17 09:45:36 -07:00
})}
2025-07-31 08:56:32 -07:00
<ColorModeButton
2025-08-12 14:21:31 -07:00
onClick={() => {
toggleColorMode();
}}
position="absolute"
bottom="2"
/>
</Box>
);
2025-07-17 09:45:36 -07:00
}