'use client'
import { useEffect, useState } from 'react'
import Image from 'next/image'
import Link from 'next/link'
import { useBack } from '@/hooks/useBack'
import { useVisitor } from '@/context/VisitorContext'
import { t, tPlain } from '@/lib/i18n'
import type { SectionDTO } from '@/lib/api/types'
import AppBar from '@/components/ui/AppBar'
import { trackEvent } from '@/lib/stats'
interface Props {
section: SectionDTO
slug: string
configId: string
languages: string[]
}
export default function MenuSection({ section, slug, configId, languages }: Props) {
const { language, setAvailableLanguages, instanceId } = useVisitor()
const back = useBack()
const [search, setSearch] = useState('')
function handleItemClick(sub: SectionDTO) {
if (!instanceId) return
trackEvent({
instanceId, configurationId: configId, sectionId: section.id,
eventType: 'MenuItemTap', language,
metadata: JSON.stringify({ targetSectionId: sub.id, title: tPlain(sub.title, language) }),
})
}
useEffect(() => { setAvailableLanguages([]) }, [languages])
const subsections = [...(section.menu?.sections ?? [])]
.filter((s) => s.isActive !== false)
.sort((a, b) => (a.order ?? 0) - (b.order ?? 0))
const filtered = subsections.filter((s) => {
if (!search) return true
const title = tPlain(s.title, language).toLowerCase()
return title.includes(search.toLowerCase())
})
return (
{/* Search */}
{/* Grid */}
{filtered.length === 0 && (
Aucun résultat
)}
{filtered.map((sub) => (
handleItemClick(sub)}
className="overflow-hidden block relative"
style={{
background: '#fff', minHeight: 120, borderRadius: 20,
border: '1px solid #EFEAE2', boxShadow: '0 6px 16px -12px rgba(0,0,0,0.3)',
}}
>
{sub.imageSource ? (
) : (
)}
))}
)
}