"use client" import { zodResolver } from "@hookform/resolvers/zod" import { useForm } from "react-hook-form" import * as z from "zod" import { Button } from "@/components/ui/button" import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { Textarea } from "@/components/ui/textarea" import { toast } from "@/components/ui/use-toast" const FormSchema = z.object({ gweet: z .string() .min(1, { message: "Come on post something...", }) .max(1000, { message: "Gweets cannot be more that 1000 characters.", }), }) export function PostMessageForm() { const form = useForm<z.infer<typeof FormSchema>>({ resolver: zodResolver(FormSchema), }) async function onSubmit(data: z.infer<typeof FormSchema>) { await fetch('/api/messages', { method: 'POST', body: JSON.stringify(data), next: { tags: ['collection'] } }) toast({ title: "Your gweet is being processed...", description: ( <pre className="mt-2 w-[340px] rounded-md bg-slate-600 p-4"> <code className="text-white">{JSON.stringify(data, null, 2)}</code> </pre> ), }) } return ( <Form {...form}> <form onSubmit={form.handleSubmit(onSubmit)} className="space-y-6"> <FormField control={form.control} name="gweet" render={({ field }) => ( <FormItem> <FormLabel>Gweet</FormLabel> <FormControl> <Textarea placeholder="What's on your mind?" className="resize-none" {...field} /> </FormControl> <FormDescription> Your gweets will be public, and everyone can see them. </FormDescription> <FormMessage /> </FormItem> )} /> <Button type="submit">Submit</Button> </form> </Form> ) }