Add simplified Open Practice flow and reorganize

This commit is contained in:
larssand
2026-08-24 19:25:21 +02:00
parent 5a6e51c51b
commit 2e6866a013
13 changed files with 481 additions and 55 deletions

View File

@@ -23,8 +23,38 @@ export function renderEventWorkspaceMarkup(mode, deps) {
.join("");
return `
${
isRaceMode
? `
<section class="panel open-practice-quickstart">
<div class="panel-header panel-header-with-pill">
<div>
<h3>${t("events.quick_open_practice_title")}</h3>
<p class="hint">${t("events.quick_open_practice_intro")}</p>
</div>
<span class="pill pill-green">${t("events.open_practice_untimed")}</span>
</div>
<div class="panel-body open-practice-quickstart-body">
<div class="open-practice-benefits">
<span>${t("events.open_practice_all_transponders")}</span>
<span>${t("events.open_practice_no_registration")}</span>
<span>${t("events.open_practice_until_stopped")}</span>
</div>
<form id="quickOpenPracticeForm" class="open-practice-quickstart-form">
<label>
${t("events.session_name")}
<input name="name" required value="${escapeHtml(t("events.quick_open_practice_default"))}" />
</label>
<button class="btn btn-primary" type="submit">${t("events.quick_open_practice_create")}</button>
</form>
</div>
</section>
`
: ""
}
<section class="panel">
<div class="panel-header"><h3>${t(isRaceMode ? "events.create_race" : "events.create")}</h3></div>
<div class="panel-header"><h3>${t(isRaceMode ? "events.create_competition_race" : "events.create")}</h3></div>
<div class="panel-body">
<p>${t(isRaceMode ? "events.race_only_intro" : "events.track_only_intro")}</p>
${isRaceMode ? `<p class="hint">${t("events.wizard_hint")}</p>` : ""}
@@ -82,12 +112,16 @@ export function renderEventWorkspaceMarkup(mode, deps) {
<tr>
<td>${escapeHtml(e.name)}</td>
<td>${escapeHtml(e.date)}</td>
<td>${escapeHtml(getClassName(e.classId))}</td>
<td>${getModeLabel(e.mode)}</td>
<td>${e.raceConfig?.practiceOnly ? escapeHtml(t("events.open_practice_all_transponders")) : escapeHtml(getClassName(e.classId))}</td>
<td>${e.raceConfig?.practiceOnly ? escapeHtml(t("events.quick_open_practice_title")) : getModeLabel(e.mode)}</td>
<td>${sessions.length}</td>
<td class="actions-inline">
<button id="event-edit-${e.id}" class="btn">${t("events.edit")}</button>
<button id="event-manage-${e.id}" class="btn">${t("events.manage")}</button>
${
e.raceConfig?.practiceOnly
? `<button id="event-timing-${e.id}" class="btn btn-primary">${t("events.open_timing")}</button>`
: `<button id="event-manage-${e.id}" class="btn">${t("events.manage")}</button>`
}
<button id="event-delete-${e.id}" class="btn btn-danger">${t("common.delete")}</button>
</td>
</tr>
@@ -119,15 +153,19 @@ export function renderEventWorkspaceMarkup(mode, deps) {
<input name="date" required type="date" value="${escapeHtml(editingEvent.date || "")}" />
<small>${t("events.field_date_hint")}</small>
</label>
<label>
${t("events.field_class")}
<select name="classId">
${state.classes
.map((item) => `<option value="${item.id}" ${item.id === editingEvent.classId ? "selected" : ""}>${escapeHtml(item.name)}</option>`)
.join("")}
</select>
<small>${t("events.field_class_hint")}</small>
</label>
${
editingEvent.raceConfig?.practiceOnly
? `<input type="hidden" name="classId" value="" />`
: `<label>
${t("events.field_class")}
<select name="classId">
${state.classes
.map((item) => `<option value="${item.id}" ${item.id === editingEvent.classId ? "selected" : ""}>${escapeHtml(item.name)}</option>`)
.join("")}
</select>
<small>${t("events.field_class_hint")}</small>
</label>`
}
<p class="form-error" id="eventEditError" hidden></p>
<div class="actions-inline">
<button class="btn btn-primary" type="submit">${t("common.save")}</button>