Skip to content

[Frontend] Finding Filter & Sort Panel #334

Description

@arpit2006

Description

As scan results grow, the current Findings tab becomes difficult to navigate because all findings are displayed in a single flat list. Users should be able to quickly narrow results by scanner, severity, or file path, and sort findings to prioritize the most important issues.

Implement a Filter & Sort panel above the findings list to improve usability and make large scan results easier to explore.

Proposed Solution

Add a collapsible Filter & Sort panel that allows users to filter and sort findings without reloading the page.

Filter Options

  • Scanner

    • All
    • Semgrep
    • OSV-Scanner
    • Gitleaks
  • Severity

    • Critical
    • High
    • Medium
    • Low
  • Search

    • Free-text search on:
      • File path
      • Rule ID

Sort Options

  • Severity Score

    • Highest → Lowest
    • Lowest → Highest
  • Scanner Name

    • A → Z
  • File Path

    • A → Z

State Management

To avoid excessive prop drilling, filter and sort state should be managed using a shared state solution such as:

  • React Context, or
  • Zustand

Filter state should not be passed more than two component levels via props.

URL Synchronization

Active filters and sorting should be reflected in the URL query string so they persist across page refreshes and can be shared with others.

Example:

/findings?scanner=semgrep&severity=high&sort=severity_desc&search=auth

Empty State

If no findings match the selected filters, display a friendly empty state instead of an empty list.

Example message:

No findings match your filters.
Try adjusting your search or clearing one or more filters.

Acceptance Criteria

  • Add a collapsible Filter & Sort panel above the findings list.
  • Support filtering by:
    • Scanner (All, Semgrep, OSV-Scanner, Gitleaks)
    • Severity (Critical, High, Medium, Low)
    • Free-text search (file path or rule ID)
  • Support sorting by:
    • Severity score (ascending/descending)
    • Scanner name (A–Z)
    • File path (A–Z)
  • Synchronize active filters and sort options with the URL query string.
  • Manage filter state using React Context or Zustand.
  • Avoid prop drilling deeper than two component levels.
  • Display a friendly empty state when no findings match the selected filters.

Expected Impact

  • 🔍 Makes large scan results easier to explore.
  • ⚡ Helps users quickly find relevant vulnerabilities.
  • 📊 Improves overall usability and navigation.
  • 🔗 Enables sharing filtered views via URL.
  • 🎯 Reduces time spent locating high-priority findings.

Difficulty: Medium

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions