import { useState, useEffect, useRef } from 'react' import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from '@/components/ui/dialog' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' interface CommitDialogProps { open: boolean modifiedCount: number suggestedMessage?: string onCommit: (message: string) => void onClose: () => void } export function CommitDialog({ open, modifiedCount, suggestedMessage, onCommit, onClose }: CommitDialogProps) { const [message, setMessage] = useState('') const inputRef = useRef(null) useEffect(() => { if (open) { setMessage(suggestedMessage ?? '') // eslint-disable-line react-hooks/set-state-in-effect -- reset on dialog open setTimeout(() => inputRef.current?.focus(), 50) } }, [open]) // eslint-disable-line react-hooks/exhaustive-deps -- only reset when dialog opens const handleSubmit = () => { const trimmed = message.trim() if (!trimmed) return onCommit(trimmed) } const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) { e.preventDefault() handleSubmit() } else if (e.key === 'Escape') { onClose() } } return ( { if (!isOpen) onClose() }}>
Commit & Push {modifiedCount} file{modifiedCount !== 1 ? 's' : ''} changed