55 lines
No EOL
1.8 KiB
Text
55 lines
No EOL
1.8 KiB
Text
@using System.Collections.Specialized
|
|
@using LANCommander.SDK.Services
|
|
@using Microsoft.AspNetCore.Components.Web.Virtualization
|
|
@inject IChatClient ChatClient
|
|
@namespace LANCommander.UI.Components
|
|
|
|
<Flex Direction="FlexDirection.Vertical" Class="chat-thread">
|
|
<Flex Direction="FlexDirection.Vertical" Class="chat-thread-messages">
|
|
@if (_thread != null)
|
|
{
|
|
<InfiniteLoader
|
|
T="SDK.Models.ChatMessage"
|
|
KeySelector="g => g.Id.ToString()"
|
|
Loader="LoadMessages"
|
|
PageSize="10">
|
|
<ChatMessage Id="context.Id" Content="@context.Content" SentOn="context.SentOn" />
|
|
</InfiniteLoader>
|
|
}
|
|
</Flex>
|
|
|
|
<ChatMessageInput ThreadId="@Id" Placeholder="@($"Message {_thread?.Title}")" />
|
|
</Flex>
|
|
|
|
@code {
|
|
[Parameter] public Guid? Id { get; set; }
|
|
|
|
SDK.Models.ChatThread? _thread;
|
|
|
|
protected override async Task OnParametersSetAsync()
|
|
{
|
|
if ((_thread == null || _thread.Id != Id) && Id.HasValue)
|
|
{
|
|
_thread = await ChatClient.GetThreadAsync(Id.Value);
|
|
|
|
_thread.MessageGroups.CollectionChanged += MessageGroupsOnCollectionChanged;
|
|
|
|
await ChatClient.GetMessagesAsync(Id.Value, null, 10);
|
|
}
|
|
}
|
|
|
|
void MessageGroupsOnCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
|
|
=> InvokeAsync(StateHasChanged);
|
|
|
|
async Task<InfiniteLoadResponse<SDK.Models.ChatMessage>> LoadMessages(SDK.Models.ChatMessage cursor, int pageSize)
|
|
{
|
|
var messages = await ChatClient.GetMessagesAsync(Id.Value, cursor, pageSize);
|
|
|
|
return new InfiniteLoadResponse<SDK.Models.ChatMessage>()
|
|
{
|
|
Items = messages,
|
|
HasMore = true,
|
|
};
|
|
}
|
|
|
|
} |