|
1 | 1 | "use client"; |
2 | | -import { useCallback, useEffect, useState } from "react"; |
| 2 | +import { useCallback, useEffect, useRef, useState } from "react"; |
3 | 3 | import { AgentGrid } from "@/components/AgentGrid"; |
4 | 4 | import { AgentListView } from "@/components/AgentListView"; |
5 | 5 | import { Plus, LayoutGrid, List } from "lucide-react"; |
@@ -35,20 +35,32 @@ export default function AgentList() { |
35 | 35 | const [loading, setLoading] = useState(true); |
36 | 36 | const [error, setError] = useState(""); |
37 | 37 | const [view, setView] = useState<AgentsView>("grid"); |
| 38 | + const latestFetchRequestId = useRef(0); |
38 | 39 |
|
39 | 40 | const fetchAgents = useCallback(async () => { |
| 41 | + const requestId = latestFetchRequestId.current + 1; |
| 42 | + latestFetchRequestId.current = requestId; |
| 43 | + |
40 | 44 | try { |
41 | 45 | setLoading(true); |
42 | 46 | const result = await getAgents(selectedNamespace ? { namespace: selectedNamespace } : {}); |
| 47 | + if (requestId !== latestFetchRequestId.current) { |
| 48 | + return; |
| 49 | + } |
43 | 50 | if (result.error) { |
44 | 51 | throw new Error(result.error || "Failed to fetch agents"); |
45 | 52 | } |
46 | 53 | setAgents(result.data || []); |
47 | 54 | setError(""); |
48 | 55 | } catch (err) { |
| 56 | + if (requestId !== latestFetchRequestId.current) { |
| 57 | + return; |
| 58 | + } |
49 | 59 | setError(err instanceof Error ? err.message : "An unexpected error occurred"); |
50 | 60 | } finally { |
51 | | - setLoading(false); |
| 61 | + if (requestId === latestFetchRequestId.current) { |
| 62 | + setLoading(false); |
| 63 | + } |
52 | 64 | } |
53 | 65 | }, [selectedNamespace]); |
54 | 66 |
|
|
0 commit comments