Добавлена кнопка "поделиться"
This commit is contained in:
84
PlaylistShared.Pwa/Components/ShareButton.razor
Normal file
84
PlaylistShared.Pwa/Components/ShareButton.razor
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -36,6 +36,8 @@
|
|||||||
<MudIcon Icon="@Icons.Material.Filled.OpenInNew" Size="Size.Small" Class="ml-1" />
|
<MudIcon Icon="@Icons.Material.Filled.OpenInNew" Size="Size.Small" Class="ml-1" />
|
||||||
</MudLink>
|
</MudLink>
|
||||||
|
|
||||||
|
<ShareButton />
|
||||||
|
|
||||||
<MudIconButton Icon="@(_isFavorite? Icons.Material.Filled.Star : Icons.Material.Outlined.StarBorder)"
|
<MudIconButton Icon="@(_isFavorite? Icons.Material.Filled.Star : Icons.Material.Outlined.StarBorder)"
|
||||||
Color="Color.Warning"
|
Color="Color.Warning"
|
||||||
OnClick="ToggleFavorite"
|
OnClick="ToggleFavorite"
|
||||||
|
|||||||
Reference in New Issue
Block a user