feat(frontend): member type
This commit is contained in:
parent
773f20d135
commit
ec980bc67f
2 changed files with 55 additions and 1 deletions
|
@ -11,13 +11,25 @@ export interface User {
|
||||||
avatar_urls: string[] | null;
|
avatar_urls: string[] | null;
|
||||||
links: string[] | null;
|
links: string[] | null;
|
||||||
members: PartialMember[];
|
members: PartialMember[];
|
||||||
|
names: Name[];
|
||||||
|
pronouns: Pronoun[];
|
||||||
fields: Field[];
|
fields: Field[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PartialMember {
|
export interface PartialMember {
|
||||||
id: string;
|
id: string;
|
||||||
name: string;
|
name: string;
|
||||||
avatar_url: string | null;
|
avatar_urls: string[] | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Member extends PartialMember {
|
||||||
|
bio: string | null;
|
||||||
|
links: string[] | null;
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
avatar_urls: string[] | null;
|
||||||
|
|
||||||
|
user?: PartialUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Name {
|
export interface Name {
|
||||||
|
@ -71,3 +83,10 @@ export interface SignupRequest {
|
||||||
ticket: string;
|
ticket: string;
|
||||||
invite_code?: string;
|
invite_code?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface PartialUser {
|
||||||
|
id: string;
|
||||||
|
username: string;
|
||||||
|
display_name: string | null;
|
||||||
|
avatar_urls: string[] | null;
|
||||||
|
}
|
||||||
|
|
35
frontend/pages/u/[user]/[member].tsx
Normal file
35
frontend/pages/u/[user]/[member].tsx
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
import { GetServerSideProps } from "next";
|
||||||
|
import fetchAPI from "../../../lib/fetch";
|
||||||
|
import { Member, User } from "../../../lib/types";
|
||||||
|
import { userState } from "../../../lib/state";
|
||||||
|
import { useRecoilValue } from "recoil";
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
member: Member;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function MemberPage({ member }: Props) {
|
||||||
|
const isOwnMember = useRecoilValue(userState)?.id === member.user?.id;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div>hi! this is {isOwnMember ? "" : "not "}your own member.</div>
|
||||||
|
<h1>name: {member.name}</h1>
|
||||||
|
<p>{member.bio}</p>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getServerSideProps: GetServerSideProps = async (context) => {
|
||||||
|
try {
|
||||||
|
const member = await fetchAPI<Member>(
|
||||||
|
`/users/${context.params!.user}/members/${context.params!.member}`
|
||||||
|
);
|
||||||
|
|
||||||
|
return { props: { member } };
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
|
||||||
|
return { notFound: true };
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in a new issue