'use client' import { useState, useRef, useEffect } from 'react' import { useRouter } from 'next/navigation' import { useForm } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import * as z from 'zod' import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from '@/components/ui/dialog' import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form' import { Input } from '@/components/ui/input' import { Button } from '@/components/ui/button' import { createUser } from '@/lib/actions/users' import { Plus, Building2 } from 'lucide-react' const userSchema = z.object({ email: z.string().email('Ungültige E-Mail-Adresse'), role: z.enum(['admin', 'partner']), company_id: z.string().optional().or(z.literal('')), }) type UserFormValues = z.infer interface UserDialogProps { companies: { id: string; name: string }[] } export function UserDialog({ companies }: UserDialogProps) { const [open, setOpen] = useState(false) const [dropdownOpen, setDropdownOpen] = useState(false) const [search, setSearch] = useState('') const dropdownRef = useRef(null) const router = useRouter() useEffect(() => { function handleClickOutside(e: MouseEvent) { if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) { setDropdownOpen(false) setSearch('') } } document.addEventListener('mousedown', handleClickOutside) return () => document.removeEventListener('mousedown', handleClickOutside) }, []) const form = useForm({ resolver: zodResolver(userSchema) as any, defaultValues: { email: '', role: 'partner', company_id: '', }, }) async function onSubmit(values: UserFormValues) { try { const payload = { email: values.email, role: values.role, company_id: values.company_id || undefined, } await createUser(payload) setOpen(false) form.reset() router.refresh() } catch (error) { console.error('Error creating user:', error) } } return ( { setOpen(val) if (!val) { form.reset() setDropdownOpen(false) setSearch('') } }}> Neuen Benutzer anlegen Geben Sie die E-Mail, die Rolle und optional die Firma für den neuen Benutzer ein. Nach der Erstellung erhält der Benutzer eine E-Mail zum Festlegen seines Passworts.
( E-Mail )} /> ( Rolle )} /> { const selectedCompany = companies.find((c) => c.id === field.value) return ( Firma (optional)
{dropdownOpen && (
setSearch(e.target.value)} className="w-full text-xs bg-white/5 border border-white/10 rounded px-2 py-1.5 text-slate-200 placeholder-slate-500 focus:outline-none focus:ring-1 focus:ring-primary/50" autoFocus />
{companies .filter((c) => c.name.toLowerCase().includes(search.toLowerCase())) .map((c) => ( ))}
)}
) }} />
) }