"use client"; import { useEffect, useState } from "react"; import { Loader2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import type { User } from "@/lib/models"; const ROLE_OPTIONS: { value: User["role"]; label: string }[] = [ { value: "CLIENT", label: "Associazione" }, { value: "MANAGER", label: "Gestore" }, { value: "ADMIN", label: "Amministratore" }, ]; const EMPTY_USER: User = { email: "", password: "", role: "CLIENT" }; export function UserFormDialog({ open, onOpenChange, initialValue, onSubmit, }: { open: boolean; onOpenChange: (open: boolean) => void; initialValue?: User; onSubmit: (user: User) => Promise | void; }) { const [value, setValue] = useState(initialValue ?? EMPTY_USER); const [saving, setSaving] = useState(false); const isEdit = Boolean(initialValue); useEffect(() => { if (open) { setValue(initialValue ?? EMPTY_USER); } }, [open, initialValue]); const update = (key: K, fieldValue: User[K]) => setValue((prev) => ({ ...prev, [key]: fieldValue })); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setSaving(true); try { await onSubmit(value); onOpenChange(false); } catch (error) { console.error("Failed to save user:", error); alert("Impossibile salvare l'account"); } finally { setSaving(false); } }; return ( {isEdit ? "Modifica account" : "Nuovo account di accesso"}
update("email", e.target.value)} required />
update("password", e.target.value)} placeholder={isEdit ? "Lascia vuoto per non modificarla" : undefined} required={!isEdit} />
); }