Skip to content

feat: Add multi-select batch export (#76)#223

Open
stephanbuettig wants to merge 2 commits intohttptoolkit:mainfrom
stephanbuettig:feature/batch-export
Open

feat: Add multi-select batch export (#76)#223
stephanbuettig wants to merge 2 commits intohttptoolkit:mainfrom
stephanbuettig:feature/batch-export

Conversation

@stephanbuettig
Copy link
Copy Markdown

@stephanbuettig stephanbuettig commented Apr 11, 2026

Summary

Adds multi-select functionality with floating toolbar for batch export of selected HTTP exchanges.

  • Ctrl+Click toggle individual selection, Shift+Click range selection
  • Ctrl+A select all visible, Escape to clear
  • Floating selection toolbar with count, batch HAR export, batch ZIP export, and clear
  • Keyboard arrow navigation with Shift for range selection
  • Integrates with upstream ARIA role='grid' and focus management improvements

This is PR 2/2 extracted from #219 as requested by @pimterry.

Note: This PR depends on #222 (ZIP export). The diff currently includes both commits since GitHub cross-fork PRs cannot target a fork branch as base. After #222 is merged, this PR will be rebased so only the batch-export changes remain in the diff.

Test plan

✅ All items manually verified on 2026-04-11 against a fresh clone of current upstream (main, commit 23a99520) using npm start.

  • TypeScript compiles cleanly
  • Ctrl+Click toggles individual row selection
  • Shift+Click selects range from anchor
  • Ctrl+A selects all visible exchanges
  • Escape clears selection
  • Toolbar shows correct count and export actions
  • Batch HAR export works (13 requests in 15ms, 14 requests in 16ms)
  • Batch ZIP export works (13×7 = 91 snippets, 0 errors, 254ms / 14×37 = 518 snippets, 0 errors, 2.1s)

Related

stephanbuettig added 2 commits April 11, 2026 08:37
Adds ZIP archive export for HTTP exchanges with 37 code snippet formats
via @httptoolkit/httpsnippet. Includes format picker panel, Web Worker
generation, and safe filename conventions.

Features:
- ZIP export with selectable snippet formats (37 languages/clients)
- Format picker with category grouping and popular defaults
- Web Worker-based generation for non-blocking UI
- Safe filename conventions matching existing HAR export pattern

New files: snippet-formats registry, export-filenames utility,
download helper, zip-metadata model, zip-download-panel component.

Unit tests for snippet-formats and export-filenames included.

Extracted from httptoolkit#219 as requested by @pimterry.
Adds Ctrl+Click, Shift+Click, Ctrl+A multi-selection with floating
toolbar for batch HAR and ZIP export of selected exchanges.

Features:
- Multi-select via Ctrl+Click (toggle), Shift+Click (range)
- Ctrl+A to select all visible, Escape to clear
- Floating selection toolbar with count, export actions, and clear
- Batch HAR export and batch ZIP export for selected exchanges
- Keyboard arrow navigation with Shift for range selection

Integrates with upstream ARIA role='grid' and focus management
improvements. Preserves all accessibility attributes.

Depends on ZIP export PR. Based on feature/zip-export.
Extracted from httptoolkit#219 as requested by @pimterry.
@stephanbuettig
Copy link
Copy Markdown
Author

✅ Manual Test Results — 2026-04-11

Both features were tested against a fresh clone of current upstream (main, commit 23a99520) using npm start.

Batch selection (this PR)

Multi-selection works via checkbox column, Ctrl+A selects all visible exchanges, and Escape clears the selection. The selection toolbar appears correctly and shows the count.

Batch export (this PR + PR #222)

All runs completed with 0 snippet errors:

Scenario Formats Snippets Errors Time Size
13 exchanges, 7 formats 7 91 0 254 ms 152 KB
14 exchanges, all formats 37 518 0 2.1 s 795 KB
13 exchanges, HAR 0 15 ms
14 exchanges, HAR 0 16 ms

Both batch HAR and batch ZIP export work correctly on the current upstream codebase. All test plan items verified. Ready for review and merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant