import { Tooltip } from "@opencode-ai/ui/tooltip" import { createEffect, createMemo, createSignal, type JSXElement, onCleanup, onMount, type ParentProps, Show, } from "solid-js" import { type ServerConnection, serverDisplayName } from "@/context/server" import type { ServerHealth } from "@/utils/server-health" interface ServerRowProps extends ParentProps { conn: ServerConnection.Any status?: ServerHealth class?: string nameClass?: string versionClass?: string dimmed?: boolean badge?: JSXElement } export function ServerRow(props: ServerRowProps) { const [truncated, setTruncated] = createSignal(false) let nameRef: HTMLSpanElement | undefined let versionRef: HTMLSpanElement | undefined const name = createMemo(() => serverDisplayName(props.conn)) const check = () => { const nameTruncated = nameRef ? nameRef.scrollWidth > nameRef.clientWidth : false const versionTruncated = versionRef ? versionRef.scrollWidth > versionRef.clientWidth : false setTruncated(nameTruncated || versionTruncated) } createEffect(() => { name() props.conn.http.url props.status?.version queueMicrotask(check) }) onMount(() => { check() if (typeof ResizeObserver !== "function") return const observer = new ResizeObserver(check) if (nameRef) observer.observe(nameRef) if (versionRef) observer.observe(versionRef) onCleanup(() => observer.disconnect()) }) const tooltipValue = () => ( {name()} {props.status?.version} ) return (
{name()} {props.status?.version} {props.badge} {props.children}
) }