"use client"; import { useState, useRef, useEffect } from "react"; import { ChevronDown } from "lucide-react"; export type ConversationFilter = "all" | "mine" | "others"; interface ConversationHeaderProps { filter: ConversationFilter; onFilterChange: (filter: ConversationFilter) => void; } const FILTER_OPTIONS: { value: ConversationFilter; label: string }[] = [ { value: "all", label: "全部对话" }, { value: "mine", label: "我的对话" }, { value: "others", label: "他人对话" }, ]; export function ConversationHeader({ filter, onFilterChange, }: ConversationHeaderProps) { const [open, setOpen] = useState(false); const ref = useRef(null); const currentLabel = FILTER_OPTIONS.find((o) => o.value === filter)?.label ?? "全部对话"; useEffect(() => { const handleClickOutside = (e: MouseEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false); }; if (open) document.addEventListener("mousedown", handleClickOutside); return () => document.removeEventListener("mousedown", handleClickOutside); }, [open]); return (
{open && (
{FILTER_OPTIONS.map((opt) => ( ))}
)}
); }