Refactor InstanceSettingsCard and API types to use NodesMap

This commit is contained in:
2025-10-08 19:52:39 +02:00
parent 688b815ca7
commit 56b95d1243
2 changed files with 11 additions and 13 deletions

View File

@@ -8,7 +8,7 @@ import NumberInput from '@/components/form/NumberInput'
import CheckboxInput from '@/components/form/CheckboxInput' import CheckboxInput from '@/components/form/CheckboxInput'
import EnvironmentVariablesInput from '@/components/form/EnvironmentVariablesInput' import EnvironmentVariablesInput from '@/components/form/EnvironmentVariablesInput'
import SelectInput from '@/components/form/SelectInput' import SelectInput from '@/components/form/SelectInput'
import { nodesApi, type NodeResponse } from '@/lib/api' import { nodesApi, type NodesMap } from '@/lib/api'
interface InstanceSettingsCardProps { interface InstanceSettingsCardProps {
instanceName: string instanceName: string
@@ -27,7 +27,7 @@ const InstanceSettingsCard: React.FC<InstanceSettingsCardProps> = ({
onNameChange, onNameChange,
onChange onChange
}) => { }) => {
const [nodes, setNodes] = useState<NodeResponse[]>([]) const [nodes, setNodes] = useState<NodesMap>({})
const [loadingNodes, setLoadingNodes] = useState(true) const [loadingNodes, setLoadingNodes] = useState(true)
useEffect(() => { useEffect(() => {
@@ -45,13 +45,10 @@ const InstanceSettingsCard: React.FC<InstanceSettingsCardProps> = ({
void fetchNodes() void fetchNodes()
}, []) }, [])
const nodeOptions = [ const nodeOptions = Object.keys(nodes).map(nodeName => ({
{ value: '', label: 'Default (Main Node)' }, value: nodeName,
...nodes.map(node => ({ label: nodeName
value: node.name, }))
label: node.name
}))
]
const handleNodeChange = (value: string | undefined) => { const handleNodeChange = (value: string | undefined) => {
if (value) { if (value) {
@@ -89,7 +86,7 @@ const InstanceSettingsCard: React.FC<InstanceSettingsCardProps> = ({
</div> </div>
{/* Node Selection */} {/* Node Selection */}
{!loadingNodes && nodes.length > 0 && ( {!loadingNodes && Object.keys(nodes).length > 0 && (
<SelectInput <SelectInput
id="node" id="node"
label="Node" label="Node"

View File

@@ -105,14 +105,15 @@ export const backendsApi = {
// Node API types // Node API types
export interface NodeResponse { export interface NodeResponse {
name: string;
address: string; address: string;
} }
export type NodesMap = Record<string, NodeResponse>;
// Node API functions // Node API functions
export const nodesApi = { export const nodesApi = {
// GET /nodes // GET /nodes - returns map of node name to NodeResponse
list: () => apiCall<NodeResponse[]>("/nodes"), list: () => apiCall<NodesMap>("/nodes"),
// GET /nodes/{name} // GET /nodes/{name}
get: (name: string) => apiCall<NodeResponse>(`/nodes/${name}`), get: (name: string) => apiCall<NodeResponse>(`/nodes/${name}`),