'use client' import {useContext, useEffect, useState} from 'react' import {useRouter} from 'next/navigation' import {X} from 'lucide-react' import {HeaderContext} from './common' import Image, {StaticImageData} from 'next/image' import prod from '@/assets/header/product/prod.svg' import custom from '@/assets/header/product/custom.svg' import s01 from '@/assets/header/solution/01.svg' import s02 from '@/assets/header/solution/02.svg' import s03 from '@/assets/header/solution/03.svg' import s04 from '@/assets/header/solution/04.svg' import s05 from '@/assets/header/solution/05.svg' import s06 from '@/assets/header/solution/06.svg' import s07 from '@/assets/header/solution/07.svg' import s08 from '@/assets/header/solution/08.svg' import h01 from '@/assets/header/help/01.svg' import h02 from '@/assets/header/help/02.svg' import h03 from '@/assets/header/help/03.svg' import {merge} from '@/lib/utils' import Link from 'next/link' import logo from '@/assets/logo.webp' import {Product} from '@/lib/models/product' import {listProductHome} from '@/actions/product' export type MobileMenuProps = {} export default function MobileMenu(props: MobileMenuProps) { const ctx = useContext(HeaderContext) const router = useRouter() const [productTab, setProductTab] = useState<'domestic' | 'oversea'>('domestic') if (!ctx) { throw new Error(`HeaderContext not found`) } const navigate = (href: string) => { ctx.setMenu(false) router.push(href) } const [productList, setProductList] = useState([]) useEffect(() => { const fetchProducts = async () => { const res = await listProductHome({}) if (res.success) { setProductList(res.data) } } fetchProducts() }, []) const shortProduct = productList.find(p => p.name?.includes('短效') || p.code === 'short') const longProduct = productList.find(p => p.name?.includes('长效') || p.code === 'long') return (
{/* logo */} logo

产品订购

{productTab === 'domestic' && (
{shortProduct && ( )} {longProduct && ( )}
)} {productTab === 'oversea' && (

更多海外节点即将上线,敬请期待~

)}
navigate('/collect?type=short')} /> navigate('/docs/profile-settings')} /> navigate('/docs/ios-proxy')} />
) } function MenuSection(props: {title: string, children: React.ReactNode}) { return (

{props.title}

{props.children}
) } function ProductItem(props: { icon: StaticImageData label: string badge?: string href: string onNavigate: (href: string) => void }) { return ( ) } function SolutionItem(props: { icon: StaticImageData label: string href: string onNavigate: (href: string) => void }) { return ( ) } function HelpItem(props: { icon: StaticImageData label: string onClick: () => void }) { return ( ) } function OtherLink(props: { label: string href: string onNavigate: (href: string) => void }) { return ( ) }