@namespace DeepDrftPublic.Client.Controls
@using DeepDrftModels.DTOs
@using DeepDrftPublic.Client.Services
@* Append-only "Add to Queue" affordance placed beside a play control. Add is NOT play: it calls the
cascaded IQueueService's Enqueue/EnqueueRange (which append to the END without disturbing current
playback; a first add into a dormant queue seeds the head from the externally-playing track when one
exists, then appends) — never PlayRelease/PlayTrack/Start/Select. Track mode (Track set) appends a
single track; release mode (ReleaseTracks set) appends the whole ordered list. Reads queue state from
the layout-level cascade (C1); owns no data fetch. *@
@code {
[CascadingParameter] public IQueueService? Queue { get; set; }
/// Single track to append (track mode). Mutually exclusive with .
[Parameter] public TrackDto? Track { get; set; }
/// Ordered release tracks to append (release mode). Mutually exclusive with .
[Parameter] public IReadOnlyList? ReleaseTracks { get; set; }
[Parameter] public Size Size { get; set; } = Size.Medium;
[Parameter] public Color Color { get; set; } = Color.Secondary;
private string Tooltip => ReleaseTracks is not null ? "Add release to queue" : "Add to queue";
private void AddToQueue()
{
if (Queue is null) return;
if (ReleaseTracks is not null)
{
Queue.EnqueueRange(ReleaseTracks);
}
else if (Track is not null)
{
Queue.Enqueue(Track);
}
}
}