import type { GrpcConnection } from "@yaakapp-internal/models"; import { deleteModel } from "@yaakapp-internal/models"; import { formatDistanceToNowStrict } from "date-fns"; import { useDeleteGrpcConnections } from "../hooks/useDeleteGrpcConnections"; import { pluralizeCount } from "../lib/pluralize"; import { Dropdown } from "./core/Dropdown"; import { Icon } from "./core/Icon"; import { IconButton } from "./core/IconButton"; import { HStack } from "./core/Stacks"; interface Props { connections: GrpcConnection[]; activeConnection: GrpcConnection; onPinnedConnectionId: (id: string) => void; } export function RecentGrpcConnectionsDropdown({ activeConnection, connections, onPinnedConnectionId, }: Props) { const deleteAllConnections = useDeleteGrpcConnections(activeConnection?.requestId); const latestConnectionId = connections[0]?.id ?? "n/a"; return ( deleteModel(activeConnection), disabled: connections.length === 0, }, { label: `Clear ${pluralizeCount("Connection", connections.length)}`, onSelect: deleteAllConnections.mutate, hidden: connections.length <= 1, disabled: connections.length === 0, }, { type: "separator", label: "History" }, ...connections.map((c) => ({ label: ( {formatDistanceToNowStrict(`${c.createdAt}Z`)} ago •{" "} {c.elapsed}ms ), leftSlot: activeConnection?.id === c.id ? : , onSelect: () => onPinnedConnectionId(c.id), })), ]} > ); }