diff --git a/src/crm/CrmDashboard.tsx b/src/crm/CrmDashboard.tsx index 66f922d..558a0af 100644 --- a/src/crm/CrmDashboard.tsx +++ b/src/crm/CrmDashboard.tsx @@ -34,11 +34,20 @@ const xThemeComponents = { }; export default function CrmDashboard() { + const [sidebarCollapsed, setSidebarCollapsed] = React.useState(false); + + const handleToggleSidebar = () => { + setSidebarCollapsed((prev) => !prev); + }; + return ( - + {/* Main content */} , path: "/help" }, ]; -export default function CrmMenuContent() { +interface CrmMenuContentProps { + isCollapsed?: boolean; +} + +export default function CrmMenuContent({ + isCollapsed = false, +}: CrmMenuContentProps) { const navigate = useNavigate(); const location = useLocation(); @@ -39,35 +46,50 @@ export default function CrmMenuContent() { navigate(path); }; + const renderMenuItem = (item: any, index: number) => { + const menuItem = ( + + handleNavigation(item.path)} + sx={{ + minHeight: 48, + justifyContent: isCollapsed ? "center" : "initial", + px: 2.5, + }} + > + + {item.icon} + + {!isCollapsed && } + + + ); + + return isCollapsed ? ( + + {menuItem} + + ) : ( + menuItem + ); + }; + return ( - {mainListItems.map((item, index) => ( - - handleNavigation(item.path)} - > - {item.icon} - - - - ))} + {mainListItems.map((item, index) => renderMenuItem(item, index))} - {secondaryListItems.map((item, index) => ( - - handleNavigation(item.path)} - > - {item.icon} - - - - ))} + {secondaryListItems.map((item, index) => renderMenuItem(item, index))} diff --git a/src/crm/components/CrmSelectCompany.tsx b/src/crm/components/CrmSelectCompany.tsx index b9aaaed..b490d0d 100644 --- a/src/crm/components/CrmSelectCompany.tsx +++ b/src/crm/components/CrmSelectCompany.tsx @@ -5,7 +5,13 @@ import FormControl from "@mui/material/FormControl"; import Select, { SelectChangeEvent } from "@mui/material/Select"; import BusinessRoundedIcon from "@mui/icons-material/BusinessRounded"; -export default function CrmSelectCompany() { +interface CrmSelectCompanyProps { + isCollapsed?: boolean; +} + +export default function CrmSelectCompany({ + isCollapsed = false, +}: CrmSelectCompanyProps) { const [company, setCompany] = React.useState("acme"); const handleChange = (event: SelectChangeEvent) => { @@ -33,21 +39,21 @@ export default function CrmSelectCompany() { fontSize="small" sx={{ color: "primary.main" }} /> - Acme Corporation + {!isCollapsed && "Acme Corporation"} - Globex Inc. + {!isCollapsed && "Globex Inc."} - Initech Technologies + {!isCollapsed && "Initech Technologies"} diff --git a/src/crm/components/CrmSideMenu.tsx b/src/crm/components/CrmSideMenu.tsx index e9dfd08..ab5cda7 100644 --- a/src/crm/components/CrmSideMenu.tsx +++ b/src/crm/components/CrmSideMenu.tsx @@ -7,27 +7,51 @@ import Box from "@mui/material/Box"; import Divider from "@mui/material/Divider"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; +import IconButton from "@mui/material/IconButton"; +import MenuIcon from "@mui/icons-material/Menu"; +import ChevronLeftIcon from "@mui/icons-material/ChevronLeft"; import CrmSelectCompany from "./CrmSelectCompany"; import CrmMenuContent from "./CrmMenuContent"; import CrmOptionsMenu from "./CrmOptionsMenu"; -const drawerWidth = 240; +export const drawerWidth = 240; +export const collapsedDrawerWidth = 64; -const Drawer = styled(MuiDrawer)({ - width: drawerWidth, +const Drawer = styled(MuiDrawer, { + shouldForwardProp: (prop) => prop !== "isCollapsed", +})<{ isCollapsed?: boolean }>(({ theme, isCollapsed }) => ({ + width: isCollapsed ? collapsedDrawerWidth : drawerWidth, flexShrink: 0, boxSizing: "border-box", mt: 10, + transition: theme.transitions.create("width", { + easing: theme.transitions.easing.easeInOut, + duration: theme.transitions.duration.standard, + }), [`& .${drawerClasses.paper}`]: { - width: drawerWidth, + width: isCollapsed ? collapsedDrawerWidth : drawerWidth, boxSizing: "border-box", + overflowX: "hidden", + transition: theme.transitions.create("width", { + easing: theme.transitions.easing.easeInOut, + duration: theme.transitions.duration.standard, + }), }, -}); +})); -export default function CrmSideMenu() { +interface CrmSideMenuProps { + isCollapsed?: boolean; + onToggleCollapse?: () => void; +} + +export default function CrmSideMenu({ + isCollapsed = false, + onToggleCollapse, +}: CrmSideMenuProps) { return ( - + {!isCollapsed && ( + + + + )} + + {isCollapsed ? : } + - + AT - - - Alex Thompson - - - alex@acmecrm.com - - - + {!isCollapsed && ( + <> + + + Alex Thompson + + + alex@acmecrm.com + + + + + )} );