Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
efaaed9
feat: add Issue Fixer Orchestrator mode
MuriloFP Jul 3, 2025
57d3fbe
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 3, 2025
ef61905
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 4, 2025
f5a51c4
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 4, 2025
bcbf329
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 5, 2025
80413c0
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 5, 2025
ab10140
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 7, 2025
39c5cf7
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 7, 2025
00a0b63
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 8, 2025
080b61b
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 8, 2025
7a5ad14
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 8, 2025
2c73ff2
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 9, 2025
05ccf57
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 10, 2025
fdb1f35
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 11, 2025
10ce509
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 14, 2025
ab1f9fc
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 15, 2025
74fd8b4
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 15, 2025
6745c8f
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 16, 2025
faf2ee5
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 17, 2025
b2dadf9
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 17, 2025
c4b1eca
fix: allow export task history while API is active (#5324)
MuriloFP Jul 17, 2025
a28e66a
fix: simplify export button to always be enabled
daniel-lxs Jul 19, 2025
38e3553
fix: enable export, share, and copy buttons during API operations
daniel-lxs Jul 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions webview-ui/src/components/chat/TaskActions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,16 @@ export const TaskActions = ({ item, buttonsDisabled }: TaskActionsProps) => {

return (
<div className="flex flex-row gap-1">
<ShareButton item={item} disabled={buttonsDisabled} />
<ShareButton item={item} disabled={false} />
<IconButton
iconClass="codicon-desktop-download"
title={t("chat:task.export")}
disabled={buttonsDisabled}
onClick={() => vscode.postMessage({ type: "exportCurrentTask" })}
/>
{item?.task && (
<IconButton
iconClass={showCopyFeedback ? "codicon-check" : "codicon-copy"}
title={t("history:copyPrompt")}
disabled={buttonsDisabled}
onClick={(e) => copyWithFeedback(item.task, e)}
/>
)}
Expand Down
46 changes: 42 additions & 4 deletions webview-ui/src/components/chat/__tests__/TaskActions.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -371,16 +371,54 @@ describe("TaskActions", () => {
})

describe("Button States", () => {
it("disables buttons when buttonsDisabled is true", () => {
it("keeps share, export, and copy buttons enabled but disables delete button when buttonsDisabled is true", () => {
render(<TaskActions item={mockItem} buttonsDisabled={true} />)

// Find button by its icon class
// Find buttons by their labels/icons
const buttons = screen.getAllByRole("button")
const shareButton = buttons.find((btn) => btn.querySelector(".codicon-link"))
const exportButton = screen.getByLabelText("Export task history")
const copyButton = buttons.find((btn) => btn.querySelector(".codicon-copy"))
const deleteButton = screen.getByLabelText("Delete Task (Shift + Click to skip confirmation)")

expect(shareButton).toBeDisabled()
expect(exportButton).toBeDisabled()
// Share, export, and copy buttons should be enabled regardless of buttonsDisabled
expect(shareButton).not.toBeDisabled()
expect(exportButton).not.toBeDisabled()
expect(copyButton).not.toBeDisabled()
// Delete button should respect buttonsDisabled
expect(deleteButton).toBeDisabled()
})

it("share, export, and copy buttons are always enabled while delete button respects buttonsDisabled state", () => {
// Test with buttonsDisabled = false
const { rerender } = render(<TaskActions item={mockItem} buttonsDisabled={false} />)

let buttons = screen.getAllByRole("button")
let shareButton = buttons.find((btn) => btn.querySelector(".codicon-link"))
let exportButton = screen.getByLabelText("Export task history")
let copyButton = buttons.find((btn) => btn.querySelector(".codicon-copy"))
let deleteButton = screen.getByLabelText("Delete Task (Shift + Click to skip confirmation)")

expect(shareButton).not.toBeDisabled()
expect(exportButton).not.toBeDisabled()
expect(copyButton).not.toBeDisabled()
expect(deleteButton).not.toBeDisabled()

// Test with buttonsDisabled = true
rerender(<TaskActions item={mockItem} buttonsDisabled={true} />)

buttons = screen.getAllByRole("button")
shareButton = buttons.find((btn) => btn.querySelector(".codicon-link"))
exportButton = screen.getByLabelText("Export task history")
copyButton = buttons.find((btn) => btn.querySelector(".codicon-copy"))
deleteButton = screen.getByLabelText("Delete Task (Shift + Click to skip confirmation)")

// Share, export, and copy remain enabled
expect(shareButton).not.toBeDisabled()
expect(exportButton).not.toBeDisabled()
expect(copyButton).not.toBeDisabled()
// Delete button is disabled
expect(deleteButton).toBeDisabled()
})
})
})