feat(frontend): add static page support at /page/[name], add tos + privacy link to login

This commit is contained in:
sam 2022-11-20 22:09:36 +01:00
parent 17cc57a31d
commit 78d6a817ed
4 changed files with 51 additions and 2 deletions

View File

@ -8,6 +8,7 @@ import TextInput from "../../components/TextInput";
import Loading from "../../components/Loading"; import Loading from "../../components/Loading";
import Button, { ButtonStyle } from "../../components/Button"; import Button, { ButtonStyle } from "../../components/Button";
import Notice from "../../components/Notice"; import Notice from "../../components/Notice";
import BlueLink from "../../components/BlueLink";
interface CallbackResponse { interface CallbackResponse {
has_account: boolean; has_account: boolean;
@ -191,8 +192,9 @@ export default function Discord() {
</span> </span>
<span className="block px-3 pb-3"> <span className="block px-3 pb-3">
<span className="font-bold">Note:</span> by clicking &quot;Create <span className="font-bold">Note:</span> by clicking &quot;Create
account&quot;, you agree to the terms of service and the privacy account&quot;, you agree to the{" "}
policy. <BlueLink to="/page/tos">terms of service</BlueLink> and the{" "}
<BlueLink to="/page/privacy">privacy policy</BlueLink>.
</span> </span>
</div> </div>
</div> </div>

View File

@ -0,0 +1,43 @@
import { GetStaticProps } from "next";
import { readdirSync } from "fs";
import ReactMarkdown from "react-markdown";
import { readFile } from "fs/promises";
import { join } from "path";
import Head from "next/head";
export async function getStaticPaths() {
const names = readdirSync("./static_pages").filter((name) =>
name.endsWith(".md")
);
const paths = names.map((name) => ({
params: { page: name.slice(0, -3) },
}));
return {
paths: paths,
fallback: false,
};
}
export const getStaticProps: GetStaticProps<{ text: string }> = async ({
params,
}) => {
const text = await readFile(join("./static_pages", params!.page + ".md"));
return { props: { text: text.toString("utf8") } };
};
export default function Page(props: { text: string }) {
const title = props.text.split("\n")[0].slice(2);
return (
<>
<Head>
<title key="title">{`${title} - pronouns.cc`}</title>
</Head>
<div className="prose prose-slate dark:prose-invert">
<ReactMarkdown>{props.text}</ReactMarkdown>
</div>
</>
);
}

View File

@ -0,0 +1,3 @@
Put any static pages here, in markdown format.
The frontend requires `tos.md` and `privacy.md`, but you can add others if you wish.

1
frontend/static_pages/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.md