using Microsoft.AspNetCore.Components; using SpotifyAPI.Web; using SpotiParty.Web.Services; namespace SpotiParty.Web.Components.Pages; public partial class EnqueuePage(AuthorizationHandler authHandler, NavigationManager navigator) : ComponentBase { [Parameter] public string UserId { get; set; } = string.Empty; private readonly int _currentYear = DateTime.Now.Year; private SpotifyClient _client = null!; private string _searchText = string.Empty; private List _tracks = new(); private bool _isLoading; private FullTrack? _selectedTrack; private bool _isAdding; private bool _success; protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); if (!Guid.TryParse(UserId, out var guid)) { navigator.NavigateTo("/", forceLoad: true); return; } var client = await authHandler.ConfigureClient(guid); if (client is null) { navigator.NavigateTo("/", forceLoad: true); return; } _client = client; } private async Task ExecuteSearch() { if (_isLoading) return; if (string.IsNullOrWhiteSpace(_searchText)) return; _isLoading = true; _tracks.Clear(); StateHasChanged(); var request = new SearchRequest(SearchRequest.Types.Track, _searchText); var response = await _client.Search.Item(request); var responseTracks = response.Tracks.Items ?? []; foreach (var track in responseTracks) { _tracks.Add(track); } _isLoading = false; } private void OnTrackClick(FullTrack track) { if (_selectedTrack is not null) return; _selectedTrack = track; } private void DialogDismiss() { if (_isAdding) return; _selectedTrack = null; } private async Task DialogAccept() { if (_selectedTrack is null || _isAdding) return; _isAdding = true; var request = new PlayerAddToQueueRequest(_selectedTrack.Uri); await _client.Player.AddToQueue(request); _isAdding = false; _success = true; StateHasChanged(); await Task.Delay(2000); _success = false; _selectedTrack = null; } }