Files
Charon/frontend/src/hooks/useDocker.ts
2026-01-26 19:22:05 +00:00

37 lines
1.1 KiB
TypeScript

import { useQuery } from '@tanstack/react-query'
import { dockerApi } from '../api/docker'
export function useDocker(host?: string | null, serverId?: string | null) {
const {
data: containers = [],
isLoading,
error,
refetch,
} = useQuery({
queryKey: ['docker-containers', host, serverId],
queryFn: async () => {
try {
return await dockerApi.listContainers(host || undefined, serverId || undefined)
} catch (err: unknown) {
// Extract helpful error message from response
const error = err as { response?: { status?: number; data?: { details?: string } } }
if (error.response?.status === 503) {
const details = error.response?.data?.details
const message = details || 'Docker service unavailable. Check that Docker is running.'
throw new Error(message)
}
throw err
}
},
enabled: Boolean(host) || Boolean(serverId),
retry: 1, // Don't retry too much if docker is not available
})
return {
containers,
isLoading,
error,
refetch,
}
}