pronounsfu/frontend/pages/u/[user]/index.tsx

35 lines
1.0 KiB
TypeScript
Raw Normal View History

2022-08-16 18:04:06 -07:00
import { GetServerSideProps } from "next";
import PersonPage from "../../../components/PersonPage";
2022-08-16 18:04:06 -07:00
import fetchAPI from "../../../lib/fetch";
import { PartialMember, User } from "../../../lib/types";
2022-08-16 18:04:06 -07:00
interface Props {
user: User;
2022-11-20 13:05:51 -08:00
partialMembers: PartialMember[];
2022-08-16 18:04:06 -07:00
}
2022-11-20 13:05:51 -08:00
export default function Index({ user, partialMembers }: Props) {
return <PersonPage person={user} />;
2022-08-16 18:04:06 -07:00
}
2022-11-20 07:04:53 -08:00
export const getServerSideProps: GetServerSideProps = async (context) => {
const name = context.params!.user;
2022-11-20 07:04:53 -08:00
try {
2022-11-20 13:05:51 -08:00
const [userResponse, partialMembersResponse] = await Promise.allSettled([
fetchAPI<User>(`/users/${name}`),
fetchAPI<PartialMember[]>(`/users/${name}/members`),
2022-11-20 13:05:51 -08:00
]);
2022-11-20 13:35:10 -08:00
if (userResponse.status === "rejected")
throw new Error("Could not fetch user");
2022-11-20 13:05:51 -08:00
const user = userResponse.value;
2022-11-20 13:35:10 -08:00
const partialMembers =
partialMembersResponse.status === "fulfilled"
? partialMembersResponse.value
: [];
2022-11-20 13:05:51 -08:00
return { props: { user, partialMembers } };
2022-11-20 07:04:53 -08:00
} catch (e) {
console.log(e);
return { notFound: true };
}
};