diff --git a/DeepDrftManager/Components/Pages/Tracks/BatchEdit.razor b/DeepDrftManager/Components/Pages/Tracks/BatchEdit.razor index 46be53f..e9bbdf2 100644 --- a/DeepDrftManager/Components/Pages/Tracks/BatchEdit.razor +++ b/DeepDrftManager/Components/Pages/Tracks/BatchEdit.razor @@ -53,15 +53,15 @@ } + @* Session/Mix are single-track releases (§9.3): suppress the add-track affordance and keep the + list collapsed to one row — OnMediumChanged trims rows 2..n when the medium switches to a + single-track medium, mirroring BatchUpload's same-named collapse. Cut keeps the full list. *@ - @* The medium write path persists _medium on save (9.5.B). BatchEdit still shows the full - multi-track list for every medium; collapsing to a single-track slot for Session/Mix - (matching BatchUpload's @if (_medium == ReleaseMedium.Cut) guard) is deferred form-shape - work, not part of the write-path wiring. *@ _medium = medium; + // + // Switching to a single-track medium (Session/Mix) collapses any multi-track list to the first row + // so the single-track invariant (§9.3) holds before save — the same collapse BatchUpload.OnMediumChanged + // performs. Dropping rows 2..n is an in-memory trim only; existing tracks are not deleted server-side + // (RemoveRow owns deletion), so the hidden rows simply fall out of this edit session. + private void OnMediumChanged(ReleaseMedium medium) + { + _medium = medium; + if (medium != ReleaseMedium.Cut && _tracks.Count > 1) + { + _tracks.RemoveRange(1, _tracks.Count - 1); + _selectedIndex = _tracks.Count > 0 ? 0 : -1; + } + } protected override async Task OnInitializedAsync() { @@ -181,6 +194,11 @@ Status = BatchRowStatus.Queued }).ToList(); + if (_medium != ReleaseMedium.Cut && _tracks.Count > 1) + { + _tracks.RemoveRange(1, _tracks.Count - 1); + } + _selectedIndex = _tracks.Count > 0 ? 0 : -1; _loading = false; }