import { Show, type Accessor, type Component } from "solid-js" import type { SessionThread } from "../../../stores/session-state" import type { Session } from "../../../types/session" import { keyboardRegistry, type KeyboardShortcut } from "../../../lib/keyboard-registry" import type { DrawerViewState } from "./types" import { PlusSquare, Search } from "lucide-solid" import IconButton from "@suid/material/IconButton" import MenuOpenIcon from "@suid/icons-material/MenuOpen" import PushPinIcon from "@suid/icons-material/PushPin" import PushPinOutlinedIcon from "@suid/icons-material/PushPinOutlined" import InfoOutlinedIcon from "@suid/icons-material/InfoOutlined" import SessionList from "../../session-list" import KeyboardHint from "../../keyboard-hint" import WorktreeSelector from "../../worktree-selector" import AgentSelector from "../../agent-selector" import ModelSelector from "../../model-selector" import ThinkingSelector from "../../thinking-selector" import { getLogger } from "../../../lib/logger" const log = getLogger("session") interface SessionSidebarProps { t: (key: string) => string instanceId: string threads: Accessor activeSessionId: Accessor activeSession: Accessor showSearch: Accessor onToggleSearch: () => void keyboardShortcuts: Accessor isPhoneLayout: Accessor drawerState: Accessor leftPinned: Accessor onSelectSession: (sessionId: string) => void onNewSession: () => Promise | void onSidebarAgentChange: (sessionId: string, agent: string) => Promise onSidebarModelChange: (sessionId: string, model: { providerId: string; modelId: string }) => Promise onPinLeftDrawer: () => void onUnpinLeftDrawer: () => void onCloseLeftDrawer: () => void setContentEl: (el: HTMLElement | null) => void } const SessionSidebar: Component = (props) => (
{props.t("instanceShell.leftPanel.sessionsTitle")}
{ const result = props.onNewSession() if (result instanceof Promise) { void result.catch((error) => log.error("Failed to create session:", error)) } }} > props.onSelectSession("info")} > (props.leftPinned() ? props.onUnpinLeftDrawer() : props.onPinLeftDrawer())} > {props.leftPinned() ? : }
{ const result = props.onNewSession() if (result instanceof Promise) { void result.catch((error) => log.error("Failed to create session:", error)) } }} enableFilterBar={props.showSearch()} showHeader={false} showFooter={false} />
{(activeSession) => (
props.onSidebarAgentChange(activeSession().id, agent)} /> props.onSidebarModelChange(activeSession().id, model)} /> Boolean(shortcut))} separator=" " showDescription={false} />
)}
) export default SessionSidebar