import { useState } from 'react' import { ActivityIndicator, Pressable, Text, View } from 'react-native' import { ChevronDown, ChevronRight, Sparkles } from 'lucide-react-native' import { colors } from '../theme/mobile-theme' import type { MobileCommitFailureRecovery } from './mobile-commit-failure-recovery' import type { MobileCommitFailureRecoveryAction } from './use-mobile-commit-failure-recovery' import { styles } from './mobile-source-control-styles' type Props = { failure: MobileCommitFailureRecovery action: MobileCommitFailureRecoveryAction } export function MobileCommitFailurePanel({ failure, action }: Props) { const [expanded, setExpanded] = useState(false) const Chevron = expanded ? ChevronDown : ChevronRight const detailsText = failure.error.trim() return ( Commit failed {action.summary ?? 'Commit failed.'} [ styles.commitFailureFixButton, action.launching && styles.commitFailureFixButtonDisabled, pressed && styles.commitFailureFixButtonPressed ]} onPress={() => void action.launch()} disabled={action.launching} accessibilityRole="button" accessibilityLabel="Fix commit failure with AI" > {action.launching ? ( ) : ( )} Fix {action.hasDetails && detailsText ? ( <> [ styles.commitFailureDetailsButton, pressed && styles.commitFailureDetailsButtonPressed ]} onPress={() => setExpanded((current) => !current)} accessibilityRole="button" accessibilityLabel={ expanded ? 'Hide commit failure details' : 'Show commit failure details' } > {expanded ? 'Hide details' : 'Show details'} {expanded ? {detailsText} : null} ) : null} {action.launchError ? ( {action.launchError} ) : null} ) }