Files
my-links/src/pages/login.tsx
Sonny 6d5afee4f4 feat: privacy page with translation
refactor: apply prettier conf to all files

feat: terms of use with translation
2023-11-19 19:33:35 +01:00

78 lines
2.3 KiB
TypeScript

import ButtonLink from "components/ButtonLink";
import LangSelector from "components/LangSelector";
import MessageManager from "components/MessageManager/MessageManager";
import PageTransition from "components/PageTransition";
import PATHS from "constants/paths";
import { getServerSideTranslation } from "../i18n";
import getUser from "lib/user/getUser";
import { Provider } from "next-auth/providers";
import { getProviders, signIn } from "next-auth/react";
import { useTranslation } from "next-i18next";
import { NextSeo } from "next-seo";
import Image from "next/image";
import { FcGoogle } from "react-icons/fc";
import styles from "styles/login.module.scss";
import { getSession } from "utils/session";
interface SignInProps {
providers: Provider[];
}
export default function SignIn({ providers }: SignInProps) {
const { t } = useTranslation("login");
return (
<div className={styles["login-page"]}>
<PageTransition className={styles["login-container"]} hideLangageSelector>
<NextSeo title={t("login:title")} />
<div className={styles["image-wrapper"]}>
<Image
src={"/logo-light.png"}
width={300}
height={100}
alt="MyLinks's logo"
/>
</div>
<div className={styles["form-wrapper"]}>
<h1>{t("login:title")}</h1>
<MessageManager info={t("login:informative-text")} />
{Object.values(providers).map(({ name, id }) => (
<ButtonLink
onClick={() => signIn(id, { callbackUrl: PATHS.HOME })}
className={styles["login-button"]}
key={id}
>
<FcGoogle size={"1.5em"} />{" "}
{t("login:continue-with", { provider: name } as undefined)}
</ButtonLink>
))}
</div>
</PageTransition>
<div className="lang-selector">
<LangSelector />
</div>
</div>
);
}
export async function getServerSideProps({ req, res, locale }) {
const session = await getSession(req, res);
const user = await getUser(session);
if (user) {
return {
redirect: {
destination: PATHS.HOME,
},
};
}
const providers = await getProviders();
return {
props: {
session,
providers,
...(await getServerSideTranslation(locale, ["login"])),
},
};
}