Add hasInitialData state to ServerContext for improved error handling
This commit is contained in:
@@ -34,6 +34,7 @@ interface ServerContextType {
|
|||||||
servers: ServerData[]
|
servers: ServerData[]
|
||||||
loading: boolean
|
loading: boolean
|
||||||
lastUpdated: number
|
lastUpdated: number
|
||||||
|
hasInitialData: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
const ServerContext = createContext<ServerContextType | undefined>(undefined)
|
const ServerContext = createContext<ServerContextType | undefined>(undefined)
|
||||||
@@ -55,6 +56,7 @@ export function ServerProvider({ children }: { children: ReactNode }) {
|
|||||||
const [servers, setServers] = useState<ServerData[]>([])
|
const [servers, setServers] = useState<ServerData[]>([])
|
||||||
const [loading, setLoading] = useState(true)
|
const [loading, setLoading] = useState(true)
|
||||||
const [lastUpdated, setLastUpdated] = useState(Date.now())
|
const [lastUpdated, setLastUpdated] = useState(Date.now())
|
||||||
|
const [hasInitialData, setHasInitialData] = useState(false)
|
||||||
|
|
||||||
const fetchServerData = async () => {
|
const fetchServerData = async () => {
|
||||||
try {
|
try {
|
||||||
@@ -94,12 +96,18 @@ export function ServerProvider({ children }: { children: ReactNode }) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Only update if we got successful data
|
||||||
setServers(results)
|
setServers(results)
|
||||||
setLoading(false)
|
setLoading(false)
|
||||||
setLastUpdated(Date.now())
|
setLastUpdated(Date.now())
|
||||||
|
setHasInitialData(true)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to fetch server data:', 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 => ({
|
const offlineServers: ServerData[] = serverList.map(server => ({
|
||||||
...server,
|
...server,
|
||||||
status: 'offline' as const,
|
status: 'offline' as const,
|
||||||
@@ -107,7 +115,8 @@ export function ServerProvider({ children }: { children: ReactNode }) {
|
|||||||
}))
|
}))
|
||||||
setServers(offlineServers)
|
setServers(offlineServers)
|
||||||
setLoading(false)
|
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 (
|
return (
|
||||||
<ServerContext.Provider value={{ servers, loading, lastUpdated }}>
|
<ServerContext.Provider value={{ servers, loading, lastUpdated, hasInitialData }}>
|
||||||
{children}
|
{children}
|
||||||
</ServerContext.Provider>
|
</ServerContext.Provider>
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user