FN-5884: preserve quick chat session across reopens
Keep quick chat warm and restore the last opened conversation per project. - persist the active quick chat session id in per-project local storage and restore it before falling back to latest activity - retain in-memory quick chat state across close/reopen while resetting chat state correctly when the project changes - add storage, hook, and FAB coverage for restored sessions, warm reopen behavior, and project switching; document the updated quick chat behavior Files changed: docs/dashboard-guide.md | 3 +- packages/dashboard/app/components/QuickChatFAB.tsx | 29 ++++-- .../app/components/__tests__/QuickChatFAB.test.tsx | 112 +++++++++++++++++++-- .../__tests__/quickChatLastSessionStorage.test.ts | 55 ++++++++++ .../app/hooks/__tests__/useQuickChat.test.ts | 70 +++++++++++++ .../app/hooks/quickChatLastSessionStorage.ts | 41 ++++++++ packages/dashboard/app/hooks/useQuickChat.ts | 25 +++++ 7 files changed, 319 insertions(+), 16 deletions(-) Fusion-Task-Id: FN-5884 Fusion-Task-Lineage: 4d689611-1824-41db-8fc2-d543407316ff
This commit is contained in:
41
packages/dashboard/app/hooks/quickChatLastSessionStorage.ts
Normal file
41
packages/dashboard/app/hooks/quickChatLastSessionStorage.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
const QUICK_CHAT_LAST_SESSION_STORAGE_PREFIX = "fusion:quick-chat-last-session:";
|
||||
|
||||
function getQuickChatLastSessionStorageKey(projectId?: string | null): string {
|
||||
return `${QUICK_CHAT_LAST_SESSION_STORAGE_PREFIX}${projectId || "default"}`;
|
||||
}
|
||||
|
||||
export function getPersistedLastQuickChatSessionId(projectId?: string | null): string | null {
|
||||
if (typeof window === "undefined") {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
return localStorage.getItem(getQuickChatLastSessionStorageKey(projectId));
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export function setPersistedLastQuickChatSessionId(projectId: string | null | undefined, sessionId: string): void {
|
||||
if (typeof window === "undefined") {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
localStorage.setItem(getQuickChatLastSessionStorageKey(projectId), sessionId);
|
||||
} catch {
|
||||
// Ignore localStorage failures so quick-chat session selection still works in-memory.
|
||||
}
|
||||
}
|
||||
|
||||
export function removePersistedLastQuickChatSessionId(projectId?: string | null): void {
|
||||
if (typeof window === "undefined") {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
localStorage.removeItem(getQuickChatLastSessionStorageKey(projectId));
|
||||
} catch {
|
||||
// Ignore localStorage failures so cleanup paths do not throw.
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user