@using PlaylistShared.Pwa.Components.Common @using PlaylistShared.Shared.Shared @using PlaylistShared.Shared.Enums @using System.Security.Claims @inject HttpClient Http @inject NavigationManager Navigation @inject AuthenticationStateProvider AuthProvider @inject ISnackbar Snackbar @inject IDialogService DialogService
@if (!string.IsNullOrEmpty(Playlist?.CoverUrl)) { }
@Playlist?.Title @if (_isCreator && _isAuthenticated) { }
Владелец: @Playlist?.Creator?.UserName
@code { [Parameter] public SharedPlaylistDto? Playlist { get; set; } [Parameter] public EventCallback OnPermissionsChanged { get; set; } private bool _isAuthenticated; private bool _isCreator; private string? _currentUserId; private bool _isFavorite; private bool _favoriteLoading; protected override async Task OnInitializedAsync() { var authState = await AuthProvider.GetAuthenticationStateAsync(); _isAuthenticated = authState.User.Identity?.IsAuthenticated == true; _currentUserId = authState.User.FindFirst(ClaimTypes.NameIdentifier)?.Value; _isCreator = Playlist?.CreatorUserId.ToString() == _currentUserId; if (_isAuthenticated) { await CheckFavoriteStatus(); } } private async Task CheckFavoriteStatus() { if (Playlist == null) return; try { var response = await Http.GetFromJsonAsync>($"/api/favorites/{Playlist.ShareToken}/check"); if (response?.Success == true) _isFavorite = response.Data; } catch { } } private async Task ToggleFavorite() { if (!_isAuthenticated || Playlist == null) return; _favoriteLoading = true; try { if (_isFavorite) { var response = await Http.DeleteAsync($"/api/favorites/{Playlist.ShareToken}"); if (response.IsSuccessStatusCode) { _isFavorite = false; Snackbar.Add("Плейлист удалён из избранного", Severity.Success); } else { Snackbar.Add("Ошибка удаления из избранного", Severity.Error); } } else { var response = await Http.PostAsync($"/api/favorites/{Playlist.ShareToken}", null); if (response.IsSuccessStatusCode) { _isFavorite = true; Snackbar.Add("Плейлист добавлен в избранное", Severity.Success); } else { Snackbar.Add("Ошибка добавления в избранное", Severity.Error); } } } catch (Exception ex) { Snackbar.Add($"Ошибка: {ex.Message}", Severity.Error); } finally { _favoriteLoading = false; StateHasChanged(); } } private async Task OpenPermissionsDialog() { if (Playlist == null) return; var initialPermissions = new UpdatePermissionsDto { ViewPermission = Playlist.ViewPermission, PlayPermission = Playlist.PlayPermission, AddPermission = Playlist.AddPermission, RemovePermission = Playlist.RemovePermission }; var parameters = new DialogParameters { { nameof(PermissionsDialog.ShareToken), Playlist.ShareToken }, { nameof(PermissionsDialog.InitialPermissions), initialPermissions } }; var dialog = await DialogService.ShowAsync("Настройки доступа", parameters); var result = await dialog.Result; if (!result.Canceled) { await OnPermissionsChanged.InvokeAsync(); } } }