import React from 'react'; import { motion } from 'framer-motion'; import { classNames } from '~/utils/classNames'; interface TokenTypeOption { value: string; label: string; description?: string; } interface ConnectionFormProps { isConnected: boolean; isConnecting: boolean; token: string; onTokenChange: (token: string) => void; onConnect: (e: React.FormEvent) => void; onDisconnect: () => void; error?: string; serviceName: string; tokenLabel?: string; tokenPlaceholder?: string; getTokenUrl: string; environmentVariable?: string; tokenTypes?: TokenTypeOption[]; selectedTokenType?: string; onTokenTypeChange?: (type: string) => void; connectedMessage?: string; children?: React.ReactNode; // For additional form fields } export function ConnectionForm({ isConnected, isConnecting, token, onTokenChange, onConnect, onDisconnect, error, serviceName, tokenLabel = 'Access Token', tokenPlaceholder, getTokenUrl, environmentVariable, tokenTypes, selectedTokenType, onTokenTypeChange, connectedMessage = `Connected to ${serviceName}`, children, }: ConnectionFormProps) { return (
{!isConnected ? (
{environmentVariable && (

Tip: You can also set the{' '} {environmentVariable} {' '} environment variable to connect automatically.

)}
{tokenTypes && tokenTypes.length > 1 && onTokenTypeChange && (
{selectedTokenType && tokenTypes.find((t) => t.value === selectedTokenType)?.description && (

{tokenTypes.find((t) => t.value === selectedTokenType)?.description}

)}
)}
onTokenChange(e.target.value)} disabled={isConnecting} placeholder={tokenPlaceholder || `Enter your ${serviceName} access token`} className={classNames( 'w-full px-3 py-2 rounded-lg text-sm', 'bg-bolt-elements-background-depth-1', 'border border-bolt-elements-borderColor', 'text-bolt-elements-textPrimary placeholder-bolt-elements-textTertiary', 'focus:outline-none focus:ring-1 focus:ring-bolt-elements-borderColorActive', 'disabled:opacity-50', )} /> {children} {error && (

{error}

)}
) : (
{connectedMessage}
)}
); }