Warn when a driver's transponder collides with a different driver

Registering or editing a driver with a transponder already assigned
to a different driver (e.g. a wrong-class typo) previously saved
silently - the only symptom was that driver's laps never registering
during their heat, with no indication why. Now a confirm dialog names
the conflicting driver and their class before saving; the same
person's own multiple class entries sharing one physical transponder
are correctly never flagged.

Also confirms two things the user asked to verify: the race clock
already counts down for all timed session types (only open practice
counts up unbounded), and a driver not entered in a heat already has
their laps fully discarded rather than recorded - both were already
correct, no changes needed there.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
larssand
2026-09-10 20:20:40 +02:00
parent 50586e8859
commit ba2d78779f
9 changed files with 100 additions and 5 deletions

View File

@@ -44,3 +44,19 @@ export function getDriverProfileReferences(state, reference) {
profile.driverIds.forEach((driverId) => references.add(driverId));
return references;
}
// A transponder is one physical chip, so the same value legitimately repeats across a
// single person's own multi-class driver entries (same profile) - that is not a
// conflict. It only means something went wrong when it also shows up on a driver
// belonging to a DIFFERENT profile, since two different people can't share one chip:
// most often a typo at registration that quietly grabbed someone else's transponder.
export function findTransponderConflict(drivers, { transponder, profileId, excludeDriverId } = {}) {
const value = String(transponder || "").trim();
if (!value) return null;
const list = Array.isArray(drivers) ? drivers : [];
return list.find((driver) => (
String(driver.id || "") !== String(excludeDriverId || "")
&& String(driver.transponder || "").trim() === value
&& getDriverProfileId(driver) !== String(profileId || "")
)) || null;
}