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,
};
}