import { SymbolView } from "expo-symbols"; import { useCallback, useState } from "react"; import { Pressable, View } from "react-native"; import Animated, { FadeIn, FadeOut, LinearTransition } from "react-native-reanimated"; import { useThemeColor } from "../../lib/useThemeColor"; import { AppText as Text, AppTextInput as TextInput } from "../../components/AppText"; import type { ConnectedEnvironmentSummary } from "../../state/remote-runtime-types"; import { ConnectionStatusDot } from "./ConnectionStatusDot"; export function ConnectionEnvironmentRow(props: { readonly environment: ConnectedEnvironmentSummary; readonly expanded: boolean; readonly onToggle: () => void; readonly onReconnect: (environmentId: string) => void; readonly onRemove: (environmentId: string) => void; readonly onUpdate: ( environmentId: string, updates: { readonly label: string; readonly displayUrl: string }, ) => void; }) { const [label, setLabel] = useState(props.environment.environmentLabel); const [url, setUrl] = useState(props.environment.displayUrl); const mutedColor = useThemeColor("--color-icon-subtle"); const placeholderColor = useThemeColor("--color-placeholder"); const primaryFg = useThemeColor("--color-primary-foreground"); const dangerFg = useThemeColor("--color-danger-foreground"); const handleSave = useCallback(() => { props.onUpdate(props.environment.environmentId, { label: label.trim(), displayUrl: url.trim(), }); props.onToggle(); }, [label, url, props]); return ( {props.environment.environmentLabel} {props.environment.displayUrl} {props.environment.connectionError ? ( {props.environment.connectionError} ) : null} {props.expanded ? ( Label URL Save props.onReconnect(props.environment.environmentId)} > props.onRemove(props.environment.environmentId)} > ) : null} ); }