@page "/favorites" @using PlaylistShared.Shared.Shared @attribute [Authorize] @inject HttpClient Http @inject ISnackbar Snackbar @inject NavigationManager Navigation Избранные плейлисты Расшаренные плейлисты, которые вы добавили в избранное @if (_loading) { } else if (_favorites == null || !_favorites.Any()) { У вас пока нет избранных плейлистов. Перейдите на страницу расшаренного плейлиста и нажмите ★, чтобы добавить. } else { Название Владелец @context.Title @context.Creator?.UserName } @code { private List _favorites = new(); private bool _loading = true; protected override async Task OnInitializedAsync() { await LoadFavorites(); } private async Task LoadFavorites() { _loading = true; try { var response = await Http.GetFromJsonAsync>>("/api/favorites"); if (response?.Success == true) _favorites = response.Data ?? new(); else Snackbar.Add(response?.Error?.Message ?? "Ошибка загрузки избранного", Severity.Error); } catch (Exception ex) { Snackbar.Add($"Ошибка: {ex.Message}", Severity.Error); } finally { _loading = false; StateHasChanged(); } } private async Task RemoveFromFavorites(SharedPlaylistDto playlist) { try { var response = await Http.DeleteAsync($"/api/favorites/{playlist.ShareToken}"); if (response.IsSuccessStatusCode) { Snackbar.Add($"Плейлист \"{playlist.Title}\" удалён из избранного", Severity.Success); await LoadFavorites(); } else { var error = await response.Content.ReadFromJsonAsync>(); Snackbar.Add(error?.Error?.Message ?? "Ошибка удаления", Severity.Error); } } catch (Exception ex) { Snackbar.Add($"Ошибка: {ex.Message}", Severity.Error); } } }