fix: keep all tabs mounted, switch via CSS display instead of unmount
All checks were successful
Beta Release / beta (push) Successful in 42s
All checks were successful
Beta Release / beta (push) Successful in 42s
All 4 tabs (Dashboard, Studio, Shell, Config) are now always mounted and toggled via .tab-hidden (display:none). This preserves: - Dashboard graph history across tab switches - Terminal session state and progress - Studio chat context - Config form state Dashboard polling pauses after 3 ticks when hidden to save resources and auto-resumes when the tab becomes visible again. 💘 Generated with Crush Assisted-by: GLM-5.1 via Crush <crush@charm.land>
This commit is contained in:
@@ -3,6 +3,9 @@ import { useI18n } from '../i18n'
|
||||
|
||||
const MAX_POINTS = 30
|
||||
|
||||
const POLL_INTERVAL = 5000
|
||||
const MAX_IDLE_POLLS = 3
|
||||
|
||||
function MiniGraph({ data, max, color, label, unit }) {
|
||||
if (!data || data.length < 2) return <div className="dash-graph-empty">collecting...</div>
|
||||
const m = max || Math.max(...data, 1)
|
||||
@@ -71,8 +74,19 @@ export default function Dashboard({ api, refreshRef }) {
|
||||
useEffect(() => {
|
||||
loadData()
|
||||
if (refreshRef) refreshRef.current = loadData
|
||||
const iv = setInterval(loadData, 5000)
|
||||
return () => clearInterval(iv)
|
||||
let active = true
|
||||
let idleTicks = 0
|
||||
const iv = setInterval(() => {
|
||||
const hidden = document.querySelector('.dash-grid')?.closest('.tab-hidden')
|
||||
if (hidden) {
|
||||
idleTicks++
|
||||
if (idleTicks >= MAX_IDLE_POLLS) return
|
||||
} else {
|
||||
idleTicks = 0
|
||||
}
|
||||
if (active) loadData()
|
||||
}, POLL_INTERVAL)
|
||||
return () => { active = false; clearInterval(iv) }
|
||||
}, [loadData, refreshRef])
|
||||
|
||||
const minimax = (quota || []).find(p => p.name === 'minimax')
|
||||
|
||||
Reference in New Issue
Block a user