setDryRun(e.target.checked)} />
+ }
+ label={t("adminLabs.bulk.dryRun")}
+ />
+ >
+ )}
+
+ {job && (
+ <>
+
+ {running && t("adminLabs.bulk.inProgress", { processed: job.processed, total: job.total })}
+ {job.status === "done" && t("adminLabs.bulk.done")}
+ {job.status === "cancelled" && t("adminLabs.bulk.cancelled")}
+ {job.status === "failed" &&
+ `${t("adminLabs.bulk.failed")}${job.error ? `: ${job.error}` : ""}`}
+
+
+ {job.dry_run && }
+
+ {running && (
+
+ )}
+
+ {job.counts && Object.keys(job.counts).length > 0 && (
+
+ {Object.entries(job.counts).map(([status, count]) => (
+
+ ))}
+
+ )}
+
+ {results.length > 0 && (
+
+
+
+
+ {t("adminLabs.bulk.columns.student")}
+ {t("adminLabs.bulk.columns.github")}
+ {t("adminLabs.bulk.columns.status")}
+ {t("adminLabs.bulk.columns.grade")}
+ {t("adminLabs.bulk.columns.message")}
+
+
+
+ {results.map((r, index) => (
+
+ {r.student_name || "—"}
+
+ {r.github || "—"}
+ {r.registered && ` (${t("adminLabs.bulk.registered")})`}
+
+
+
+
+ {r.grade || "—"}
+ {r.message}
+
+ ))}
+
+
+
+ )}
+ >
+ )}
+