import React, { useState } from 'react'; import { ActivityIndicator, Pressable, Switch, Text, View } from 'react-native'; import { Info } from 'lucide-react-native'; import { ConnectorIcon } from './ConnectorCards'; import { connectorDescription, connectorSubtitle } from './connectorPanelUtils'; import { connectorPanelStyles as cStyles } from './connectorPanelStyles'; import { styles as sharedStyles } from '../../styles'; import { themedColor, themedSurface } from '../../theme'; import type { SuperagentConnector, SuperagentConnectorAccessMode } from '../../types'; export function ConnectorDetailView({ canConnect, connector, isConnecting, onCancel, onConnect, }: { // False when the host omits an onConnect handler (read-only / host-managed // consumers): the CTA must read as unavailable, not fire a no-op. canConnect: boolean; connector: SuperagentConnector; isConnecting: boolean; onCancel: () => void; onConnect: (connector: SuperagentConnector, accessMode: SuperagentConnectorAccessMode | null) => void; }) { const supportsAccessModes = !!connector.accessModes || connector.supportsReadOnly; const [readOnly, setReadOnly] = useState(false); const requiresConfig = !!connector.requiresConnectionConfig; return ( {connector.name} {connectorSubtitle(connector)} {connectorDescription(connector)} {supportsAccessModes ? ( Read-only access Let the agent read data but not make changes. ) : null} {requiresConfig ? ( Set up on web ) : isConnecting ? ( // Keep the in-flight OAuth visible with a spinner + a way to abort, // instead of silently popping back to the list. [cStyles.cancelButton, pressed && sharedStyles.pressed]} > Cancel ) : ( onConnect(connector, supportsAccessModes && readOnly ? 'read_only' : supportsAccessModes ? 'full_access' : null)} style={({ pressed }) => [cStyles.connectButton, !canConnect && cStyles.disabled, pressed && sharedStyles.pressed]} > Connect )} ); }