@inject IJSRuntime JS
@inject ISnackbar Snackbar
@inject NavigationManager Navigation
Ссылка для приглашения:
@code {
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 TogglePopover()
{
if (_popoverOpen)
{
_popoverOpen = false;
}
else
{
if (string.IsNullOrEmpty(ShareUrl))
{
Snackbar.Add("Ссылка недоступна", Severity.Warning);
return;
}
_shareUrl = ShareUrl;
_popoverOpen = true;
await CopyLink();
}
}
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);
}
}
}