Found while fixing #1566, deliberately left out of #1583.
The shape
ChoiceView.svelte's row actions are async click handlers with no catch:
deleteChoice (:196)
handleConfigureChoice (:216)
handleDuplicateChoice (:265)
handleRenameChoice, handleMoveChoice
If any of them throws, the click produces an unhandled promise rejection and nothing happens - no Notice, no console message the user would ever look for, no visual change. The button just does not work, which reads as "QuickAdd is broken" with nothing to report.
#1583 fixed the throws it knew about (a null entry inside a folder's children made Duplicate throw exactly this way), but the swallowing itself is untouched: the next unknown defect on any of these paths will present the same way.
Expected
A throw in a row action surfaces as a Notice naming the action, via the existing reportError (src/utils/errorUtils.ts), the way the rest of the plugin reports failures.
Note
Svelte's <svelte:boundary> does NOT help here. It catches render and effect errors; event-handler errors are re-thrown to the window (node_modules/svelte/src/internal/client/dom/elements/events.js). This needs explicit handling at the handlers.
Related
Found while fixing #1566, deliberately left out of #1583.
The shape
ChoiceView.svelte's row actions areasyncclick handlers with nocatch:deleteChoice(:196)handleConfigureChoice(:216)handleDuplicateChoice(:265)handleRenameChoice,handleMoveChoiceIf any of them throws, the click produces an unhandled promise rejection and nothing happens - no Notice, no console message the user would ever look for, no visual change. The button just does not work, which reads as "QuickAdd is broken" with nothing to report.
#1583 fixed the throws it knew about (a
nullentry inside a folder's children made Duplicate throw exactly this way), but the swallowing itself is untouched: the next unknown defect on any of these paths will present the same way.Expected
A throw in a row action surfaces as a Notice naming the action, via the existing
reportError(src/utils/errorUtils.ts), the way the rest of the plugin reports failures.Note
Svelte's
<svelte:boundary>does NOT help here. It catches render and effect errors; event-handler errors are re-thrown to the window (node_modules/svelte/src/internal/client/dom/elements/events.js). This needs explicit handling at the handlers.Related