/** * TabBarActions - Right-side action buttons for the tab bar row. * Extracted from TabBar to render once (not per-pane). * Reads focused pane data from root store selectors (auto-synced via syncRootState). */ import { useMemo, useState } from 'react'; import { isElectronMode } from '@renderer/api'; import { Tooltip, TooltipContent, TooltipTrigger } from '@renderer/components/ui/tooltip'; import { useStore } from '@renderer/store'; import { Bell, PanelRight } from 'lucide-react'; import { useShallow } from 'zustand/react/shallow'; import { MoreMenu } from './MoreMenu'; export const TabBarActions = (): React.JSX.Element => { const { unreadCount, openNotificationsTab, activeTabId, openTabs, tabSessionData, sidebarCollapsed, toggleSidebar, updateStatus, openUpdateDialog, } = useStore( useShallow((s) => ({ unreadCount: s.unreadCount, openNotificationsTab: s.openNotificationsTab, activeTabId: s.activeTabId, openTabs: s.openTabs, tabSessionData: s.tabSessionData, sidebarCollapsed: s.sidebarCollapsed, toggleSidebar: s.toggleSidebar, updateStatus: s.updateStatus, openUpdateDialog: s.openUpdateDialog, })) ); // Hover states for buttons const [notificationsHover, setNotificationsHover] = useState(false); const [githubHover, setGithubHover] = useState(false); const [discordHover, setDiscordHover] = useState(false); const [expandHover, setExpandHover] = useState(false); const [updateHover, setUpdateHover] = useState(false); // Derive active tab and session detail for MoreMenu const activeTab = useMemo( () => openTabs.find((t) => t.id === activeTabId), [openTabs, activeTabId] ); const activeTabSessionDetail = activeTabId ? (tabSessionData[activeTabId]?.sessionDetail ?? null) : null; return (
{/* Update app button — only visible when update available or downloaded */} {(updateStatus === 'available' || updateStatus === 'downloaded') && ( {updateStatus === 'downloaded' ? 'Update downloaded, restart to apply' : 'New version available'} )} {/* Notifications bell icon */} Notifications {/* GitHub link */} GitHub {/* Discord link */} Discord {/* More menu (Teams, Settings, Extensions, Search, Schedules, Docs, Export, Analyze) */} {/* Expand sidebar — rightmost, only when collapsed */} {sidebarCollapsed && ( Expand sidebar )}
); };