fix(app): wrap model.set in startTransition (#34351)
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
@@ -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[]) {
|
||||||
|
|||||||
Reference in New Issue
Block a user