Skip to content

Commit 70398f8

Browse files
committed
forms fix updating
1 parent d1fd5ec commit 70398f8

1 file changed

Lines changed: 34 additions & 15 deletions

File tree

src/widgets/forms.js

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1911,6 +1911,26 @@ export function buildCheckboxForm (dom, kb, lab, del, ins, form, dataDoc, trista
19111911
}
19121912
isUpdating = true
19131913
input.disabled = true // Disable button to provide user feedback
1914+
let didFinishUpdate = false
1915+
const finishUpdate = function () {
1916+
if (didFinishUpdate) return false
1917+
didFinishUpdate = true
1918+
isUpdating = false
1919+
input.disabled = false
1920+
return true
1921+
}
1922+
const showUpdateError = function (errorBody) {
1923+
colorCarrier.style.color = '#000'
1924+
colorCarrier.style.backgroundColor = '#fee'
1925+
box.appendChild(
1926+
errorMessageBlock(
1927+
dom,
1928+
`Checkbox: Error updating dataDoc from ${input.state} to ${
1929+
input.newState
1930+
}:\n\n${errorBody}`
1931+
)
1932+
)
1933+
}
19141934
colorCarrier.style.color = '#bbb' // grey -- not saved yet
19151935
const toDelete = input.state === true ? ins : input.state === false ? del : []
19161936
input.newState =
@@ -1927,13 +1947,12 @@ export function buildCheckboxForm (dom, kb, lab, del, ins, form, dataDoc, trista
19271947
debug.log(` Deleting ${toDelete}`)
19281948
debug.log(` Inserting ${toInsert}`)
19291949
try {
1930-
kb.updater.update(toDelete, toInsert, function (
1950+
const updateResult = kb.updater.update(toDelete, toInsert, function (
19311951
uri,
19321952
success,
19331953
errorBody
19341954
) {
1935-
isUpdating = false
1936-
input.disabled = false
1955+
if (!finishUpdate()) return
19371956
if (!success) {
19381957
if (toDelete.why) {
19391958
const hmmm = kb.holds(
@@ -1946,16 +1965,7 @@ export function buildCheckboxForm (dom, kb, lab, del, ins, form, dataDoc, trista
19461965
debug.log(' @@@@@ weird if 409 - does hold statement')
19471966
}
19481967
}
1949-
colorCarrier.style.color = '#000'
1950-
colorCarrier.style.backgroundColor = '#fee'
1951-
box.appendChild(
1952-
errorMessageBlock(
1953-
dom,
1954-
`Checkbox: Error updating dataDoc from ${input.state} to ${
1955-
input.newState
1956-
}:\n\n${errorBody}`
1957-
)
1958-
)
1968+
showUpdateError(errorBody)
19591969
} else {
19601970
colorCarrier.style.color = '#000'
19611971
input.state = input.newState
@@ -1966,9 +1976,18 @@ export function buildCheckboxForm (dom, kb, lab, del, ins, form, dataDoc, trista
19661976
}[input.state] // @@
19671977
}
19681978
})
1979+
if (updateResult && typeof updateResult.then === 'function') {
1980+
updateResult
1981+
.catch(function (error) {
1982+
if (!finishUpdate()) return
1983+
showUpdateError(error instanceof Error ? error.message : error)
1984+
})
1985+
.finally(function () {
1986+
finishUpdate()
1987+
})
1988+
}
19691989
} catch (error) {
1970-
isUpdating = false
1971-
input.disabled = false
1990+
finishUpdate()
19721991
throw error
19731992
}
19741993
}

0 commit comments

Comments
 (0)