summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/components/session
diff options
context:
space:
mode:
authoradamelmore <[email protected]>2026-01-26 10:04:59 -0600
committeradamelmore <[email protected]>2026-01-26 11:26:17 -0600
commitd05ed5ca83e03904c7c3dda23a6dcccfd607bdce (patch)
tree1afcb055bcedf8b477472f0b25432b318a95f53b /packages/app/src/components/session
parent37f1a1a4ef36eacb60ad5493db8aeb1130c5fa91 (diff)
downloadopencode-d05ed5ca83e03904c7c3dda23a6dcccfd607bdce.tar.gz
opencode-d05ed5ca83e03904c7c3dda23a6dcccfd607bdce.zip
chore(app): createStore over signals
Diffstat (limited to 'packages/app/src/components/session')
-rw-r--r--packages/app/src/components/session/session-sortable-terminal-tab.tsx51
1 files changed, 27 insertions, 24 deletions
diff --git a/packages/app/src/components/session/session-sortable-terminal-tab.tsx b/packages/app/src/components/session/session-sortable-terminal-tab.tsx
index d16379e80..75e9b22f9 100644
--- a/packages/app/src/components/session/session-sortable-terminal-tab.tsx
+++ b/packages/app/src/components/session/session-sortable-terminal-tab.tsx
@@ -1,5 +1,6 @@
import type { JSX } from "solid-js"
-import { createSignal, Show } from "solid-js"
+import { Show } from "solid-js"
+import { createStore } from "solid-js/store"
import { createSortable } from "@thisbeyond/solid-dnd"
import { IconButton } from "@opencode-ai/ui/icon-button"
import { Tabs } from "@opencode-ai/ui/tabs"
@@ -12,11 +13,13 @@ export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () =>
const terminal = useTerminal()
const language = useLanguage()
const sortable = createSortable(props.terminal.id)
- const [editing, setEditing] = createSignal(false)
- const [title, setTitle] = createSignal(props.terminal.title)
- const [menuOpen, setMenuOpen] = createSignal(false)
- const [menuPosition, setMenuPosition] = createSignal({ x: 0, y: 0 })
- const [blurEnabled, setBlurEnabled] = createSignal(false)
+ const [store, setStore] = createStore({
+ editing: false,
+ title: props.terminal.title,
+ menuOpen: false,
+ menuPosition: { x: 0, y: 0 },
+ blurEnabled: false,
+ })
const isDefaultTitle = () => {
const number = props.terminal.titleNumber
@@ -47,7 +50,7 @@ export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () =>
}
const focus = () => {
- if (editing()) return
+ if (store.editing) return
if (document.activeElement instanceof HTMLElement) {
document.activeElement.blur()
@@ -71,26 +74,26 @@ export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () =>
e.preventDefault()
}
- setBlurEnabled(false)
- setTitle(props.terminal.title)
- setEditing(true)
+ setStore("blurEnabled", false)
+ setStore("title", props.terminal.title)
+ setStore("editing", true)
setTimeout(() => {
const input = document.getElementById(`terminal-title-input-${props.terminal.id}`) as HTMLInputElement
if (!input) return
input.focus()
input.select()
- setTimeout(() => setBlurEnabled(true), 100)
+ setTimeout(() => setStore("blurEnabled", true), 100)
}, 10)
}
const save = () => {
- if (!blurEnabled()) return
+ if (!store.blurEnabled) return
- const value = title().trim()
+ const value = store.title.trim()
if (value && value !== props.terminal.title) {
terminal.update({ id: props.terminal.id, title: value })
}
- setEditing(false)
+ setStore("editing", false)
}
const keydown = (e: KeyboardEvent) => {
@@ -101,14 +104,14 @@ export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () =>
}
if (e.key === "Escape") {
e.preventDefault()
- setEditing(false)
+ setStore("editing", false)
}
}
const menu = (e: MouseEvent) => {
e.preventDefault()
- setMenuPosition({ x: e.clientX, y: e.clientY })
- setMenuOpen(true)
+ setStore("menuPosition", { x: e.clientX, y: e.clientY })
+ setStore("menuOpen", true)
}
return (
@@ -143,17 +146,17 @@ export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () =>
/>
}
>
- <span onDblClick={edit} style={{ visibility: editing() ? "hidden" : "visible" }}>
+ <span onDblClick={edit} style={{ visibility: store.editing ? "hidden" : "visible" }}>
{label()}
</span>
</Tabs.Trigger>
- <Show when={editing()}>
+ <Show when={store.editing}>
<div class="absolute inset-0 flex items-center px-3 bg-muted z-10 pointer-events-auto">
<input
id={`terminal-title-input-${props.terminal.id}`}
type="text"
- value={title()}
- onInput={(e) => setTitle(e.currentTarget.value)}
+ value={store.title}
+ onInput={(e) => setStore("title", e.currentTarget.value)}
onBlur={save}
onKeyDown={keydown}
onMouseDown={(e) => e.stopPropagation()}
@@ -161,13 +164,13 @@ export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () =>
/>
</div>
</Show>
- <DropdownMenu open={menuOpen()} onOpenChange={setMenuOpen}>
+ <DropdownMenu open={store.menuOpen} onOpenChange={(open) => setStore("menuOpen", open)}>
<DropdownMenu.Portal>
<DropdownMenu.Content
style={{
position: "fixed",
- left: `${menuPosition().x}px`,
- top: `${menuPosition().y}px`,
+ left: `${store.menuPosition.x}px`,
+ top: `${store.menuPosition.y}px`,
}}
>
<DropdownMenu.Item onSelect={edit}>