86 lines
2.7 KiB
Plaintext
86 lines
2.7 KiB
Plaintext
@inject IJSRuntime JS
|
||
@inject ISnackbar Snackbar
|
||
@inject NavigationManager Navigation
|
||
|
||
<MudIconButton Icon="@Icons.Material.Filled.Share"
|
||
Color="Color.Default"
|
||
OnClick="@TogglePopover"
|
||
Title="Поделиться"
|
||
Size="Size.Medium" />
|
||
|
||
<MudPopover Open="@_popoverOpen"
|
||
AnchorOrigin="Origin.BottomCenter"
|
||
TransformOrigin="Origin.TopCenter"
|
||
RelativeWidth="DropdownWidth.Adaptive"
|
||
Paper="true">
|
||
<MudPaper Class="pa-4">
|
||
<MudText Typo="Typo.body2" Class="mb-2">Ссылка для приглашения:</MudText>
|
||
<MudStack Row Gap="2" AlignItems="AlignItems.Center">
|
||
<MudTextField @bind-Value="_shareUrl"
|
||
ReadOnly="true"
|
||
Variant="Variant.Outlined"
|
||
FullWidth="true" />
|
||
<MudIconButton Variant="Variant.Filled"
|
||
Color="Color.Primary"
|
||
Size="Size.Medium"
|
||
OnClick="CopyLink"
|
||
Icon="@Icons.Material.Filled.ContentCopy">
|
||
</MudIconButton>
|
||
</MudStack>
|
||
</MudPaper>
|
||
</MudPopover>
|
||
|
||
@code {
|
||
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 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);
|
||
}
|
||
}
|
||
} |