feat(cms): bring per-medium tab grids to ALL-tab parity (§8.C)

Render the rich CmsAlbumBrowser filtered per medium in the CUTS/SESSIONS/MIXES
tabs via an optional RowActions slot; retire the thin CmsMediumTable. Session
hero and Mix waveform actions preserved; ALL tab and TrackList unchanged.
This commit is contained in:
daniel-c-harvey
2026-06-13 22:33:31 -04:00
parent 4b9e6531fd
commit 3ef98aa3ff
8 changed files with 151 additions and 191 deletions
@@ -65,6 +65,10 @@ else
</MudTd>
<MudTd DataLabel="Tracks">@context.TrackCount</MudTd>
<MudTd DataLabel="Actions">
@* Medium-specific row action (Session hero, Mix waveform) when a host supplies one;
the ALL tab supplies none. Rendered before the shared edit/delete so the medium
affordance reads left-to-right ahead of the universal actions. *@
@RowActions?.Invoke(context.Release)
<MudTooltip Text="Batch Edit">
<MudIconButton Icon="@Icons.Material.Filled.Edit"
Size="Size.Small"
@@ -122,6 +126,13 @@ else
[Parameter] public bool IsLoading { get; set; }
[Parameter] public EventCallback OnReleasesChanged { get; set; }
// Optional per-row, medium-specific action slot (Session hero upload, Mix waveform generate),
// rendered in the Actions cell ahead of the shared edit/delete buttons. The ALL tab leaves it
// unset and renders the grid exactly as before. A per-medium host (CmsCut/Session/MixBrowser)
// supplies it so the rich grid filtered to one medium keeps that medium's bespoke affordance —
// the rich expand/delete/Type-chip/edit logic stays here, single-sourced, rather than forked.
[Parameter] public RenderFragment<ReleaseDto>? RowActions { get; set; }
private List<AlbumRow> _rows = new();
// Tracks the Releases reference last projected into _rows. Guards against OnParametersSet