From 3a42a17ce76f37a353fff1e37998c86f98fcbbeb Mon Sep 17 00:00:00 2001 From: FrigaT Date: Tue, 14 Apr 2026 16:48:56 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B2=D1=8B=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D0=B0=20=20=D0=B2?= =?UTF-8?q?=20=D0=B4=D0=B8=D0=B0=D0=BB=D0=BE=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/PermissionsDialog.razor | 113 ++++++++++++++++++ .../Pages/SharedPlaylistView.razor | 105 ++++------------ 2 files changed, 139 insertions(+), 79 deletions(-) create mode 100644 PlaylistShared.Pwa/Components/PermissionsDialog.razor diff --git a/PlaylistShared.Pwa/Components/PermissionsDialog.razor b/PlaylistShared.Pwa/Components/PermissionsDialog.razor new file mode 100644 index 0000000..8e33cd1 --- /dev/null +++ b/PlaylistShared.Pwa/Components/PermissionsDialog.razor @@ -0,0 +1,113 @@ +@using PlaylistShared.Shared.Enums +@using PlaylistShared.Shared.Shared +@inject HttpClient Http +@inject ISnackbar Snackbar + + + + Настройки доступа + + + + + + Все + Только авторизованные + + + + + Все + Только авторизованные + + + + + Все + Только авторизованные + Только добавивший + + + + + Все + Только авторизованные + Только добавивший + + + + + + Отмена + + @if (_saving) + { + + } + else + { + Сохранить + } + + + + +@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 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>(); + 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(); +} \ No newline at end of file diff --git a/PlaylistShared.Pwa/Pages/SharedPlaylistView.razor b/PlaylistShared.Pwa/Pages/SharedPlaylistView.razor index f91f25e..5e4d04a 100644 --- a/PlaylistShared.Pwa/Pages/SharedPlaylistView.razor +++ b/PlaylistShared.Pwa/Pages/SharedPlaylistView.razor @@ -40,7 +40,16 @@ Color="Color.Warning" OnClick="ToggleFavorite" Disabled="_favoriteLoading" - Size="Size.Medium" /> + Size="Size.Medium" /> + + @if (_isCreator && _isAuthenticated) + { + + } Владелец: @_playlist.Creator?.UserName @@ -49,53 +58,6 @@ - - @if (_isCreator && _isAuthenticated) - { - - Настройки доступа - - - - Все - Только авторизованные - - - - - Все - Только авторизованные - - - - - Все - Только авторизованные - Только добавивший - - - - - Все - Только авторизованные - Только добавивший - - - - - @if (_savingPermissions) - { - - } - else - { - - Сохранить - } - - - } - @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("Настройки доступа", 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>(); - 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(); } + + } \ No newline at end of file