@page "/my-playlists" @attribute [Authorize] @using PlaylistShared.Shared.DTO @inject HttpClient Http @inject ISnackbar Snackbar @inject NavigationManager Navigation Мои плейлисты @if (_loading) { } else if (_playlists == null || !_playlists.Any()) { Плейлисты не найдены. Убедитесь, что вы сохранили корректный токен Яндекс.Музыки. } else { Название Треков Статус @context.Title @context.TrackCount @if (context.IsShared) { Расшарен } else { Не расшарен } @if (!context.IsShared) { Поделиться } else { Управлять } } @code { private List _playlists; private bool _loading = true; private bool _showOnlyShared = false; private List FilteredPlaylists => _showOnlyShared ? _playlists?.Where(p => p.IsShared).ToList() : _playlists; protected override async Task OnInitializedAsync() { await LoadPlaylists(); } private async Task LoadPlaylists() { _loading = true; try { var response = await Http.GetFromJsonAsync>>("/api/playlists"); if (response?.Success == true) _playlists = response.Data; else Snackbar.Add("Ошибка загрузки плейлистов", Severity.Error); } catch (Exception ex) { Snackbar.Add($"Ошибка: {ex.Message}", Severity.Error); } finally { _loading = false; StateHasChanged(); } } private async Task SharePlaylist(YandexPlaylistInfo playlist) { var request = new SharePlaylistRequest { Kind = playlist.Kind, OwnerUid = playlist.OwnerUid }; var response = await Http.PostAsJsonAsync("/api/playlists/share", request); if (response.IsSuccessStatusCode) { Snackbar.Add("Плейлист расшарен", Severity.Success); await LoadPlaylists(); } else { Snackbar.Add("Ошибка расшаривания", Severity.Error); } } private void GoToShared(YandexPlaylistInfo playlist) { if (!string.IsNullOrEmpty(playlist.ShareToken)) Navigation.NavigateTo($"/shared/{playlist.ShareToken}"); else Snackbar.Add("Ошибка: токен расшаривания не найден", Severity.Error); } }