import { LoaderFunctionArgs, useLoaderData } from "react-router"; import { Helmet } from "@dr.pogodin/react-helmet"; import { ICONS_PREPEND, KEMONO_SITE, SITE_NAME, THUMBNAILS_PREPEND, } from "#env/env-vars"; import { fetchFanboxProfileFancards } from "#api/profiles"; import { PageSkeleton } from "#components/pages"; import { validatePaysite } from "#entities/paysites"; import { ProfileHeader, Tabs, IArtistDetails, getArtist, } from "#entities/profiles"; import { IFanCard } from "#entities/files"; interface IProps { profile: IArtistDetails; cards: IFanCard[]; } export function FancardsPage() { const { profile, cards } = useLoaderData() as IProps; const title = "Fancards"; const heading = "Fancards"; return ( {/* */} {/* */}
{cards.length === 0 ? (

Nobody here but us chickens!

There are no uploads for your query.

) : ( cards.map((card) => (
Added {card.added.slice(0, 7)}
)) )}
); } export async function loader({ params }: LoaderFunctionArgs): Promise { const service = params.service?.trim(); { if (!service) { throw new Error("Service name is required."); } validatePaysite(service); if (service !== "fanbox") { throw new Error(`Service must be "fanbox".`); } } const profileID = params.creator_id?.trim(); { if (!profileID) { throw new Error("Artist ID is required."); } } const profile = await getArtist(service, profileID); const cards = await fetchFanboxProfileFancards(profileID); return { profile, cards, }; }