Настройка доступов вынесена в диалог

This commit is contained in:
FrigaT
2026-04-14 16:48:56 +03:00
parent b46e3a0715
commit 3a42a17ce7
2 changed files with 139 additions and 79 deletions

View File

@@ -40,7 +40,16 @@
Color="Color.Warning"
OnClick="ToggleFavorite"
Disabled="_favoriteLoading"
Size="Size.Medium" />
Size="Size.Medium" />
@if (_isCreator && _isAuthenticated)
{
<MudIconButton Icon="@Icons.Material.Filled.Settings"
Color="Color.Default"
OnClick="OpenPermissionsDialog"
Title="Настройки доступа"
Size="Size.Medium" />
}
</div>
<MudText Typo="Typo.body2" Color="Color.Secondary">Владелец: @_playlist.Creator?.UserName</MudText>
</div>
@@ -49,53 +58,6 @@
</MudCardHeader>
<MudCardContent>
<!-- Настройки доступа (только для создателя, который авторизован) -->
@if (_isCreator && _isAuthenticated)
{
<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="ViewPermission" Label="Воспроизведение" @bind-Value="_editPermissions.PlayPermission" 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>
}
<!-- Блок добавления трека (только для авторизованных с правом добавления) -->
@if (_canAdd)
{
@@ -470,39 +432,22 @@
}
}
private async Task SavePermissions()
private async Task OpenPermissionsDialog()
{
if (!_isAuthenticated) return;
_savingPermissions = true;
try
var parameters = new DialogParameters
{
{ nameof(PermissionsDialog.ShareToken), Token },
{ nameof(PermissionsDialog.InitialPermissions), _editPermissions }
};
var dialog = await DialogService.ShowAsync<PermissionsDialog>("Настройки доступа", parameters);
var result = await dialog.Result;
if (!result.Canceled && result.Data is UpdatePermissionsDto updatedPermissions)
{
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;
await ConfigurePermissions();
}
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;
// Обновляем локальные права и перезагружаем плейлист
_editPermissions = updatedPermissions;
await LoadPlaylist(); // перезагружаем, чтобы обновить _playlist и права доступа
await LoadTracks(); // возможно, треки тоже нужно перезагрузить
StateHasChanged();
}
}
@@ -558,4 +503,6 @@
_isPlaying = false;
StateHasChanged();
}
}