diff --git a/ui/desktop/src/components/Layout/NavigationPanel.tsx b/ui/desktop/src/components/Layout/NavigationPanel.tsx index 4c8749fd1a..3dfaf4dc02 100644 --- a/ui/desktop/src/components/Layout/NavigationPanel.tsx +++ b/ui/desktop/src/components/Layout/NavigationPanel.tsx @@ -37,6 +37,10 @@ const i18n = defineMessages({ id: 'navigationPanel.noChats', defaultMessage: 'No recent chats', }, + loadingChats: { + id: 'navigationPanel.loadingChats', + defaultMessage: 'Loading chats…', + }, untitledSession: { id: 'navigationPanel.untitledSession', defaultMessage: 'Untitled session', @@ -260,6 +264,7 @@ export const Navigation: React.FC<{ const { recentSessions, recentSessionsByProject, + isLoadingSessions, activeSessionId, fetchSessions, handleNavClick, @@ -364,7 +369,7 @@ export const Navigation: React.FC<{
{recentSessions.length === 0 ? (
- {intl.formatMessage(i18n.noChats)} + {intl.formatMessage(isLoadingSessions ? i18n.loadingChats : i18n.noChats)}
) : recentSessionsByProject.length > 1 ? ( recentSessionsByProject.map((group: ProjectGroup) => { diff --git a/ui/desktop/src/hooks/useNavigationSessions.ts b/ui/desktop/src/hooks/useNavigationSessions.ts index 3c180f7b3c..6169b58764 100644 --- a/ui/desktop/src/hooks/useNavigationSessions.ts +++ b/ui/desktop/src/hooks/useNavigationSessions.ts @@ -61,6 +61,8 @@ export function useNavigationSessions() { const chatContext = useChatContext(); const [recentSessions, setRecentSessions] = useState([]); + const [isLoadingSessions, setIsLoadingSessions] = useState(true); + const latestFetchIdRef = useRef(0); const recentSessionsByProject = useMemo( () => groupSessionsByProject(recentSessions), [recentSessions] @@ -78,11 +80,19 @@ export function useNavigationSessions() { }, [currentSessionId]); const fetchSessions = useCallback(async () => { + const fetchId = ++latestFetchIdRef.current; + setIsLoadingSessions(true); try { const sessions = await acpListRecentSessions(MAX_RECENT_SESSIONS); - setRecentSessions(sessions); + if (fetchId === latestFetchIdRef.current) { + setRecentSessions(sessions); + } } catch (error) { console.error('Failed to fetch sessions:', error); + } finally { + if (fetchId === latestFetchIdRef.current) { + setIsLoadingSessions(false); + } } }, []); @@ -214,6 +224,7 @@ export function useNavigationSessions() { return { recentSessions, recentSessionsByProject, + isLoadingSessions, activeSessionId, fetchSessions, handleNavClick, diff --git a/ui/desktop/src/i18n/messages/de.json b/ui/desktop/src/i18n/messages/de.json index 39722f32e3..c6e4329377 100644 --- a/ui/desktop/src/i18n/messages/de.json +++ b/ui/desktop/src/i18n/messages/de.json @@ -2384,6 +2384,9 @@ "navigationPanel.chats": { "defaultMessage": "Chats" }, + "navigationPanel.loadingChats": { + "defaultMessage": "Chats werden geladen…" + }, "navigationPanel.metaCreated": { "defaultMessage": "Erstellt" }, diff --git a/ui/desktop/src/i18n/messages/en.json b/ui/desktop/src/i18n/messages/en.json index b6727958d3..4de26516d0 100644 --- a/ui/desktop/src/i18n/messages/en.json +++ b/ui/desktop/src/i18n/messages/en.json @@ -2408,6 +2408,9 @@ "navigationPanel.chats": { "defaultMessage": "Chats" }, + "navigationPanel.loadingChats": { + "defaultMessage": "Loading chats…" + }, "navigationPanel.metaCreated": { "defaultMessage": "Created" }, diff --git a/ui/desktop/src/i18n/messages/es.json b/ui/desktop/src/i18n/messages/es.json index 8c6085a7d6..ecb4513b61 100644 --- a/ui/desktop/src/i18n/messages/es.json +++ b/ui/desktop/src/i18n/messages/es.json @@ -2384,6 +2384,9 @@ "navigationPanel.chats": { "defaultMessage": "Chats" }, + "navigationPanel.loadingChats": { + "defaultMessage": "Cargando chats…" + }, "navigationPanel.metaCreated": { "defaultMessage": "Creado" }, diff --git a/ui/desktop/src/i18n/messages/fr.json b/ui/desktop/src/i18n/messages/fr.json index cbf949caa8..a45c69877b 100644 --- a/ui/desktop/src/i18n/messages/fr.json +++ b/ui/desktop/src/i18n/messages/fr.json @@ -2384,6 +2384,9 @@ "navigationPanel.chats": { "defaultMessage": "Discussions" }, + "navigationPanel.loadingChats": { + "defaultMessage": "Chargement des discussions…" + }, "navigationPanel.metaCreated": { "defaultMessage": "Créé" }, diff --git a/ui/desktop/src/i18n/messages/hi.json b/ui/desktop/src/i18n/messages/hi.json index bd54b6fff2..23e5d08e96 100644 --- a/ui/desktop/src/i18n/messages/hi.json +++ b/ui/desktop/src/i18n/messages/hi.json @@ -2384,6 +2384,9 @@ "navigationPanel.chats": { "defaultMessage": "चैट" }, + "navigationPanel.loadingChats": { + "defaultMessage": "चैट लोड हो रही हैं…" + }, "navigationPanel.metaCreated": { "defaultMessage": "बनाया गया" }, diff --git a/ui/desktop/src/i18n/messages/id.json b/ui/desktop/src/i18n/messages/id.json index 7f126d246d..9134f27e0a 100644 --- a/ui/desktop/src/i18n/messages/id.json +++ b/ui/desktop/src/i18n/messages/id.json @@ -2384,6 +2384,9 @@ "navigationPanel.chats": { "defaultMessage": "Obrolan" }, + "navigationPanel.loadingChats": { + "defaultMessage": "Memuat obrolan…" + }, "navigationPanel.metaCreated": { "defaultMessage": "Dibuat" }, diff --git a/ui/desktop/src/i18n/messages/it.json b/ui/desktop/src/i18n/messages/it.json index 27996c7c73..7cf5b46bc7 100644 --- a/ui/desktop/src/i18n/messages/it.json +++ b/ui/desktop/src/i18n/messages/it.json @@ -2384,6 +2384,9 @@ "navigationPanel.chats": { "defaultMessage": "Chat" }, + "navigationPanel.loadingChats": { + "defaultMessage": "Caricamento chat…" + }, "navigationPanel.metaCreated": { "defaultMessage": "Creato" }, diff --git a/ui/desktop/src/i18n/messages/ja.json b/ui/desktop/src/i18n/messages/ja.json index 2bea14ccbb..76008ec86e 100644 --- a/ui/desktop/src/i18n/messages/ja.json +++ b/ui/desktop/src/i18n/messages/ja.json @@ -2384,6 +2384,9 @@ "navigationPanel.chats": { "defaultMessage": "チャット" }, + "navigationPanel.loadingChats": { + "defaultMessage": "チャットを読み込み中…" + }, "navigationPanel.metaCreated": { "defaultMessage": "作成" }, diff --git a/ui/desktop/src/i18n/messages/ko.json b/ui/desktop/src/i18n/messages/ko.json index e9054052d0..ca36cd0982 100644 --- a/ui/desktop/src/i18n/messages/ko.json +++ b/ui/desktop/src/i18n/messages/ko.json @@ -2384,6 +2384,9 @@ "navigationPanel.chats": { "defaultMessage": "채팅" }, + "navigationPanel.loadingChats": { + "defaultMessage": "채팅 불러오는 중…" + }, "navigationPanel.metaCreated": { "defaultMessage": "생성됨" }, diff --git a/ui/desktop/src/i18n/messages/ms.json b/ui/desktop/src/i18n/messages/ms.json index 76b10110cf..d9f8d810c9 100644 --- a/ui/desktop/src/i18n/messages/ms.json +++ b/ui/desktop/src/i18n/messages/ms.json @@ -2384,6 +2384,9 @@ "navigationPanel.chats": { "defaultMessage": "Sembang" }, + "navigationPanel.loadingChats": { + "defaultMessage": "Memuatkan sembang…" + }, "navigationPanel.metaCreated": { "defaultMessage": "Dicipta" }, diff --git a/ui/desktop/src/i18n/messages/pt.json b/ui/desktop/src/i18n/messages/pt.json index ba06d7e956..3f796cfae5 100644 --- a/ui/desktop/src/i18n/messages/pt.json +++ b/ui/desktop/src/i18n/messages/pt.json @@ -2384,6 +2384,9 @@ "navigationPanel.chats": { "defaultMessage": "Conversas" }, + "navigationPanel.loadingChats": { + "defaultMessage": "Carregando chats…" + }, "navigationPanel.metaCreated": { "defaultMessage": "Criado" }, diff --git a/ui/desktop/src/i18n/messages/ru.json b/ui/desktop/src/i18n/messages/ru.json index 4cfe1b2f80..c36becf06f 100644 --- a/ui/desktop/src/i18n/messages/ru.json +++ b/ui/desktop/src/i18n/messages/ru.json @@ -2384,6 +2384,9 @@ "navigationPanel.chats": { "defaultMessage": "Чаты" }, + "navigationPanel.loadingChats": { + "defaultMessage": "Загрузка чатов…" + }, "navigationPanel.metaCreated": { "defaultMessage": "Создано" }, diff --git a/ui/desktop/src/i18n/messages/tr.json b/ui/desktop/src/i18n/messages/tr.json index 572198cb72..40926a10de 100644 --- a/ui/desktop/src/i18n/messages/tr.json +++ b/ui/desktop/src/i18n/messages/tr.json @@ -2384,6 +2384,9 @@ "navigationPanel.chats": { "defaultMessage": "Sohbetler" }, + "navigationPanel.loadingChats": { + "defaultMessage": "Sohbetler yükleniyor…" + }, "navigationPanel.metaCreated": { "defaultMessage": "Oluşturuldu" }, diff --git a/ui/desktop/src/i18n/messages/vi.json b/ui/desktop/src/i18n/messages/vi.json index 4470a45444..4c63a4a998 100644 --- a/ui/desktop/src/i18n/messages/vi.json +++ b/ui/desktop/src/i18n/messages/vi.json @@ -2384,6 +2384,9 @@ "navigationPanel.chats": { "defaultMessage": "Cuộc trò chuyện" }, + "navigationPanel.loadingChats": { + "defaultMessage": "Đang tải cuộc trò chuyện…" + }, "navigationPanel.metaCreated": { "defaultMessage": "Đã tạo" }, diff --git a/ui/desktop/src/i18n/messages/zh-CN.json b/ui/desktop/src/i18n/messages/zh-CN.json index 007fcee7f5..5d73719664 100644 --- a/ui/desktop/src/i18n/messages/zh-CN.json +++ b/ui/desktop/src/i18n/messages/zh-CN.json @@ -2384,6 +2384,9 @@ "navigationPanel.chats": { "defaultMessage": "聊天" }, + "navigationPanel.loadingChats": { + "defaultMessage": "正在加载聊天…" + }, "navigationPanel.metaCreated": { "defaultMessage": "创建时间" }, diff --git a/ui/desktop/src/i18n/messages/zh-TW.json b/ui/desktop/src/i18n/messages/zh-TW.json index 06beb674ae..1d89e6e176 100644 --- a/ui/desktop/src/i18n/messages/zh-TW.json +++ b/ui/desktop/src/i18n/messages/zh-TW.json @@ -2384,6 +2384,9 @@ "navigationPanel.chats": { "defaultMessage": "交談" }, + "navigationPanel.loadingChats": { + "defaultMessage": "正在載入聊天…" + }, "navigationPanel.metaCreated": { "defaultMessage": "建立時間" },