LANCommander/LANCommander.UI/Components/Chat/ChatMessageInput.razor
2025-11-13 21:04:31 -06:00

59 lines
No EOL
1.5 KiB
Text

@using Microsoft.Extensions.Logging
@namespace LANCommander.UI.Components
@inject ILogger<ChatMessageInput> Logger
<FormItem
HasFeedback="_hasError"
ValidateStatus="_validateStatus"
Help="@_errorMessage">
<TextArea
@ref="_textArea"
Disabled="_sendingMessage"
MinRows="1"
AutoSize="true"
BindOnInput
OnPressEnter="SendMessage"
@bind-Value="_contents">
</TextArea>
</FormItem>
@code {
[Parameter] public EventCallback<string> OnSendMessage { get; set; }
TextArea _textArea;
string _contents;
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(_contents);
_contents = String.Empty;
}
catch (Exception ex)
{
_errorMessage = "Could not send message";
Logger.LogError(ex, "Failure sending message");
}
_sendingMessage = false;
await Task.Yield();
await InvokeAsync(StateHasChanged);
}
}
}