From 75f6e4b9ae0e26df15a31e1ba426992ff37549d7 Mon Sep 17 00:00:00 2001 From: Malachi Willey Date: Thu, 13 Aug 2026 13:49:03 -0700 Subject: [PATCH] feat(inbox): Show secondary autofix actions --- .../issuePreview/issuePreview.spec.tsx | 3 +- .../issuePreview/issuePreviewActions.tsx | 124 ++++++++++++------ 2 files changed, 89 insertions(+), 38 deletions(-) diff --git a/static/app/views/issueDetails/issuePreview/issuePreview.spec.tsx b/static/app/views/issueDetails/issuePreview/issuePreview.spec.tsx index 0635c5af386d..44448a7e02a2 100644 --- a/static/app/views/issueDetails/issuePreview/issuePreview.spec.tsx +++ b/static/app/views/issueDetails/issuePreview/issuePreview.spec.tsx @@ -64,7 +64,7 @@ describe('IssuePreview', () => { }); }); - it('links to an open user pull request without an Autofix state', async () => { + it('links to an open user pull request and shows the next Autofix step', async () => { MockApiClient.addMockResponse({ url: `/organizations/${organization.slug}/issues/${group.id}/autofix/`, body: ExplorerAutofixResponseFixture({autofix: null}), @@ -93,6 +93,7 @@ describe('IssuePreview', () => { expect( await screen.findByRole('button', {name: 'View example/repo-name#10'}) ).toHaveAttribute('href', 'https://github.com/example/repo-name/pull/10'); + expect(screen.getByRole('button', {name: 'Find Root Cause'})).toBeInTheDocument(); }); it('offers to restart Autofix after PR creation when the linked PR is closed', async () => { diff --git a/static/app/views/issueDetails/issuePreview/issuePreviewActions.tsx b/static/app/views/issueDetails/issuePreview/issuePreviewActions.tsx index 8c4be3175e5e..2ebd35920d63 100644 --- a/static/app/views/issueDetails/issuePreview/issuePreviewActions.tsx +++ b/static/app/views/issueDetails/issuePreview/issuePreviewActions.tsx @@ -1,4 +1,4 @@ -import {useState, type ReactNode} from 'react'; +import {Fragment, useState, type ReactNode} from 'react'; import {Button, ButtonBar, LinkButton, type ButtonProps} from '@sentry/scraps/button'; import {MenuComponents} from '@sentry/scraps/compactSelect'; @@ -77,6 +77,7 @@ function getAutofixActionProps({ } function StartAutofixAction({ + variant = 'primary', action, analyticsAction, analyticsEventKey, @@ -100,6 +101,7 @@ function StartAutofixAction({ codingAgentStep?: 'root_cause' | 'solution'; icon?: ReactNode; tooltip?: string | null; + variant?: 'primary' | 'secondary'; }) { const organization = useOrganization(); const [isStartingAction, setIsStartingAction] = useState(false); @@ -160,6 +162,7 @@ function StartAutofixAction({ disabled={disabled || busy} onClick={handleClick} tooltipProps={tooltip ? {title: tooltip} : undefined} + variant={variant} > {label} @@ -178,7 +181,7 @@ function StartAutofixAction({ trigger={(triggerProps, isOpen) => (