Add hasInitialData state to ServerContext for improved error handling

This commit is contained in:
2025-10-05 09:38:24 +08:00
parent 836c55f526
commit 86cfb82158

View File

@@ -34,6 +34,7 @@ interface ServerContextType {
servers: ServerData[]
loading: boolean
lastUpdated: number
hasInitialData: boolean
}
const ServerContext = createContext<ServerContextType | undefined>(undefined)
@@ -55,6 +56,7 @@ export function ServerProvider({ children }: { children: ReactNode }) {
const [servers, setServers] = useState<ServerData[]>([])
const [loading, setLoading] = useState(true)
const [lastUpdated, setLastUpdated] = useState(Date.now())
const [hasInitialData, setHasInitialData] = useState(false)
const fetchServerData = async () => {
try {
@@ -94,12 +96,18 @@ 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
// 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,
@@ -107,7 +115,8 @@ export function ServerProvider({ children }: { children: ReactNode }) {
}))
setServers(offlineServers)
setLoading(false)
setLastUpdated(Date.now())
}
// Don't update lastUpdated on error to keep showing previous timestamp
}
}
@@ -123,7 +132,7 @@ export function ServerProvider({ children }: { children: ReactNode }) {
}, [])
return (
<ServerContext.Provider value={{ servers, loading, lastUpdated }}>
<ServerContext.Provider value={{ servers, loading, lastUpdated, hasInitialData }}>
{children}
</ServerContext.Provider>
)