fix: auto re-fetch system config after invalidation

- invalidateSystemConfig() now dispatches a custom event
- useSystemConfig() listens for the event and re-fetches automatically
- Fixes stale initialized=false after register/logout causing
  incorrect redirect to SetupPage
This commit is contained in:
shinchan-zhai
2026-03-31 16:12:01 +08:00
parent 608f02ed67
commit d250aed26a
2 changed files with 17 additions and 3 deletions
+16 -3
View File
@@ -1,13 +1,15 @@
import { useEffect, useState } from 'react'
import { getSystemConfig, type SystemConfig } from '../lib/config'
import { useEffect, useState, useCallback } from 'react'
import { getSystemConfig, invalidateSystemConfig, type SystemConfig } from '../lib/config'
export function useSystemConfig() {
const [config, setConfig] = useState<SystemConfig | null>(null)
const [loading, setLoading] = useState(true)
const [error, setError] = useState<string | null>(null)
const [fetchKey, setFetchKey] = useState(0)
useEffect(() => {
let mounted = true
setLoading(true)
getSystemConfig()
.then((data) => {
if (!mounted) return
@@ -23,7 +25,18 @@ export function useSystemConfig() {
return () => {
mounted = false
}
}, [fetchKey])
// Listen for invalidation events and re-fetch automatically
useEffect(() => {
const handler = () => setFetchKey((k) => k + 1)
window.addEventListener('system-config-invalidated', handler)
return () => window.removeEventListener('system-config-invalidated', handler)
}, [])
return { config, loading, error }
const refresh = useCallback(() => {
invalidateSystemConfig()
}, [])
return { config, loading, error, refresh }
}
+1
View File
@@ -26,4 +26,5 @@ export function getSystemConfig(): Promise<SystemConfig> {
export function invalidateSystemConfig() {
cachedConfig = null
configPromise = null
window.dispatchEvent(new Event('system-config-invalidated'))
}