mirror of
https://github.com/rustfs/console.git
synced 2026-08-28 19:47:21 +08:00
47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
"use client"
|
|
|
|
import { useCallback, useEffect, useState } from "react"
|
|
import { useApi } from "@/contexts/api-context"
|
|
import { normalizeRuntimeCapabilities, type RuntimeCapabilitiesSnapshot } from "@/lib/runtime-capabilities"
|
|
|
|
export function useRuntimeCapabilities() {
|
|
const api = useApi()
|
|
const [capabilities, setCapabilities] = useState<RuntimeCapabilitiesSnapshot | null>(null)
|
|
const [isLoading, setIsLoading] = useState(true)
|
|
const [error, setError] = useState<string | null>(null)
|
|
|
|
const loadCapabilities = useCallback(async () => {
|
|
setIsLoading(true)
|
|
setError(null)
|
|
|
|
try {
|
|
const response = await api.get(api.resolveUrl("/rustfs/admin/v4/runtime/capabilities"), {
|
|
suppress403Redirect: true,
|
|
})
|
|
const normalized = normalizeRuntimeCapabilities(response)
|
|
setCapabilities(normalized.capabilities)
|
|
setError(normalized.error ?? null)
|
|
} catch (loadError) {
|
|
setCapabilities(null)
|
|
setError(
|
|
loadError instanceof Error && loadError.message
|
|
? loadError.message
|
|
: "Replication capabilities are unavailable.",
|
|
)
|
|
} finally {
|
|
setIsLoading(false)
|
|
}
|
|
}, [api])
|
|
|
|
useEffect(() => {
|
|
void loadCapabilities()
|
|
}, [loadCapabilities])
|
|
|
|
return {
|
|
capabilities,
|
|
isLoading,
|
|
error,
|
|
reload: loadCapabilities,
|
|
}
|
|
}
|