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
)
}
}
}