Restore missing driver, car and session normalizers
This commit is contained in:
64
src/app.js
64
src/app.js
@@ -1930,6 +1930,70 @@ function normalizeObsOverlaySettings(raw = {}) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function normalizeDriver(driver = {}) {
|
||||||
|
return {
|
||||||
|
id: String(driver?.id || uid("driver")),
|
||||||
|
name: String(driver?.name || "").trim(),
|
||||||
|
classId: String(driver?.classId || "").trim(),
|
||||||
|
transponder: String(driver?.transponder || "").trim(),
|
||||||
|
brand: String(driver?.brand || "").trim(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function normalizeCar(car = {}) {
|
||||||
|
return {
|
||||||
|
id: String(car?.id || uid("car")),
|
||||||
|
name: String(car?.name || "").trim(),
|
||||||
|
transponder: String(car?.transponder || "").trim(),
|
||||||
|
brand: String(car?.brand || "").trim(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function normalizeSession(session = {}) {
|
||||||
|
const type = SESSION_TYPES.includes(String(session?.type || "").toLowerCase())
|
||||||
|
? String(session.type).toLowerCase()
|
||||||
|
: "practice";
|
||||||
|
const status = ["ready", "running", "stopped", "finished"].includes(String(session?.status || "").toLowerCase())
|
||||||
|
? String(session.status).toLowerCase()
|
||||||
|
: "ready";
|
||||||
|
const seedMethod = ["best_sum", "average", "consecutive"].includes(String(session?.seedMethod || "").toLowerCase())
|
||||||
|
? String(session.seedMethod).toLowerCase()
|
||||||
|
: "best_sum";
|
||||||
|
const assignments = Array.isArray(session?.assignments)
|
||||||
|
? session.assignments
|
||||||
|
.map((assignment) => ({
|
||||||
|
id: String(assignment?.id || uid("as")),
|
||||||
|
driverId: String(assignment?.driverId || "").trim(),
|
||||||
|
carId: String(assignment?.carId || "").trim(),
|
||||||
|
}))
|
||||||
|
.filter((assignment) => assignment.driverId || assignment.carId)
|
||||||
|
: [];
|
||||||
|
return {
|
||||||
|
...session,
|
||||||
|
id: String(session?.id || uid("session")),
|
||||||
|
eventId: String(session?.eventId || "").trim(),
|
||||||
|
name: String(session?.name || "").trim(),
|
||||||
|
type,
|
||||||
|
durationMin: Math.max(1, Number(session?.durationMin || 1) || 1),
|
||||||
|
followUpSec: Math.max(0, Number(session?.followUpSec || 0) || 0),
|
||||||
|
startMode: normalizeStartMode(session?.startMode || "mass"),
|
||||||
|
seedBestLapCount: Math.max(0, Number(session?.seedBestLapCount || 0) || 0),
|
||||||
|
seedMethod,
|
||||||
|
staggerGapSec: Math.max(0, Number(session?.staggerGapSec || 0) || 0),
|
||||||
|
maxCars: session?.maxCars ? Math.max(1, Number(session.maxCars) || 1) : null,
|
||||||
|
mode: session?.mode === "track" ? "track" : "race",
|
||||||
|
status,
|
||||||
|
startedAt: Number.isFinite(Number(session?.startedAt)) ? Number(session.startedAt) : null,
|
||||||
|
endedAt: Number.isFinite(Number(session?.endedAt)) ? Number(session.endedAt) : null,
|
||||||
|
finishedByTimer: session?.finishedByTimer === true,
|
||||||
|
assignments,
|
||||||
|
driverIds: Array.isArray(session?.driverIds) ? session.driverIds.map(String).filter(Boolean) : [],
|
||||||
|
manualGridIds: Array.isArray(session?.manualGridIds) ? session.manualGridIds.map(String).filter(Boolean) : [],
|
||||||
|
gridCustomized: session?.gridCustomized === true,
|
||||||
|
generated: session?.generated === true,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function parseOverlayBooleanParam(name, fallback) {
|
function parseOverlayBooleanParam(name, fallback) {
|
||||||
const raw = urlParams.get(name);
|
const raw = urlParams.get(name);
|
||||||
if (raw == null) {
|
if (raw == null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user