fix: reflect loading state of chats (#12603)

This commit is contained in:
Alex Hancock 2026-09-30 16:06:30 +00:00 • committed by GitHub
parent c2eb854c66
commit 5850d4a18c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
18 changed files with 66 additions and 2 deletions

View file

@ -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<{
<div className="flex-1 min-h-0 overflow-y-auto px-2 pb-2 mt-1">
{recentSessions.length === 0 ? (
<div className="px-3 py-2 text-xs text-text-secondary">
{intl.formatMessage(i18n.noChats)}
{intl.formatMessage(isLoadingSessions ? i18n.loadingChats : i18n.noChats)}
</div>
) : recentSessionsByProject.length > 1 ? (
recentSessionsByProject.map((group: ProjectGroup) => {

View file

@ -61,6 +61,8 @@ export function useNavigationSessions() {
const chatContext = useChatContext();
const [recentSessions, setRecentSessions] = useState<SessionListItem[]>([]);
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,

View file

@ -2384,6 +2384,9 @@
"navigationPanel.chats": {
"defaultMessage": "Chats"
},
"navigationPanel.loadingChats": {
"defaultMessage": "Chats werden geladen…"
},
"navigationPanel.metaCreated": {
"defaultMessage": "Erstellt"
},

View file

@ -2408,6 +2408,9 @@
"navigationPanel.chats": {
"defaultMessage": "Chats"
},
"navigationPanel.loadingChats": {
"defaultMessage": "Loading chats…"
},
"navigationPanel.metaCreated": {
"defaultMessage": "Created"
},

View file

@ -2384,6 +2384,9 @@
"navigationPanel.chats": {
"defaultMessage": "Chats"
},
"navigationPanel.loadingChats": {
"defaultMessage": "Cargando chats…"
},
"navigationPanel.metaCreated": {
"defaultMessage": "Creado"
},

View file

@ -2384,6 +2384,9 @@
"navigationPanel.chats": {
"defaultMessage": "Discussions"
},
"navigationPanel.loadingChats": {
"defaultMessage": "Chargement des discussions…"
},
"navigationPanel.metaCreated": {
"defaultMessage": "Créé"
},

View file

@ -2384,6 +2384,9 @@
"navigationPanel.chats": {
"defaultMessage": "चैट"
},
"navigationPanel.loadingChats": {
"defaultMessage": "चैट लोड हो रही हैं…"
},
"navigationPanel.metaCreated": {
"defaultMessage": "बनाया गया"
},

View file

@ -2384,6 +2384,9 @@
"navigationPanel.chats": {
"defaultMessage": "Obrolan"
},
"navigationPanel.loadingChats": {
"defaultMessage": "Memuat obrolan…"
},
"navigationPanel.metaCreated": {
"defaultMessage": "Dibuat"
},

View file

@ -2384,6 +2384,9 @@
"navigationPanel.chats": {
"defaultMessage": "Chat"
},
"navigationPanel.loadingChats": {
"defaultMessage": "Caricamento chat…"
},
"navigationPanel.metaCreated": {
"defaultMessage": "Creato"
},

View file

@ -2384,6 +2384,9 @@
"navigationPanel.chats": {
"defaultMessage": "チャット"
},
"navigationPanel.loadingChats": {
"defaultMessage": "チャットを読み込み中…"
},
"navigationPanel.metaCreated": {
"defaultMessage": "作成"
},

View file

@ -2384,6 +2384,9 @@
"navigationPanel.chats": {
"defaultMessage": "채팅"
},
"navigationPanel.loadingChats": {
"defaultMessage": "채팅 불러오는 중…"
},
"navigationPanel.metaCreated": {
"defaultMessage": "생성됨"
},

View file

@ -2384,6 +2384,9 @@
"navigationPanel.chats": {
"defaultMessage": "Sembang"
},
"navigationPanel.loadingChats": {
"defaultMessage": "Memuatkan sembang…"
},
"navigationPanel.metaCreated": {
"defaultMessage": "Dicipta"
},

View file

@ -2384,6 +2384,9 @@
"navigationPanel.chats": {
"defaultMessage": "Conversas"
},
"navigationPanel.loadingChats": {
"defaultMessage": "Carregando chats…"
},
"navigationPanel.metaCreated": {
"defaultMessage": "Criado"
},

View file

@ -2384,6 +2384,9 @@
"navigationPanel.chats": {
"defaultMessage": "Чаты"
},
"navigationPanel.loadingChats": {
"defaultMessage": "Загрузка чатов…"
},
"navigationPanel.metaCreated": {
"defaultMessage": "Создано"
},

View file

@ -2384,6 +2384,9 @@
"navigationPanel.chats": {
"defaultMessage": "Sohbetler"
},
"navigationPanel.loadingChats": {
"defaultMessage": "Sohbetler yükleniyor…"
},
"navigationPanel.metaCreated": {
"defaultMessage": "Oluşturuldu"
},

View file

@ -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"
},

View file

@ -2384,6 +2384,9 @@
"navigationPanel.chats": {
"defaultMessage": "聊天"
},
"navigationPanel.loadingChats": {
"defaultMessage": "正在加载聊天…"
},
"navigationPanel.metaCreated": {
"defaultMessage": "创建时间"
},

View file

@ -2384,6 +2384,9 @@
"navigationPanel.chats": {
"defaultMessage": "交談"
},
"navigationPanel.loadingChats": {
"defaultMessage": "正在載入聊天…"
},
"navigationPanel.metaCreated": {
"defaultMessage": "建立時間"
},