import { useEffect, useMemo, useState } from "react"; import type { InstanceTab } from "../../generated/types"; import TabItem from "./TabItem"; import SelectedTabPanel from "./SelectedTabPanel"; interface Props { tabs: InstanceTab[]; emptyMessage?: string; instanceId?: string; } export default function InstanceTabsPanel({ tabs, emptyMessage = "No tabs open", instanceId, }: Props) { const [selectedTabId, setSelectedTabId] = useState(null); useEffect(() => { if (tabs.length === 0) { setSelectedTabId(null); return; } if (!tabs.some((tab) => tab.id === selectedTabId)) { setSelectedTabId(tabs[0].id); } }, [selectedTabId, tabs]); const selectedTab = useMemo( () => tabs.find((tab) => tab.id === selectedTabId) ?? null, [selectedTabId, tabs], ); return (

Open Tabs ({tabs.length})

{tabs.length === 0 ? (
{emptyMessage}
) : (
{tabs.map((tab) => { const isSelected = tab.id === selectedTabId; return (
setSelectedTabId(tab.id)} onKeyDown={(event) => { if (event.key === "Enter" || event.key === " ") { event.preventDefault(); setSelectedTabId(tab.id); } }} className={`w-full rounded-xl border text-left transition ${ isSelected ? "border-primary bg-primary/10" : "border-border-subtle bg-white/2 hover:border-border-default hover:bg-white/3" }`} >
); })}
)}
); }