restore auto refresh

This commit is contained in:
ajvpot
2025-07-28 00:00:00 +00:00
parent 6271088644
commit 9cab3c2cf5
2 changed files with 39 additions and 9 deletions
+37 -7
View File
@@ -66,25 +66,55 @@ export default function ChatBox({ showAllMessagesTab = false, className = "", st
}
}, [minimized, selectedTab]);
const fetchMessages = async (before?: string, replace = false) => {
// Auto-refresh effect
useEffect(() => {
if (!minimized) {
const interval = setInterval(() => {
// Auto-refresh should only fetch newer messages, not replace all
fetchMessages(undefined, false, true);
}, 5000);
return () => clearInterval(interval);
}
}, [minimized, channelId]);
const fetchMessages = async (before?: string, replace = false, fetchNewer = false) => {
setLoading(true);
try {
let url = `/api/chat?limit=${PAGE_SIZE}`;
if (channelId) url += `&channel_id=${channelId}`;
if (before) url += `&before=${encodeURIComponent(before)}`;
if (fetchNewer) {
// Fetch newer messages using the most recent message timestamp
const mostRecentTimestamp = messages.length > 0 ? messages[0].ingest_timestamp : undefined;
if (mostRecentTimestamp) url += `&after=${encodeURIComponent(mostRecentTimestamp)}`;
} else if (before) {
// Fetch older messages using before parameter
url += `&before=${encodeURIComponent(before)}`;
}
const res = await fetch(url);
const data = await res.json();
if (Array.isArray(data)) {
setMessages((prev) => replace ? data : [...prev, ...data]);
setHasMore(data.length === PAGE_SIZE);
if (data.length > 0) {
setLastBefore(data[data.length - 1].ingest_timestamp);
if (fetchNewer && data.length > 0) {
// Add newer messages to the beginning (most recent first)
setMessages((prev) => [...data, ...prev]);
} else {
setMessages((prev) => replace ? data : [...prev, ...data]);
setHasMore(data.length === PAGE_SIZE);
if (data.length > 0) {
setLastBefore(data[data.length - 1].ingest_timestamp);
}
}
} else {
setHasMore(false);
}
} catch {
} catch (error) {
setHasMore(false);
if (fetchNewer) {
// Silently fail for auto-refresh
console.error('Auto-refresh failed:', error);
}
} finally {
setLoading(false);
}
+2 -2
View File
@@ -19,8 +19,8 @@ export default function RefreshButton({
small = false,
disabled = false,
}: RefreshButtonProps) {
const size = small ? 32 : 40;
const iconSize = small ? 18 : 22;
const size = small ? 24 : 40;
const iconSize = small ? 14 : 22;
return (
<>
<button