diff --git a/packages/ui/src/components/views/git/PullRequestSection.tsx b/packages/ui/src/components/views/git/PullRequestSection.tsx index f86cf9ae..cd63f71e 100644 --- a/packages/ui/src/components/views/git/PullRequestSection.tsx +++ b/packages/ui/src/components/views/git/PullRequestSection.tsx @@ -28,12 +28,6 @@ import { DialogHeader, DialogTitle, } from '@/components/ui/dialog'; -import { - DropdownMenu, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuTrigger, -} from '@/components/ui/dropdown-menu'; import { Input } from '@/components/ui/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Textarea } from '@/components/ui/textarea'; @@ -448,8 +442,6 @@ export const PullRequestSection: React.FC<{ return Array.from(unique).sort((a, b) => a.localeCompare(b)); }, [baseBranch, remoteBranches, selectedRemote?.name, targetBaseBranch, upstreamBranches, useDetectedUpstream]); - const hasMultipleRemotes = remotes.length > 1; - // Update selected remote when remotes change React.useEffect(() => { if (remotes.length === 0) { @@ -1018,12 +1010,6 @@ export const PullRequestSection: React.FC<{ }, delayMs)); }, [refresh]); - // Refetch PR status when selected remote changes - const handleRemoteChange = React.useCallback((remote: GitRemote) => { - didUserOverrideRemoteRef.current = true; - setSelectedRemote((prev) => (prev?.name === remote.name ? prev : remote)); - }, []); - React.useEffect(() => { if (!github?.prStatus || !canShow || remotes.length <= 1) { return; @@ -1397,7 +1383,20 @@ export const PullRequestSection: React.FC<{ : prVisualState === 'closed' ? RiGitClosePullRequestLine : RiGitPullRequestLine; - + const prStatusText = pr + ? [ + `${pr.state}${pr.draft ? ' (draft)' : ''}`, + pr.mergeable === false ? t('gitView.pr.notMergeable') : null, + pr.state === 'open' && typeof pr.mergeableState === 'string' && pr.mergeableState && pr.mergeableState !== 'unknown' + ? pr.mergeableState + : null, + ].filter(Boolean).join(' · ') + : ''; + const checksText = checks + ? checks.total > 0 + ? `${checks.success}/${checks.total} ${t('gitView.pr.checks.label')}` + : `${checks.state} ${t('gitView.pr.checks.label')}` + : ''; const containerClassName = 'border-0 bg-transparent rounded-none'; const headerClassName = 'px-0 py-3 border-b border-border/40 flex flex-col gap-1'; const bodyClassName = 'flex flex-col gap-3 py-3'; @@ -1405,8 +1404,8 @@ export const PullRequestSection: React.FC<{ return (
-
-
+
+
{pr ? ( @@ -1429,7 +1428,7 @@ export const PullRequestSection: React.FC<{ #{pr.number} ) : null}
-
+
{isLoading ? : null} @@ -1445,83 +1444,23 @@ export const PullRequestSection: React.FC<{

{t('gitView.pr.actions.refresh')}

+
+
+ + {pr ? ( +
+ {prStatusText} {checks ? ( - + - {checks.total > 0 ? `${checks.success}/${checks.total} checks` : `${checks.state} checks`} + {checksText} ) : null} {trackingBranch && selectedRemote && trackingBranch.split('/')[0] !== selectedRemote.name ? ( - + {trackingBranch.split('/')[0]} → {selectedRemote.name} ) : null} - {hasMultipleRemotes || detectedUpstream ? ( - - - - - - {remotes.map((remote) => ( - { - setUseDetectedUpstream(false); - handleRemoteChange(remote); - }} - > -
- - {remote.name} - {!useDetectedUpstream && remote.name === selectedRemote?.name && ( - - )} - - - {remote.pushUrl} - -
-
- ))} - {detectedUpstream ? ( - setUseDetectedUpstream(true)} - > -
- - upstream · {detectedUpstream.owner}/{detectedUpstream.repo} - {useDetectedUpstream && ( - - )} - - - {detectedUpstream.url} - -
-
- ) : null} -
-
- ) : null} -
-
- {pr ? ( -
- - {pr.state}{pr.draft ? ' (draft)' : ''} - - {pr.mergeable === false ? ` · ${t('gitView.pr.notMergeable')}` : ''} - {pr.state === 'open' && typeof pr.mergeableState === 'string' && pr.mergeableState && pr.mergeableState !== 'unknown' - ? ` · ${pr.mergeableState}` - : ''}
) : null}
diff --git a/packages/ui/src/lib/i18n/messages/en.ts b/packages/ui/src/lib/i18n/messages/en.ts index b6fdbe9a..99ebd599 100644 --- a/packages/ui/src/lib/i18n/messages/en.ts +++ b/packages/ui/src/lib/i18n/messages/en.ts @@ -615,6 +615,7 @@ export const dict = { 'gitView.pr.checkDetails.empty': 'No check details available', 'gitView.pr.checkDetails.title': 'Failed check details', 'gitView.pr.checkingStatus': 'Checking pull request status...', + 'gitView.pr.checks.label': 'checks', 'gitView.pr.checks.completedLabel': 'Completed', 'gitView.pr.checks.conclusionLabel': 'Conclusion', 'gitView.pr.checks.startedLabel': 'Started', diff --git a/packages/ui/src/lib/i18n/messages/es.ts b/packages/ui/src/lib/i18n/messages/es.ts index c9b83b91..8021b23b 100644 --- a/packages/ui/src/lib/i18n/messages/es.ts +++ b/packages/ui/src/lib/i18n/messages/es.ts @@ -616,6 +616,7 @@ export const dict: Record = { "gitView.pr.checkDetails.empty": "No hay detalles del check disponibles", "gitView.pr.checkDetails.title": "Detalles del check fallido", "gitView.pr.checkingStatus": "Comprobando estado de la PR...", + "gitView.pr.checks.label": "checks", "gitView.pr.checks.completedLabel": "Completado", "gitView.pr.checks.conclusionLabel": "Conclusión", "gitView.pr.checks.startedLabel": "Iniciado", diff --git a/packages/ui/src/lib/i18n/messages/ko.ts b/packages/ui/src/lib/i18n/messages/ko.ts index 8a4c3ff5..8d03998d 100644 --- a/packages/ui/src/lib/i18n/messages/ko.ts +++ b/packages/ui/src/lib/i18n/messages/ko.ts @@ -616,6 +616,7 @@ export const dict: Record = { 'gitView.pr.checkDetails.empty': '체크 상세 정보 없음', 'gitView.pr.checkDetails.title': '실패한 체크 상세', 'gitView.pr.checkingStatus': 'PR 상태 확인 중…', + 'gitView.pr.checks.label': 'checks', 'gitView.pr.checks.completedLabel': '완료됨', 'gitView.pr.checks.conclusionLabel': '결론', 'gitView.pr.checks.startedLabel': '시작됨', diff --git a/packages/ui/src/lib/i18n/messages/pt-BR.ts b/packages/ui/src/lib/i18n/messages/pt-BR.ts index 0495ec4e..90288352 100644 --- a/packages/ui/src/lib/i18n/messages/pt-BR.ts +++ b/packages/ui/src/lib/i18n/messages/pt-BR.ts @@ -616,6 +616,7 @@ export const dict: Record = { "gitView.pr.checkDetails.empty": "Não há detalhes do check disponíveis", "gitView.pr.checkDetails.title": "Detalhes do check falhou", "gitView.pr.checkingStatus": "Verificando status da PR...", + "gitView.pr.checks.label": "checks", "gitView.pr.checks.completedLabel": "Concluído", "gitView.pr.checks.conclusionLabel": "Conclusión", "gitView.pr.checks.startedLabel": "Iniciado", diff --git a/packages/ui/src/lib/i18n/messages/uk.ts b/packages/ui/src/lib/i18n/messages/uk.ts index fab826a2..1ecad256 100644 --- a/packages/ui/src/lib/i18n/messages/uk.ts +++ b/packages/ui/src/lib/i18n/messages/uk.ts @@ -616,6 +616,7 @@ export const dict: Record = { "gitView.pr.checkDetails.empty": "Деталі перевірки відсутні", "gitView.pr.checkDetails.title": "Деталі перевірки", "gitView.pr.checkingStatus": "Перевірка статусу PR...", + "gitView.pr.checks.label": "checks", "gitView.pr.checks.completedLabel": "Виконано", "gitView.pr.checks.conclusionLabel": "Висновок", "gitView.pr.checks.startedLabel": "Почато", diff --git a/packages/ui/src/lib/i18n/messages/zh-CN.ts b/packages/ui/src/lib/i18n/messages/zh-CN.ts index 676d7923..37fae120 100644 --- a/packages/ui/src/lib/i18n/messages/zh-CN.ts +++ b/packages/ui/src/lib/i18n/messages/zh-CN.ts @@ -616,6 +616,7 @@ export const dict: Record = { 'gitView.pr.checkDetails.empty': '没有可用的检查详情', 'gitView.pr.checkDetails.title': '失败检查详情', 'gitView.pr.checkingStatus': '正在检查拉取请求状态...', + 'gitView.pr.checks.label': 'checks', 'gitView.pr.checks.completedLabel': '完成时间', 'gitView.pr.checks.conclusionLabel': '结论', 'gitView.pr.checks.startedLabel': '开始时间',