"use client"; import { useTranslation } from "@/components/i18n/locale-provider"; 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 { t } = useTranslation(); 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={t("ค้นหาไกด์…")} aria-label={t("ค้นหาไกด์")} /> {filtered.length ? (
{filtered.map((guide, index) => (
{t("ไกด์
{guide.name} 0 ? undefined : "invisible"} > {presence?.byGuide[guide.id] ?? 0} {t("คน")} {guide.overview}
))}
) : ( {t("ไม่พบไกด์")} {t("ลองค้นหาด้วยชื่อตัวละครอื่น")} )}
); }