Добавлена кнопка "поделиться"

This commit is contained in:
FrigaT
2026-04-14 16:52:49 +03:00
parent 3a42a17ce7
commit b012fe37cc
2 changed files with 86 additions and 0 deletions

View File

@@ -0,0 +1,84 @@
@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);
}
}
}

View File

@@ -36,6 +36,8 @@
<MudIcon Icon="@Icons.Material.Filled.OpenInNew" Size="Size.Small" Class="ml-1" />
</MudLink>
<ShareButton />
<MudIconButton Icon="@(_isFavorite? Icons.Material.Filled.Star : Icons.Material.Outlined.StarBorder)"
Color="Color.Warning"
OnClick="ToggleFavorite"