Add hasInitialData state to ServerContext for improved error handling
This commit is contained in:
@@ -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>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user