remove live updates, fix save results
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { useState, useEffect } from 'react'
|
||||
import { useQueryClient } from '@tanstack/react-query'
|
||||
import { useConfig, useSaveConfig } from '../hooks/useConfig'
|
||||
import { apiFetch } from '../lib/api'
|
||||
|
||||
@@ -9,6 +10,7 @@ function fmtSeconds(s) {
|
||||
}
|
||||
|
||||
export default function ConfigModal({ onClose }) {
|
||||
const queryClient = useQueryClient()
|
||||
const { data: config, isLoading } = useConfig()
|
||||
const { mutate: save, isPending } = useSaveConfig()
|
||||
|
||||
@@ -81,6 +83,8 @@ export default function ConfigModal({ onClose }) {
|
||||
avg_time_p3p: form.avg_time_p3p ? String(parseFloat(form.avg_time_p3p) * 60) : null,
|
||||
}),
|
||||
})
|
||||
queryClient.invalidateQueries({ queryKey: ['config'] })
|
||||
queryClient.invalidateQueries({ queryKey: ['stats'] })
|
||||
} catch (err) {
|
||||
setSaveError(err?.message ?? 'Failed to save')
|
||||
} finally {
|
||||
@@ -97,6 +101,8 @@ export default function ConfigModal({ onClose }) {
|
||||
if (data?.testCount !== null && data?.testCount !== undefined) {
|
||||
setScanResult({ testCount: data.testCount, completedCount: data.completedCount })
|
||||
}
|
||||
queryClient.invalidateQueries({ queryKey: ['stats'] })
|
||||
queryClient.invalidateQueries({ queryKey: ['tests'] })
|
||||
} catch (err) {
|
||||
setSaveError(err?.message ?? 'Rescan failed')
|
||||
} finally {
|
||||
|
||||
@@ -1,42 +1,14 @@
|
||||
import { useQuery, useQueryClient } from '@tanstack/react-query'
|
||||
import { useEffect } from 'react'
|
||||
import { getScanStatus, getStats } from '../lib/api'
|
||||
import { useQuery } from '@tanstack/react-query'
|
||||
import { getStats } from '../lib/api'
|
||||
|
||||
export function useStats() {
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
// Subscribe to SSE updates once; invalidate both stats and tests on any update
|
||||
useEffect(() => {
|
||||
const es = new EventSource('/api/events')
|
||||
es.onmessage = (e) => {
|
||||
try {
|
||||
const data = JSON.parse(e.data)
|
||||
if (data.type === 'update') {
|
||||
queryClient.invalidateQueries({ queryKey: ['stats'] })
|
||||
queryClient.invalidateQueries({ queryKey: ['tests'] })
|
||||
}
|
||||
} catch { /* ignore malformed */ }
|
||||
}
|
||||
return () => es.close()
|
||||
}, [queryClient])
|
||||
|
||||
const scanStatusQuery = useQuery({
|
||||
queryKey: ['scanStatus'],
|
||||
queryFn: getScanStatus,
|
||||
refetchInterval: (query) => (query.state.data?.scanning ? 1000 : 5000),
|
||||
})
|
||||
|
||||
const isScanning = scanStatusQuery.data?.scanning ?? true
|
||||
|
||||
const statsQuery = useQuery({
|
||||
queryKey: ['stats'],
|
||||
queryFn: getStats,
|
||||
enabled: !isScanning,
|
||||
refetchInterval: isScanning ? false : 30_000,
|
||||
})
|
||||
|
||||
return {
|
||||
...statsQuery,
|
||||
isScanning,
|
||||
isScanning: false,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,6 @@ export async function apiFetch(path, options = {}) {
|
||||
}
|
||||
|
||||
export const getStats = () => apiFetch('/stats')
|
||||
export const getScanStatus = () => apiFetch('/scan-status')
|
||||
export const getTests = (params = {}) => {
|
||||
const qs = new URLSearchParams(
|
||||
Object.entries(params).filter(([, v]) => v !== '' && v !== undefined && v !== null)
|
||||
|
||||
Reference in New Issue
Block a user