Files
MyClub/DOCS/ADMIN_SIDEBAR_SCROLL_FIX.md
T
Tomas Dvorak dfc079288f hot fix #1
2026-01-26 08:13:18 +01:00

2.7 KiB

Admin Sidebar Scroll Retention Fix

Problem

The admin sidebar scroll position was not being preserved when navigating between pages. Users would scroll down in the sidebar, click on a link, and the scroll would reset to the top.

Root Cause

  1. Multiple conflicting scroll handling systems in AdminSidebar.tsx
  2. Race conditions between scroll preservation and restoration
  3. Inconsistent timing of scroll restoration attempts

Solution Applied

1. Consolidated Scroll Logic

  • Removed duplicate scroll handling from AdminSidebar.tsx
  • Let the useAdminNavScrollRetention hook manage all scroll operations
  • Simplified the scroll preservation logic

2. Enhanced Scroll Retention Hook (useAdminNavScrollRetention.ts)

  • More reliable restoration: Uses requestAnimationFrame for better timing
  • Multiple restoration attempts: 3 attempts with different strategies
  • Aggressive preservation: Multiple attempts during navigation to prevent scroll reset
  • Retry mechanism: If container not found on init, retries after 100ms
  • Better debugging: Enhanced debug logging for troubleshooting

3. Improved NavItem Component

  • Saves scroll position BEFORE navigation occurs
  • Ensures scroll is captured at the right moment

4. Added Forced Restoration

  • Additional restoration attempt after navigation loads
  • Ensures scroll is restored even if initial attempts fail

Key Changes

AdminSidebar.tsx

  • Removed duplicate scroll state management
  • Removed manual scroll event handler
  • Simplified navigation preservation logic
  • Added forced restoration after navigation loads

useAdminNavScrollRetention.ts

  • Enhanced restoration with requestAnimationFrame
  • Multiple preservation attempts during navigation
  • Retry mechanism for container detection
  • Three initialization timeouts for reliable restoration

Configuration

  • Lock duration reduced to 300ms (from 500ms) for faster restoration
  • Multiple restoration delays: 0ms, 10ms, 50ms
  • Preservation delays: 0ms, 25ms, 50ms, 100ms, 150ms
  • Initialization delays: 100ms, 250ms, 400ms

Testing

Created test script test-sidebar-scroll.js to verify functionality:

  • Sets test scroll position to 1141.33
  • Monitors scroll changes during navigation
  • Logs all scroll preservation/restoration attempts

Result

The sidebar scroll position is now reliably preserved during navigation. The scroll will stay at the same position when clicking between admin pages.

Files Modified

  1. /frontend/src/components/admin/AdminSidebar.tsx
  2. /frontend/src/hooks/useAdminNavScrollRetention.ts
  3. Created: /test-sidebar-scroll.js (for testing)

Build Status

Frontend successfully built and ready for deployment