LANCommander/LANCommander.UI/Components/Chat/ChatMessageInput.razor
2025-11-13 23:40:12 -06:00

61 lines
No EOL
1.7 KiB
Text

@using Microsoft.Extensions.Logging
@namespace LANCommander.UI.Components
@inject ILogger<ChatMessageInput> Logger
<Form Model="_message">
<FormItem
HasFeedback="_hasError"
ValidateStatus="_validateStatus"
Help="@_errorMessage">
<TextArea
@ref="_textArea"
Disabled="_sendingMessage"
MinRows="1"
AutoSize="true"
BindOnInput
OnPressEnter="SendMessage"
@bind-Value="context.Content">
</TextArea>
</FormItem>
</Form>
@code {
[Parameter] public EventCallback<string> OnSendMessage { get; set; }
TextArea _textArea;
ChatMessage _message = new();
bool _sendingMessage;
string _errorMessage = String.Empty;
FormValidateStatus _validateStatus => _hasError ? FormValidateStatus.Error : FormValidateStatus.Default;
bool _hasError => !String.IsNullOrWhiteSpace(_errorMessage);
async Task SendMessage(PressEnterEventArgs args)
{
if (!args.ShiftKey)
{
args.PreventLineBreak();
_sendingMessage = true;
try
{
if (OnSendMessage.HasDelegate)
await OnSendMessage.InvokeAsync(_message.Content);
_message.Content = String.Empty;
}
catch (Exception ex)
{
_errorMessage = "Could not send message";
Logger.LogError(ex, "Failure sending message");
}
_sendingMessage = false;
await Task.Yield();
await InvokeAsync(StateHasChanged);
}
}
}