fix(app): wrap model.set in startTransition (#34351)

This commit is contained in:
Brendan Allan
2026-06-29 07:35:09 +08:00
committed by GitHub
parent 5d6aa3b41a
commit 33762292f7
2 changed files with 37 additions and 31 deletions
+29 -25
View File
@@ -1,7 +1,7 @@
import { createSimpleContext } from "@opencode-ai/ui/context" import { createSimpleContext } from "@opencode-ai/ui/context"
import { base64Encode } from "@opencode-ai/core/util/encode" import { base64Encode } from "@opencode-ai/core/util/encode"
import { useParams } from "@solidjs/router" import { useParams } from "@solidjs/router"
import { batch, createEffect, createMemo } from "solid-js" import { batch, createEffect, createMemo, startTransition } from "solid-js"
import { createStore } from "solid-js/store" import { createStore } from "solid-js/store"
import { useModels } from "@/context/models" import { useModels } from "@/context/models"
import { useProviders } from "@/hooks/use-providers" import { useProviders } from "@/hooks/use-providers"
@@ -294,19 +294,21 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
model.set({ providerID: entry.provider.id, modelID: entry.id }) model.set({ providerID: entry.provider.id, modelID: entry.id })
}, },
set(item: ModelKey | undefined, options?: { recent?: boolean }) { set(item: ModelKey | undefined, options?: { recent?: boolean }) {
batch(() => { startTransition(() =>
setStore("last", { batch(() => {
type: "model", setStore("last", {
agent: agent.current()?.name, type: "model",
model: item ?? null, agent: agent.current()?.name,
variant: selected(), model: item ?? null,
variant: selected(),
})
write({ model: item })
if (!item) return
models.setVisibility(item, true)
if (!options?.recent) return
models.recent.push(item)
}) })
write({ model: item }) )
if (!item) return
models.setVisibility(item, true)
if (!options?.recent) return
models.recent.push(item)
})
}, },
visible(item: ModelKey) { visible(item: ModelKey) {
return models.visible(item) return models.visible(item)
@@ -335,19 +337,21 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
return Object.keys(item.variants) return Object.keys(item.variants)
}, },
set(value: string | undefined) { set(value: string | undefined) {
batch(() => { startTransition(() =>
const model = current() batch(() => {
setStore("last", { const model = current()
type: "variant", setStore("last", {
agent: agent.current()?.name, type: "variant",
model: model ? { providerID: model.provider.id, modelID: model.id } : null, agent: agent.current()?.name,
variant: value ?? null, model: model ? { providerID: model.provider.id, modelID: model.id } : null,
variant: value ?? null,
})
write({ variant: value ?? null })
if (model) {
models.variant.set({ providerID: model.provider.id, modelID: model.id }, value ?? undefined)
}
}) })
write({ variant: value ?? null }) )
if (model) {
models.variant.set({ providerID: model.provider.id, modelID: model.id }, value ?? undefined)
}
})
}, },
cycle() { cycle() {
const items = this.list() const items = this.list()
+8 -6
View File
@@ -138,12 +138,14 @@ export const { use: useTabs, provider: TabsProvider } = createSimpleContext({
const next = { type: "session" as const, ...tab } const next = { type: "session" as const, ...tab }
const existing = store.find((item) => tabKey(item) === tabKey(next)) const existing = store.find((item) => tabKey(item) === tabKey(next))
if (existing) return existing if (existing) return existing
setStore( void startTransition(() => {
produce((tabs) => { setStore(
if (tabs.some((item) => tabKey(item) === tabKey(next))) return produce((tabs) => {
tabs.push(next) if (tabs.some((item) => tabKey(item) === tabKey(next))) return
}), tabs.push(next)
) }),
)
})
return next return next
}, },
reorder(keys: string[]) { reorder(keys: string[]) {