@using Iceshrimp.Assets.PhosphorIcons @using Iceshrimp.Frontend.Core.Services @using Iceshrimp.Frontend.Core.Services.NoteStore @using Iceshrimp.Frontend.Localization @using Iceshrimp.Shared.Schemas.Web @using Microsoft.Extensions.Localization @inject IStringLocalizer Loc; @inject IJSRuntime Js; @inject SessionService Session; @inject GlobalComponentSvc GlobalComponentSvc @inject NoteActions NoteActions; @code { [Parameter] [EditorRequired] public required List Reactions { get; set; } [Parameter] [EditorRequired] public required int Likes { get; set; } [Parameter] [EditorRequired] public required bool IsLiked { get; set; } [Parameter] [EditorRequired] public required int Renotes { get; set; } [Parameter] [EditorRequired] public required int Replies { get; set; } [Parameter] public bool RenotePossible { get; set; } [Parameter] public bool Indented { get; set; } private Menu ContextMenu { get; set; } = null!; private Menu RenoteMenu { get; set; } = null!; private ElementReference RenoteButton { get; set; } private ElementReference EmojiButton { get; set; } private ElementReference MenuButton { get; set; } [CascadingParameter] NoteBase Note { get; set; } = null!; private void ToggleMenu() => ContextMenu.Toggle(MenuButton); private void Delete() => _ = NoteActions.DeleteAsync(Note); private void OpenOriginal() => Js.InvokeVoidAsync("open", Note.Url, "_blank"); private void CopyLink() => Js.InvokeVoidAsync("navigator.clipboard.writeText", Note.Url); private void Like() { _ = NoteActions.ToggleLikeAsync(Note); } private void Reply() { NoteActions.Reply(Note); } private void ToggleRenoteMenu() { RenoteMenu.Toggle(RenoteButton); } private void Renote(NoteVisibility visibility) { _ = NoteActions.RenoteAsync(Note); } private void Quote() { NoteActions.DoQuote(Note); } private void ToggleEmojiPicker() { GlobalComponentSvc.EmojiPicker?.Open(EmojiButton, new EventCallback(this, React)); } private void React(EmojiResponse emoji) { NoteActions.React(Note, emoji); } private void Redraft() { _ = NoteActions.RedraftAsync(Note); } private void Bite() { _ = NoteActions.BiteAsync(Note); } private void Mute() { _ = NoteActions.MuteAsync(Note); } }