"use client"; import Image from "next/image"; import { DownloadIcon, SearchIcon } from "lucide-react"; import { useMemo, useState } from "react"; import { buttonVariants } from "@/components/ui/button"; import { Card, CardAction, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Kbd } from "@/components/ui/kbd"; import { Separator } from "@/components/ui/separator"; import { elementBackgroundColor } from "@/lib/catalog/element"; import { rarityGradientClass } from "@/lib/catalog/rarity"; import { isCustomTravelerKey } from "@/lib/catalog/travelers"; import type { PublicGuide } from "@/lib/guides/queries"; import { cn } from "@/lib/utils"; export function TeamSearch({ teams }: { teams: PublicGuide["teams"] }) { const [query, setQuery] = useState(""); const normalizedQuery = query.trim().toLocaleLowerCase(); const filteredTeams = useMemo( () => teams.filter((team) => { if (!normalizedQuery) return true; const searchableNames = [ team.title, ...team.members.flatMap((member) => [ member.character.name, member.weapon?.name, member.artifact?.name, ]), ].filter((name): name is string => Boolean(name)); return searchableNames.some((name) => name.toLocaleLowerCase().includes(normalizedQuery)); }), [normalizedQuery, teams], ); return (
{filteredTeams.length ? (
{filteredTeams.map((team) => { const total = team.members.reduce( (sum, member) => sum + Number(member.damage), 0, ); const seconds = Number(team.rotationSeconds); return ( {team.title} ระยะเวลาโรเทชั่น {seconds} วิ ส่งออกภาพ
{team.members.map((member) => (
{member.character.name} C{member.constellation}
{member.weapon ? (
{member.weapon.name} R{member.refinement}
) : (
)} {member.artifact ? (
{member.artifact.name}
) : (
)}

{member.character.name}

{Number(member.damage).toLocaleString(undefined, { maximumFractionDigits: 2, })}

{total ? ((Number(member.damage) / total) * 100).toFixed(2) : "0.00"} %

))}

ดาเมจรวม

{total.toLocaleString()}

DPS

{seconds > 0 ? (total / seconds).toLocaleString(undefined, { maximumFractionDigits: 0, }) : "0"}

{team.combo}

); })}
) : ( ไม่พบทีมที่ตรงกับคำค้นหา )}
); }