@using Microsoft.AspNetCore.Components.Web @inject IAudioPlayerService AudioPlayerService @if (CanPlay && (_isHovered || IsCurrentTrackPlaying)) { } @code { [Parameter] public string CoverUrl { get; set; } = string.Empty; [Parameter] public string TrackTitle { get; set; } = string.Empty; [Parameter] public string TrackId { get; set; } = string.Empty; [Parameter] public int Height { get; set; } = 50; [Parameter] public int Width { get; set; } = 50; [Parameter] public string PlaylistShareToken { get; set; } = string.Empty; [Parameter] public bool CanPlay { get; set; } = false; private bool IsCurrentTrackPlaying => AudioPlayerService.IsPlaying && AudioPlayerService.CurrentTrackId == TrackId; private bool _isHovered; private void HandleMouseEnter() => _isHovered = true; private void HandleMouseLeave() => _isHovered = false; protected override void OnInitialized() { AudioPlayerService.OnStateChanged += OnPlayerStateChanged; } private async Task OnPlayClick() { var playlistShareToken = string.IsNullOrWhiteSpace(PlaylistShareToken) ? null : PlaylistShareToken; if (IsCurrentTrackPlaying) { await AudioPlayerService.PauseAsync(); } else { await AudioPlayerService.LoadAndPlayAsync( trackId: TrackId, playlistShareToken: playlistShareToken, title: TrackTitle, coverUrl: CoverUrl); } } private void OnPlayerStateChanged() { InvokeAsync(StateHasChanged); } }