'use client'; import { useState, useEffect } from 'react'; import { Dialog, DialogTitle, DialogContent, DialogActions, Button, TextField, MenuItem, Box, Alert, } from '@mui/material'; import { InviteMemberData } from '@/lib/api/families'; interface InviteMemberDialogProps { open: boolean; onClose: () => void; onSubmit: (data: InviteMemberData) => Promise; isLoading?: boolean; } export function InviteMemberDialog({ open, onClose, onSubmit, isLoading = false, }: InviteMemberDialogProps) { const [formData, setFormData] = useState({ email: '', role: 'viewer', }); const [error, setError] = useState(''); useEffect(() => { if (open) { setFormData({ email: '', role: 'viewer', }); setError(''); } }, [open]); const handleChange = (field: keyof InviteMemberData) => ( e: React.ChangeEvent ) => { setFormData({ ...formData, [field]: e.target.value }); }; const handleSubmit = async () => { setError(''); // Validation if (!formData.email.trim()) { setError('Please enter an email address'); return; } // Basic email validation const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(formData.email)) { setError('Please enter a valid email address'); return; } try { await onSubmit(formData); onClose(); } catch (err: any) { setError(err.message || 'Failed to invite member'); } }; return ( Invite Family Member {error && ( setError('')}> {error} )} Parent - Full access to all features Caregiver - Can manage daily activities Viewer - Can only view information ); }