163 lines
7.0 KiB
Plaintext
163 lines
7.0 KiB
Plaintext
@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;
|
||
}
|
||
}
|
||
} |