@using Microsoft.Extensions.Logging @using EasyMDE.Blazor @using LANCommander.SDK.Services @namespace LANCommander.UI.Components @inject ILogger Logger @inject IChatClient ChatClient @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 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); } } }