import { useQuery } from '@tanstack/react-query' import { useParams } from 'common' import { Container, Package } from 'lucide-react' import Link from 'next/link' import { parseAsStringEnum, useQueryState } from 'nuqs' import { BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, Card, NavMenu, NavMenuItem, } from 'ui' import { PageBreadcrumbs } from 'ui-patterns/PageBreadcrumbs' import { PageHeader, PageHeaderDescription, PageHeaderIcon, PageHeaderMeta, PageHeaderSummary, PageHeaderTitle, } from 'ui-patterns/PageHeader' import { PageNav } from 'ui-patterns/PageNav' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' import { ComputeInstanceStatePill } from '../ComputeInstanceStatePill' import { RuntimeBadge } from '../RuntimeBadge' import { ComputeInstanceLogsTab } from './ComputeInstanceLogsTab' import { ComputeInstanceOverviewTab } from './ComputeInstanceOverviewTab' import { AlertError } from '@/components/ui/AlertError' import type { ComputeInstanceLogStream } from '@/data/compute/compute-instance-logs-query' import { computeInstanceQueryOptions } from '@/data/compute/compute-instance-query' import { PRODUCT_NAME } from '@/lib/constants/compute' type ComputeInstanceTab = 'overview' | 'invocations' | 'logs' | 'activity' const COMPUTE_INSTANCE_TABS: ComputeInstanceTab[] = ['overview', 'invocations', 'logs', 'activity'] const TAB_LABEL: Record = { overview: 'Overview', invocations: 'Invocations', logs: 'Logs', activity: 'Activity', } const TAB_STREAM: Partial> = { invocations: 'requests', logs: 'output', activity: 'builds', } export const ComputeInstanceDetail = () => { const { ref: projectRef, name: instanceName } = useParams() const [tab, setTab] = useQueryState( 'tab', parseAsStringEnum(COMPUTE_INSTANCE_TABS) .withDefault('overview') .withOptions({ history: 'push' }) ) const { data: instance, error, isPending, isError, } = useQuery(computeInstanceQueryOptions({ projectRef, name: instanceName })) if (!projectRef) return null if (isPending) return if (isError) return if (!instance) { return (

Instance "{instanceName}" does not exist in this project

) } const stream = TAB_STREAM[tab] return (
{PRODUCT_NAME} {instance.name} {instance.name} {instance.imageVersion !== undefined && ( Version {instance.imageVersion} )} {COMPUTE_INSTANCE_TABS.map((item) => ( ))} {tab === 'overview' && } {stream !== undefined && (
)}
) }