summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-12-29 09:47:53 -0600
committerAdam <[email protected]>2025-12-29 09:47:57 -0600
commit831e9bce51c035ec22ce9562bf0257d6b59b2fe4 (patch)
treeb6e86b44cbc980d737a63cb571cb61a9003d237b /packages/app/src
parent5de73abd820d9425e82f85f95f50568332ca7cdc (diff)
downloadopencode-831e9bce51c035ec22ce9562bf0257d6b59b2fe4.tar.gz
opencode-831e9bce51c035ec22ce9562bf0257d6b59b2fe4.zip
fix(desktop): jankiness
Diffstat (limited to 'packages/app/src')
-rw-r--r--packages/app/src/app.tsx2
-rw-r--r--packages/app/src/context/global-sync.tsx4
-rw-r--r--packages/app/src/context/sync.tsx4
-rw-r--r--packages/app/src/pages/session.tsx20
4 files changed, 17 insertions, 13 deletions
diff --git a/packages/app/src/app.tsx b/packages/app/src/app.tsx
index bf5ba9566..9e38d5e98 100644
--- a/packages/app/src/app.tsx
+++ b/packages/app/src/app.tsx
@@ -69,7 +69,7 @@ export function App() {
<Route
path="/session/:id?"
component={(p) => (
- <Show when={p.params.id || true} keyed>
+ <Show when={p.params.id ?? "new"} keyed>
<TerminalProvider>
<PromptProvider>
<Session />
diff --git a/packages/app/src/context/global-sync.tsx b/packages/app/src/context/global-sync.tsx
index e1dcf15fc..a6851aecb 100644
--- a/packages/app/src/context/global-sync.tsx
+++ b/packages/app/src/context/global-sync.tsx
@@ -124,7 +124,7 @@ function createGlobalSync() {
const updated = new Date(s.time.updated).getTime()
return updated > fourHoursAgo
})
- setStore("session", sessions)
+ setStore("session", reconcile(sessions, { key: "id" }))
})
.catch((err) => {
console.error("Failed to load sessions", err)
@@ -263,7 +263,7 @@ function createGlobalSync() {
setStore("session_diff", event.properties.sessionID, reconcile(event.properties.diff, { key: "file" }))
break
case "todo.updated":
- setStore("todo", event.properties.sessionID, reconcile(event.properties.todos))
+ setStore("todo", event.properties.sessionID, reconcile(event.properties.todos, { key: "id" }))
break
case "session.status": {
setStore("session_status", event.properties.sessionID, reconcile(event.properties.status))
diff --git a/packages/app/src/context/sync.tsx b/packages/app/src/context/sync.tsx
index dad035fb3..05156613a 100644
--- a/packages/app/src/context/sync.tsx
+++ b/packages/app/src/context/sync.tsx
@@ -81,7 +81,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
}),
)
- setStore("todo", sessionID, reconcile(todo.data ?? []))
+ setStore("todo", sessionID, reconcile(todo.data ?? [], { key: "id" }))
setStore(
"message",
sessionID,
@@ -115,7 +115,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
.slice()
.sort((a, b) => a.id.localeCompare(b.id))
.slice(0, store.limit)
- setStore("session", sessions)
+ setStore("session", reconcile(sessions, { key: "id" }))
})
},
more: createMemo(() => store.session.length >= store.limit),
diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx
index 6bc39daca..a6dc804d1 100644
--- a/packages/app/src/pages/session.tsx
+++ b/packages/app/src/pages/session.tsx
@@ -167,14 +167,18 @@ export default function Page() {
),
)
- createEffect(() => {
- params.id
- const status = sync.data.session_status[params.id ?? ""] ?? { type: "idle" }
- batch(() => {
- setStore("userInteracted", false)
- setStore("stepsExpanded", status.type !== "idle")
- })
- })
+ createEffect(
+ on(
+ () => params.id,
+ (id) => {
+ const status = sync.data.session_status[id ?? ""] ?? { type: "idle" }
+ batch(() => {
+ setStore("userInteracted", false)
+ setStore("stepsExpanded", status.type !== "idle")
+ })
+ },
+ ),
+ )
const status = createMemo(() => sync.data.session_status[params.id ?? ""] ?? { type: "idle" })
const working = createMemo(() => status().type !== "idle" && activeMessage()?.id === lastUserMessage()?.id)