diff options
| author | Adam <[email protected]> | 2025-12-29 09:47:53 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-12-29 09:47:57 -0600 |
| commit | 831e9bce51c035ec22ce9562bf0257d6b59b2fe4 (patch) | |
| tree | b6e86b44cbc980d737a63cb571cb61a9003d237b /packages/app/src | |
| parent | 5de73abd820d9425e82f85f95f50568332ca7cdc (diff) | |
| download | opencode-831e9bce51c035ec22ce9562bf0257d6b59b2fe4.tar.gz opencode-831e9bce51c035ec22ce9562bf0257d6b59b2fe4.zip | |
fix(desktop): jankiness
Diffstat (limited to 'packages/app/src')
| -rw-r--r-- | packages/app/src/app.tsx | 2 | ||||
| -rw-r--r-- | packages/app/src/context/global-sync.tsx | 4 | ||||
| -rw-r--r-- | packages/app/src/context/sync.tsx | 4 | ||||
| -rw-r--r-- | packages/app/src/pages/session.tsx | 20 |
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) |
