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
+5 -1
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,6 +294,7 @@ 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 }) {
startTransition(() =>
batch(() => { batch(() => {
setStore("last", { setStore("last", {
type: "model", type: "model",
@@ -307,6 +308,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
if (!options?.recent) return if (!options?.recent) return
models.recent.push(item) models.recent.push(item)
}) })
)
}, },
visible(item: ModelKey) { visible(item: ModelKey) {
return models.visible(item) return models.visible(item)
@@ -335,6 +337,7 @@ 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) {
startTransition(() =>
batch(() => { batch(() => {
const model = current() const model = current()
setStore("last", { setStore("last", {
@@ -348,6 +351,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
models.variant.set({ providerID: model.provider.id, modelID: model.id }, value ?? undefined) models.variant.set({ providerID: model.provider.id, modelID: model.id }, value ?? undefined)
} }
}) })
)
}, },
cycle() { cycle() {
const items = this.list() const items = this.list()
+2
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
void startTransition(() => {
setStore( setStore(
produce((tabs) => { produce((tabs) => {
if (tabs.some((item) => tabKey(item) === tabKey(next))) return if (tabs.some((item) => tabKey(item) === tabKey(next))) return
tabs.push(next) tabs.push(next)
}), }),
) )
})
return next return next
}, },
reorder(keys: string[]) { reorder(keys: string[]) {