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