import type { Session } from "@opencode-ai/sdk/client" import { SessionList } from "./SessionList" import { uiBridgeUpdate } from "../../state/uiBridgeState" interface SessionDropdownProps { sessions: Session[] currentSessionId: string | undefined filteredSessions: Session[] isDropdownOpen: boolean isSelectMode: boolean selectedSessions: Set selectedSessionIndex: number searchQuery: string editingSessionId: string | null editingTitle: string searchInputRef: React.RefObject editInputRef: React.RefObject selectedSessionRef: React.RefObject sessionListRef: React.RefObject sharingSessionId: string | null onSearchChange: (value: string) => void onSearchKeyDown: (e: React.KeyboardEvent) => void onToggleSelectMode: () => void onSessionSelect: (sessionId: string) => void onEditStart: (sessionId: string, currentTitle: string, e: React.MouseEvent) => void onEditSave: (sessionId: string) => void onEditCancel: () => void onEditChange: (value: string) => void onDeleteStart: (sessionId: string, e: React.MouseEvent) => void onBulkDeleteStart: () => void onCheckboxChange: (sessionId: string, checked: boolean) => void onKeyDown: (e: React.KeyboardEvent) => void onToggleShare: (sessionId: string, e: React.MouseEvent) => void } export function SessionDropdown({ sessions, currentSessionId, filteredSessions, isDropdownOpen, isSelectMode, selectedSessions, selectedSessionIndex, searchQuery, editingSessionId, editingTitle, searchInputRef, editInputRef, selectedSessionRef, sessionListRef, sharingSessionId, onSearchChange, onSearchKeyDown, onToggleSelectMode, onSessionSelect, onEditStart, onEditSave, onEditCancel, onEditChange, onDeleteStart, onBulkDeleteStart, onCheckboxChange, onKeyDown, onToggleShare, }: SessionDropdownProps) { if (!isDropdownOpen) return null const handleSelect = (sessionId: string) => { uiBridgeUpdate({ sessionID: sessionId }) onSessionSelect(sessionId) } return (
{/* Search input and select mode toggle */}
onSearchChange(e.target.value)} onKeyDown={onSearchKeyDown} className="flex-1 px-2 py-1 text-sm bg-gray-50 dark:bg-gray-950 border border-gray-200 dark:border-gray-800 rounded outline-none focus:border-blue-500 dark:focus:border-blue-500 text-gray-900 dark:text-gray-100" />
{/* Session list */} {/* Bulk delete button (shown in select mode when sessions are selected) */} {isSelectMode && selectedSessions.size > 0 && (
)}
) }