fix(desktop): Prevent Model response Interruption when opening settings dialog (#25114)
This commit is contained in:
@@ -329,6 +329,7 @@ export const SettingsGeneral: Component = () => {
|
|||||||
label={(o) => o.label}
|
label={(o) => o.label}
|
||||||
onSelect={(option) => {
|
onSelect={(option) => {
|
||||||
if (!option) return
|
if (!option) return
|
||||||
|
if (option.value === currentShell()) return
|
||||||
globalSync.updateConfig({ shell: option.value })
|
globalSync.updateConfig({ shell: option.value })
|
||||||
}}
|
}}
|
||||||
variant="secondary"
|
variant="secondary"
|
||||||
|
|||||||
@@ -759,18 +759,23 @@ export const layer = Layer.effect(
|
|||||||
const patch = writableGlobal(config)
|
const patch = writableGlobal(config)
|
||||||
|
|
||||||
let next: Info
|
let next: Info
|
||||||
|
let changed: boolean
|
||||||
if (!file.endsWith(".jsonc")) {
|
if (!file.endsWith(".jsonc")) {
|
||||||
const existing = ConfigParse.effectSchema(Info, ConfigParse.jsonc(before, file), file)
|
const existing = ConfigParse.effectSchema(Info, ConfigParse.jsonc(before, file), file)
|
||||||
const merged = mergeDeep(writable(existing), patch)
|
const merged = mergeDeep(writable(existing), patch)
|
||||||
yield* fs.writeFileString(file, JSON.stringify(merged, null, 2)).pipe(Effect.orDie)
|
const serialized = JSON.stringify(merged, null, 2)
|
||||||
|
changed = serialized !== before
|
||||||
|
if (changed) yield* fs.writeFileString(file, serialized).pipe(Effect.orDie)
|
||||||
next = merged
|
next = merged
|
||||||
} else {
|
} else {
|
||||||
const updated = patchJsonc(before, patch)
|
const updated = patchJsonc(before, patch)
|
||||||
next = ConfigParse.effectSchema(Info, ConfigParse.jsonc(updated, file), file)
|
next = ConfigParse.effectSchema(Info, ConfigParse.jsonc(updated, file), file)
|
||||||
yield* fs.writeFileString(file, updated).pipe(Effect.orDie)
|
changed = updated !== before
|
||||||
|
if (changed) yield* fs.writeFileString(file, updated).pipe(Effect.orDie)
|
||||||
}
|
}
|
||||||
|
|
||||||
yield* invalidate()
|
// Only tear down running instances if the config actually changed.
|
||||||
|
if (changed) yield* invalidate()
|
||||||
return next
|
return next
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user