mirror of
https://github.com/yzernik/squeaknode.git
synced 2026-08-17 13:07:32 +02:00
108 lines
3 KiB
JavaScript
108 lines
3 KiB
JavaScript
import React, { useState, useEffect } from "react";
|
|
import { Drawer, IconButton, List } from "@material-ui/core";
|
|
import {
|
|
Home as HomeIcon,
|
|
NotificationsNone as NotificationsIcon,
|
|
People as ProfilesIcon,
|
|
AttachMoney as LightningIcon,
|
|
QuestionAnswer as SupportIcon,
|
|
LibraryBooks as LibraryIcon,
|
|
HelpOutline as FAQIcon,
|
|
ArrowBack as ArrowBackIcon,
|
|
} from "@material-ui/icons";
|
|
import { useTheme } from "@material-ui/styles";
|
|
import { withRouter } from "react-router-dom";
|
|
import classNames from "classnames";
|
|
|
|
// styles
|
|
import useStyles from "./styles";
|
|
|
|
// components
|
|
import SidebarLink from "./components/SidebarLink/SidebarLink";
|
|
import Dot from "./components/Dot";
|
|
|
|
// context
|
|
import {
|
|
useLayoutState,
|
|
useLayoutDispatch,
|
|
toggleSidebar,
|
|
} from "../../context/LayoutContext";
|
|
|
|
const structure = [
|
|
{ id: 0, label: "Timeline", link: "/app/timeline", icon: <HomeIcon /> },
|
|
{ id: 1, label: "Profiles", link: "/app/profiles", icon: <ProfilesIcon /> },
|
|
{ id: 2, label: "Lightning", link: "/app/lightning", icon: <LightningIcon /> },
|
|
];
|
|
|
|
function Sidebar({ location }) {
|
|
var classes = useStyles();
|
|
var theme = useTheme();
|
|
|
|
// global
|
|
var { isSidebarOpened } = useLayoutState();
|
|
var layoutDispatch = useLayoutDispatch();
|
|
|
|
// local
|
|
var [isPermanent, setPermanent] = useState(true);
|
|
|
|
useEffect(function() {
|
|
window.addEventListener("resize", handleWindowWidthChange);
|
|
handleWindowWidthChange();
|
|
return function cleanup() {
|
|
window.removeEventListener("resize", handleWindowWidthChange);
|
|
};
|
|
});
|
|
|
|
return (
|
|
<Drawer
|
|
variant={isPermanent ? "permanent" : "temporary"}
|
|
className={classNames(classes.drawer, {
|
|
[classes.drawerOpen]: isSidebarOpened,
|
|
[classes.drawerClose]: !isSidebarOpened,
|
|
})}
|
|
classes={{
|
|
paper: classNames({
|
|
[classes.drawerOpen]: isSidebarOpened,
|
|
[classes.drawerClose]: !isSidebarOpened,
|
|
}),
|
|
}}
|
|
open={isSidebarOpened}
|
|
>
|
|
<div className={classes.toolbar} />
|
|
<div className={classes.mobileBackButton}>
|
|
<IconButton onClick={() => toggleSidebar(layoutDispatch)}>
|
|
<ArrowBackIcon
|
|
classes={{
|
|
root: classNames(classes.headerIcon, classes.headerIconCollapse),
|
|
}}
|
|
/>
|
|
</IconButton>
|
|
</div>
|
|
<List className={classes.sidebarList}>
|
|
{structure.map(link => (
|
|
<SidebarLink
|
|
key={link.id}
|
|
location={location}
|
|
isSidebarOpened={isSidebarOpened}
|
|
{...link}
|
|
/>
|
|
))}
|
|
</List>
|
|
</Drawer>
|
|
);
|
|
|
|
// ##################################################################
|
|
function handleWindowWidthChange() {
|
|
var windowWidth = window.innerWidth;
|
|
var breakpointWidth = theme.breakpoints.values.md;
|
|
var isSmallScreen = windowWidth < breakpointWidth;
|
|
|
|
if (isSmallScreen && isPermanent) {
|
|
setPermanent(false);
|
|
} else if (!isSmallScreen && !isPermanent) {
|
|
setPermanent(true);
|
|
}
|
|
}
|
|
}
|
|
|
|
export default withRouter(Sidebar);
|