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": "建立時間"
},