gjort om race o lag

This commit is contained in:
larssand
2026-03-27 18:47:59 +01:00
parent a1695e86db
commit 4daee0cd21
3 changed files with 170 additions and 191 deletions

View File

@@ -109,7 +109,6 @@ export function renderEventManagerView(context) {
const teamDriverPool = event.mode === "race" ? getTeamDriverPool(event) : { drivers: [], fallback: false }; const teamDriverPool = event.mode === "race" ? getTeamDriverPool(event) : { drivers: [], fallback: false };
const raceDrivers = event.mode === "race" ? teamDriverPool.drivers : []; const raceDrivers = event.mode === "race" ? teamDriverPool.drivers : [];
const raceTeams = event.mode === "race" ? getEventTeams(event) : []; const raceTeams = event.mode === "race" ? getEventTeams(event) : [];
if (event.mode === "race") { window.__teamRenderCount = raceTeams.length; }
if (selectedTeamEditId && !raceTeams.some((team) => team.id === selectedTeamEditId)) { if (selectedTeamEditId && !raceTeams.some((team) => team.id === selectedTeamEditId)) {
setSelectedTeamEditId(null); setSelectedTeamEditId(null);
} }
@@ -124,6 +123,9 @@ export function renderEventManagerView(context) {
const racePresets = getRaceFormatPresets(); const racePresets = getRaceFormatPresets();
const selectedPreset = racePresets.find((preset) => preset.id === event.raceConfig.presetId) || racePresets[0]; const selectedPreset = racePresets.find((preset) => preset.id === event.raceConfig.presetId) || racePresets[0];
const isEndurancePreset = event.mode === "race" && selectedPreset?.id === "endurance"; const isEndurancePreset = event.mode === "race" && selectedPreset?.id === "endurance";
const showTeamsSection =
event.mode === "race" &&
(isEndurancePreset || sessions.some((session) => session.type === "team_race") || raceTeams.length > 0 || Boolean(selectedTeamEditId));
const showBasicQualifyingFields = raceFormatAdvanced || !isEndurancePreset; const showBasicQualifyingFields = raceFormatAdvanced || !isEndurancePreset;
const showBasicFinalFields = raceFormatAdvanced || !isEndurancePreset; const showBasicFinalFields = raceFormatAdvanced || !isEndurancePreset;
const selectedParticipantCount = event.mode === "race" ? (event.raceConfig.participantsConfigured ? (event.raceConfig.driverIds || []).length : raceDrivers.length) : 0; const selectedParticipantCount = event.mode === "race" ? (event.raceConfig.participantsConfigured ? (event.raceConfig.driverIds || []).length : raceDrivers.length) : 0;
@@ -161,6 +163,7 @@ export function renderEventManagerView(context) {
selectedParticipantCount, selectedParticipantCount,
raceDrivers, raceDrivers,
teamDriverPool, teamDriverPool,
showTeamsSection,
state, state,
getDriverDisplayById, getDriverDisplayById,
raceFormatAdvanced, raceFormatAdvanced,
@@ -490,19 +493,13 @@ export function renderEventManagerView(context) {
persistRaceParticipants(); persistRaceParticipants();
}); });
const getTeamCreateSelections = () => ({ if (showTeamsSection) {
driverIds: Array.from(document.querySelectorAll('[form="teamForm"][name="teamDriverIds"]:checked')).map((node) => String(node.value)).filter(Boolean), document.getElementById("teamForm")?.addEventListener("submit", (e) => {
carIds: Array.from(document.querySelectorAll('[form="teamForm"][name="teamCarIds"]:checked')).map((node) => String(node.value)).filter(Boolean), e.preventDefault();
}); const form = new FormData(e.currentTarget);
const commitTeamCreate = () => {
const formNode = document.getElementById("teamForm");
if (!(formNode instanceof HTMLFormElement)) {
return;
}
const form = new FormData(formNode);
const name = String(form.get("teamName") || "").trim(); const name = String(form.get("teamName") || "").trim();
const { driverIds, carIds } = getTeamCreateSelections(); const driverIds = form.getAll("teamDriverIds").map(String).filter(Boolean);
const carIds = form.getAll("teamCarIds").map(String).filter(Boolean);
if (!name) { if (!name) {
setFormError("teamCreateError", t("validation.required_name")); setFormError("teamCreateError", t("validation.required_name"));
return; return;
@@ -514,18 +511,9 @@ export function renderEventManagerView(context) {
setFormError("teamCreateError", ""); setFormError("teamCreateError", "");
const createdTeam = normalizeRaceTeam({ id: uid("team"), name, driverIds, carIds }); const createdTeam = normalizeRaceTeam({ id: uid("team"), name, driverIds, carIds });
event.raceConfig.teams = [...getEventTeams(event), createdTeam]; event.raceConfig.teams = [...getEventTeams(event), createdTeam];
setSelectedTeamEditId(null); setSelectedTeamEditId(createdTeam.id);
saveState(); saveState();
rerenderEventManager(eventId); rerenderEventManager(eventId);
};
document.getElementById("teamForm")?.addEventListener("submit", (e) => {
e.preventDefault();
commitTeamCreate();
});
document.getElementById("teamAddSave")?.addEventListener("click", () => {
commitTeamCreate();
}); });
raceTeams.forEach((team) => { raceTeams.forEach((team) => {
@@ -566,15 +554,12 @@ export function renderEventManagerView(context) {
rerenderEventManager(eventId); rerenderEventManager(eventId);
}); });
const commitTeamEdit = () => { document.getElementById("teamEditForm")?.addEventListener("submit", (submitEvent) => {
submitEvent.preventDefault();
if (!editingTeam) { if (!editingTeam) {
return; return;
} }
const formNode = document.getElementById("teamEditForm"); const form = new FormData(submitEvent.currentTarget);
if (!(formNode instanceof HTMLFormElement)) {
return;
}
const form = new FormData(formNode);
const name = String(form.get("teamName") || "").trim(); const name = String(form.get("teamName") || "").trim();
const driverIds = form.getAll("teamDriverIds").map(String).filter(Boolean); const driverIds = form.getAll("teamDriverIds").map(String).filter(Boolean);
const carIds = form.getAll("teamCarIds").map(String).filter(Boolean); const carIds = form.getAll("teamCarIds").map(String).filter(Boolean);
@@ -593,16 +578,8 @@ export function renderEventManagerView(context) {
setSelectedTeamEditId(null); setSelectedTeamEditId(null);
saveState(); saveState();
rerenderEventManager(eventId); rerenderEventManager(eventId);
};
document.getElementById("teamEditForm")?.addEventListener("submit", (submitEvent) => {
submitEvent.preventDefault();
commitTeamEdit();
});
document.getElementById("teamEditSave")?.addEventListener("click", () => {
commitTeamEdit();
}); });
}
document.getElementById("raceFormatBasicToggle")?.addEventListener("click", () => { document.getElementById("raceFormatBasicToggle")?.addEventListener("click", () => {
setRaceFormatAdvanced(false); setRaceFormatAdvanced(false);

View File

@@ -20,6 +20,7 @@ export function renderEventManagerMarkup(context) {
selectedParticipantCount, selectedParticipantCount,
raceDrivers, raceDrivers,
teamDriverPool, teamDriverPool,
showTeamsSection,
state, state,
getDriverDisplayById, getDriverDisplayById,
raceFormatAdvanced, raceFormatAdvanced,
@@ -282,6 +283,9 @@ export function renderEventManagerMarkup(context) {
</div> </div>
</section> </section>
${
showTeamsSection
? `
<section class="panel" id="manage-setup-teams"> <section class="panel" id="manage-setup-teams">
<div class="panel-header panel-header-with-pill"> <div class="panel-header panel-header-with-pill">
<h3>${t("events.teams")}</h3> <h3>${t("events.teams")}</h3>
@@ -292,11 +296,10 @@ export function renderEventManagerMarkup(context) {
<p class="hint">${t("events.team_steps")}</p> <p class="hint">${t("events.team_steps")}</p>
<form id="teamForm" class="form-grid cols-4 team-create-form"> <form id="teamForm" class="form-grid cols-4 team-create-form">
<input name="teamName" required placeholder="${t("events.team_name")}" /> <input name="teamName" required placeholder="${t("events.team_name")}" />
<button class="btn btn-primary" id="teamAddSave" type="button">${t("events.add_team")}</button> <button class="btn btn-primary" type="submit">${t("events.add_team")}</button>
<p class="form-error" id="teamCreateError" hidden></p> <p class="form-error" id="teamCreateError" hidden></p>
</form> </form>
<p class="hint">${t("events.team_hint")}</p> <p class="hint">${t("events.team_hint")}</p>
<p class="hint" id="teamRenderDebug">teams rendered: ${raceTeams.length}</p>
<div class="panel-row mt-16"> <div class="panel-row mt-16">
<section class="panel"> <section class="panel">
<div class="panel-header"><h3>${t("events.team_drivers")}</h3></div> <div class="panel-header"><h3>${t("events.team_drivers")}</h3></div>
@@ -367,6 +370,9 @@ export function renderEventManagerMarkup(context) {
</div> </div>
</div> </div>
</section> </section>
`
: ""
}
</div> </div>
<section class="panel mt-16" id="manage-format"> <section class="panel mt-16" id="manage-format">

View File

@@ -513,10 +513,7 @@ export function getTeamDriverPool(event, { getEventDrivers, state }) {
if (scopedDrivers.length) { if (scopedDrivers.length) {
return { drivers: scopedDrivers, fallback: false }; return { drivers: scopedDrivers, fallback: false };
} }
return { return { drivers: [], fallback: false };
drivers: [...state.drivers],
fallback: state.drivers.length > 0,
};
} }
@@ -782,4 +779,3 @@ export function applyBumpsForRace(event, { buildFinalStandings, getSessionsForEv
return applied; return applied;
} }