mirror of
https://github.com/hanzoai/next.js.git
synced 2026-09-24 17:00:51 +00:00
## Description This PR ensures that the default prettier config is used for examples and templates. This config is compatible with `prettier@3` as well (upgrading prettier is bigger change that can be a future PR). ## Changes - Updated `.prettierrc.json` in root with `"trailingComma": "es5"` (will be needed upgrading to prettier@3) - Added `examples/.prettierrc.json` with default config (this will change every example) - Added `packages/create-next-app/templates/.prettierrc.json` with default config (this will change every template) ## Related - Fixes #54402 - Closes #54409
86 lines
2.4 KiB
TypeScript
86 lines
2.4 KiB
TypeScript
import { useState } from "react";
|
|
import { useForm } from "react-hook-form";
|
|
|
|
interface User {
|
|
name: string;
|
|
}
|
|
|
|
interface LoginFormValues {
|
|
username: string;
|
|
password: string;
|
|
remember: boolean;
|
|
}
|
|
|
|
const IndexPage = () => {
|
|
const [user, setUser] = useState<User>();
|
|
const {
|
|
register,
|
|
formState: { errors },
|
|
handleSubmit,
|
|
} = useForm<LoginFormValues>();
|
|
const onSubmit = handleSubmit(({ username, password, remember }) => {
|
|
// You should handle login logic with username, password and remember form data
|
|
setUser({ name: username });
|
|
});
|
|
|
|
return (
|
|
<div className="container">
|
|
{user ? (
|
|
<span className="hello-user">Hello, {user.name}!</span>
|
|
) : (
|
|
<form onSubmit={onSubmit}>
|
|
<div className="row">
|
|
<h3 className="form-header">LOGIN</h3>
|
|
</div>
|
|
<div className="row">
|
|
<input
|
|
type="text"
|
|
placeholder="user name"
|
|
{...register("username", {
|
|
required: { value: true, message: "User name is required" },
|
|
minLength: {
|
|
value: 3,
|
|
message: "User name cannot be less than 3 character",
|
|
},
|
|
})}
|
|
className={"form-field" + (errors.username ? " has-error" : "")}
|
|
/>
|
|
{errors.username && (
|
|
<span className="error-label">{errors.username.message}</span>
|
|
)}
|
|
</div>
|
|
<div className="row">
|
|
<input
|
|
type="password"
|
|
placeholder="password"
|
|
{...register("password", {
|
|
required: {
|
|
value: true,
|
|
message: "Please enter your password",
|
|
},
|
|
})}
|
|
className={"form-field" + (errors.password ? " has-error" : "")}
|
|
/>
|
|
{errors.password && (
|
|
<span className="error-label">{errors.password.message}</span>
|
|
)}
|
|
</div>
|
|
<div className="row row-remember">
|
|
<input type="checkbox" id="remember" {...register("remember")} />
|
|
<label htmlFor="remember" className="remember-label">
|
|
Remember me
|
|
</label>
|
|
</div>
|
|
<div className="row">
|
|
<button type="submit" className="btn login-btn">
|
|
Login
|
|
</button>
|
|
</div>
|
|
</form>
|
|
)}
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default IndexPage;
|