import { useState } from 'react';
import { Alert, AlertIcon, AlertTitle } from '@/registry/default/ui/alert';
import { Button } from '@/registry/default/ui/base-button';
import {
Dialog,
DialogClose,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
DialogTrigger,
} from '@/registry/default/ui/base-dialog';
import {
Form,
FormControl,
FormDescription,
FormField,
FormItem,
FormLabel,
FormMessage,
} from '@/registry/default/ui/base-form';
import { Textarea } from '@/registry/default/ui/textarea';
import { zodResolver } from '@hookform/resolvers/zod';
import { RiCheckboxCircleFill } from '@remixicon/react';
import { useForm } from 'react-hook-form';
import { toast } from 'sonner';
import { z } from 'zod';
export default function BaseDialogNoOverlay() {
const [open, setOpen] = useState(false);
const FormSchema = z.object({
feedback: z.string().min(1, 'Feedback is required').max(200, 'Feedback cannot exceed 200 characters'),
});
const form = useForm<z.infer<typeof FormSchema>>({
resolver: zodResolver(FormSchema),
defaultValues: { feedback: '' },
mode: 'onSubmit',
});
function onSubmit() {
toast.custom((t) => (
<Alert variant="mono" icon="primary" onClose={() => toast.dismiss(t)}>
<AlertIcon>
<RiCheckboxCircleFill />
</AlertIcon>
<AlertTitle>Your feedback successfully submitted</AlertTitle>
</Alert>
));
form.reset();
setOpen(false);
}
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger render={<Button variant="outline" />}>Show Dialog</DialogTrigger>
<DialogContent className="sm:max-w-md" showBackdrop={false}>
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)} className="space-y-6">
<DialogHeader>
<DialogTitle>Suggest Idea</DialogTitle>
<DialogDescription>Describe your suggestion.</DialogDescription>
</DialogHeader>
<FormField
control={form.control}
name="feedback"
render={({ field }) => (
<FormItem>
<FormLabel>Feedback:</FormLabel>
<FormControl>
<Textarea placeholder="Tell us how we can improve our product" {...field} />
</FormControl>
<FormDescription>Please don't include any sensitive information</FormDescription>
<FormMessage />
</FormItem>
)}
/>
<DialogFooter>
<DialogClose>Cancel</DialogClose>
<Button type="submit">Submit</Button>
</DialogFooter>
</form>
</Form>
</DialogContent>
</Dialog>
);
}