chore: init monorepo snapshot
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
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();
|
||||
Reference in New Issue
Block a user