diff --git a/src/apps/officer-web/Screens/Dashboard/Layout/Rescan/RescanButton.tsx b/src/apps/officer-web/Screens/Dashboard/Layout/Rescan/RescanButton.tsx index ff4e79eb..2e68a621 100644 --- a/src/apps/officer-web/Screens/Dashboard/Layout/Rescan/RescanButton.tsx +++ b/src/apps/officer-web/Screens/Dashboard/Layout/Rescan/RescanButton.tsx @@ -20,7 +20,10 @@ export function RescanButton() { setLoading(true); try { const res = await client.post('/rescan', {}); - await Promise.all(ITEM_QUERY_KEYS.map((key) => qc.invalidateQueries({ queryKey: [key] }))); + // refetchType: 'all' so INACTIVE (unmounted) item lists refetch too — otherwise a rescan from + // anywhere but the Tasks/Skills/… page only marks them stale, and the change isn't picked up until + // you next open that page. This refreshes every item cache immediately, wherever you press it. + await Promise.all(ITEM_QUERY_KEYS.map((key) => qc.invalidateQueries({ queryKey: [key], refetchType: 'all' }))); const c = res.counts ?? {}; toast.success(`Rescanned items — ${c.tasks ?? 0} tasks, ${c.tools ?? 0} tools, ${c.skills ?? 0} skills, ${c.processes ?? 0} processes`); } catch {