import { LoaderFunctionArgs, useLoaderData } from "react-router-dom"; import { Helmet } from "react-helmet-async"; import { ICONS_PREPEND, KEMONO_SITE, SITE_NAME } from "#env/env-vars"; import { fetchAnnouncements } from "#api/posts"; import { fetchArtistProfile } from "#api/profiles"; import { PageSkeleton } from "#components/pages"; import { CardList, DMCard } from "#components/cards"; import { ProfileHeader, Tabs, IArtistDetails } from "#entities/profiles"; import { paysites, validatePaysite } from "#entities/paysites"; import { IAnnouncement } from "#entities/posts"; interface IProps { service: string; profile: IArtistDetails; announcements: IAnnouncement[]; } export function AnnouncementsPage() { const { service, profile, announcements } = useLoaderData() as IProps; const paysite = paysites[service]; const title = `Announcements of "${profile.name}" from ${paysite.title}`; const heading = "Announcements"; return ( {/* */} {/* */} {!announcements.length ? ( Nobody here but us chickens! There are no Announcements for your query. ) : ( announcements.map((announcement) => ( )) )} ); } export async function loader({ params }: LoaderFunctionArgs): Promise { const service = params.service?.trim(); { if (!service) { throw new Error("Service name is required."); } validatePaysite(service); } const profileID = params.creator_id?.trim(); { if (!profileID) { throw new Error("Artist ID is required."); } } const profile = await fetchArtistProfile(service, profileID); const announcements = await fetchAnnouncements(service, profileID); return { service, profile, announcements, }; }
There are no Announcements for your query.