Spaces:
Build error
Build error
import React, { lazy, Suspense } from "react"; | |
import { useLocation } from "react-router"; | |
import { LoadingSpinner } from "../shared/loading-spinner"; | |
// Lazy load all tab components | |
const EditorTab = lazy(() => import("#/routes/changes-tab")); | |
const BrowserTab = lazy(() => import("#/routes/browser-tab")); | |
const JupyterTab = lazy(() => import("#/routes/jupyter-tab")); | |
const ServedTab = lazy(() => import("#/routes/served-tab")); | |
const TerminalTab = lazy(() => import("#/routes/terminal-tab")); | |
const VSCodeTab = lazy(() => import("#/routes/vscode-tab")); | |
interface TabContentProps { | |
conversationPath: string; | |
} | |
export function TabContent({ conversationPath }: TabContentProps) { | |
const location = useLocation(); | |
const currentPath = location.pathname; | |
// Determine which tab is active based on the current path | |
const isEditorActive = currentPath === conversationPath; | |
const isBrowserActive = currentPath === `${conversationPath}/browser`; | |
const isJupyterActive = currentPath === `${conversationPath}/jupyter`; | |
const isServedActive = currentPath === `${conversationPath}/served`; | |
const isTerminalActive = currentPath === `${conversationPath}/terminal`; | |
const isVSCodeActive = currentPath === `${conversationPath}/vscode`; | |
return ( | |
<div className="h-full w-full relative"> | |
{/* Each tab content is always loaded but only visible when active */} | |
<Suspense | |
fallback={ | |
<div className="flex items-center justify-center h-full"> | |
<LoadingSpinner size="large" /> | |
</div> | |
} | |
> | |
<div | |
className={`absolute inset-0 ${isEditorActive ? "block" : "hidden"}`} | |
> | |
<EditorTab /> | |
</div> | |
<div | |
className={`absolute inset-0 ${isBrowserActive ? "block" : "hidden"}`} | |
> | |
<BrowserTab /> | |
</div> | |
<div | |
className={`absolute inset-0 ${isJupyterActive ? "block" : "hidden"}`} | |
> | |
<JupyterTab /> | |
</div> | |
<div | |
className={`absolute inset-0 ${isServedActive ? "block" : "hidden"}`} | |
> | |
<ServedTab /> | |
</div> | |
<div | |
className={`absolute inset-0 ${isTerminalActive ? "block" : "hidden"}`} | |
> | |
<TerminalTab /> | |
</div> | |
<div | |
className={`absolute inset-0 ${isVSCodeActive ? "block" : "hidden"}`} | |
> | |
<VSCodeTab /> | |
</div> | |
</Suspense> | |
</div> | |
); | |
} | |