({ className })
| 134 | } |
| 135 | |
| 136 | export const TabManager: React.FC<TabManagerProps> = ({ className }) => { |
| 137 | const { |
| 138 | tabs, |
| 139 | activeTabId, |
| 140 | createChatTab, |
| 141 | createProjectsTab, |
| 142 | closeTab, |
| 143 | switchToTab, |
| 144 | canAddTab |
| 145 | } = useTabState(); |
| 146 | |
| 147 | // Access reorderTabs from context |
| 148 | const { reorderTabs } = useTabContext(); |
| 149 | |
| 150 | const scrollContainerRef = useRef<HTMLDivElement>(null); |
| 151 | const [showLeftScroll, setShowLeftScroll] = useState(false); |
| 152 | const [showRightScroll, setShowRightScroll] = useState(false); |
| 153 | const [draggedTabId, setDraggedTabId] = useState<string | null>(null); |
| 154 | |
| 155 | // Analytics tracking |
| 156 | const trackEvent = useTrackEvent(); |
| 157 | |
| 158 | // Listen for tab switch events |
| 159 | useEffect(() => { |
| 160 | const handleSwitchToTab = (event: CustomEvent) => { |
| 161 | const { tabId } = event.detail; |
| 162 | switchToTab(tabId); |
| 163 | }; |
| 164 | |
| 165 | window.addEventListener('switch-to-tab', handleSwitchToTab as EventListener); |
| 166 | return () => { |
| 167 | window.removeEventListener('switch-to-tab', handleSwitchToTab as EventListener); |
| 168 | }; |
| 169 | }, [switchToTab]); |
| 170 | |
| 171 | // Listen for keyboard shortcut events |
| 172 | useEffect(() => { |
| 173 | const handleCreateTab = () => { |
| 174 | createProjectsTab(); |
| 175 | trackEvent.tabCreated('projects'); |
| 176 | }; |
| 177 | |
| 178 | const handleCloseTab = async () => { |
| 179 | if (activeTabId) { |
| 180 | const tab = tabs.find(t => t.id === activeTabId); |
| 181 | if (tab) { |
| 182 | trackEvent.tabClosed(tab.type); |
| 183 | } |
| 184 | await closeTab(activeTabId); |
| 185 | } |
| 186 | }; |
| 187 | |
| 188 | const handleNextTab = () => { |
| 189 | const currentIndex = tabs.findIndex(tab => tab.id === activeTabId); |
| 190 | const nextIndex = (currentIndex + 1) % tabs.length; |
| 191 | if (tabs[nextIndex]) { |
| 192 | switchToTab(tabs[nextIndex].id); |
| 193 | } |
nothing calls this directly
no test coverage detected