This commit is contained in:
Tomas Dvorak
2026-01-26 08:13:18 +01:00
parent aa036b6550
commit dfc079288f
505 changed files with 95755 additions and 5712 deletions
+68
View File
@@ -0,0 +1,68 @@
# 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