Files
PlaylistShared/PlaylistShared.Pwa/Components/ShareButton.razor

84 lines
2.8 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.
@inject IJSRuntime JS
@inject ISnackbar Snackbar
<MudIconButton @ref="_buttonRef"
Icon="@Icons.Material.Filled.Share"
Color="Color.Default"
OnClick="@OpenPopover"
Title="Поделиться"
Size="Size.Medium" />
<MudPopover Open="_popoverOpen"
AnchorOrigin="Origin.BottomCenter"
TransformOrigin="Origin.TopCenter"
Paper="true"
CloseOnOutsideClick="true"
OnOutsideClick="@(() => _popoverOpen = false)"
Style="min-width: 280px; max-width: 350px;">
<MudPaper Class="pa-4">
<MudText Typo="Typo.body2" Class="mb-2">Ссылка для приглашения:</MudText>
<div style="display: flex; gap: 8px; align-items: center;">
<MudTextField @bind-Value="_shareUrl"
ReadOnly="true"
Variant="Variant.Outlined"
Size="Size.Small"
FullWidth="true"
Style="flex: 1;" />
<MudButton Variant="Variant.Filled"
Color="Color.Primary"
Size="Size.Small"
OnClick="CopyLink"
StartIcon="@Icons.Material.Filled.ContentCopy">
Копировать
</MudButton>
</div>
</MudPaper>
</MudPopover>
@code {
private MudIconButton? _buttonRef;
private bool _popoverOpen;
private string _shareUrl = "";
/// <summary>
/// Ссылка для копирования. Если не указана, используется текущий URL страницы.
/// </summary>
[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);
}
}
}