2024-11-24 15:55:29 +01:00
|
|
|
import { apiRequest } from "$api";
|
2024-11-24 22:19:53 +01:00
|
|
|
import type { PartialMember, UserWithMembers } from "$api/models";
|
2024-11-24 15:55:29 +01:00
|
|
|
|
2024-11-25 17:35:24 +01:00
|
|
|
const MEMBERS_PER_PAGE = 20;
|
|
|
|
|
2024-11-24 15:55:29 +01:00
|
|
|
export const load = async ({ params, fetch, cookies, url }) => {
|
|
|
|
const user = await apiRequest<UserWithMembers>("GET", `/users/${params.username}`, {
|
|
|
|
fetch,
|
|
|
|
cookies,
|
|
|
|
});
|
|
|
|
|
|
|
|
// Paginate members on the server side
|
2024-11-24 22:19:53 +01:00
|
|
|
let currentPage = 0;
|
|
|
|
let pageCount = 0;
|
|
|
|
let members: PartialMember[] = [];
|
|
|
|
if (user.members) {
|
|
|
|
currentPage = Number(url.searchParams.get("page") || "0");
|
2024-11-25 17:35:24 +01:00
|
|
|
pageCount = Math.ceil(user.members.length / MEMBERS_PER_PAGE);
|
|
|
|
members = user.members.slice(
|
|
|
|
currentPage * MEMBERS_PER_PAGE,
|
|
|
|
(currentPage + 1) * MEMBERS_PER_PAGE,
|
|
|
|
);
|
2024-11-24 22:19:53 +01:00
|
|
|
if (members.length === 0) {
|
2024-11-25 17:35:24 +01:00
|
|
|
members = user.members.slice(0, MEMBERS_PER_PAGE);
|
2024-11-24 22:19:53 +01:00
|
|
|
currentPage = 0;
|
|
|
|
}
|
2024-11-24 15:55:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return { user, members, currentPage, pageCount };
|
|
|
|
};
|