// TODO figure out how to refactor left sidebar with menu widget import * as React from 'react'; import {Span} from '@tesseract-design/viewfinder-base'; import clsx from 'clsx'; type BaseMenuItem = { label: React.ReactNode, icon: React.ReactNode, url: unknown, } export type MenuItem = BaseMenuItem & { id: string, secondary?: boolean, } export type LeftSidebarWithMenuBaseProps = Omit, 'span'> & { span?: Span, items?: MenuItem[], linkComponent?: React.ElementType, moreLinkComponent?: React.ElementType, moreLinkItem?: BaseMenuItem, moreItemsOpen?: boolean, open?: boolean, } export const LeftSidebarWithMenuBase = React.forwardRef(({ children, span = 'wide', open = false, items: sidebarMenuItems = [], linkComponent: LinkComponent = 'a', moreLinkComponent: MoreLinkComponent = LinkComponent, moreLinkItem, moreItemsOpen = false, ...etcProps }, ref) => { const primarySidebarMenuItems = sidebarMenuItems.filter(s => !s.secondary) const secondarySidebarMenuItems = sidebarMenuItems.filter(s => s.secondary) const visibleSecondarySidebarMenuItems = secondarySidebarMenuItems.slice(0, 1) const moreSecondarySidebarMenuItems = secondarySidebarMenuItems.slice(1) const visiblePrimarySidebarMenuItems = ( visibleSecondarySidebarMenuItems.length === 1 ? primarySidebarMenuItems.slice(0, 3) : primarySidebarMenuItems.slice(0, 4) ) const morePrimarySidebarMenuItems = ( visibleSecondarySidebarMenuItems.length === 1 ? primarySidebarMenuItems.slice(3) : primarySidebarMenuItems.slice(4) ) const hasMoreSidebarMenuItems = ( morePrimarySidebarMenuItems.length > 0 || moreSecondarySidebarMenuItems.length > 0 ) return (
{visiblePrimarySidebarMenuItems.map(({ id, ...item }) => ( ))}
{morePrimarySidebarMenuItems.map(({ id, ...item }) => ( ))}
{moreSecondarySidebarMenuItems.map(({ id, ...item }) => ( ))}
{hasMoreSidebarMenuItems && ( )} {visibleSecondarySidebarMenuItems.length > 0 && (
{visibleSecondarySidebarMenuItems.map(({ id, ...item }) => ( ))}
)}
{children && (
{children}
)}
) });