🐛 fix(vscode): 工单标题栏按钮只留图标
This commit is contained in:
1 parent
349e9b7540
commit
e303a8d15f
1 file changed
+35
-51
@@ -1,7 +1,7 @@
|
|||||||
import type { ClaudeProfile } from '../hooks/useIssues'
|
import type { ClaudeProfile } from '../hooks/useIssues'
|
||||||
import type { Issue, IssueColumn } from '../types'
|
import type { Issue, IssueColumn } from '../types'
|
||||||
import type { PropertyGroup, RowAction } from './property-grid'
|
import type { PropertyGroup, RowAction } from './property-grid'
|
||||||
import { ArrowRightLeft, CircleSlash, Download, Eraser, ExternalLink, GitMerge, Loader2, Play, RotateCcw, Terminal, Trash2, X } from 'lucide-react'
|
import { ArrowRightLeft, Check, CircleSlash, Download, Eraser, ExternalLink, GitMerge, Loader2, Play, RotateCcw, Terminal, Trash2, Undo2, UserPlus, X } from 'lucide-react'
|
||||||
import { useMemo, useRef } from 'react'
|
import { useMemo, useRef } from 'react'
|
||||||
import { canAnswerHandoffRequest, canAskHandoff, canCancelHandoffRequest } from '../../../src/panel/handlers/handoffRequest'
|
import { canAnswerHandoffRequest, canAskHandoff, canCancelHandoffRequest } from '../../../src/panel/handlers/handoffRequest'
|
||||||
import { isIssueLocked } from '../lib/dependencies'
|
import { isIssueLocked } from '../lib/dependencies'
|
||||||
@@ -836,85 +836,69 @@ export function IssueDetailPanel({
|
|||||||
{readOnly && ownerLogin
|
{readOnly && ownerLogin
|
||||||
? (
|
? (
|
||||||
<span
|
<span
|
||||||
className="inline-flex shrink-0 items-center gap-1.5 rounded border border-[var(--vscode-panel-border)] px-2 py-1 text-[11px] opacity-80"
|
className="inline-flex size-6 shrink-0 items-center justify-center rounded border border-[var(--vscode-panel-border)]"
|
||||||
data-tooltip={`${ownerLogin} 的工单,只能查看`}
|
data-tooltip={`${ownerLogin} 的工单,只能查看`}
|
||||||
|
aria-label={`${ownerLogin} 的工单,只能查看`}
|
||||||
>
|
>
|
||||||
{avatars?.[ownerLogin]
|
{avatars?.[ownerLogin]
|
||||||
? <img src={avatars[ownerLogin]} alt={ownerLogin} className="size-4 rounded-full" />
|
? <img src={avatars[ownerLogin]} alt="" className="size-4 rounded-full" />
|
||||||
: null}
|
: <span className="text-[10px]">{ownerLogin.slice(0, 1)}</span>}
|
||||||
{ownerLogin}
|
|
||||||
{' · 只读'}
|
|
||||||
</span>
|
</span>
|
||||||
)
|
)
|
||||||
: null}
|
: null}
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
data-tooltip="在浏览器里打开"
|
data-tooltip={issue.source === 'youtrack' ? '在 YouTrack 打开' : '在 Gitea 打开'}
|
||||||
|
aria-label={issue.source === 'youtrack' ? '在 YouTrack 打开' : '在 Gitea 打开'}
|
||||||
onClick={() => onOpenInBrowser(issue.htmlUrl)}
|
onClick={() => onOpenInBrowser(issue.htmlUrl)}
|
||||||
className="inline-flex shrink-0 items-center gap-1 rounded border border-[var(--vscode-panel-border)] px-2 py-1 text-xs hover:bg-black/10 dark:hover:bg-white/10"
|
className="inline-flex shrink-0 items-center justify-center rounded border border-[var(--vscode-panel-border)] p-1 text-xs hover:bg-black/10 dark:hover:bg-white/10"
|
||||||
>
|
>
|
||||||
<ExternalLink className="size-3.5" />
|
<ExternalLink className="size-3.5" />
|
||||||
{issue.source === 'youtrack' ? '在 YouTrack 打开' : '在 Gitea 打开'}
|
|
||||||
</button>
|
</button>
|
||||||
{canAskHandoff(issue, me) && (
|
{canAskHandoff(issue, me) && (
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
data-tooltip="让负责人把这个工单移交给你"
|
data-tooltip="申请移交"
|
||||||
|
aria-label="申请移交"
|
||||||
onClick={() => onAskHandoff(issue.number)}
|
onClick={() => onAskHandoff(issue.number)}
|
||||||
className="inline-flex shrink-0 items-center gap-1 rounded border border-[var(--vscode-panel-border)] px-2 py-1 text-xs hover:bg-black/10 dark:hover:bg-white/10"
|
className="inline-flex shrink-0 items-center justify-center rounded border border-[var(--vscode-panel-border)] p-1 text-xs hover:bg-black/10 dark:hover:bg-white/10"
|
||||||
>
|
>
|
||||||
申请移交
|
<UserPlus className="size-3.5" />
|
||||||
</button>
|
</button>
|
||||||
)}
|
)}
|
||||||
{canCancelHandoffRequest(issue, me) && (
|
{canCancelHandoffRequest(issue, me) && (
|
||||||
<>
|
<button
|
||||||
<span
|
type="button"
|
||||||
className="max-w-[16rem] truncate text-xs opacity-70"
|
data-tooltip={issue.handoffRequestError && issue.handoffRequestError !== 'rejected' ? `取消申请:${issue.handoffRequestError}` : '取消申请'}
|
||||||
data-tooltip={issue.handoffRequestError && issue.handoffRequestError !== 'rejected' ? issue.handoffRequestError : '等对方同意'}
|
aria-label="取消申请"
|
||||||
>
|
onClick={() => onCancelHandoffRequest(issue.number)}
|
||||||
{issue.handoffRequestError && issue.handoffRequestError !== 'rejected' ? issue.handoffRequestError : '已申请'}
|
className="inline-flex shrink-0 items-center justify-center rounded border border-[var(--vscode-panel-border)] p-1 text-xs hover:bg-black/10 dark:hover:bg-white/10"
|
||||||
</span>
|
>
|
||||||
<button
|
<Undo2 className="size-3.5" />
|
||||||
type="button"
|
</button>
|
||||||
onClick={() => onCancelHandoffRequest(issue.number)}
|
|
||||||
className="inline-flex shrink-0 items-center gap-1 rounded border border-[var(--vscode-panel-border)] px-2 py-1 text-xs hover:bg-black/10 dark:hover:bg-white/10"
|
|
||||||
>
|
|
||||||
取消申请
|
|
||||||
</button>
|
|
||||||
</>
|
|
||||||
)}
|
)}
|
||||||
{canAnswerHandoffRequest(issue, me) && (
|
{canAnswerHandoffRequest(issue, me) && (
|
||||||
<>
|
<>
|
||||||
<span className="shrink-0 text-xs opacity-80">
|
|
||||||
{issue.handoffRequestFrom}
|
|
||||||
{' '}
|
|
||||||
想要这个工单
|
|
||||||
</span>
|
|
||||||
{issue.handoffRequestError && issue.handoffRequestError !== 'rejected'
|
|
||||||
? (
|
|
||||||
<span
|
|
||||||
className="max-w-[16rem] truncate text-xs text-[var(--vscode-errorForeground)]"
|
|
||||||
data-tooltip={issue.handoffRequestError}
|
|
||||||
>
|
|
||||||
{issue.handoffRequestError}
|
|
||||||
</span>
|
|
||||||
)
|
|
||||||
: null}
|
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
disabled={isHandoffRunning(issue.number)}
|
disabled={isHandoffRunning(issue.number)}
|
||||||
|
data-tooltip={issue.handoffRequestError && issue.handoffRequestError !== 'rejected'
|
||||||
|
? `同意 ${issue.handoffRequestFrom} 的申请。上次没交出来:${issue.handoffRequestError}`
|
||||||
|
: `同意 ${issue.handoffRequestFrom} 的申请`}
|
||||||
|
aria-label="同意移交申请"
|
||||||
onClick={() => onAcceptHandoffRequest(issue.number)}
|
onClick={() => onAcceptHandoffRequest(issue.number)}
|
||||||
className="inline-flex shrink-0 items-center gap-1 rounded border border-green-500/60 bg-green-500/10 px-2 py-1 text-xs text-green-500 hover:bg-green-500/20 disabled:opacity-50"
|
className="inline-flex shrink-0 items-center justify-center rounded border border-green-500/60 bg-green-500/10 p-1 text-xs text-green-500 hover:bg-green-500/20 disabled:opacity-50"
|
||||||
>
|
>
|
||||||
{isHandoffRunning(issue.number) ? <Loader2 className="size-3.5 animate-spin" /> : null}
|
{isHandoffRunning(issue.number) ? <Loader2 className="size-3.5 animate-spin" /> : <Check className="size-3.5" />}
|
||||||
同意
|
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
|
data-tooltip={`拒绝 ${issue.handoffRequestFrom} 的申请`}
|
||||||
|
aria-label="拒绝移交申请"
|
||||||
onClick={() => onRejectHandoffRequest(issue.number)}
|
onClick={() => onRejectHandoffRequest(issue.number)}
|
||||||
className="inline-flex shrink-0 items-center gap-1 rounded border border-[var(--vscode-panel-border)] px-2 py-1 text-xs hover:bg-black/10 dark:hover:bg-white/10"
|
className="inline-flex shrink-0 items-center justify-center rounded border border-[var(--vscode-panel-border)] p-1 text-xs hover:bg-black/10 dark:hover:bg-white/10"
|
||||||
>
|
>
|
||||||
拒绝
|
<X className="size-3.5" />
|
||||||
</button>
|
</button>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
@@ -929,10 +913,9 @@ export function IssueDetailPanel({
|
|||||||
disabled={isHandoffRunning(issue.number)}
|
disabled={isHandoffRunning(issue.number)}
|
||||||
onClick={() => onAcceptHandoff(issue.number)}
|
onClick={() => onAcceptHandoff(issue.number)}
|
||||||
aria-label="接管"
|
aria-label="接管"
|
||||||
className="inline-flex shrink-0 items-center gap-1 rounded border border-green-500/60 bg-green-500/10 px-2 py-1 text-xs text-green-500 hover:bg-green-500/20 disabled:opacity-50"
|
className="inline-flex shrink-0 items-center justify-center rounded border border-green-500/60 bg-green-500/10 p-1 text-xs text-green-500 hover:bg-green-500/20 disabled:opacity-50"
|
||||||
>
|
>
|
||||||
{isHandoffRunning(issue.number) ? <Loader2 className="size-3.5 animate-spin" /> : <Download className="size-3.5" />}
|
{isHandoffRunning(issue.number) ? <Loader2 className="size-3.5 animate-spin" /> : <Download className="size-3.5" />}
|
||||||
接管
|
|
||||||
</button>
|
</button>
|
||||||
)}
|
)}
|
||||||
{!issue.handoffAttachmentId && issue.column !== 'done' && ((issue.assignees ?? []).length === 0 || (me !== undefined && (issue.assignees ?? []).includes(me))) && (
|
{!issue.handoffAttachmentId && issue.column !== 'done' && ((issue.assignees ?? []).length === 0 || (me !== undefined && (issue.assignees ?? []).includes(me))) && (
|
||||||
@@ -949,10 +932,11 @@ export function IssueDetailPanel({
|
|||||||
)}
|
)}
|
||||||
{issue.handoffAttachmentId && !(me !== undefined && (issue.assignees ?? []).includes(me)) && (
|
{issue.handoffAttachmentId && !(me !== undefined && (issue.assignees ?? []).includes(me)) && (
|
||||||
<span
|
<span
|
||||||
className="inline-flex shrink-0 items-center rounded border border-[var(--vscode-panel-border)] px-1.5 py-0.5 text-[10px] opacity-70"
|
className="inline-flex shrink-0 items-center justify-center rounded border border-[var(--vscode-panel-border)] p-1 text-xs opacity-70"
|
||||||
data-tooltip={`${issue.handoffFrom ?? '?'} 已移交,等 ${(issue.assignees ?? []).join(', ') || '?'} 接管`}
|
data-tooltip={`${issue.handoffFrom ?? '?'} 已移交,等 ${(issue.assignees ?? []).join(', ') || '?'} 接管`}
|
||||||
|
aria-label="待接管"
|
||||||
>
|
>
|
||||||
待接管
|
<Download className="size-3.5" />
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
{(issue.column === 'in-progress' || issue.column === 'review') && (
|
{(issue.column === 'in-progress' || issue.column === 'review') && (
|
||||||
|
|||||||
Reference in new issue
Block a user