diff --git a/web/src/components/ChatList.tsx b/web/src/components/ChatList.tsx index 9b0260b..a0b4667 100644 --- a/web/src/components/ChatList.tsx +++ b/web/src/components/ChatList.tsx @@ -24,6 +24,7 @@ export function ChatList() { const [archivedChats, setArchivedChats] = useState([]); const [searchLoading, setSearchLoading] = useState(false); const [tab, setTab] = useState<"all" | "people" | "groups" | "channels" | "archived">("all"); + const [archivedLoading, setArchivedLoading] = useState(false); const [ctxChatId, setCtxChatId] = useState(null); const [ctxPos, setCtxPos] = useState<{ x: number; y: number } | null>(null); const [deleteModalChatId, setDeleteModalChatId] = useState(null); @@ -50,11 +51,9 @@ export function ChatList() { }, [loadChats]); useEffect(() => { - if (tab !== "archived") { - return; - } let cancelled = false; void (async () => { + setArchivedLoading(true); try { const rows = await getChats(undefined, true); if (!cancelled) { @@ -64,12 +63,16 @@ export function ChatList() { if (!cancelled) { setArchivedChats([]); } + } finally { + if (!cancelled) { + setArchivedLoading(false); + } } })(); return () => { cancelled = true; }; - }, [tab]); + }, [tab, chats.length]); useEffect(() => { const term = search.trim(); @@ -310,6 +313,36 @@ export function ChatList() { ) : null}
+ {tab === "all" && archivedChats.length > 0 ? ( + + ) : null} + + {tab === "archived" && archivedLoading ? ( +

Loading archived chats...

+ ) : null} + {tab === "archived" && !archivedLoading && archivedChats.length === 0 ? ( +

Archive is empty

+ ) : null} + {visibleChats.map((chat) => (