From 5b84b646237c1d915d1859aac25ec77f5418a564 Mon Sep 17 00:00:00 2001 From: LordMathis Date: Mon, 27 Oct 2025 20:36:31 +0100 Subject: [PATCH] Fix some typescript issues --- webui/src/components/BackendFormField.tsx | 4 +-- webui/src/components/InstanceDialog.tsx | 27 ++++++++++++--------- webui/src/components/InstanceList.tsx | 6 ++--- webui/src/components/ParseCommandDialog.tsx | 2 +- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/webui/src/components/BackendFormField.tsx b/webui/src/components/BackendFormField.tsx index e66fedd..bb49fc1 100644 --- a/webui/src/components/BackendFormField.tsx +++ b/webui/src/components/BackendFormField.tsx @@ -12,13 +12,13 @@ interface BackendFormFieldProps { const BackendFormField: React.FC = ({ fieldKey, value, onChange }) => { // Get configuration for basic fields, or use field name for advanced fields - const config = basicBackendFieldsConfig[fieldKey as string] || { label: fieldKey } + const config = basicBackendFieldsConfig[fieldKey] || { label: fieldKey } // Get type from Zod schema const fieldType = getBackendFieldType(fieldKey) const handleChange = (newValue: string | number | boolean | string[] | undefined) => { - onChange(fieldKey as string, newValue) + onChange(fieldKey, newValue) } const renderField = () => { diff --git a/webui/src/components/InstanceDialog.tsx b/webui/src/components/InstanceDialog.tsx index fae8180..25d48a3 100644 --- a/webui/src/components/InstanceDialog.tsx +++ b/webui/src/components/InstanceDialog.tsx @@ -9,6 +9,7 @@ import { DialogTitle, } from "@/components/ui/dialog"; import { BackendType, type CreateInstanceOptions, type Instance } from "@/types/instance"; +import type { BackendOptions } from "@/schemas/instanceOptions"; import ParseCommandDialog from "@/components/ParseCommandDialog"; import InstanceSettingsCard from "@/components/instance/InstanceSettingsCard"; import BackendConfigurationCard from "@/components/instance/BackendConfigurationCard"; @@ -56,31 +57,31 @@ const InstanceDialog: React.FC = ({ } }, [open, instance]); - const handleFieldChange = (key: keyof CreateInstanceOptions, value: any) => { + const handleFieldChange = (key: keyof CreateInstanceOptions, value: unknown) => { setFormData((prev) => { // If backend_type is changing, clear backend_options if (key === 'backend_type' && prev.backend_type !== value) { return { ...prev, - [key]: value, + backend_type: value as CreateInstanceOptions['backend_type'], backend_options: {}, // Clear backend options when backend type changes }; } - + return { ...prev, [key]: value, - }; + } as CreateInstanceOptions; }); }; - const handleBackendFieldChange = (key: string, value: any) => { + const handleBackendFieldChange = (key: string, value: unknown) => { setFormData((prev) => ({ ...prev, backend_options: { ...prev.backend_options, [key]: value, - } as any, + } as BackendOptions, })); }; @@ -106,11 +107,13 @@ const InstanceDialog: React.FC = ({ } // Clean up undefined values to avoid sending empty fields - const cleanOptions: CreateInstanceOptions = {}; + const cleanOptions: CreateInstanceOptions = {} as CreateInstanceOptions; Object.entries(formData).forEach(([key, value]) => { + const typedKey = key as keyof CreateInstanceOptions; + if (key === 'backend_options' && value && typeof value === 'object' && !Array.isArray(value)) { // Handle backend_options specially - clean nested object - const cleanBackendOptions: any = {}; + const cleanBackendOptions: Record = {}; Object.entries(value).forEach(([backendKey, backendValue]) => { if (backendValue !== undefined && backendValue !== null && (typeof backendValue !== 'string' || backendValue.trim() !== "")) { // Handle arrays - don't include empty arrays @@ -123,7 +126,7 @@ const InstanceDialog: React.FC = ({ // Only include backend_options if it has content if (Object.keys(cleanBackendOptions).length > 0) { - (cleanOptions as any)[key] = cleanBackendOptions; + (cleanOptions as Record)[typedKey] = cleanBackendOptions as BackendOptions; } } else if (value !== undefined && value !== null) { // Skip empty strings @@ -134,7 +137,7 @@ const InstanceDialog: React.FC = ({ if (Array.isArray(value) && value.length === 0) { return; } - (cleanOptions as any)[key] = value; + (cleanOptions as Record)[typedKey] = value; } }); @@ -167,7 +170,7 @@ const InstanceDialog: React.FC = ({ reader.onload = (e) => { try { const content = e.target?.result as string; - const importedData = JSON.parse(content); + const importedData = JSON.parse(content) as { name?: string; options?: CreateInstanceOptions }; // Validate that it's an instance export if (!importedData.name || !importedData.options) { @@ -176,7 +179,7 @@ const InstanceDialog: React.FC = ({ } // Set the instance name (only for new instances, not editing) - if (!isEditing) { + if (!isEditing && typeof importedData.name === 'string') { handleNameChange(importedData.name); } diff --git a/webui/src/components/InstanceList.tsx b/webui/src/components/InstanceList.tsx index fd258c5..7529b6a 100644 --- a/webui/src/components/InstanceList.tsx +++ b/webui/src/components/InstanceList.tsx @@ -56,9 +56,9 @@ function InstanceList({ editInstance }: InstanceListProps) { { void startInstance(instance.name) }} + stopInstance={() => { void stopInstance(instance.name) }} + deleteInstance={() => { void deleteInstance(instance.name) }} editInstance={editInstance} /> ))} diff --git a/webui/src/components/ParseCommandDialog.tsx b/webui/src/components/ParseCommandDialog.tsx index ba5075d..92482e5 100644 --- a/webui/src/components/ParseCommandDialog.tsx +++ b/webui/src/components/ParseCommandDialog.tsx @@ -54,7 +54,7 @@ const ParseCommandDialog: React.FC = ({ options = await backendsApi.vllm.parseCommand(command); break; default: - throw new Error(`Unsupported backend type: ${backendType}`); + throw new Error(`Unsupported backend type: ${String(backendType)}`); } onParsed(options);