/* eslint-disable react/jsx-props-no-spreading */
import React from 'react';
import {
ProSidebar,
Menu as RProMenu,
MenuItem as RProMenuItem,
SubMenu as RProSubMenu,
SidebarFooter as RProFooter,
SidebarHeader as RProHeader,
SidebarContent as RProContent,
MenuItemProps,
SubMenuProps,
} from 'react-pro-sidebar';
import { IconProps } from '@webapp/ui/Icon';
import './Sidebar.scss';
export interface SidebarProps {
children: React.ReactNode | React.ReactNode[];
collapsed?: boolean;
className?: string;
}
// Sidebar is an abstraction over react-pro-sidebar
// So that we can some day reimplement its functinoality ourselves
export default function Sidebar(props: SidebarProps) {
const { children, collapsed, className } = props;
return (
{children}
);
}
// type check to validate only our Icon component can be used
type Icon = React.ReactElement;
export function MenuItem(props: MenuItemProps & { icon: Icon }) {
const { className } = props;
return ;
}
export function SubMenu(
props: SubMenuProps & { active?: boolean; icon: Icon }
) {
let { popperarrow, className } = props;
// remove active since underlying component does not use it
const { active, ...newProps } = props;
if (popperarrow === undefined) {
// set arrow between element and menu when collapsed by default, since that makes ux better
popperarrow = true;
}
if (active) {
if (!className) {
className = '';
}
className += ' active';
}
return (
);
}
// Re-export the type so that end users only interact with our abstraction
export const Menu = RProMenu;
export const SidebarHeader = RProHeader;
export const SidebarFooter = RProFooter;
export const SidebarContent = RProContent;