"use client"; import { Loader2, RefreshCw, Search, Sparkles } from "lucide-react"; import { useCallback, useState } from "react"; import { EmptyState, LoadingSkeleton } from "@/components/shared"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Progress } from "@/components/ui/progress"; import { useMessageSearch, useReanalyze } from "@/hooks"; import { renderMessageContent, safeParseJsonArray } from "@/lib/format"; import { cn } from "@/lib/utils"; export function SearchPanel() { const [query, setQuery] = useState(""); const [enabled, setEnabled] = useState(false); const reanalyzeMut = useReanalyze(); const { data: results, isValidating: isFetching } = useMessageSearch( query, enabled, ); const handleSearch = useCallback(() => { if (!query.trim()) return; setEnabled(true); }, [query]); return (
Found {results.length} result{results.length !== 1 ? "s" : ""}
{results.length === 0 ? ({renderMessageContent(msg.content, msg.metadata)}
{msg.ai_moderation_flags && msg.ai_moderation_flags !== "[]" && (
Enter a search query to find messages across all channels.
Searches message content, AI flags, and analysis text.