@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();
}
}
}