@using Microsoft.AspNetCore.Components.Forms Tracks @if (AllowNewTracks) { } @if (Tracks.Count == 0) { No tracks added yet. } else { @for (var i = 0; i < Tracks.Count; i++) { var index = i; var row = Tracks[index]; SelectRow(index)"> @(index + 1). @row.TrackName @StatusChip(row) @if (row.Status == BatchRowStatus.Uploading) { } } } @code { [Parameter] public List Tracks { get; set; } = new(); [Parameter] public int SelectedIndex { get; set; } [Parameter] public EventCallback SelectedIndexChanged { get; set; } [Parameter] public bool Disabled { get; set; } [Parameter] public bool AllowNewTracks { get; set; } = true; [Parameter] public EventCallback> OnWavFilesSelected { get; set; } [Parameter] public EventCallback OnMoveUp { get; set; } [Parameter] public EventCallback OnMoveDown { get; set; } [Parameter] public EventCallback OnRemove { get; set; } private const int MaxFilesPerPick = 50; private Task SelectRow(int index) => SelectedIndexChanged.InvokeAsync(index); private Task HandleWavFilesSelected(InputFileChangeEventArgs e) => OnWavFilesSelected.InvokeAsync(e.GetMultipleFiles(MaxFilesPerPick)); private string RowStyle(int index) { const string baseStyle = "cursor: pointer; border-radius: 4px;"; return index == SelectedIndex ? $"{baseStyle} background-color: var(--mud-palette-action-default-hover);" : baseStyle; } private RenderFragment StatusChip(BatchRowModel row) => row.Status switch { BatchRowStatus.Uploading => @ Uploading, BatchRowStatus.Done => @Done, BatchRowStatus.Failed => @Failed, _ => @Queued }; }