Skip to content

Improve Client Stats UX with filterable dropdown, sortable table, and offline client support#221

Open
tvancott42 wants to merge 64 commits intomainfrom
feature/client-stats-ux
Open

Improve Client Stats UX with filterable dropdown, sortable table, and offline client support#221
tvancott42 wants to merge 64 commits intomainfrom
feature/client-stats-ux

Conversation

@tvancott42
Copy link
Collaborator

@tvancott42 tvancott42 commented Feb 5, 2026

Summary

Major UX improvements to the WiFi Optimizer Client Stats tab:

  • Pageable client table as the default view - see all your clients at a glance instead of an empty "Select a client" message
  • Searchable dropdown - quickly find clients by name, MAC address, or IP
  • Sortable columns with visual indicators (defaults to IP ascending)
  • Offline client tracking - see recently disconnected devices with last-seen timestamps
  • Status filter - toggle between All, Online, or Offline clients with configurable time range
  • Separate time ranges - list view uses 1W for offline cutoff, client detail uses 1D for metrics
  • Maintains your place - return to the same page after viewing a client's details

Metrics tab improvements:

  • Band filter - tab-style multi-select for 2.4/5/6 GHz with dynamic chart heights
  • Deselected = show all - when no bands are selected, all bands display (intuitive default)
  • Dynamic chart sizing - charts expand to fill space when fewer bands are selected
  • Aligned chart/filter colors - Airtime (teal), Interference (violet), TX Retries (red) avoid confusion with band colors

Additional improvements:

  • Restyled all progress bars - consistent directional radii and backgrounds across all WiFi Optimizer tabs
  • Weak signal alerts include AP name - easier to identify where signal issues are occurring
  • Mobile-friendly issue icons - fixed layout for issue icons in health issues list
  • Health score layout - horizontal layout with proper label/timestamp spacing
  • Mobile-friendly tab bar - WiFi tabs now scroll horizontally on smaller screens
  • Refresh buttons - added to Client Stats and standardized across all WiFi views
  • Cleaner layout - removed redundant padding and unified styling across components
  • DHCP issues rephrased - clearer messaging that prioritizes connectivity causes over DHCP server issues

Test plan

  • Navigate to WiFi Optimizer > Client Stats - should show pageable client table
  • Click column headers to sort (IP should be default ascending)
  • Use status filter (All/Online/Offline) - time range should disable when Online selected
  • Search for a client in the dropdown - should filter by name, MAC, or IP
  • Select a client - should show their timeline with 1D default time range
  • Click View All Clients - should return to same page in the list
  • Verify weak signal issues show AP name in Health Issues
  • Test WiFi tabs on mobile/narrow screen - should scroll horizontally
  • Check progress bars have consistent styling across all WiFi tabs
  • Navigate to Metrics tab - band filter should default to all deselected (showing all bands)
  • Click a band tab - should show only that band with a taller chart
  • Click two bands - charts should be medium height
  • Verify filter colors match chart colors (teal, violet, red)

… pagination

- Add SortByIp overload for WirelessClientSnapshot in WiFiAnalysisHelpers
- Replace empty state with pageable client device table (default view)
- Add filterable text input for client dropdown (filters by name, MAC, IP)
- Add sortable column headers with visual indicators (Name, IP, MAC, AP, Band, Signal)
- Default sort by IP ascending
- Add pagination controls (15 rows per page)
- Click table row to select client and load their timeline
- Add IsOnline and LastSeen properties to WirelessClientSnapshot
- Fetch historical clients from GetClientHistoryAsync to show offline devices
- Add Status column with online/offline dot indicator
- Add All/Online/Offline filter toggle (matches band selector UX)
- Show "last seen X ago" tooltip for offline clients
- Dim offline client rows slightly for visual distinction
…ect styling

- Status filter now uses same styling as time range selector for consistency
- Filterable select: add explicit bg color, text color, border, and padding
- Widen filterable select to 360px to show full MAC addresses
- Remove unused status-filter CSS
…selector alias

- Move RF Environment's scoped time-range-selector styles to global CSS
- Remove scoped styles from SpectrumAnalysis.razor
- Add pill-selector/pill-btn as generic aliases for non-time toggle buttons
- Status filter uses pill-selector instead of time-range-selector
- Filterable select now shows selected client name instead of clearing
- Time range controls how far back to show offline clients
- Disabled when Online filter selected (no time concept for online)
- Still controls graph range when viewing a specific client
- Resets to page 1 when time range changes in list view
- Display mode shows status dot, name, and MAC (matching dropdown style)
- Click to switch to edit mode for searching
- Fix nested card selector: .card .card for bg-secondary
- Fixed height of 34px for both input and display states
- Reduced font sizes in display mode for compactness
- Added overlay behind dropdown for click-outside-to-close behavior
- Remove padding/flex from wifi component containers (they share wifi-sections)
- Remove channel-analysis-container, load-balance-container, power-coverage-container,
  band-steering-container, airtime-container, env-correlation-container,
  roaming-analytics-container, connectivity-flow-container, client-timeline-container
- Add issue-count-sm class for compact header badges
- Use issue-count-sm in WiFiOptimizer health card
- WiFi tab bar now scrolls horizontally on mobile instead of overflowing
- RF Environment header now matches Client Stats pattern (not in a card)
- Fix horizontal bar radii (right-only) for radio-util, gen, retry, wifi-gen, metric bars
- Change bg to secondary: power-bar-container, stage-bar, ap-success-bar-container
- Add radius to power-bar-gain
- Remove signal-bar-wrapper background
- Remove tod-icon from Environmental Correlation
Add .issue-content to display:contents rule matching .issue-body behavior
Most clients without IPs have connectivity issues, not DHCP server problems
- Add display:contents for .issue-content in mobile (matches .issue-body)
- Add .issue-meta grid positioning for mobile
- health-score-main: horizontal grid layout with score circle left, label/timestamp stacked right
- Reduce score font size on mobile
- Reduce font size when score is 100 (score-perfect class)
- Airtime: #10b981 (green)
- Interference: #f59e0b (amber)
- TX Retries: #ef5858 (balanced red)
- Signal: #3b82f6 (blue)

Updated in CSS labels, Metrics.razor, and ClientTimeline.razor
- Airtime: #2ba89a (muted teal) - neutral for utilization
- Interference: #e8818f (muted coral) - distinct from 2.4 GHz amber
- Interference color: #a78bfa (violet)
- Add band filter (2.4/5/6 GHz) with standard band colors
- Change "AP" to "Access Point"
- Float metrics filter to the right
- Band filter now uses filter-tabs band-tabs style (multi-select toggle buttons)
- Remove "(Site)" suffix from All APs dropdown option
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.

[Feature Request/Enhancement] Autosuggest with Client Selection in Wifi Optimizer

1 participant