'use client'; import * as React from 'react'; import { OpenAPIClientContext } from './types'; import { OpenAPIV3 } from 'openapi-types'; import { ServerSelector } from './ServerSelector'; import { useOpenAPIContext } from './OpenAPIContextProvider'; export function ServerURLForm(props: { children: React.ReactNode; context: OpenAPIClientContext; servers: OpenAPIV3.ServerObject[]; serverIndex: number; }) { const { children, context, servers, serverIndex } = props; const ctx = useOpenAPIContext(); const server = servers[serverIndex]; const formRef = React.useRef(null); function switchServer(index: number) { if (index !== serverIndex) { update({ server: `${index}` ?? '0', ...(ctx?.state?.edit ? { edit: 'true' } : undefined) }); } } function updateServerVariables(formData: FormData) { const variableKeys = Object.keys(server.variables ?? {}); const variables: Record = {}; for (const pair of formData) { if (variableKeys.includes(pair[0]) && !isNaN(Number(pair[1]))) { variables[pair[0]] = `${pair[1]}`; } } update({ server: `${formData.get('server')}` ?? '0', ...variables, ...(ctx?.state?.edit ? { edit: 'true' } : undefined) }); } function update(variables?: Record) { if (!context.blockKey) { return; } ctx?.onUpdate({ block: context.blockKey, ...variables, }); } return (
{ e.preventDefault(); updateServerVariables(new FormData(e.currentTarget)); }} className="contents">
{children} {ctx?.state?.edit && servers.length > 1 ? ( ) : null}
); }