LANCommander/LANCommander.UI/Components/Chat/ChatThread.razor

52 lines
1.6 KiB
Text
Raw Normal View History

@using System.Collections.Specialized
@using LANCommander.SDK.Services
@using Microsoft.AspNetCore.Components.Web.Virtualization
@inject ChatClient ChatClient
2025-09-06 13:09:47 -05:00
@namespace LANCommander.UI.Components
<Flex Direction="FlexDirection.Vertical">
<div style="flex-grow: 1;">
<Virtualize Items="_messageGroups" Context="messageGroup">
<CascadingValue Name="Messages" Value="@messageGroup.Messages">
<ChatMessageGroup
@key="messageGroup.Id"
UserId="@messageGroup.UserId"
UserName="@messageGroup.UserName"
StartedOn="@messageGroup.StartedOn.LocalDateTime" />
</CascadingValue>
</Virtualize>
</div>
<ChatMessageInput OnSendMessage="SendMessage" />
</Flex>
@code {
[Parameter] public Guid Id { get; set; }
ICollection<SDK.Models.ChatMessageGroup> _messageGroups = new List<SDK.Models.ChatMessageGroup>();
ICollection<SDK.Models.ChatMessage> _messages = new List<SDK.Models.ChatMessage>();
SDK.Models.ChatThread _thread;
bool _sendingMessage = false;
string _inputContents = String.Empty;
protected override async Task OnParametersSetAsync()
{
if (Id != Guid.Empty)
2025-08-21 17:47:30 -05:00
{
_thread = ChatClient.GetThread(Id);
2025-08-21 17:47:30 -05:00
_thread.MessageGroups.CollectionChanged += MessageGroupsOnCollectionChanged;
2025-08-21 17:47:30 -05:00
}
}
void MessageGroupsOnCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
{
StateHasChanged();
}
async Task SendMessage(string contents)
{
await ChatClient.SendMessageAsync(Id, contents);
}
}