76 lines
No EOL
1.9 KiB
Text
76 lines
No EOL
1.9 KiB
Text
@using Microsoft.Extensions.Logging
|
|
@using EasyMDE.Blazor
|
|
@using LANCommander.SDK.Services
|
|
@namespace LANCommander.UI.Components
|
|
@inject ILogger<ChatMessageInput> Logger
|
|
@inject IChatClient ChatClient
|
|
|
|
<EasyMdeEditor
|
|
@bind-Value="_message"
|
|
Class="chat-message-input"
|
|
InterceptKeys="_keys"
|
|
OnKey="HandleKey"
|
|
ReadOnly="_sendingMessage"
|
|
Placeholder="@Placeholder"
|
|
Options="_options" />
|
|
|
|
@code {
|
|
[Parameter] public Guid? ThreadId { get; set; }
|
|
[Parameter] public string? Placeholder { get; set; }
|
|
|
|
string _message = string.Empty;
|
|
bool _sendingMessage;
|
|
|
|
string _errorMessage = string.Empty;
|
|
FormValidateStatus _validateStatus => _hasError ? FormValidateStatus.Error : FormValidateStatus.Default;
|
|
bool _hasError => !string.IsNullOrWhiteSpace(_errorMessage);
|
|
|
|
readonly EasyMdeOptions _options = new()
|
|
{
|
|
MinHeight = "0px",
|
|
Toolbar = EasyMdeToolbar.Disabled,
|
|
Status = EasyMdeStatus.Disabled,
|
|
};
|
|
|
|
readonly EasyMdeKeyRegistration[] _keys =
|
|
[
|
|
new() { Key = "Enter", NotifyDotNet = true },
|
|
new() { Key = "Enter", Ctrl = true, NotifyDotNet = true }
|
|
];
|
|
|
|
async ValueTask<bool> HandleKey(EasyMdeKeyEvent e)
|
|
{
|
|
if (e.Ctrl && e.Key is "Enter")
|
|
return true; // allow newline
|
|
|
|
if (e.Key is "Enter")
|
|
await SendMessage();
|
|
|
|
return true;
|
|
}
|
|
|
|
async Task SendMessage()
|
|
{
|
|
if (_sendingMessage)
|
|
return;
|
|
|
|
_sendingMessage = true;
|
|
await InvokeAsync(StateHasChanged);
|
|
|
|
try
|
|
{
|
|
await ChatClient.SendMessageAsync(ThreadId.GetValueOrDefault(), _message);
|
|
|
|
_message = string.Empty;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.LogError(ex, "Failure sending message");
|
|
}
|
|
finally
|
|
{
|
|
_sendingMessage = false;
|
|
await InvokeAsync(StateHasChanged);
|
|
}
|
|
}
|
|
} |