'use client'; import { useState } from 'react'; import { X, UserPlus, Mail, Shield } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'; import { cn } from '@/lib/utils'; interface AddMemberModalProps { open: boolean; onOpenChange: (open: boolean) => void; teamId: string; teamName: string; onAddMember: (email: string, permission: 'view' | 'share' | 'manager') => Promise; loading?: boolean; } export function AddMemberModal({ open, onOpenChange, teamId, teamName, onAddMember, loading = false }: AddMemberModalProps) { const [email, setEmail] = useState(''); const [permission, setPermission] = useState<'view' | 'share' | 'manager'>('view'); const [error, setError] = useState(''); const validateEmail = (email: string) => { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return emailRegex.test(email); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(''); if (!email.trim()) { setError('Email is required'); return; } if (!validateEmail(email)) { setError('Please enter a valid email address'); return; } try { await onAddMember(email.trim().toLowerCase(), permission); setEmail(''); setPermission('view'); onOpenChange(false); } catch (err: any) { setError(err.message || 'Failed to add member'); } }; const handleClose = () => { setEmail(''); setPermission('view'); setError(''); onOpenChange(false); }; if (!open) return null; return (
{/* Header */}

Add Team Member

{teamName}

{/* Form */}
{/* Email Input */}
setEmail(value)} placeholder="member@example.com" className="pl-10" disabled={loading} autoFocus clearable />
{error && (

{error}

)}
{/* Permission Level */}
setPermission(value as 'view' | 'share' | 'manager')} >
{/* Actions */}
); }