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 } 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()
const active = activeAccordianItem === id
return (
{icon && }
{title}
)
}
const SideMenuTitle = ({ title }: { title: string }) => {
return (
{title}
)
}
const Divider = () => {
return
}
interface INavigationMenuRefList {
currentLevel: string
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 = ({
currentLevel,
id,
lib,
commonSections,
allowedClientKeys,
}) => {
const router = useRouter()
const { isDarkMode } = useTheme()
let sections = commonSections
// console.log('sections', sections)
if (!sections) console.error('no common sections imported')
// console.log(id, 'sections in ref menu', sections)
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
: []
// console.log('databaseFunctions', databaseFunctions)
const filterIds =
databaseFunctions.length > 0
? find(databaseFunctions, {
id: 'using-filters',
}) &&
find(databaseFunctions, {
id: 'using-filters',
}).items.map((x) => x.id)
: []
const modifierIds =
databaseFunctions.length > 0
? find(databaseFunctions, {
id: 'using-modifiers',
}) &&
find(databaseFunctions, {
id: 'using-modifiers',
}).items.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)
return (
Back to Main Menu
{menu.title}
{/* )} */}
{sections.map((fn: any, fnIndex) => {
//
// check if the link is allowed to be displayed
function isFuncNotInLibraryOrVersion(id, type) {
if (
id &&
allowedClientKeys &&
!allowedClientKeys.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
// console.log('activeAccordianItem', activeAccordianItem)
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)
// console.log('isFilter', props.id, isFilter)
// console.log('isModifier', props.id, isModifier)
if (
(isFilter && !isModifier && !isAuthServer && props.id === 'using-filters') ||
(activeAccordianItem === 'using-filters' &&
!isModifier &&
!isFilter &&
props.id === 'using-filters')
) {
active = true
} else if (
(isModifier && !isFilter && !isAuthServer && props.id === 'using-modifiers') ||
(activeAccordianItem === 'using-modifiers' &&
!isFilter &&
!isModifier &&
props.id === 'using-modifiers')
) {
active = true
} else if (
(isAuthServer && !isFilter && !isModifier && props.id === 'admin-api') ||
(activeAccordianItem === 'admin-api' &&
!isFilter &&
!isModifier &&
!isAuthServer &&
props.id === 'admin-api')
) {
active = true
} else {
active = false
}
// if (props.id === 'using-filters') {
// console.log('using-filters', active)
// }
// if (props.id === 'using-modifiers') {
// console.log('using-modifiers', active)
// }
return (
{props.items &&
props.items.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) => )}
>
)
}
})}
{/* {menu.extras && (
<>
{' '}
Resources
>
)}
{menu.extras?.map((x) => {
return (
)
})} */}
)
}
export default NavigationMenuRefList