fix(source-control): stack Retry below the too-many-changes message (#19037)

This commit is contained in:
Neil
2026-09-06 01:09:18 -07:00
committed by GitHub
parent 6494f2a4f0
commit ffbf35e0d2
2 changed files with 28 additions and 19 deletions
@@ -68,9 +68,12 @@ export function TooManyChangesBanner({
}
return (
<div className="rounded-md border border-amber-500/25 bg-amber-500/5 px-3 py-2">
<div className="flex items-center gap-2">
<AlertTriangle className="size-4 shrink-0 text-amber-600 dark:text-amber-400" />
<div
data-testid="too-many-changes-banner"
className="flex flex-col gap-2 rounded-md border border-amber-500/25 bg-amber-500/5 px-3 py-2"
>
<div className="flex items-start gap-2">
<AlertTriangle className="mt-px size-4 shrink-0 text-amber-600 dark:text-amber-400" />
<span className="min-w-0 flex-1 text-xs text-foreground">
{translate(
'auto.components.right.sidebar.SourceControl.tooManyChanges',
@@ -78,18 +81,18 @@ export function TooManyChangesBanner({
{ value0: limit.toLocaleString() }
)}
</span>
<Button
type="button"
variant="outline"
size="xs"
className="w-24 shrink-0 text-xs"
disabled={isRetrying}
onClick={() => void handleRetry()}
>
{showSpinner ? <Loader2 className="size-3 animate-spin" /> : null}
{translate('auto.components.right.sidebar.SourceControl.286dbda4d6', 'Retry')}
</Button>
</div>
<Button
type="button"
variant="outline"
size="xs"
className="self-end text-xs"
disabled={isRetrying}
onClick={() => void handleRetry()}
>
{showSpinner ? <Loader2 className="size-3 animate-spin" /> : null}
{translate('auto.components.right.sidebar.SourceControl.286dbda4d6', 'Retry')}
</Button>
</div>
)
}
@@ -31,6 +31,7 @@ import {
removeLargeFileCountUntrackedTree
} from './large-file-count-fixtures'
import { DEFAULT_GIT_STATUS_LIMIT } from '../../src/shared/git-status-limit'
import { RIGHT_SIDEBAR_MIN_WIDTH } from '../../src/renderer/src/components/right-sidebar/right-sidebar-width'
// Matches the large-diff freeze budget: a blocking stall past 1s is the
// "UI becomes unresponsive" symptom reported in #8013.
@@ -416,12 +417,17 @@ test.describe('Source Control large file count (#8013)', () => {
rendererWorkingSetMb: { before: workingSetBeforeMb, after: workingSetAfterMb }
})
const tooManyChangesBanner = orcaPage.getByText('Too many changes detected.', {
exact: false
})
const tooManyChangesBanner = orcaPage.getByTestId('too-many-changes-banner')
await expect(tooManyChangesBanner).toBeVisible()
if (process.env.ORCA_LARGE_FILE_SCREENSHOT_PATH) {
await orcaPage.screenshot({ path: process.env.ORCA_LARGE_FILE_SCREENSHOT_PATH })
// Narrowest supported sidebar is where the banner layout is worst.
await orcaPage.evaluate((minWidth) => {
window.__store?.getState().setRightSidebarWidth(minWidth)
document.documentElement.classList.add('dark')
}, RIGHT_SIDEBAR_MIN_WIDTH)
await tooManyChangesBanner.screenshot({
path: process.env.ORCA_LARGE_FILE_SCREENSHOT_PATH
})
}
expect(measurement.didHitLimit).toBe(true)
@@ -439,7 +445,7 @@ test.describe('Source Control large file count (#8013)', () => {
)
expect(hugeState).not.toBeNull()
const retryButton = tooManyChangesBanner.locator('..').getByRole('button', { name: 'Retry' })
const retryButton = tooManyChangesBanner.getByRole('button', { name: 'Retry' })
await expect(retryButton).toBeVisible()
// Keep automatic refreshes from removing Retry before its real request starts.
await installGitStatusRetryBarrier(electronApp, fixture.repoPath)