This repository has been archived on 2024-11-11. You can view files and clone it, but cannot push or open issues or pull requests.
react-component-form/example/components/FormExample.tsx

73 lines
1.9 KiB
TypeScript
Raw Normal View History

"use client"
2023-05-13 18:24:44 +02:00
import { Form, useForm } from "react-component-form"
import type { HandleUseFormCallback } from "react-component-form"
import useTranslation from "next-translate/useTranslation"
2022-08-26 20:19:31 +02:00
import { Input } from "./design/Input"
import { Button } from "./design/Button"
import { useFormTranslation } from "../hooks/useFormTranslation"
import { userSchema } from "../models/User"
import { FormState } from "./design/FormState"
2022-08-26 20:19:31 +02:00
2023-05-13 18:24:44 +02:00
const fakeServerRequest = async (ms: number): Promise<void> => {
2022-08-26 20:19:31 +02:00
return await new Promise((resolve) => {
setTimeout(resolve, ms)
})
}
export const FormExample: React.FC = () => {
const { handleUseForm, errors, fetchState, message } = useForm(userSchema)
const { getFirstErrorTranslation } = useFormTranslation()
const { t } = useTranslation()
const onSubmit: HandleUseFormCallback<typeof userSchema> = async (
formData,
formElement,
2022-08-26 20:19:31 +02:00
) => {
2023-05-13 18:24:44 +02:00
await fakeServerRequest(2_000)
console.log("onSubmit:", formData)
2022-08-26 20:19:31 +02:00
formElement.reset()
return {
type: "success",
message: "common:success-message",
2022-08-26 20:19:31 +02:00
}
}
return (
<section>
<Form
className="mt-6 w-[90%] max-w-xs"
2022-08-26 20:19:31 +02:00
noValidate
onSubmit={handleUseForm(onSubmit)}
>
<Input
type="text"
placeholder={t("common:name")}
name="name"
label={t("common:name")}
2022-08-26 20:19:31 +02:00
error={getFirstErrorTranslation(errors.name)}
/>
<Input
type="text"
placeholder="Email"
name="email"
label="Email"
2022-08-26 20:19:31 +02:00
error={getFirstErrorTranslation(errors.email)}
/>
<Button className="mt-6 w-full" type="submit" data-cy="submit">
2022-08-26 20:19:31 +02:00
Submit
</Button>
</Form>
<FormState
id="message"
state={fetchState}
message={message != null ? t(message) : undefined}
/>
2022-08-26 20:19:31 +02:00
</section>
)
}