| import React from "react"; | |
| import { Button, Modal, ModalProps, Rating, Text, Textarea } from "@mantine/core"; | |
| import { toast } from "react-hot-toast"; | |
| import { supabase } from "src/lib/api/supabase"; | |
| export const ReviewModal: React.FC<ModalProps> = ({ opened, onClose }) => { | |
| const [stars, setStars] = React.useState(0); | |
| const [review, setReview] = React.useState(""); | |
| return ( | |
| <Modal | |
| title="Leave a Review" | |
| opened={opened} | |
| onClose={() => { | |
| onClose(); | |
| setStars(0); | |
| setReview(""); | |
| }} | |
| centered | |
| > | |
| <form | |
| onSubmit={e => { | |
| e.preventDefault(); | |
| if (stars === 0 && !review.length) return onClose(); | |
| supabase | |
| .from("reviews") | |
| .insert({ stars, review }) | |
| .then(({ error }) => { | |
| if (error) return toast.error(error.message); | |
| toast.success("Thank you for your feedback!"); | |
| }); | |
| onClose(); | |
| }} | |
| > | |
| <Text style={{ textAlign: "center" }}>How was your experience?</Text> | |
| <Rating value={stars} onChange={setStars} my="lg" size="xl" mx="auto" /> | |
| <Textarea | |
| placeholder="Please provide feedback on how we can enhance the product and let us know which features you require." | |
| value={review} | |
| onChange={e => setReview(e.currentTarget.value)} | |
| minLength={10} | |
| maxLength={500} | |
| minRows={5} | |
| /> | |
| <Text fz={12} c="dimmed" style={{ textAlign: "right" }}> | |
| 500/{review.length} | |
| </Text> | |
| <Text fz={12}> | |
| * Your feedback is kept anonymous. If you wish to be contacted, please provide your email | |
| address along with your feedback. | |
| </Text> | |
| <Button type="submit" mt="lg" fullWidth> | |
| Submit | |
| </Button> | |
| </form> | |
| </Modal> | |
| ); | |
| }; | |