import { useForm } from "react-hook-form"; import { Card, CardContent } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Select, SelectItem } from "@/components/ui/select"; import { Textarea } from "@/components/ui/textarea"; export default function RTVForm() { const { register, handleSubmit, watch, formState: { errors, isValid } } = useForm({ mode: "onChange" }); const onSubmit = (data) => { }; return ( <div className="max-w-2xl mx-auto p-6"> <Card> <CardContent className="p-6 space-y-4"> <h2 className="text-xl font-bold">สร้างเอกสาร RTV</h2> <form onSubmit={handleSubmit(onSubmit)}> <label>ซัพพลายเออร์</label> <Select {...register("supplier", { required: true })}> <SelectItem value="ABC Ltd">ABC Ltd</SelectItem> <SelectItem value="XYZ Corp">XYZ Corp</SelectItem> </Select> {errors.supplier && <p className="text-red-500">โปรดเลือกซัพพลายเออร์</p>} <label>หมายเลข PO</label> <Input {...register("poNumber", { required: true })} placeholder="ระบุหมายเลข PO" /> {errors.poNumber && <p className="text-red-500">โปรดระบุหมายเลข PO</p>} <label>สินค้า</label> <Input {...register("product", { required: true })} placeholder="ชื่อสินค้า / รหัสสินค้า" /> {errors.product && <p className="text-red-500">โปรดระบุสินค้า</p>} <label>จำนวนที่ต้องการคืน</label> <Input type="number" {...register("quantity", { required: true })} /> {errors.quantity && <p className="text-red-500">โปรดระบุจำนวนที่ต้องการคืน</p>} <label>เหตุผลในการคืนสินค้า</label> <Select {...register("reason", { required: true })}> <SelectItem value="สินค้าชำรุด">สินค้าชำรุด</SelectItem> <SelectItem value="ไม่ตรงสเปค">ไม่ตรงสเปค</SelectItem> </Select> {errors.reason && <p className="text-red-500">โปรดเลือกเหตุผล</p>} <label>ที่อยู่ในการรับคืน</label> <Input {...register("returnLocation", { required: true })} placeholder="ที่อยู่รับคืน" /> {errors.returnLocation && <p className="text-red-500">โปรดระบุที่อยู่รับคืน</p>} <label>วันที่ในการรับคืน</label> <Input type="date" {...register("returnDate", { required: true })} /> {errors.returnDate && <p className="text-red-500">โปรดระบุวันที่รับคืน</p>} <label>ชื่อผู้ติดต่อ</label> <Input {...register("contactName", { required: true })} placeholder="ชื่อผู้ติดต่อ" /> {errors.contactName && <p className="text-red-500">โปรดระบุชื่อผู้ติดต่อ</p>} <label>เบอร์โทรศัพท์</label> <Input {...register("contactPhone", { required: true })} placeholder="เบอร์โทรศัพท์" /> {errors.contactPhone && <p className="text-red-500">โปรดระบุเบอร์โทรศัพท์</p>} <label>หมายเหตุเพิ่มเติม</label> <Textarea {...register("remarks")} placeholder="ระบุข้อมูลเพิ่มเติม (ถ้ามี)" /> <Button className="w-full" type="submit" disabled={!isValid}>บันทึกเอกสาร RTV</Button> </form> </CardContent> </Card> </div> ); }
Standard input is empty
import { useForm } from "react-hook-form"; import { Card, CardContent } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Select, SelectItem } from "@/components/ui/select"; import { Textarea } from "@/components/ui/textarea"; export default function RTVForm() { const { register, handleSubmit, watch, formState: { errors, isValid } } = useForm({ mode: "onChange" }); const onSubmit = (data) => { console.log("Form Submitted", data); }; return ( <div className="max-w-2xl mx-auto p-6"> <Card> <CardContent className="p-6 space-y-4"> <h2 className="text-xl font-bold">สร้างเอกสาร RTV</h2> <form onSubmit={handleSubmit(onSubmit)}> <label>ซัพพลายเออร์</label> <Select {...register("supplier", { required: true })}> <SelectItem value="ABC Ltd">ABC Ltd</SelectItem> <SelectItem value="XYZ Corp">XYZ Corp</SelectItem> </Select> {errors.supplier && <p className="text-red-500">โปรดเลือกซัพพลายเออร์</p>} <label>หมายเลข PO</label> <Input {...register("poNumber", { required: true })} placeholder="ระบุหมายเลข PO" /> {errors.poNumber && <p className="text-red-500">โปรดระบุหมายเลข PO</p>} <label>สินค้า</label> <Input {...register("product", { required: true })} placeholder="ชื่อสินค้า / รหัสสินค้า" /> {errors.product && <p className="text-red-500">โปรดระบุสินค้า</p>} <label>จำนวนที่ต้องการคืน</label> <Input type="number" {...register("quantity", { required: true })} /> {errors.quantity && <p className="text-red-500">โปรดระบุจำนวนที่ต้องการคืน</p>} <label>เหตุผลในการคืนสินค้า</label> <Select {...register("reason", { required: true })}> <SelectItem value="สินค้าชำรุด">สินค้าชำรุด</SelectItem> <SelectItem value="ไม่ตรงสเปค">ไม่ตรงสเปค</SelectItem> </Select> {errors.reason && <p className="text-red-500">โปรดเลือกเหตุผล</p>} <label>ที่อยู่ในการรับคืน</label> <Input {...register("returnLocation", { required: true })} placeholder="ที่อยู่รับคืน" /> {errors.returnLocation && <p className="text-red-500">โปรดระบุที่อยู่รับคืน</p>} <label>วันที่ในการรับคืน</label> <Input type="date" {...register("returnDate", { required: true })} /> {errors.returnDate && <p className="text-red-500">โปรดระบุวันที่รับคืน</p>} <label>ชื่อผู้ติดต่อ</label> <Input {...register("contactName", { required: true })} placeholder="ชื่อผู้ติดต่อ" /> {errors.contactName && <p className="text-red-500">โปรดระบุชื่อผู้ติดต่อ</p>} <label>เบอร์โทรศัพท์</label> <Input {...register("contactPhone", { required: true })} placeholder="เบอร์โทรศัพท์" /> {errors.contactPhone && <p className="text-red-500">โปรดระบุเบอร์โทรศัพท์</p>} <label>หมายเหตุเพิ่มเติม</label> <Textarea {...register("remarks")} placeholder="ระบุข้อมูลเพิ่มเติม (ถ้ามี)" /> <Button className="w-full" type="submit" disabled={!isValid}>บันทึกเอกสาร RTV</Button> </form> </CardContent> </Card> </div> ); }