feat(frontend): embeds
This commit is contained in:
parent
94cee93ccb
commit
7eb5af6c00
2 changed files with 74 additions and 3 deletions
|
@ -10,6 +10,17 @@ function MyApp({ Component, pageProps }: AppProps) {
|
||||||
<RecoilRoot>
|
<RecoilRoot>
|
||||||
<Head>
|
<Head>
|
||||||
<title key="title">pronouns.cc</title>
|
<title key="title">pronouns.cc</title>
|
||||||
|
<meta property="og:type" content="website" />
|
||||||
|
<meta name="theme-color" content="#aa8ed6" />
|
||||||
|
|
||||||
|
<meta key="sitename" property="og:site_name" content="pronouns.cc" />
|
||||||
|
<meta key="title" property="og:title" content="pronouns.cc" />
|
||||||
|
<meta
|
||||||
|
key="description"
|
||||||
|
property="og:description"
|
||||||
|
content="Name and pronoun cards!"
|
||||||
|
/>
|
||||||
|
<meta key="url" property="og:url" content={process.env.DOMAIN} />
|
||||||
</Head>
|
</Head>
|
||||||
<Navigation />
|
<Navigation />
|
||||||
<Container>
|
<Container>
|
||||||
|
|
|
@ -32,9 +32,7 @@ interface Props {
|
||||||
export default function Index({ user, partialMembers }: Props) {
|
export default function Index({ user, partialMembers }: Props) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Head>
|
<UserHead user={user} />
|
||||||
<title key="title">{`@${user.username} - pronouns.cc`}</title>
|
|
||||||
</Head>
|
|
||||||
<IsOwnPageNotice user={user} />
|
<IsOwnPageNotice user={user} />
|
||||||
<div className="container mx-auto pb-[20vh]">
|
<div className="container mx-auto pb-[20vh]">
|
||||||
<div
|
<div
|
||||||
|
@ -81,6 +79,68 @@ export const getServerSideProps: GetServerSideProps = async (context) => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function UserHead({ user }: { user: User }) {
|
||||||
|
let description = "";
|
||||||
|
if (
|
||||||
|
user.names?.filter((name) => name.status === WordStatus.Favourite)
|
||||||
|
?.length &&
|
||||||
|
user.pronouns?.filter((pronoun) => pronoun.status === WordStatus.Favourite)
|
||||||
|
?.length
|
||||||
|
) {
|
||||||
|
description = `@${user.username} goes by ${user.names
|
||||||
|
.filter((name) => name.status === WordStatus.Favourite)
|
||||||
|
.join(", ")} and uses ${user.pronouns
|
||||||
|
.filter((pronoun) => pronoun.status === WordStatus.Favourite)
|
||||||
|
.join(", ")} pronouns.`;
|
||||||
|
} else if (
|
||||||
|
user.names?.filter((name) => name.status === WordStatus.Favourite)?.length
|
||||||
|
) {
|
||||||
|
description = `@${user.username} goes by ${user.names
|
||||||
|
.filter((name) => name.status === WordStatus.Favourite)
|
||||||
|
.join(", ")}.`;
|
||||||
|
} else if (
|
||||||
|
user.pronouns?.filter((pronoun) => pronoun.status === WordStatus.Favourite)
|
||||||
|
?.length
|
||||||
|
) {
|
||||||
|
description = `@${user.username} uses ${user.pronouns
|
||||||
|
.filter((pronoun) => pronoun.status === WordStatus.Favourite)
|
||||||
|
.join(", ")} pronouns.`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user.bio && user.bio !== "") {
|
||||||
|
description += `\n\n${user.bio.slice(0, 500)}`;
|
||||||
|
description.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Head>
|
||||||
|
<title key="title">{`@${user.username} - pronouns.cc`}</title>
|
||||||
|
|
||||||
|
<meta key="sitename" property="og:site_name" content="pronouns.cc" />
|
||||||
|
<meta
|
||||||
|
key="title"
|
||||||
|
property="og:title"
|
||||||
|
content={
|
||||||
|
user.display_name
|
||||||
|
? `${user.display_name} (@${user.username})`
|
||||||
|
: `@${user.username}`
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
{user.avatar_urls && user.avatar_urls.length > 0 ? (
|
||||||
|
<meta key="image" property="og:image" content={user.avatar_urls[0]} />
|
||||||
|
) : (
|
||||||
|
<></>
|
||||||
|
)}
|
||||||
|
<meta key="description" property="og:description" content={description} />
|
||||||
|
<meta
|
||||||
|
key="url"
|
||||||
|
property="og:url"
|
||||||
|
content={`${process.env.DOMAIN}/u/${user.username}`}
|
||||||
|
/>
|
||||||
|
</Head>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function IsOwnPageNotice({ user }: { user: User }) {
|
function IsOwnPageNotice({ user }: { user: User }) {
|
||||||
const isThisMyPage = useRecoilValue(userState)?.id === user.id;
|
const isThisMyPage = useRecoilValue(userState)?.id === user.id;
|
||||||
return isThisMyPage || true ? (
|
return isThisMyPage || true ? (
|
||||||
|
|
Loading…
Reference in a new issue