skl/resources/js/pages/auth/register.tsx

124 lines
5.0 KiB
TypeScript

import { FormEventHandler, useEffect } from "react";
import GuestLayout from "@/layouts/guest-layout";
import { Head, Link, useForm } from "@inertiajs/react";
import { Button } from "@/components/ui/button";
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { InputError } from "@/components/ui/input-error";
export default function Register() {
const { data, setData, post, processing, errors, reset } = useForm({
name: "",
email: "",
password: "",
password_confirmation: "",
});
useEffect(() => {
return () => {
reset("password", "password_confirmation");
};
}, []);
const submit: FormEventHandler = (e) => {
e.preventDefault();
post(route("register"));
};
return (
<GuestLayout>
<Head title="Register" />
<form onSubmit={submit}>
<Card className="mx-auto max-w-sm">
<CardHeader>
<CardTitle className="text-xl">Sign Up</CardTitle>
<CardDescription>
Enter your information to create an account
</CardDescription>
</CardHeader>
<CardContent>
<div className="grid gap-4">
<div className="grid gap-2">
<Label htmlFor="name">Name</Label>
<Input
id="name"
placeholder="John Doe"
onChange={(e) =>
setData("name", e.target.value)
}
value={data.name}
required
/>
<InputError message={errors.name} />
</div>
<div className="grid gap-2">
<Label htmlFor="email">Email</Label>
<Input
id="email"
type="email"
placeholder="m@example.com"
onChange={(e) =>
setData("email", e.target.value)
}
value={data.email}
required
/>
<InputError message={errors.email} />
</div>
<div className="grid gap-2">
<Label htmlFor="password">Password</Label>
<Input
id="password"
type="password"
onChange={(e) =>
setData("password", e.target.value)
}
value={data.password}
/>
<InputError message={errors.password} />
</div>
<div className="grid gap-2">
<Label htmlFor="password_confirmation">
Retype Password
</Label>
<Input
id="password_confirmation"
type="password"
onChange={(e) =>
setData(
"password_confirmation",
e.target.value
)
}
value={data.password_confirmation}
/>
<InputError
message={errors.password_confirmation}
/>
</div>
<Button type="submit" className="w-full">
Create an account
</Button>
</div>
<div className="mt-4 text-center text-sm">
Already have an account?{" "}
<Link href="/login" className="underline">
Sign in
</Link>
</div>
</CardContent>
</Card>
</form>
</GuestLayout>
);
}