import * as Accordion from '@radix-ui/react-accordion' import Link from 'next/link' import { useRouter } from 'next/router' import { IconChevronLeft } from 'ui' import * as NavItems from './NavigationMenu.constants' import { find } from 'lodash' import Image from 'next/image' import { useTheme } from 'common/Providers' import RevVersionDropdown from '~/components/RefVersionDropdown' import { useMenuActiveRefId } from '~/hooks/useMenuState' import { RefIdOptions, RefKeyOptions } from './NavigationMenu' import React, { Fragment } from 'react' import { generateAllowedClientLibKeys } from '~/lib/refGenerator/helpers' import { isFuncNotInLibraryOrVersion } from './NavigationMenu.utils' const HeaderImage = React.memo(function HeaderImage(props: any) { const router = useRouter() const { isDarkMode } = useTheme() return ( {props.icon} ) }) const HeaderLink = React.memo(function HeaderLink(props: any) { const router = useRouter() return ( {props.title ?? props.id} ) }) const FunctionLink = React.memo(function FunctionLink({ title, id, icon, library, slug, }: { title: string name?: string id: string icon?: string product?: string library: string slug: string }) { const router = useRouter() const activeAccordianItem = useMenuActiveRefId() // check if we're on a versioned page let version = '' if (router.asPath.includes('v1')) { version = 'v1' } if (router.asPath.includes('v0')) { version = 'v0' } const active = activeAccordianItem === id return (
  • {icon && {icon}} {title}
  • ) }) const RenderLink = React.memo(function RenderLink(props: any) { const activeAccordianItem = useMenuActiveRefId() let active = false const isFilter = props.filterIds?.includes(activeAccordianItem) const isModifier = props.modifierIds?.includes(activeAccordianItem) const isAuthServer = props.authServerIds?.includes(activeAccordianItem) if ( (isFilter && props.id === 'using-filters') || (activeAccordianItem === 'using-filters' && props.id === 'using-filters') ) { active = true } else if ( (isModifier && props.id === 'using-modifiers') || (activeAccordianItem === 'using-modifiers' && props.id === 'using-modifiers') ) { active = true } else if ( (isAuthServer && props.id === 'admin-api') || (activeAccordianItem === 'admin-api' && props.id === 'admin-api') ) { active = true } else { active = false } return ( {props.items && props.items .filter((item) => props.allowedKeys.includes(item.id)) .map((item) => { return ( ) })} ) }) const SideMenuTitle = ({ title }: { title: string }) => { return ( {title} ) } const Divider = () => { return
    } interface INavigationMenuRefList { id: RefIdOptions lib: RefKeyOptions commonSections: any[] // to do type up // the keys of menu items that are allowed to be shown on the side menu // if undefined, we show all the menu items allowedClientKeys?: string[] spec?: any } const Content: React.FC = ({ id, lib, commonSections, spec }) => { const allowedClientKeys = spec ? generateAllowedClientLibKeys(commonSections, spec) : undefined let sections = commonSections const allowedKeys = allowedClientKeys if (!sections) console.error('no common sections imported') const menu = NavItems[id] console.log(menu) const databaseFunctions = find(sections, { title: 'Database' }) ? find(sections, { title: 'Database' }).items : [] const authFunctions = find(sections, { title: 'Auth' }) ? find(sections, { title: 'Auth' }).items : [] const filterIds = databaseFunctions.length > 0 ? find(databaseFunctions, { id: 'using-filters', }) && find(databaseFunctions, { id: 'using-filters', }) .items.filter((x) => allowedKeys.includes(x.id)) .map((x) => x.id) : [] const modifierIds = databaseFunctions.length > 0 ? find(databaseFunctions, { id: 'using-modifiers', }) && find(databaseFunctions, { id: 'using-modifiers', }) .items.filter((x) => allowedKeys.includes(x.id)) .map((x) => x.id) : [] const authServerIds = databaseFunctions.length > 0 ? find(authFunctions, { id: 'admin-api', }) && find(authFunctions, { id: 'admin-api', }).items.map((x) => x.id) : [] return (
    Back to Main Menu
    ) } export default React.memo(Content)