import { ActivityIndicator, Pressable, Text, View } from 'react-native' import { AlertTriangle, Check, ChevronRight, CircleDot, GitPullRequest, MessageSquare, X } from 'lucide-react-native' import { colors } from '../theme/mobile-theme' import { useMobileColorScheme } from '../theme/use-mobile-color-scheme' import type { Translate } from '../i18n/mobile-i18n' import { useMobileTranslation } from '../i18n/use-mobile-translation' import { statusColor } from '../components/pr-sidebar/pr-sidebar-status-color' import { hubStyles } from './mobile-source-control-hub-styles' import type { MobilePrChipRollup, MobilePrChipSummary } from './mobile-pr-chip-summary' type Props = { summary: MobilePrChipSummary onPress: () => void } export function MobileSourceControlPrChip({ summary, onPress }: Props) { useMobileColorScheme() const t = useMobileTranslation() return ( [hubStyles.chip, pressed && hubStyles.chipPressed]} onPress={onPress} accessibilityRole="button" accessibilityLabel={chipAccessibilityLabel(summary, t)} > {summary.kind === 'loading' ? ( <> {t('sourceControl.prChip.loading', 'Loading pull request…')} ) : summary.kind === 'none' ? ( <> {t('sourceControl.prChip.createPr', 'Create pull request')} ) : summary.kind === 'unavailable' ? ( <> {summary.message} ) : ( <> #{summary.number} {summary.stateLabel} {summary.commentCount != null && summary.commentCount > 0 ? ( {summary.commentCount} ) : null} )} ) } function ChipRollup({ rollup }: { rollup: MobilePrChipRollup }) { useMobileColorScheme() const color = statusColor(rollup.token) return ( {rollup.text} ) } function RollupIcon({ kind, color }: { kind: MobilePrChipRollup['kind']; color: string }) { const size = 13 const strokeWidth = 2.3 switch (kind) { case 'conflict': return case 'failing': return case 'running': return case 'passed': return case 'none': return null } } function chipAccessibilityLabel(summary: MobilePrChipSummary, t: Translate): string { switch (summary.kind) { case 'loading': return t('sourceControl.prChip.loadingLabel', 'Loading pull request') case 'none': return t('sourceControl.prChip.createPr', 'Create pull request') case 'unavailable': return t('sourceControl.prChip.unavailableLabel', 'Pull request unavailable: {{message}}', { message: summary.message }) case 'ready': { const count = summary.commentCount const details = { number: summary.number, state: summary.stateLabel, checks: summary.rollup.text } if (count != null && count > 0) { return count === 1 ? t( 'sourceControl.prChip.openWithComments_one', 'Pull request #{{number}}, {{state}}, {{checks}}, {{count}} unresolved comments. Open pull request.', { ...details, count } ) : t( 'sourceControl.prChip.openWithComments_other', 'Pull request #{{number}}, {{state}}, {{checks}}, {{count}} unresolved comments. Open pull request.', { ...details, count } ) } return t( 'sourceControl.prChip.openLabel', 'Pull request #{{number}}, {{state}}, {{checks}}. Open pull request.', details ) } } }