feat(admin): cancel buttons for in-flight scans + cancelled state UI

- per-row Cancel button in the scan-progress card; listeners are bound
  after the TS island renders its rows (module scope has no inline
  handlers), and the button is removed once its job turns terminal
- cancel-all icon button in the card header: resolves the server's
  active job list first, so it also covers scans this page never
  started (e.g. started before a refresh), then cancels each one
- polling treats cancelled as terminal, averages overall progress
  only over jobs that can still advance (so the bar can reach 100%),
  and the results panel reports cancelled scans instead of claiming
  "Scan Complete!"
- sidebar spinner resets on the scan_cancelled websocket event (same
  quiet handling as scan_error)
- setup wizard shows "Cancelled" as a terminal status in its poller

No new innerHTML assignment sites - rendering-ownership baseline
unchanged.
This commit is contained in:
John O'Keefe committed 2026-10-18 18:02:34 -04:00
1 parent 5b81e19f2f
commit e1153b2c4b
5 files changed
+156 -13

No files matched your search

+6 -1
View File
@@ -432,10 +432,15 @@ function initSetup(): void {
running: `Scanning... ${Math.round((status.progress || 0) * 100)}%`,
completed: `✓ Complete (${status.new_items || 0} items)`,
failed: "✗ Failed",
cancelled: "✗ Cancelled",
};
job.statusText = statusMessages[status.status] || status.status;
if (status.status !== "completed" && status.status !== "failed") {
if (
status.status !== "completed" &&
status.status !== "failed" &&
status.status !== "cancelled"
) {
allComplete = false;
}
} else {