Show a loading spinner on the Export/Preview buttons while exporting
The export dialog's Export and Preview buttons now disable and show a spinner with status text while the corresponding async operation is in flight, so the user knows the (sometimes slow) export is running and the app isn't stuck. Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
@@ -34,6 +34,27 @@ function clearNode(node) {
|
||||
while (node.firstChild) node.removeChild(node.firstChild);
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle a button into/out of a busy state: disables it and swaps its label
|
||||
* for a spinner + `label` (e.g. "Exporting…"), restoring the original label
|
||||
* afterwards. Used for actions that block on a slow main-process call.
|
||||
*/
|
||||
function setButtonLoading(btn, loading, label) {
|
||||
if (loading) {
|
||||
if (btn.dataset.origLabel === undefined) btn.dataset.origLabel = btn.textContent;
|
||||
btn.disabled = true;
|
||||
btn.classList.add('loading');
|
||||
clearNode(btn);
|
||||
btn.append(el('span.spinner'), label || btn.dataset.origLabel);
|
||||
} else {
|
||||
btn.disabled = false;
|
||||
btn.classList.remove('loading');
|
||||
clearNode(btn);
|
||||
btn.append(btn.dataset.origLabel ?? '');
|
||||
delete btn.dataset.origLabel;
|
||||
}
|
||||
}
|
||||
|
||||
function debounce(fn, ms) {
|
||||
let t = null;
|
||||
const wrapped = (...args) => {
|
||||
|
||||
Reference in New Issue
Block a user