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
-19
@@ -413,28 +413,43 @@ function showExportDialog({
|
||||
outDir: outDirInput.value.trim() || null,
|
||||
});
|
||||
|
||||
const cancelBtn = el('button', { onClick: () => { close(); resolve(false); } }, 'Cancel');
|
||||
const previewBtn = el('button', {
|
||||
onClick: async () => {
|
||||
if (typeof onPreview !== 'function') return;
|
||||
setButtonLoading(previewBtn, true, 'Preview…');
|
||||
try {
|
||||
await onPreview(payload()); // keep dialog open so settings can be tweaked
|
||||
} finally {
|
||||
setButtonLoading(previewBtn, false);
|
||||
}
|
||||
},
|
||||
}, 'Preview');
|
||||
const exportBtn = el('button.primary', {
|
||||
onClick: async () => {
|
||||
if (typeof onExport !== 'function') return;
|
||||
cancelBtn.disabled = true;
|
||||
previewBtn.disabled = true;
|
||||
setButtonLoading(exportBtn, true, 'Exporting…');
|
||||
try {
|
||||
const ok = await onExport(payload());
|
||||
if (ok !== false) {
|
||||
close();
|
||||
resolve(true);
|
||||
return;
|
||||
}
|
||||
} finally {
|
||||
cancelBtn.disabled = false;
|
||||
previewBtn.disabled = false;
|
||||
setButtonLoading(exportBtn, false);
|
||||
}
|
||||
},
|
||||
}, 'Export');
|
||||
|
||||
const { close } = openModal({
|
||||
title: 'Export',
|
||||
body,
|
||||
footer: [
|
||||
el('button', { onClick: () => { close(); resolve(false); } }, 'Cancel'),
|
||||
el('button', {
|
||||
onClick: async () => {
|
||||
if (typeof onPreview !== 'function') return;
|
||||
await onPreview(payload()); // keep dialog open so settings can be tweaked
|
||||
},
|
||||
}, 'Preview'),
|
||||
el('button.primary', {
|
||||
onClick: async () => {
|
||||
if (typeof onExport !== 'function') return;
|
||||
const ok = await onExport(payload());
|
||||
if (ok !== false) {
|
||||
close();
|
||||
resolve(true);
|
||||
}
|
||||
},
|
||||
}, 'Export'),
|
||||
],
|
||||
footer: [cancelBtn, previewBtn, exportBtn],
|
||||
wide: true,
|
||||
onClose: () => resolve(false),
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user