diff --git a/PlaylistShared.Pwa/Components/ShareButton.razor b/PlaylistShared.Pwa/Components/ShareButton.razor new file mode 100644 index 0000000..755b3c7 --- /dev/null +++ b/PlaylistShared.Pwa/Components/ShareButton.razor @@ -0,0 +1,84 @@ +@inject IJSRuntime JS +@inject ISnackbar Snackbar + + + + + + Ссылка для приглашения: +
+ + + Копировать + +
+
+
+ +@code { + private MudIconButton? _buttonRef; + private bool _popoverOpen; + private string _shareUrl = ""; + + /// + /// Ссылка для копирования. Если не указана, используется текущий URL страницы. + /// + [Parameter] public string ShareUrl { get; set; } = string.Empty; + + protected override void OnInitialized() + { + if (string.IsNullOrEmpty(ShareUrl)) + ShareUrl = Navigation.Uri; + } + + protected override void OnParametersSet() + { + if (!string.IsNullOrEmpty(ShareUrl)) + _shareUrl = ShareUrl; + } + + private async Task OpenPopover() + { + if (string.IsNullOrEmpty(ShareUrl)) + { + Snackbar.Add("Ссылка недоступна", Severity.Warning); + return; + } + _shareUrl = ShareUrl; + _popoverOpen = true; + } + + private async Task CopyLink() + { + try + { + await JS.InvokeVoidAsync("navigator.clipboard.writeText", _shareUrl); + Snackbar.Add("Ссылка скопирована в буфер обмена", Severity.Success); + _popoverOpen = false; + } + catch (Exception ex) + { + Snackbar.Add($"Не удалось скопировать ссылку: {ex.Message}", Severity.Error); + } + } +} \ No newline at end of file diff --git a/PlaylistShared.Pwa/Pages/SharedPlaylistView.razor b/PlaylistShared.Pwa/Pages/SharedPlaylistView.razor index 5e4d04a..a63abe8 100644 --- a/PlaylistShared.Pwa/Pages/SharedPlaylistView.razor +++ b/PlaylistShared.Pwa/Pages/SharedPlaylistView.razor @@ -36,6 +36,8 @@ + +