File size: 2,471 Bytes
904dda9 0d8fa96 904dda9 0d8fa96 7e2344c 0d8fa96 7e2344c 0d8fa96 a8128c3 0d8fa96 c114561 0d8fa96 c114561 1bd15bc a8128c3 0d8fa96 a8128c3 7e2344c c114561 0d8fa96 c114561 0d8fa96 904dda9 f9b14ab a8128c3 7e2344c 111f35a 7e2344c d27ca31 6a2df45 d27ca31 f9b14ab 904dda9 f9b14ab 904dda9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
import { NavigateFunction } from 'react-router-dom';
import { useAuthStore, useBackendState } from '@/stores/state';
import { useGraphStore } from '@/stores/graph';
import { useSettingsStore } from '@/stores/settings';
class NavigationService {
private navigate: NavigateFunction | null = null;
setNavigate(navigate: NavigateFunction) {
this.navigate = navigate;
}
/**
* Reset all application state to ensure a clean environment.
* This function should be called when:
* 1. User logs out
* 2. Authentication token expires
* 3. Direct access to login page
*
* @param preserveHistory If true, chat history will be preserved. Default is false.
*/
resetAllApplicationState(preserveHistory = false) {
console.log('Resetting all application state...');
// Reset graph state
const graphStore = useGraphStore.getState();
const sigma = graphStore.sigmaInstance;
graphStore.reset();
graphStore.setGraphDataFetchAttempted(false);
graphStore.setLabelsFetchAttempted(false);
graphStore.setSigmaInstance(null);
graphStore.setIsFetching(false); // Reset isFetching state to prevent data loading issues
// Reset backend state
useBackendState.getState().clear();
// Reset retrieval history message only if preserveHistory is false
if (!preserveHistory) {
useSettingsStore.getState().setRetrievalHistory([]);
}
// Clear authentication state
sessionStorage.clear();
if (sigma) {
sigma.getGraph().clear();
sigma.kill();
useGraphStore.getState().setSigmaInstance(null);
}
}
/**
* Navigate to login page and reset application state
*/
navigateToLogin() {
if (!this.navigate) {
console.error('Navigation function not set');
return;
}
// Store current username before logout for comparison during next login
const currentUsername = useAuthStore.getState().username;
if (currentUsername) {
localStorage.setItem('LIGHTRAG-PREVIOUS-USER', currentUsername);
}
// Reset application state but preserve history
// History will be cleared on next login if the user changes
this.resetAllApplicationState(true);
useAuthStore.getState().logout();
this.navigate('/login');
}
navigateToHome() {
if (!this.navigate) {
console.error('Navigation function not set');
return;
}
this.navigate('/');
}
}
export const navigationService = new NavigationService();
|