Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | 93x 93x 31x 10x 93x 12x 12x | import React, { useEffect } from "react";
import { Form, Button } from "react-bootstrap";
import { useForm } from "react-hook-form";
export default function ReviewForm({
initialItemName,
submitAction,
initialContents,
buttonLabel = "Submit Review",
}) {
const {
register,
handleSubmit,
reset,
formState: { errors },
} = useForm({
defaultValues: {
reviewerComments: "",
itemsStars: 5,
dateItemServed: new Date().toISOString().slice(0, 16),
},
});
useEffect(() => {
if (initialContents?.reviewerComments !== undefined) {
reset({
reviewerComments: initialContents.reviewerComments,
itemsStars: initialContents.itemsStars,
dateItemServed: initialContents.dateItemServed?.slice(0, 16) ?? "",
});
}
}, [initialContents, reset]);
const onSubmit = (data) => {
submitAction({
reviewerComments: data.reviewerComments,
itemsStars: Number(data.itemsStars),
dateItemServed: data.dateItemServed,
});
reset();
};
return (
<Form onSubmit={handleSubmit(onSubmit)}>
<Form.Group className="mb-3">
<Form.Label>Item Name</Form.Label>
<Form.Control type="text" value={initialItemName} disabled />
</Form.Group>
<Form.Group className="mb-3">
<Form.Label htmlFor="reviewerComments">Comments</Form.Label>
<Form.Control
id="reviewerComments"
as="textarea"
rows={3}
isInvalid={Boolean(errors.reviewerComments)}
{...register("reviewerComments", {
required: "Comments are required",
})}
/>
<Form.Control.Feedback type="invalid">
{errors.reviewerComments?.message}
</Form.Control.Feedback>
</Form.Group>
<Form.Group className="mb-3">
<Form.Label htmlFor="itemsStars">Stars (1 to 5)</Form.Label>
<Form.Select id="itemsStars" {...register("itemsStars")}>
{[1, 2, 3, 4, 5].map((n) => (
<option key={n} value={n}>
{n}
</option>
))}
</Form.Select>
</Form.Group>
<Form.Group className="mb-3">
<Form.Label htmlFor="dateItemServed">
Date and Time Item was Served
</Form.Label>
<Form.Control
id="dateItemServed"
type="datetime-local"
{...register("dateItemServed")}
/>
</Form.Group>
<Button type="submit">{buttonLabel}</Button>
</Form>
);
}
|