import { LoaderFunctionArgs, useLoaderData } from "react-router-dom"; import { createSharesPageURL } from "#lib/urls"; import { parseOffset } from "#lib/pagination"; import { fetchShares } from "#api/shares"; import { PageSkeleton } from "#components/pages"; import { Paginator } from "#components/pagination"; import { CardList, ShareCard } from "#components/cards"; import { IShare } from "#entities/files"; interface IProps { count: number; offset?: number; shares: IShare[]; } export function SharesPage() { const { count, offset, shares } = useLoaderData() as IProps; const title = "Filehaus"; const heading = "Filehaus"; return (
String(createSharesPageURL(offset))} />
{count === 0 ? (

Nobody here but us chickens!

There are no uploads.

) : ( shares.map((share) => ) )}
String(createSharesPageURL(offset))} />
); } export async function loader({ request }: LoaderFunctionArgs): Promise { const searchParams = new URL(request.url).searchParams; let offset: number | undefined = undefined; { const inputOffset = searchParams.get("o")?.trim(); if (inputOffset) { offset = parseOffset(inputOffset); } } const { props } = await fetchShares(offset); const { count, shares } = props; return { offset, count, shares, }; }