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' import { t } from '@/i18n/mobile-i18n' 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 ( {t('mobileCommitFailurePanel.commitFailed')} {action.summary ?? t('mobileCommitFailurePanel.commitFailedMessage')} [ styles.commitFailureFixButton, action.launching && styles.commitFailureFixButtonDisabled, pressed && styles.commitFailureFixButtonPressed ]} onPress={() => void action.launch()} disabled={action.launching} accessibilityRole="button" accessibilityLabel={t('mobileCommitFailurePanel.fixCommit')} > {action.launching ? ( ) : ( )} {t('mobileCommitFailurePanel.fix')} {action.hasDetails && detailsText ? ( <> [ styles.commitFailureDetailsButton, pressed && styles.commitFailureDetailsButtonPressed ]} onPress={() => setExpanded((current) => !current)} accessibilityRole="button" accessibilityLabel={ expanded ? t('mobileCommitFailurePanel.hideCommit') : t('mobileCommitFailurePanel.showCommit') } > {expanded ? t('mobileCommitFailurePanel.hideDetails') : t('mobileCommitFailurePanel.showDetails')} {expanded ? {detailsText} : null} ) : null} {action.launchError ? ( {action.launchError} ) : null} ) }