Files
PlaylistShared/PlaylistShared.Pwa/Pages/SharedPlaylistView.razor
2026-04-13 14:16:44 +03:00

163 lines
7.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@page "/shared/{token}"
@attribute [Authorize]
@using PlaylistShared.Shared.DTO
@using PlaylistShared.Shared.Enums
@using PlaylistShared.Pwa.Services
@using PlaylistShared.Shared.Models
@inject HttpClient Http
@inject ISnackbar Snackbar
@inject NavigationManager Navigation
@inject AuthenticationStateProvider AuthProvider
<MudContainer MaxWidth="MaxWidth.Large" Class="mt-8">
@if (_loading)
{
<MudProgressCircular Indeterminate />
}
else if (_playlist == null)
{
<MudAlert Severity="Severity.Error">Плейлист не найден или у вас нет доступа</MudAlert>
}
else
{
<MudCard>
<MudCardHeader>
<CardHeaderContent>
<MudText Typo="Typo.h5">@_playlist.Title</MudText>
<MudText Typo="Typo.body2" Color="Color.Secondary">Владелец: @_playlist.Creator?.UserName</MudText>
</CardHeaderContent>
</MudCardHeader>
<MudCardContent>
@if (_isCreator)
{
<MudPaper Class="pa-4 mb-4" Elevation="0" Style="background-color: rgba(0,0,0,0.05); border-radius: 8px;">
<MudText Typo="Typo.h6" GutterBottom>Настройки доступа</MudText>
<MudGrid>
<MudItem xs="12" sm="4">
<MudSelect T="ViewPermission" Label="Просмотр" @bind-Value="_editPermissions.ViewPermission" Variant="Variant.Outlined" FullWidth="true">
<MudSelectItem Value="ViewPermission.Everyone">Все</MudSelectItem>
<MudSelectItem Value="ViewPermission.AuthorizedOnly">Только авторизованные</MudSelectItem>
</MudSelect>
</MudItem>
<MudItem xs="12" sm="4">
<MudSelect T="EditPermission" Label="Добавление треков" @bind-Value="_editPermissions.AddPermission" Variant="Variant.Outlined" FullWidth="true">
<MudSelectItem Value="EditPermission.Everyone">Все</MudSelectItem>
<MudSelectItem Value="EditPermission.AuthorizedOnly">Только авторизованные</MudSelectItem>
<MudSelectItem Value="EditPermission.AddedByUserOnly">Только добавивший</MudSelectItem>
</MudSelect>
</MudItem>
<MudItem xs="12" sm="4">
<MudSelect T="EditPermission" Label="Удаление треков" @bind-Value="_editPermissions.RemovePermission" Variant="Variant.Outlined" FullWidth="true">
<MudSelectItem Value="EditPermission.Everyone">Все</MudSelectItem>
<MudSelectItem Value="EditPermission.AuthorizedOnly">Только авторизованные</MudSelectItem>
<MudSelectItem Value="EditPermission.AddedByUserOnly">Только добавивший</MudSelectItem>
</MudSelect>
</MudItem>
</MudGrid>
<MudButton Variant="Variant.Filled" Color="Color.Primary" OnClick="SavePermissions" Disabled="_savingPermissions">
@if (_savingPermissions)
{
<MudProgressCircular Size="Size.Small" Indeterminate />
}
else
{
<span>Сохранить</span>
}
</MudButton>
</MudPaper>
}
<!-- Здесь будет отображение треков и управление -->
<MudText>Функционал управления треками в разработке</MudText>
</MudCardContent>
</MudCard>
}
</MudContainer>
@code {
[Parameter] public string Token { get; set; }
private SharedPlaylistDto? _playlist;
private bool _loading = true;
private bool _isCreator;
private UpdatePermissionsDto _editPermissions = new();
private bool _savingPermissions;
private string? _currentUserId;
protected override async Task OnInitializedAsync()
{
var authState = await AuthProvider.GetAuthenticationStateAsync();
_currentUserId = authState.User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;
await LoadPlaylist();
}
private async Task LoadPlaylist()
{
try
{
var response = await Http.GetFromJsonAsync<ApiResponse<SharedPlaylistDto>>($"/api/sharedplaylist/{Token}");
if (response?.Success == true)
{
_playlist = response.Data;
_isCreator = _playlist.CreatorUserId.ToString() == _currentUserId;
if (_isCreator)
{
_editPermissions = new UpdatePermissionsDto
{
ViewPermission = _playlist.ViewPermission,
AddPermission = _playlist.AddPermission,
RemovePermission = _playlist.RemovePermission
};
}
}
else
{
Snackbar.Add(response?.Error?.Message ?? "Не удалось загрузить плейлист", Severity.Error);
}
}
catch (Exception ex)
{
Snackbar.Add($"Ошибка: {ex.Message}", Severity.Error);
}
finally
{
_loading = false;
StateHasChanged();
}
}
private async Task SavePermissions()
{
_savingPermissions = true;
try
{
var response = await Http.PutAsJsonAsync($"/api/sharedplaylist/{Token}/permissions", _editPermissions);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadFromJsonAsync<ApiResponse<SharedPlaylistDto>>();
if (result?.Success == true)
{
_playlist = result.Data;
Snackbar.Add("Права доступа обновлены", Severity.Success);
}
else
{
Snackbar.Add(result?.Error?.Message ?? "Ошибка обновления", Severity.Error);
}
}
else
{
Snackbar.Add("Ошибка сохранения прав", Severity.Error);
}
}
catch (Exception ex)
{
Snackbar.Add($"Ошибка: {ex.Message}", Severity.Error);
}
finally
{
_savingPermissions = false;
}
}
}