/** * SessionTabContent - Renders session content with loading/error states. * Each session tab has its own instance to preserve state. */ import { useEffect } from 'react'; import { useStore } from '@renderer/store'; import { AlertCircle, RefreshCw } from 'lucide-react'; import { useShallow } from 'zustand/react/shallow'; import { MiddlePanel } from './MiddlePanel'; import type { Tab } from '@renderer/types/tabs'; export const SessionTabContent = ({ tab, isActive, }: Readonly<{ tab: Tab; isActive: boolean }>): React.JSX.Element => { const { fetchSessionDetail, closeTab, initTabUIState } = useStore( useShallow((s) => ({ fetchSessionDetail: s.fetchSessionDetail, closeTab: s.closeTab, initTabUIState: s.initTabUIState, })) ); // Read loading/error from per-tab data, falling back to global state const { sessionDetailError, sessionDetailLoading } = useStore( useShallow((s) => { const td = s.tabSessionData[tab.id]; return { sessionDetailError: td?.sessionDetailError ?? s.sessionDetailError, sessionDetailLoading: td?.sessionDetailLoading ?? s.sessionDetailLoading, }; }) ); // Initialize per-tab UI state when this tab is first mounted useEffect(() => { initTabUIState(tab.id); }, [tab.id, initTabUIState]); // Only show loading/error states when this tab is active if (!isActive) { return (
{sessionDetailError}
Loading session...