fix(speech): preserve edits while saving settings

This commit is contained in:
Shantur Rathore
2026-03-13 08:34:34 +00:00
parent 0ed19aeefb
commit cc2f6976f6

View File

@@ -34,20 +34,17 @@ export const SpeechSettingsCard: Component = () => {
const { serverSettings, updateSpeechSettings } = useConfig() const { serverSettings, updateSpeechSettings } = useConfig()
const initialDrafts = createDraftFields(serverSettings().speech) const initialDrafts = createDraftFields(serverSettings().speech)
const [isSaving, setIsSaving] = createSignal(false) const [isSaving, setIsSaving] = createSignal(false)
const [saveStatus, setSaveStatus] = createSignal<"idle" | "saved" | "error">("idle") const [saveStatus, setSaveStatus] = createSignal<"idle" | "saved" | "error">("saved")
const [drafts, setDrafts] = createSignal<DraftFields>(initialDrafts) const [drafts, setDrafts] = createSignal<DraftFields>(initialDrafts)
createEffect(() => { createEffect(() => {
const speech = serverSettings().speech const speech = serverSettings().speech
const nextDrafts = createDraftFields(speech) const nextDrafts = createDraftFields(speech)
if (!isDirty() || isSaving()) { if (!isSaving() && !isDirty()) {
if (!isDraftEqual(drafts(), nextDrafts)) { if (!isDraftEqual(drafts(), nextDrafts)) {
setDrafts(nextDrafts) setDrafts(nextDrafts)
} }
} }
if (!isSaving() && !isDirty()) {
setSaveStatus("saved")
}
}) })
createEffect(() => { createEffect(() => {
@@ -86,9 +83,9 @@ export const SpeechSettingsCard: Component = () => {
async function handleSave() { async function handleSave() {
if (!isDirty() || isSaving()) return if (!isDirty() || isSaving()) return
const current = drafts()
setIsSaving(true) setIsSaving(true)
setSaveStatus("idle") setSaveStatus("idle")
const current = drafts()
try { try {
await updateSpeechSettings({ await updateSpeechSettings({
apiKey: current.apiKey.trim() || undefined, apiKey: current.apiKey.trim() || undefined,