"use client"; import { useQuery } from "@tanstack/react-query"; import { useMemo, useState } from "react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Input } from "@/components/ui/input"; import { Skeleton } from "@/components/ui/skeleton"; type Mod = { modId: string; displayName: string; version: string; filename: string; size: string; }; export function ModList() { const [query, setQuery] = useState(""); const { data: mods, isLoading, isError } = useQuery({ queryKey: ["mods"], queryFn: () => fetch("/api/mods").then((r) => r.json()), staleTime: 5 * 60 * 1000, }); const filtered = useMemo(() => { if (!mods) return []; const q = query.trim().toLowerCase(); if (!q) return mods; return mods.filter( (m) => m.displayName.toLowerCase().includes(q) || m.modId.toLowerCase().includes(q) || m.filename.toLowerCase().includes(q) ); }, [mods, query]); return (
Installed Mods {mods ? `(${mods.length})` : ""} {mods && mods.length > 6 && ( setQuery(e.target.value)} className="h-8 text-sm max-w-[220px]" /> )}
{isLoading ? (
    {Array.from({ length: 6 }).map((_, i) => (
  • ))}
) : isError ? (

Failed to load mods.

) : filtered.length === 0 ? (

{query ? `No mods match "${query}"` : "No mods installed."}

) : (
    {filtered.map((mod, i) => (
  • {mod.displayName} {mod.version && ( {mod.version} )}
    {mod.size}
  • ))}
)}
); }