"use client"; import type React from "react"; import { useState } from "react"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Label } from "@/components/ui/label"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { useMutation } from "@tanstack/react-query"; import { inviteUser } from "@/app/protected/(admin)/dashboard/user-management/action"; import { toast } from "sonner"; interface InviteUserDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onUserInvited: () => void; } export function InviteUserDialog({ open, onOpenChange, onUserInvited, }: InviteUserDialogProps) { const [formData, setFormData] = useState({ email: "", metadata: "{}", }); const [isLoading, setIsLoading] = useState(false); const handleInputChange = ( e: React.ChangeEvent ) => { const { name, value } = e.target; setFormData((prev) => ({ ...prev, [name]: value })); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setIsLoading(true); let metadata = {}; try { metadata = JSON.parse(formData.metadata); } catch (error) { toast.error("Invalid JSON. Please check your metadata format."); setIsLoading(false); return; } try { await inviteUser({ email: formData.email, user_metadata: metadata, }); toast.success("Invitation sent"); onUserInvited(); onOpenChange(false); setFormData({ email: "", metadata: "{}", }); } catch (error) { toast.error("Failed to send invitation"); } finally { setIsLoading(false); } }; return ( Invite User Send an invitation email to a new user.
); }