From 86cfb8215848af73367152ca09e355f28896911e Mon Sep 17 00:00:00 2001 From: cialloo Date: Sun, 5 Oct 2025 09:38:24 +0800 Subject: [PATCH] Add hasInitialData state to ServerContext for improved error handling --- src/contexts/ServerContext.tsx | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/contexts/ServerContext.tsx b/src/contexts/ServerContext.tsx index 63c5578..44dcf9c 100644 --- a/src/contexts/ServerContext.tsx +++ b/src/contexts/ServerContext.tsx @@ -34,6 +34,7 @@ interface ServerContextType { servers: ServerData[] loading: boolean lastUpdated: number + hasInitialData: boolean } const ServerContext = createContext(undefined) @@ -55,6 +56,7 @@ export function ServerProvider({ children }: { children: ReactNode }) { const [servers, setServers] = useState([]) const [loading, setLoading] = useState(true) const [lastUpdated, setLastUpdated] = useState(Date.now()) + const [hasInitialData, setHasInitialData] = useState(false) const fetchServerData = async () => { try { @@ -94,20 +96,27 @@ export function ServerProvider({ children }: { children: ReactNode }) { } }) + // Only update if we got successful data setServers(results) setLoading(false) setLastUpdated(Date.now()) + setHasInitialData(true) } catch (error) { console.error('Failed to fetch server data:', error) - // Set all servers to offline on error - const offlineServers: ServerData[] = serverList.map(server => ({ - ...server, - status: 'offline' as const, - error: error instanceof Error ? error.message : 'Unknown error' - })) - setServers(offlineServers) - setLoading(false) - setLastUpdated(Date.now()) + + // If we have initial data, don't update the servers state + // This prevents showing errors to users when polling fails + if (!hasInitialData) { + // Only set offline servers if this is the first attempt + const offlineServers: ServerData[] = serverList.map(server => ({ + ...server, + status: 'offline' as const, + error: error instanceof Error ? error.message : 'Unknown error' + })) + setServers(offlineServers) + setLoading(false) + } + // Don't update lastUpdated on error to keep showing previous timestamp } } @@ -123,7 +132,7 @@ export function ServerProvider({ children }: { children: ReactNode }) { }, []) return ( - + {children} )