import { useEffect, useState } from 'react'; import { Button } from '@renderer/components/ui/button'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@renderer/components/ui/dialog'; import { Input } from '@renderer/components/ui/input'; import { Label } from '@renderer/components/ui/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@renderer/components/ui/select'; import { Textarea } from '@renderer/components/ui/textarea'; import { formatAgentRole } from '@renderer/utils/formatAgentRole'; import type { ResolvedTeamMember, SendMessageResult } from '@shared/types'; interface SendMessageDialogProps { open: boolean; members: ResolvedTeamMember[]; defaultRecipient?: string; sending: boolean; sendError: string | null; lastResult: SendMessageResult | null; onSend: (member: string, text: string, summary?: string) => void; onClose: () => void; } const NO_MEMBER = '__none__'; export const SendMessageDialog = ({ open, members, defaultRecipient, sending, sendError, lastResult, onSend, onClose, }: SendMessageDialogProps): React.JSX.Element => { const [member, setMember] = useState(''); const [text, setText] = useState(''); const [summary, setSummary] = useState(''); const [prevOpen, setPrevOpen] = useState(false); const [prevResult, setPrevResult] = useState(null); // Reset form when dialog opens if (open && !prevOpen) { setMember(defaultRecipient ?? ''); setText(''); setSummary(''); setPrevResult(lastResult); } if (open !== prevOpen) { setPrevOpen(open); } // Auto-close on successful send (lastResult changed while dialog is open) useEffect(() => { if (open && lastResult && lastResult !== prevResult) { setMember(''); setText(''); setSummary(''); onClose(); } }, [open, lastResult, prevResult, onClose]); const canSend = member.trim().length > 0 && text.trim().length > 0 && !sending; const handleSubmit = (): void => { if (!canSend) return; onSend(member.trim(), text.trim(), summary.trim() || undefined); }; const handleOpenChange = (nextOpen: boolean): void => { if (!nextOpen) { onClose(); } }; return ( Send Message Send a direct message to a team member.
setSummary(e.target.value)} />