import { useEffect, useState } from "react"; import { Link, useSearchParams } from "react-router"; import Skeleton from "./skeleton"; import FilterMenu from "./filter-menu"; import SortSelect from "./sort-select"; import Pagination from "../../pagination"; import DeleteMiiButton from "../delete-mii-button"; import { Icon } from "@iconify/react"; import LikeButton from "../../like-button"; import { useStore } from "@nanostores/react"; import { session } from "../../../session"; import TimeRangeSelect from "./time-range-select"; interface ApiResponse { totalCount: number; miis: any[]; lastPage: number; } interface Props { userId?: number; parentPage?: "likes"; bypassCache?: boolean; } export default function MiiList({ parentPage, userId, bypassCache }: Props) { const [searchParams] = useSearchParams(); const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [likedIds, setLikedIds] = useState>(new Set()); const $session = useStore(session); useEffect(() => { const params = new URLSearchParams(searchParams.toString()); if (userId) params.append("userId", userId.toString()); if (parentPage) params.append("parentPage", parentPage); if (bypassCache) params.append("bypassCache", "true"); fetch(`${import.meta.env.VITE_API_URL}/api/mii/list?${params.toString()}`, { credentials: "include" }) .then((res) => { if (!res.ok) throw new Error("Failed to fetch Miis"); return res.json(); }) .then(async (data) => { setData(data); setLoading(false); if ($session === undefined || $session === null || !data.miis.length) return; const ids = data.miis.map((m: any) => m.id).join(","); fetch(`${import.meta.env.VITE_API_URL}/api/mii/has-liked?ids=${ids}`, { credentials: "include" }) .then((res) => (res.ok ? res.json() : [])) .then((likedIds: number[]) => setLikedIds(new Set(likedIds))) .catch((err) => { console.error("Error fetching likes:", err); }); }) .catch((err) => { console.error(err); setLoading(false); }); }, [searchParams, userId, parentPage, $session]); return ( <> {loading ? ( ) : data ? (
{data.totalCount} {data.totalCount === 1 ? "Mii" : "Miis"}
{data.miis.map((mii) => (
{mii.in_queue && (
In Queue
)} {mii.needsFixing && (
Needs Fixing
)}
mii image
{mii.name}
{mii.platform === "SWITCH" ? ( ) : ( )}
{mii.tags.map((tag: string) => ( {tag} ))}
{!userId && ( @{mii.user?.name} )} {userId && Number($session?.user?.id) == userId && (
)}
))}
) : (

No Miis found, has the server died?

)} ); }