import * as Accordion from '@radix-ui/react-accordion'
import Link from 'next/link'
import { useRouter } from 'next/router'
import { IconChevronLeft, IconChevronUp, cn } from 'ui'
import * as NavItems from './NavigationMenu.constants'
import Image from 'next/image'
import RevVersionDropdown from '~/components/RefVersionDropdown'
import { useMenuActiveRefId } from '~/hooks/useMenuState'
import React, { Fragment } from 'react'
import { ICommonItem, ICommonSection } from '~/components/reference/Reference.types'
import HomeMenuIconPicker from './HomeMenuIconPicker'
import { deepFilterSections } from './NavigationMenu.utils'
const HeaderLink = React.memo(function HeaderLink(props: any) {
return (
{props.title ?? props.id}
)
})
interface FunctionLinkProps {
title: string
name?: string
id: string
icon?: string
basePath: string
slug: string
isParent?: boolean
isSubItem?: boolean
}
const FunctionLink = React.memo(function FunctionLink({
title,
id,
icon,
basePath,
slug,
isParent = false,
isSubItem = false,
}: FunctionLinkProps) {
const router = useRouter()
const activeAccordionItem = useMenuActiveRefId()
const url = `${router.basePath}${basePath}/${slug}`
const active = activeAccordionItem === id
return (
{
e.preventDefault()
history.pushState({}, '', url)
document.getElementById(slug)?.scrollIntoView()
}}
className={cn(
'cursor-pointer transition text-sm hover:text-scale-1200 gap-3 relative',
isParent ? 'flex justify-between' : 'leading-3',
active ? 'text-brand' : 'text-scale-1000'
)}
>
{icon && }
{title}
{active && !isSubItem && (
)}
{isParent && (
)}
)
})
export interface RenderLinkProps {
section: ICommonSection
basePath: string
}
const RenderLink = React.memo(function RenderLink({ section, basePath }: RenderLinkProps) {
const activeAccordionItem = useMenuActiveRefId()
if (!('items' in section)) {
return (
)
}
let active =
section.id === activeAccordionItem ||
section.items.some((item) => item.id === activeAccordionItem)
return (
{section.items.map((item) => {
return (
)
})}
)
})
const SideMenuTitle = ({ title }: { title: string }) => {
return (
{title}
)
}
const Divider = () => {
return
}
interface NavigationMenuRefListItemsProps {
id: string
basePath: string
commonSections: ICommonItem[]
spec?: any
}
const NavigationMenuRefListItems = ({
id,
basePath,
commonSections,
spec,
}: NavigationMenuRefListItemsProps) => {
const menu = NavItems[id]
const specFunctionIds = spec?.functions.map(({ id }) => id)
const filteredSections = spec
? deepFilterSections(commonSections, specFunctionIds)
: commonSections
return (
Back to Main Menu
{filteredSections.map((section) => {
return (
{section.type === 'category' ? (
<>
{section.items.map((item) => (
))}
>
) : (
)}
)
})}
)
}
export default React.memo(NavigationMenuRefListItems)