Files
PlaylistShared/PlaylistShared.Pwa/Components/SharedPlaylist/PermissionsDialog.razor

113 lines
5.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.
@using PlaylistShared.Shared.Enums
@using PlaylistShared.Shared.SharedPlaylist
@inject HttpClient Http
@inject ISnackbar Snackbar
<MudDialog>
<TitleContent>
<MudText Typo="Typo.h6">Настройки доступа</MudText>
</TitleContent>
<DialogContent>
<MudGrid>
<MudItem xs="12" sm="6">
<MudSelect T="ViewPermission" Label="Просмотр" @bind-Value="_permissions.ViewPermission" Variant="Variant.Outlined" FullWidth="true">
<MudSelectItem Value="ViewPermission.Everyone">Все</MudSelectItem>
<MudSelectItem Value="ViewPermission.AuthorizedOnly">Только авторизованные</MudSelectItem>
</MudSelect>
</MudItem>
<MudItem xs="12" sm="6">
<MudSelect T="ViewPermission" Label="Воспроизведение" @bind-Value="_permissions.PlayPermission" Variant="Variant.Outlined" FullWidth="true">
<MudSelectItem Value="ViewPermission.Everyone">Все</MudSelectItem>
<MudSelectItem Value="ViewPermission.AuthorizedOnly">Только авторизованные</MudSelectItem>
</MudSelect>
</MudItem>
<MudItem xs="12" sm="6">
<MudSelect T="EditPermission" Label="Добавление треков" @bind-Value="_permissions.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="6">
<MudSelect T="EditPermission" Label="Удаление треков" @bind-Value="_permissions.RemovePermission" Variant="Variant.Outlined" FullWidth="true">
<MudSelectItem Value="EditPermission.Everyone">Все</MudSelectItem>
<MudSelectItem Value="EditPermission.AuthorizedOnly">Только авторизованные</MudSelectItem>
<MudSelectItem Value="EditPermission.AddedByUserOnly">Только добавивший</MudSelectItem>
</MudSelect>
</MudItem>
</MudGrid>
</DialogContent>
<DialogActions>
<MudButton Variant="Variant.Text" Color="Color.Default" OnClick="Cancel">Отмена</MudButton>
<MudButton Variant="Variant.Filled" Color="Color.Primary" OnClick="Save" Disabled="_saving">
@if (_saving)
{
<MudProgressCircular Size="Size.Small" Indeterminate />
}
else
{
<span>Сохранить</span>
}
</MudButton>
</DialogActions>
</MudDialog>
@code {
[CascadingParameter] private IMudDialogInstance? MudDialog { get; set; }
[Parameter] public string ShareToken { get; set; } = string.Empty;
[Parameter] public UpdatePermissionsDto InitialPermissions { get; set; } = new();
[Parameter] public EventCallback<UpdatePermissionsDto> OnPermissionsUpdated { get; set; }
private UpdatePermissionsDto _permissions = new();
private bool _saving;
protected override void OnInitialized()
{
_permissions = new UpdatePermissionsDto
{
ViewPermission = InitialPermissions.ViewPermission,
PlayPermission = InitialPermissions.PlayPermission,
AddPermission = InitialPermissions.AddPermission,
RemovePermission = InitialPermissions.RemovePermission
};
}
private async Task Save()
{
_saving = true;
try
{
var response = await Http.PutAsJsonAsync($"/api/sharedplaylist/{ShareToken}/permissions", _permissions);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadFromJsonAsync<ApiResponse<SharedPlaylistDto>>();
if (result?.Success == true)
{
Snackbar.Add("Настройки доступа сохранены", Severity.Success);
await OnPermissionsUpdated.InvokeAsync(_permissions);
MudDialog?.Close(DialogResult.Ok(_permissions));
}
else
{
Snackbar.Add(result?.Error?.Message ?? "Ошибка сохранения", Severity.Error);
}
}
else
{
Snackbar.Add("Ошибка сохранения прав", Severity.Error);
}
}
catch (Exception ex)
{
Snackbar.Add($"Ошибка: {ex.Message}", Severity.Error);
}
finally
{
_saving = false;
}
}
private void Cancel() => MudDialog?.Cancel();
}