mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-09-21 21:50:49 +02:00

- Introduced a new hook `useBackToNewChat` to manage state when navigating back to the `/c/new` route. - The hook listens for browser back/forward navigation events and resets the conversation state appropriately. - Integrated the hook into `ChatRoute.tsx` to ensure proper functionality during navigation. - Added documentation detailing the problem, solution, and implementation of the new hook.
1.7 KiB
1.7 KiB
Back Button Navigation Fix for LibreChat
Problem
When users navigate back to /c/new
using the browser's back button from an existing conversation, the conversation state doesn't reset properly. This causes new messages to be appended to the previous conversation instead of creating a new one.
Solution
Created a custom hook useBackToNewChat
that listens for browser back/forward navigation events and resets the conversation state when navigating back to /c/new
.
Implementation
New Hook: useBackToNewChat
Located at: client/src/hooks/useBackToNewChat.ts
The hook:
- Listens to popstate events - Detects when users use browser back/forward buttons
- Checks current path - Verifies if the navigation landed on
/c/new
- Resets conversation state - Clears messages and creates a new conversation if needed
Integration
The hook is used in ChatRoute.tsx
:
// Handle back navigation to /c/new
useBackToNewChat(index);
Why This Approach?
- Direct browser event handling - The
popstate
event fires specifically for browser navigation (back/forward buttons) - No complex state tracking - Avoids finicky effects that depend on conversation state changes
- Simple and focused - Single responsibility: detect back navigation to new chat and reset state
Benefits
- Minimal impact on existing code
- Isolated logic that's easier to test and maintain
- Directly addresses the root cause (browser back button)
- Avoids race conditions with conversation state updates
Testing
Test file: client/src/hooks/__tests__/useBackToNewChat.test.ts
Tests cover:
- Popstate event handling when navigating to /c/new
- No action when already on /c/new
- No action when navigating to other routes