Iceshrimp.NET/Iceshrimp.Frontend/Components/Note/NoteComponent.razor

71 lines
2.7 KiB
Text

@using Iceshrimp.Frontend.Core.Miscellaneous
@using Iceshrimp.Frontend.Core.Services
@using Iceshrimp.Shared.Schemas.Web
@implements IDisposable
@inject ApiService ApiService;
@inject ComposeService ComposeService
@inject SessionService Session;
@inject ILogger<NoteComponent> Logger;
<CascadingValue Value="Note">
<div class="note-wrapper">
<div class="note-header">
<NoteUserInfo User="@Note.User" Indented="Indented"/>
<NoteMetadata
Visibility="@Note.Visibility"
InstanceName="@Note.User.InstanceName"
CreatedAt="DateTime.Parse(Note.CreatedAt)"
OpenNoteId="@(OpenNote ? Note.Id : null)"
/>
</div>
<NoteBody NoteBase="Note" Indented="Indented" ReplyInaccessible="ReplyInaccessible" Quote="Quote" ClickOpenNote="OpenNote"/>
@if (!AsQuote)
{
@if (RootNote)
{
<span class="date">
@DateTime.Parse(Note.CreatedAt).ToLocalTime().ToString("G")
</span>
}
<NoteFooter
Reactions="Note.Reactions"
Likes="Note.Likes"
IsLiked="Note.Liked"
Renotes="Note.Renotes"
Replies="Note.Replies"
Indented="Indented"
RenotePossible="@(Note.Visibility == NoteVisibility.Public || Note.Visibility == NoteVisibility.Home || Session.Current?.Id == Note.User.Id)"
/>
}
</div>
</CascadingValue>
@code {
[Parameter] [EditorRequired] public required NoteBase Note { get; set; }
[Parameter] [EditorRequired] public required bool OpenNote { get; set; }
[Parameter] public bool Indented { get; set; }
[Parameter] public NoteBase? Quote { get; set; }
[Parameter] public bool AsQuote { get; set; }
[Parameter] public bool ReplyInaccessible { get; set; }
[Parameter] public bool RootNote { get; set; }
private IDisposable? _noteChangedHandler;
[CascadingParameter(Name="Provider")] NoteMessageProvider? Provider { get; set; }
protected override void OnInitialized()
{
_noteChangedHandler = Provider?.Register(Note.Id, HandleNoteChanged);
}
private void HandleNoteChanged(object? _, NoteBase note)
{
Logger.LogInformation($"{note.Id} updated");
StateHasChanged();
}
public void Dispose()
{
_noteChangedHandler?.Dispose();
}
}