diff --git a/webui/src/components/__tests__/InstanceList.test.tsx b/webui/src/components/__tests__/InstanceList.test.tsx index 01d8c25..a6924b7 100644 --- a/webui/src/components/__tests__/InstanceList.test.tsx +++ b/webui/src/components/__tests__/InstanceList.test.tsx @@ -4,8 +4,7 @@ import userEvent from '@testing-library/user-event' import InstanceList from '@/components/InstanceList' import { InstancesProvider } from '@/contexts/InstancesContext' import { instancesApi } from '@/lib/api' -import type { Instance } from '@/types/instance' -import { BackendType } from '@/types/instance' +import { BackendType, type Instance } from '@/types/instance' import { AuthProvider } from '@/contexts/AuthContext' // Mock the API diff --git a/webui/src/components/form/KeyValueInput.tsx b/webui/src/components/form/KeyValueInput.tsx index 62585c4..f136ecd 100644 --- a/webui/src/components/form/KeyValueInput.tsx +++ b/webui/src/components/form/KeyValueInput.tsx @@ -59,7 +59,7 @@ const KeyValueInput: React.FC = ({ // Reset to single empty row if value is explicitly undefined/null setPairs([{ key: '', value: '' }]) } - // eslint-disable-next-line react-hooks/exhaustive-deps + }, [value]) // Update parent component when pairs change diff --git a/webui/src/contexts/__tests__/InstancesContext.test.tsx b/webui/src/contexts/__tests__/InstancesContext.test.tsx index cad603d..1f99055 100644 --- a/webui/src/contexts/__tests__/InstancesContext.test.tsx +++ b/webui/src/contexts/__tests__/InstancesContext.test.tsx @@ -3,8 +3,7 @@ import { render, screen, waitFor } from "@testing-library/react"; import type { ReactNode } from "react"; import { InstancesProvider, useInstances } from "@/contexts/InstancesContext"; import { instancesApi } from "@/lib/api"; -import type { Instance } from "@/types/instance"; -import { BackendType } from "@/types/instance"; +import { BackendType, type Instance } from "@/types/instance"; import { AuthProvider } from "../AuthContext"; // Mock the API module diff --git a/webui/src/lib/healthService.ts b/webui/src/lib/healthService.ts index 7d47486..46cfcdf 100644 --- a/webui/src/lib/healthService.ts +++ b/webui/src/lib/healthService.ts @@ -156,11 +156,14 @@ class HealthService { this.callbacks.set(instanceName, new Set()) } - this.callbacks.get(instanceName)!.add(callback) + const callbacks = this.callbacks.get(instanceName) + if (callbacks) { + callbacks.add(callback) - // Start health checking if this is the first subscriber - if (this.callbacks.get(instanceName)!.size === 1) { - this.startHealthCheck(instanceName) + // Start health checking if this is the first subscriber + if (callbacks.size === 1) { + this.startHealthCheck(instanceName) + } } // Return unsubscribe function @@ -214,22 +217,24 @@ class HealthService { } // Start new interval with appropriate timing - const interval = setInterval(async () => { - try { - const health = await this.performHealthCheck(instanceName) - this.notifyCallbacks(instanceName, health) + const interval = setInterval(() => { + void (async () => { + try { + const health = await this.performHealthCheck(instanceName) + this.notifyCallbacks(instanceName, health) - // Check if state changed and adjust interval - const previousState = this.lastHealthState.get(instanceName) - this.lastHealthState.set(instanceName, health.state) + // Check if state changed and adjust interval + const previousState = this.lastHealthState.get(instanceName) + this.lastHealthState.set(instanceName, health.state) - if (previousState !== health.state) { - this.adjustPollingInterval(instanceName, health.state) + if (previousState !== health.state) { + this.adjustPollingInterval(instanceName, health.state) + } + } catch (error) { + console.error(`Health check failed for ${instanceName}:`, error) + // Continue polling even on error } - } catch (error) { - console.error(`Health check failed for ${instanceName}:`, error) - // Continue polling even on error - } + })() }, pollInterval) this.intervals.set(instanceName, interval) diff --git a/webui/src/main.tsx b/webui/src/main.tsx index 6418a1e..085ab4f 100644 --- a/webui/src/main.tsx +++ b/webui/src/main.tsx @@ -6,7 +6,10 @@ import './index.css' import { AuthProvider } from './contexts/AuthContext' import { ConfigProvider } from './contexts/ConfigContext' -ReactDOM.createRoot(document.getElementById('root')!).render( +const rootElement = document.getElementById('root') +if (!rootElement) throw new Error('Failed to find the root element') + +ReactDOM.createRoot(rootElement).render(