"use client"; import { searchItems } from "@/lib/search"; import Image from "next/image"; import Link from "next/link"; import { SearchIcon, UsersIcon } from "lucide-react"; import { useState } from "react"; import { Card, CardAction, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Empty, EmptyDescription, EmptyHeader, EmptyTitle, } from "@/components/ui/empty"; import { InputGroup, InputGroupAddon, InputGroupInput, } from "@/components/ui/input-group"; import { useVisitorPresence } from "@/hooks/use-presence"; type GuideCard = { id: string; slug: string; name: string; overview: string; coverUrl: string; version: number; aliases: string[]; }; export function StructuredDirectory({ guides }: { guides: GuideCard[] }) { const [query, setQuery] = useState(""); const presence = useVisitorPresence(null); const search = searchItems(guides, query, (guide) => `${guide.name} ${guide.overview} ${guide.aliases.join(" ")}`, (guide) => [guide.name, ...guide.aliases]); const filtered = search.items; return (
setQuery(event.target.value)} placeholder="ค้นหาไกด์…" aria-label="ค้นหาไกด์" /> {filtered.length ? (
{filtered.map((guide, index) => (
{`ไกด์
{guide.name} 0 ? undefined : "invisible"} > {presence?.byGuide[guide.id] ?? 0} คน {guide.overview}
))}
) : ( ไม่พบไกด์ ลองค้นหาด้วยชื่อตัวละครอื่น )}
); }