1.0.6 • Published 11 months ago

react-custom-sidebar v1.0.6

Weekly downloads
-
License
ISC
Repository
github
Last release
11 months ago

React Custom Sidebar

React Custom Sidebar is a fully customizable sidebar component for React.

  • Can be used a docked or over content.
  • Docked version has open and close state.
  • Fully customizabe light and dark theme option.
  • User profile section.
  • Dedicated logout button
  • Auto adjusted on mobile devices to 'Over content' mode
  • Custom styles supported

Screenshots

desktop view

screen 1

desktop view menu closed

screen 2

mobile view menu opened

screen 3

light theme

screen 5

Installation

npm install react-custom-sidebar

Getting started

import { Sidebar } from "react-custom-sidebar";

const themeColors = {
  light: {
    bgColor: "#e4e4e6",
    textColor: "#0f0f1f",
    highlights: "#cfcfcf",
  },
  dark: {
    bgColor: "#0f0f1f",
    textColor: "#ffffff",
    highlights: "#21213d",
  },
};

function App() {
  // sidebar toggle status
  const [isMenuOpen, setIsMenuOpened] = useState(false);

  // menu list
  const menuItems = [
    {
      title: "Home",
      link: "/",
      icon: <FontAwesomeIcon icon={faHome} />,
    },
    {
      title: "Mails",
      link: "/mails",
      icon: <FontAwesomeIcon icon={faEnvelope} />,
    },
    {
      title: "Services",
      link: "/services",
      icon: <FontAwesomeIcon icon={faList} />,
    },
    {
      title: "Contacts",
      link: "/contacts",
      icon: <FontAwesomeIcon icon={faContactCard} />,
    },
  ];

  // logout click handler
  const handleLogout = () => {
    console.log("logout clicked");
  };

  return (
    <div className="App">
      <BrowserRouter>
        <Sidebar
          menuItems={menuItems}
          theme="light"
          logoUrl="add logo url here"
          logoSmallUrl="add small logo url here which will be visible in closed state"
          themeColors={defaultThemeColors}
          showLogout={true}
          handleLogout={handleLogout}
          userDetails={{
            name: "User name",
            description: "designation",
            avatar: "add user avatart url here",
          }}
          closeOnLinkClick={false}
          closeOnOutsideClick={false}
          isSidebarOpened={isMenuOpen}
          handleSidebarToggle={setIsMenuOpened}
          showToggleButton={true}
        >
          // main content here
          <Routes>
            <Route path="/" element={<Home />} />
            <Route path="mails" element={<Mails />} />
            <Route path="contacts" element={<Contacts />} />
            <Route path="services" element={<Services />} />
          </Routes>
        </Sidebar>
      </BrowserRouter>
    </div>
  );
}

export default App;

Supported props

Property nameTypeDefaultDescription
dockedbooleantrue for desktop/tablet and false for mobilesIf the sidebar is docked with main content or float over it
menuItemsarray of objectsEmpty arrayThe list of menu items to be rendered
logoUrlstringNULLLogo url
logoSmallUrlstringNULLSmall Logo for closed state, only visible if showToggleButton is false url
themestringdarklight/dark
themeColorsobjectdefault colorsTheme colors
showLogoutbooleanfalseTo show/hide logout button
handleLogoutfunctionNULLLogout button click listener
userDetailsobjectNULLUser details to be shown in sidebar.
closeOnLinkClickbooleanfalseTo close the sidebar on menu item click
closeOnOutsideClickbooleanfalseTo close the sidebar on outside click on docked state or mobile view
isSidebarOpenedbooleantrueIf the sidebar should be open
showToggleButtonbooleantrueIf hamburger menu icon visible
handleSidebarTogglefunctionn/aCallback called when the sidebar status changed from hamburger menu icon
showTooltipOnClosebooleantrueIf tooltip visible in closed state.
stylesobjectempty objectCustom styles.

Default theme colors

{
  light: {
    bgColor: "#e4e4e6", // sidebar background color
    textColor: "#0f0f1f", // text color
    highlights: "#cfcfcf", // bg color of active/hover link item
  },
  dark: {
    bgColor: "#0f0f1f",
    textColor: "#ffffff",
    highlights: "#21213d",
  },
}

Menu items

[
    {
        title: "Home",
        link: "/home",
        icon: "" //  component or img,
    },
    ...
]

userDetails

{
    name: "",
    description: "",
    avatar: ""
}

Styles

Custom styles can be passed as an object with these keys:

{
    sidebar : { /* for main container */},
    logoContainer: {/* for logo container */},
    logo: { /* for logo icon */},
    logoSmall: { /* for small logo icon */},
    toggleIcon: { /* for hamburger menu icon */},
    menuItem: { /* for menu logo and text container */},
    menuItemIcon: { /* for menu item logo */},
    menuItemText: { /* for menu item text */},
    userContainer: { /* for  user details container */},
    username: { /* for username text */},
    avatar: { /* for user avatar */},
    userDescription: { /* for user description text */},
    logout: { /* for logout icon */},
    mainContentContainer: { /* for main content outside the sidebar */}
}