import { ChevronDown } from 'lucide-react' import { useTheme } from 'next-themes' import Image from 'next/legacy/image' import Link from 'next/link' import { usePathname } from 'next/navigation' import { Accordion } from 'radix-ui' import React, { useEffect, useRef } from 'react' import MenuIconPicker from './MenuIconPicker' const HeaderLink = React.memo(function HeaderLink(props: { title: string id: string url: string }) { const pathname = usePathname() return ( {props.title ?? props.id} ) }) const ContentAccordionLink = React.memo(function ContentAccordionLink(props: any) { const pathname = usePathname() const { resolvedTheme } = useTheme() const activeItem = props.subItem.url === pathname const activeItemRef = useRef(null) const isChildActive = props.subItem.items && props.subItem.items.some((child: any) => child.url === pathname) const LinkContainer = (props) => { const isExternal = props.url.startsWith('https://') return ( {props.children} ) } useEffect(() => { // scroll to active item if (activeItem && activeItemRef.current) { // this is a hack, but seems a common one on Stackoverflow setTimeout(() => { activeItemRef.current?.scrollIntoView({ behavior: 'smooth', block: 'nearest' }) }, 0) } }) return ( <> {props.subItemIndex === 0 && ( <> {props.parent.name} > )} {props.subItem.items && props.subItem.items.length > 0 ? ( {props.subItem.icon && ( )} {props.subItem.name} {props.subItem.items .filter((subItem) => subItem.enabled !== false) .map((subSubItem) => { return ( {subSubItem.name} ) })} ) : ( {props.subItem.icon && ( )} {props.subItem.name} )} > ) }) const ContentLink = React.memo(function ContentLink(props: any) { const pathname = usePathname() return ( {props.icon && ( )} {props.name} ) }) const Content = (props) => { const { menu, id } = props if (menu.enabled === false) { return null } return ( {menu.items .filter((item) => item.enabled !== false) .map((x) => { return ( {x.items && x.items.length > 0 ? ( {x.items .filter((item) => item.enabled !== false) .map((subItem, subItemIndex) => { return ( ) })} ) : x.url ? ( ) : null} ) })} ) } export default React.memo(Content)