import React, {useState} from "react";
import {
Divider,
Flex,
HStack,
Image,
Input,
InputGroup,
InputLeftElement,
InputRightElement,
Stack,
Text
} from "@chakra-ui/react";
import {useNavigate} from "react-router-dom";
import {Search2Icon} from "@chakra-ui/icons";
import {snakeCase} from "change-case";
interface SidebarMenuItem {
label: string,
icon?: string,
path: string,
}
interface SidebarMenuSection {
label?: string,
menuItems: SidebarMenuItem[]
}
interface SidebarProps {
componentName?: string,
menuItemSections: SidebarMenuSection[],
dividerStyles?: {
color?: string,
thickness?: string
},
logoIcon?: string,
primaryColor?: string,
secondaryColor?: string,
activeItemBG?: string,
activeItemColor?: string,
showLogoBG?: boolean,
logoBgColor?: string,
navItemFontSize?: string,
logoSize?: number,
sideBarPaddingX?: string,
sideBarPaddingY?: string,
menuItemsPaddingX?: string,
menuItemsPaddingY?: string,
menuItemsCornerRadius?: string,
//search input props
isSearchInput?: boolean,
searchInputBg?: string,
searchIconColor?: string,
searchIconPosition?: string,
}
function Sidebar(props: SidebarProps) {
const {
menuItemSections,
dividerStyles = {color: "#ffffff", thickness: "2px"},
logoIcon = "https://socialimpact.com/wp-content/uploads/2021/03/logo-placeholder.jpg",
primaryColor = "#051E61",
secondaryColor = "#ffffff",
activeItemBG = "white",
activeItemColor = "black",
showLogoBG = false,
logoBgColor = primaryColor,
navItemFontSize = "18px",
logoSize = 80,
menuItemsPaddingX = "32px",
menuItemsCornerRadius = "8px",
menuItemsPaddingY = "15px",
sideBarPaddingX = "8px",
sideBarPaddingY = "8px",
searchInputBg = "rgba(0, 0, 0, 0.03)",
searchIconColor = "rgba(0, 0, 0, 0.3)",
searchIconPosition = "left",
isSearchInput = false
} = props;
const isActive = (path: string) => {
return (window.location.pathname.substring(1) || "/") === snakeCase(path);
};
let navigate = useNavigate();
const [filterText, setFilterText] = useState('');
const onClick = (path: string) => {
navigate(`/${snakeCase(path)}`);
}
let searchItem: any;
if (isSearchInput) {
searchItem = (
setFilterText(e.target.value)}
placeholder='Search'
px={menuItemsPaddingX}
py={menuItemsPaddingY}
borderRadius={menuItemsCornerRadius}
/>
}/>
}/>
)
}
return (
{searchItem}
{menuItemSections?.map((section: any, sectionIndex: number) => (
{section?.menuItems?.map((item: any, index: number) => (
onClick(item.path)}
isActive={isActive(item.path)}
secondaryColor={secondaryColor}
primaryColor={primaryColor}
navItemFontSize={navItemFontSize}
menuItemsPaddingX={menuItemsPaddingX}
menuItemsPaddingY={menuItemsPaddingY}
menuItemsCornerRadius={menuItemsCornerRadius}
activeItemBG={activeItemBG}
activeItemColor={activeItemColor}
/>
))
}
))}
);
}
function SidebarItem(props: any) {
const {
title, icon, onClick, menuItemsCornerRadius,
isActive, secondaryColor, menuItemsPaddingY, navItemFontSize,
primaryColor, menuItemsPaddingX, activeItemBG, activeItemColor
} = props;
let iconEl: any;
if (icon) {
iconEl =
}
return (
{iconEl}
{title}
);
}
export default Sidebar;