Skip to content

Commit b51abf7

Browse files
jrmrubens
andauthored
Treat HistoryView item clicks as (de)select in selection mode (RooCodeInc#3068)
* Treat HistoryView item clicks as (de)select in selection mode * UI tweaks --------- Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
1 parent 6e86f04 commit b51abf7

3 files changed

Lines changed: 26 additions & 6 deletions

File tree

webview-ui/src/components/history/HistoryView.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ const HistoryView = ({ onDone }: HistoryViewProps) => {
8383
<Button
8484
variant={isSelectionMode ? "default" : "secondary"}
8585
onClick={toggleSelectionMode}
86+
data-testid="toggle-selection-mode-button"
8687
title={
8788
isSelectionMode
8889
? `${t("history:exitSelectionMode")}`
@@ -170,7 +171,7 @@ const HistoryView = ({ onDone }: HistoryViewProps) => {
170171

171172
{/* Select all control in selection mode */}
172173
{isSelectionMode && tasks.length > 0 && (
173-
<div className="flex items-center py-1 px-2 bg-vscode-editor-background rounded">
174+
<div className="flex items-center py-1">
174175
<div className="flex items-center gap-2">
175176
<Checkbox
176177
checked={tasks.length > 0 && selectedTaskIds.length === tasks.length}
@@ -217,12 +218,14 @@ const HistoryView = ({ onDone }: HistoryViewProps) => {
217218
"bg-vscode-list-activeSelectionBackground":
218219
isSelectionMode && selectedTaskIds.includes(item.id),
219220
})}
220-
onClick={(e) => {
221-
if (!isSelectionMode || !(e.target as HTMLElement).closest(".task-checkbox")) {
221+
onClick={() => {
222+
if (isSelectionMode) {
223+
toggleTaskSelection(item.id, !selectedTaskIds.includes(item.id))
224+
} else {
222225
vscode.postMessage({ type: "showTaskWithId", text: item.id })
223226
}
224227
}}>
225-
<div className="flex items-start p-3 gap-2">
228+
<div className="flex items-start p-3 gap-2 ml-2">
226229
{/* Show checkbox in selection mode */}
227230
{isSelectionMode && (
228231
<div

webview-ui/src/components/history/__tests__/HistoryView.test.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,23 @@ describe("HistoryView", () => {
148148
})
149149
})
150150

151+
it("handles selection mode clicks", async () => {
152+
const onDone = jest.fn()
153+
render(<HistoryView onDone={onDone} />)
154+
155+
// Go to selection mode
156+
fireEvent.click(screen.getByTestId("toggle-selection-mode-button"))
157+
158+
const taskContainer = screen.getByTestId("task-item-1")
159+
160+
// Click anywhere in the task item
161+
fireEvent.click(taskContainer)
162+
163+
// Check the box instead of sending a message to open the task
164+
expect(within(taskContainer).getByRole("checkbox")).toBeChecked()
165+
expect(vscode.postMessage).not.toHaveBeenCalled()
166+
})
167+
151168
describe("task deletion", () => {
152169
it("shows confirmation dialog on regular click", () => {
153170
const onDone = jest.fn()

webview-ui/src/i18n/locales/en/history.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
"delete": "Delete",
2727
"exitSelection": "Exit Selection",
2828
"selectionMode": "Selection Mode",
29-
"deselectAll": "Deselect All",
30-
"selectAll": "Select All",
29+
"deselectAll": "Deselect all",
30+
"selectAll": "Select all",
3131
"selectedItems": "Selected {{selected}}/{{total}} items",
3232
"clearSelection": "Clear Selection",
3333
"deleteSelected": "Delete Selected",

0 commit comments

Comments
 (0)