mirror of
https://github.com/usatiuk/y.git
synced 2025-10-28 10:37:47 +01:00
69 lines
1.7 KiB
TypeScript
69 lines
1.7 KiB
TypeScript
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<T extends (...args: any) => any> =
|
|
| Exclude<Awaited<ReturnType<T>>, 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 };
|
|
}
|