fix: evaluated field on event list + abort race condition
- Backend: add evaluated subquery column to list SELECT so each event returns evaluated=1/0 (was missing, causing all events to appear as unevaluated regardless of filter) - Frontend: AbortController cancels the previous in-flight fetch when a new load fires, preventing stale results from overwriting current filter state Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1173,9 +1173,15 @@ export default function MarketEvents() {
|
||||
setDateTo(to)
|
||||
}, [])
|
||||
|
||||
const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null)
|
||||
const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null)
|
||||
const abortRef = useRef<AbortController | null>(null)
|
||||
|
||||
const load = useCallback(async () => {
|
||||
// Cancel any in-flight fetch
|
||||
abortRef.current?.abort()
|
||||
abortRef.current = new AbortController()
|
||||
const signal = abortRef.current.signal
|
||||
|
||||
setLoading(true)
|
||||
const params = new URLSearchParams()
|
||||
if (search) params.set('search', search)
|
||||
@@ -1193,11 +1199,15 @@ export default function MarketEvents() {
|
||||
params.set('sort_by', instTicker ? 'instrument_score' : sortBy)
|
||||
params.set('sort_dir', sortDir)
|
||||
params.set('limit', '500')
|
||||
const r = await fetch(`/api/market-events?${params}`)
|
||||
if (r.ok) {
|
||||
const d = await r.json()
|
||||
setEvents(d.events)
|
||||
setTotal(d.total)
|
||||
try {
|
||||
const r = await fetch(`/api/market-events?${params}`, { signal })
|
||||
if (r.ok) {
|
||||
const d = await r.json()
|
||||
setEvents(d.events)
|
||||
setTotal(d.total)
|
||||
}
|
||||
} catch (e: any) {
|
||||
if (e.name === 'AbortError') return // superseded by a newer load
|
||||
}
|
||||
setLoading(false)
|
||||
}, [search, category, level, minScore, dateFrom, dateTo, evaluated,
|
||||
|
||||
Reference in New Issue
Block a user