remix-demo
react router (remix) demo
git clone https://9o.is/git/remix-demo.git
login.tsx
(1223B)
1 import type { ActionArgs, LoaderArgs } from "@remix-run/server-runtime";
2 import { json, redirect } from "@remix-run/server-runtime";
3 import PrimaryButton from "~/components/forms/PrimaryButton";
4 import Form from "~/components/forms/Form";
5 import Input from "~/components/forms/Input";
6 import CenteredLayout from "~/components/layouts/CenteredLayout";
7 import { getUserId } from "~/session.server";
8 import Heading from "~/components/Heading";
9 import { loginValidator } from "~/schemas/login";
10 import { logIn } from "~/controllers/login.server";
11
12 export async function action({ request }: ActionArgs) {
13 return logIn(request);
14 }
15
16 export async function loader({ request }: LoaderArgs) {
17 const userId = await getUserId(request);
18 if (userId) return redirect("/");
19 return json({});
20 }
21
22 export default function Login() {
23 return (
24 <section>
25 <CenteredLayout>
26 <Heading>Log In to Account</Heading>
27 <Form autoComplete="off" method="post" validator={loginValidator}>
28 <Input required name="email" label="Email" type="email" />
29 <PrimaryButton type="submit" className="w-full">
30 Log In
31 </PrimaryButton>
32 </Form>
33 </CenteredLayout>
34 </section>
35 );
36 }