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 apiCommonSections from '~/../../spec/common-client-libs-sections.json' import RevVersionDropdown from '~/components/RefVersionDropdown' import { useMenuActiveRefId, useMenuLevelId } from '~/hooks/useMenuState' import { RefIdOptions, RefKeyOptions } from './NavigationMenu' const 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 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[] } const NavigationMenuRefList: React.FC = ({ id, lib, commonSections, allowedClientKeys, }) => { const router = useRouter() const { isDarkMode } = useTheme() let sections = commonSections const allowedKeys = allowedClientKeys if (!sections) console.error('no common sections imported') const menu = NavItems[id] 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) : [] // console.log(filterIds) // console.log(modifierIds) const level = useMenuLevelId() return (
    Back to Main Menu
    {id} {menu.title}
    {/* )} */}
      {sections.map((fn: any, fnIndex) => { // // check if the link is allowed to be displayed function isFuncNotInLibraryOrVersion(id, type) { if (id && allowedKeys && !allowedKeys.includes(id) && type !== 'markdown') { /* * Remove this menu link from side bar, as it does not exist for either * this language, or for this lib version * * */ return true } else { return false } } // run allow check if (isFuncNotInLibraryOrVersion(fn.id, fn.type)) { return <> } const RenderLink = (props) => { const activeAccordianItem = useMenuActiveRefId() let active = false const isFilter = filterIds && filterIds.length > 0 && filterIds.includes(activeAccordianItem) const isModifier = modifierIds && modifierIds.length > 0 && modifierIds.includes(activeAccordianItem) const isAuthServer = authServerIds && authServerIds.length > 0 && authServerIds.includes(activeAccordianItem) if ( (isFilter && !isModifier && !isAuthServer && props.id === 'using-filters') || (activeAccordianItem === 'using-filters' && props.id === 'using-filters') ) { active = true } else if ( (isModifier && !isFilter && !isAuthServer && props.id === 'using-modifiers') || (activeAccordianItem === 'using-modifiers' && props.id === 'using-modifiers') ) { active = true } else if ( (isAuthServer && !isFilter && !isModifier && props.id === 'admin-api') || (activeAccordianItem === 'admin-api' && props.id === 'admin-api') ) { active = true } else { active = false } return ( {props.items && props.items .filter((item) => allowedKeys.includes(item.id)) .map((item) => { return })} ) } // handle subtitles with subitems if (!fn.id) { return ( <> {fn.items && fn.items //.filter((item) => item.libs && item.libs.includes(lib)) .map((item) => { // run allow check if (isFuncNotInLibraryOrVersion(item.id, item.type)) return <> return })} ) } else { // handle normal links return ( <> {fn.items && fn.items //.filter((item) => item.libs.includes(lib)) .map((item) => )} ) } })}
    ) } export default NavigationMenuRefList