diff --git a/src/app.js b/src/app.js
index 5ead34d..04a25e9 100644
--- a/src/app.js
+++ b/src/app.js
@@ -976,6 +976,7 @@ let appVersionPollTimer = null;
let baselineAppVersion = "";
let selectedLeaderboardKey = null;
let selectedGridSessionId = null;
+let selectedDriverEditId = null;
let quickAddDraft = null;
let overlaySyncTimer = null;
let overlayRotationTimer = null;
@@ -2044,6 +2045,7 @@ function renderDrivers() {
const classOptions = state.classes
.map((c) => ``)
.join("");
+ const editingDriver = state.drivers.find((driver) => driver.id === selectedDriverEditId) || null;
dom.view.innerHTML = `
@@ -2077,6 +2079,37 @@ function renderDrivers() {
)}
+
+ ${
+ editingDriver
+ ? `
+
+ `
+ : ""
+ }
`;
document.getElementById("driverForm")?.addEventListener("submit", (e) => {
@@ -2094,34 +2127,7 @@ function renderDrivers() {
state.drivers.forEach((d) => {
document.getElementById(`driver-edit-${d.id}`)?.addEventListener("click", () => {
- const nextName = prompt(t("edit.driver_name"), d.name);
- if (nextName === null) {
- return;
- }
- const classPrompt = state.classes.map((item) => `${item.id}: ${item.name}`).join("\n");
- const nextClassId = prompt(
- `${t("edit.driver_class")}\n${classPrompt}`,
- d.classId || state.classes[0]?.id || ""
- );
- if (nextClassId === null) {
- return;
- }
- const nextTp = prompt(t("edit.driver_transponder"), d.transponder || "");
- if (nextTp === null) {
- return;
- }
- const cleanedName = nextName.trim();
- const cleanedClassId = nextClassId.trim();
- if (!cleanedName) {
- return;
- }
- if (cleanedClassId && !state.classes.some((item) => item.id === cleanedClassId)) {
- return;
- }
- d.name = cleanedName;
- d.classId = cleanedClassId || d.classId;
- d.transponder = nextTp.trim();
- saveState();
+ selectedDriverEditId = d.id;
renderView();
});
@@ -2134,6 +2140,46 @@ function renderDrivers() {
renderView();
});
});
+
+ document.getElementById("driverEditCancel")?.addEventListener("click", () => {
+ selectedDriverEditId = null;
+ renderView();
+ });
+
+ document.getElementById("driverEditCancelFooter")?.addEventListener("click", () => {
+ selectedDriverEditId = null;
+ renderView();
+ });
+
+ document.getElementById("driverEditModalOverlay")?.addEventListener("click", (event) => {
+ if (event.target?.id === "driverEditModalOverlay") {
+ selectedDriverEditId = null;
+ renderView();
+ }
+ });
+
+ document.getElementById("driverEditForm")?.addEventListener("submit", (event) => {
+ event.preventDefault();
+ if (!editingDriver) {
+ return;
+ }
+ const form = new FormData(event.currentTarget);
+ const cleanedName = String(form.get("name") || "").trim();
+ const cleanedClassId = String(form.get("classId") || "").trim();
+ const cleanedTp = String(form.get("transponder") || "").trim();
+ if (!cleanedName) {
+ return;
+ }
+ if (cleanedClassId && !state.classes.some((item) => item.id === cleanedClassId)) {
+ return;
+ }
+ editingDriver.name = cleanedName;
+ editingDriver.classId = cleanedClassId || editingDriver.classId;
+ editingDriver.transponder = cleanedTp;
+ selectedDriverEditId = null;
+ saveState();
+ renderView();
+ });
}
function renderCars() {