From 873cf1122a9dd2f22680c078b26669b3dac98899 Mon Sep 17 00:00:00 2001 From: pancakes Date: Sat, 30 Nov 2024 12:58:25 +1000 Subject: [PATCH] [frontend/pages] Add context menu to user profile --- Iceshrimp.Frontend/Pages/ProfileView.razor | 84 +++++++++++++++++++++- 1 file changed, 82 insertions(+), 2 deletions(-) diff --git a/Iceshrimp.Frontend/Pages/ProfileView.razor b/Iceshrimp.Frontend/Pages/ProfileView.razor index c8023285..3d5242a3 100644 --- a/Iceshrimp.Frontend/Pages/ProfileView.razor +++ b/Iceshrimp.Frontend/Pages/ProfileView.razor @@ -6,9 +6,16 @@ @using Iceshrimp.Frontend.Core.Services @using Iceshrimp.Shared.Schemas.Web @using Microsoft.AspNetCore.Authorization +@using Iceshrimp.Assets.PhosphorIcons +@using Iceshrimp.Frontend.Localization +@using Microsoft.Extensions.Localization @attribute [Authorize] -@inject ApiService Api -@inject NavigationManager Nav; +@inject ApiService Api +@inject IJSRuntime Js; +@inject IStringLocalizer Loc; +@inject MetadataService MetadataService +@inject NavigationManager Nav; +@inject SessionService Session @if (_init) { @@ -43,6 +50,48 @@ + @@ -80,6 +129,9 @@ private UserProfileResponse? Profile { get; set; } private string? MinId { get; set; } private List UserNotes { get; set; } = []; + + private ElementReference MenuButton { get; set; } + private Menu ContextMenu { get; set; } = null!; private bool _loading = true; private bool _init; @@ -163,4 +215,32 @@ StateHasChanged(); await LoadProfile(); } + + private void ToggleMenu() => ContextMenu.Toggle(MenuButton); + + private void EditProfile() => Js.InvokeVoidAsync("open", "/settings/profile", "_blank"); + + private void Bite() => Api.Users.BiteUserAsync(UserResponse.Id); + + private void RemoveFromFollowers() => Api.Users.RemoveUserFromFollowersAsync(UserResponse.Id); + + private void OpenOriginal() + { + if (Profile != null) + Js.InvokeVoidAsync("open", Profile.Url, "_blank"); + } + + private async Task CopyLink() + { + var instance = await MetadataService.Instance.Value; + await Js.InvokeVoidAsync("navigator.clipboard.writeText", $"https://{instance.WebDomain}/@{UserResponse.Username}" + (UserResponse.Host != null ? $"@{UserResponse.Host}" : "")); + } + + private void CopyLinkRemote() + { + if (Profile != null) + Js.InvokeVoidAsync("navigator.clipboard.writeText", Profile.Url); + } + + private void CopyUsername() => Js.InvokeVoidAsync("navigator.clipboard.writeText", $"@{UserResponse.Username}" + (UserResponse.Host != null ? $"@{UserResponse.Host}" : "")); } \ No newline at end of file