import { ChevronDown, ChevronLeft } from 'lucide-react' import { useEffect, useMemo, useRef, useState, type ReactNode } from 'react' import { useNavigate } from 'react-router-dom' import './ChatAnalysisHeader.scss' export type ChatAnalysisMode = 'private' | 'group' interface ChatAnalysisHeaderProps { currentMode: ChatAnalysisMode actions?: ReactNode } const MODE_CONFIG: Record = { private: { label: '私聊分析', path: '/analytics/private' }, group: { label: '群聊分析', path: '/analytics/group' } } function ChatAnalysisHeader({ currentMode, actions }: ChatAnalysisHeaderProps) { const navigate = useNavigate() const currentLabel = MODE_CONFIG[currentMode].label const [menuOpen, setMenuOpen] = useState(false) const dropdownRef = useRef(null) const alternateMode = useMemo( () => (currentMode === 'private' ? 'group' : 'private'), [currentMode] ) useEffect(() => { if (!menuOpen) return const handleClickOutside = (event: MouseEvent) => { if (!dropdownRef.current?.contains(event.target as Node)) { setMenuOpen(false) } } const handleEscape = (event: KeyboardEvent) => { if (event.key === 'Escape') { setMenuOpen(false) } } document.addEventListener('mousedown', handleClickOutside) document.addEventListener('keydown', handleEscape) return () => { document.removeEventListener('mousedown', handleClickOutside) document.removeEventListener('keydown', handleEscape) } }, [menuOpen]) return (
/
{menuOpen && (
)}
{actions ?
{actions}
: null}
) } export default ChatAnalysisHeader