import { getAllPerson, getFollowing, getPersonByUsername, getSelf, } from "./api/Person"; import { deleteToken, getToken, getTokenUserUuid } from "./api/utils"; import { redirect } from "react-router-dom"; import { isError } from "./api/dto"; import { getPostsByAuthorUsername, getPostsByAuthorUuid } from "./api/Post"; export type LoaderToType any> = | Exclude>, Response> | undefined; export async function getCheckUserSelf() { if (getToken() == null) { return redirect("/login"); } const ret = await getSelf(); if (isError(ret)) { deleteToken(); return redirect("/"); } return ret; } export async function homeLoader() { return await getCheckUserSelf(); } export async function userListLoader() { return { people: await getAllPerson(), following: await getFollowing() }; } export async function profileLoader({ params, }: { params: { username?: string }; }) { const selfUuid = getTokenUserUuid(); if (!selfUuid) return redirect("/"); if (selfUuid == params.username) { return redirect("/home/profile"); } const posts = params.username ? await getPostsByAuthorUsername(params.username) : await getPostsByAuthorUuid(selfUuid); const retUser = params.username ? await getPersonByUsername(params.username) : null; if ( (params.username && !retUser) || retUser instanceof Response || isError(retUser) ) { return retUser; } if (isError(posts)) { return { user: retUser, posts: null }; } return { user: retUser, posts }; }