Skip to content

Add multi-row selection support to view event list with selection count panel #169

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed

Conversation

Copilot
Copy link

@Copilot Copilot AI commented Aug 12, 2025

This PR implements support for selecting multiple rows simultaneously in the view event list, addressing the feature request to enable multi-selection and display a custom panel when multiple events are selected.

Changes

Multi-Selection Functionality

  • Ctrl+Click (Cmd+Click on Mac) now toggles individual row selection for multi-selection
  • Regular click maintains existing single-selection behavior
  • Selected events are tracked in a new selectedEventIds Set in the UI store
  • Visual feedback: multi-selected rows display with distinctive border highlighting

New Multi-Selection Panel

  • When multiple events are selected, the right panel switches from event details to a selection summary
  • Displays the total count of selected events in a clean, centered layout
  • Shows "X events selected" with appropriate singular/plural handling

Implementation Details

State Management (UiStore):

  • Added selectedEventIds: Set<string> to track multiple selections
  • Added hasMultipleSelectedEvents computed property
  • Added methods: toggleEventSelection(), setSelectedEventIds()
  • Updated setSelectedEventId() to clear multi-selection when switching to single selection

Event List Updates (ViewEventList):

  • Enhanced onListMouseDown to detect Ctrl+Click for multi-selection
  • Added styling for multi-selected rows with border highlighting
  • Updated all row components (HTTP exchanges, RTC streams, TLS connections, built-in APIs) to support multi-selection visual states

View Page Integration (ViewPage):

  • Added conditional rendering to show MultiSelectionPanel when multiple events are selected
  • Maintains existing single-event detail panels for normal selection
  • Added onEventToggled handler for multi-selection events

Backward Compatibility

All existing functionality remains unchanged - single-click selection, keyboard navigation, and detail panels work exactly as before. The multi-selection feature is purely additive and activated only through Ctrl+Click interactions.

![Initial HTTP Toolkit UI](https://github.com/user-attachments/assets/20d3b366-b8db-47e6-948c-e2a0935b0acf)

The implementation successfully builds and passes all existing unit tests, ensuring no regressions while adding the requested multi-selection capability.

Warning

Firewall rules blocked me from connecting to one or more addresses

I tried to connect to the following addresses, but was blocked by firewall rules:

  • accounts.google.com
    • Triggering command: /opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3738 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-12067814 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,12096223297125145994,18307958515159173842,262144 --disable-features=PaintHolding --variations-seed-version (dns block)
    • Triggering command: /opt/google/chrome/chrome --user-data-dir=/tmp/karma-12067814 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --no-sandbox --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 --noerrdialogs --ozone-platform=headless --ozone-override-screen-size=800,600 --use-angle=swiftshader-webgl http://localhost:9876/?id=12067814 (dns block)
    • Triggering command: /opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=4338 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-42711831 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,318946571837126770,2879241133023503072,262144 --disable-features=PaintHolding --variations-seed-version (dns block)
  • clients2.google.com
    • Triggering command: /opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3738 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-12067814 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,12096223297125145994,18307958515159173842,262144 --disable-features=PaintHolding --variations-seed-version (dns block)
    • Triggering command: /opt/google/chrome/chrome --user-data-dir=/tmp/karma-12067814 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --no-sandbox --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 --noerrdialogs --ozone-platform=headless --ozone-override-screen-size=800,600 --use-angle=swiftshader-webgl http://localhost:9876/?id=12067814 (dns block)
    • Triggering command: /opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=4338 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-42711831 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,318946571837126770,2879241133023503072,262144 --disable-features=PaintHolding --variations-seed-version (dns block)
  • clientservices.googleapis.com
    • Triggering command: /opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3738 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-12067814 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,12096223297125145994,18307958515159173842,262144 --disable-features=PaintHolding --variations-seed-version (dns block)
    • Triggering command: /opt/google/chrome/chrome --user-data-dir=/tmp/karma-12067814 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --no-sandbox --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 --noerrdialogs --ozone-platform=headless --ozone-override-screen-size=800,600 --use-angle=swiftshader-webgl http://localhost:9876/?id=12067814 (dns block)
    • Triggering command: /opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=4338 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-42711831 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,318946571837126770,2879241133023503072,262144 --disable-features=PaintHolding --variations-seed-version (dns block)
  • https://storage.googleapis.com/chromium-browser-snapshots/Linux_x64/809590/chrome-linux.zip
    • Triggering command: node install.js (http block)
  • redirector.gvt1.com
    • Triggering command: /opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3738 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-12067814 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,12096223297125145994,18307958515159173842,262144 --disable-features=PaintHolding --variations-seed-version (dns block)
    • Triggering command: /opt/google/chrome/chrome --user-data-dir=/tmp/karma-12067814 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --no-sandbox --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 --noerrdialogs --ozone-platform=headless --ozone-override-screen-size=800,600 --use-angle=swiftshader-webgl http://localhost:9876/?id=12067814 (dns block)
    • Triggering command: /opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=4338 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-42711831 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,318946571837126770,2879241133023503072,262144 --disable-features=PaintHolding --variations-seed-version (dns block)
  • safebrowsingohttpgateway.googleapis.com
    • Triggering command: /opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=3738 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-12067814 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,12096223297125145994,18307958515159173842,262144 --disable-features=PaintHolding --variations-seed-version (dns block)
    • Triggering command: /opt/google/chrome/chrome --user-data-dir=/tmp/karma-12067814 --enable-automation --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-REDACTED-timer-throttling --disable-renderer-REDACTEDing --disable-device-discovery-notifications --no-sandbox --headless --disable-gpu --disable-dev-shm-usage --remote-debugging-port=9222 --noerrdialogs --ozone-platform=headless --ozone-override-screen-size=800,600 --use-angle=swiftshader-webgl http://localhost:9876/?id=12067814 (dns block)
    • Triggering command: /opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=4338 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/karma-42711831 --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,318946571837126770,2879241133023503072,262144 --disable-features=PaintHolding --variations-seed-version (dns block)

If you need me to access, download, or install something from one of these locations, you can either:


💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.

@CLAassistant
Copy link

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@pimterry pimterry closed this Aug 12, 2025
@pimterry pimterry deleted the copilot/fix-c7d5927d-650d-47d8-90fd-89e58e49ae2c branch August 12, 2025 10:25
@Copilot Copilot AI restored the copilot/fix-c7d5927d-650d-47d8-90fd-89e58e49ae2c branch August 12, 2025 10:32
@Copilot Copilot AI changed the title [WIP] Add support for selecting multiple rows in the view event list at the same time, and show a new different panel view on the right (in view-page) when there are multiple rows selected. For now the new panel should just show the total number of rows you ... Add multi-row selection support to view event list with selection count panel Aug 12, 2025
@Copilot Copilot AI requested a review from pimterry August 12, 2025 10:46
Copilot finished work on behalf of pimterry August 12, 2025 10:46
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.

3 participants