@page "/patient/chat" @attribute [Authorize(Roles = UserRoles.Patient)] @layout PatientLayout @inject IPatientManagementService PatientManagementService @inject IAuthenticationService AuthenticationService

Chat with Doctors

@if (!string.IsNullOrEmpty(statusMessage)) { }
@foreach (var doctor in doctors) { }
@if (selectedDoctor != null) {
Chat with Dr. @selectedDoctor.Name
@foreach (var message in messages) {
@(message.UserId == userInfo.Id ? "You" : selectedDoctor.Name): @message.Content
}
}
@code { private string statusMessage = string.Empty; private bool isSuccess = false; private List doctors = new(); private Doctor selectedDoctor; private List messages = new(); private string newMessage = string.Empty; private UserInformation userInfo; protected override async Task OnInitializedAsync() { userInfo = await AuthenticationService.GetUserInformation(); doctors = await PatientManagementService.GetAllDoctorsAsync(); } private async Task OpenChat(Guid doctorId, string doctorName) { selectedDoctor = new Doctor { Id = doctorId, Name = doctorName }; var chat = await PatientManagementService.GetConversationAsync(userInfo.Id, doctorId); messages = chat?.Messages ?? new List(); StateHasChanged(); } private void CloseChat() { selectedDoctor = null; messages.Clear(); } private async Task SendMessage() { if (!string.IsNullOrWhiteSpace(newMessage) && selectedDoctor != null) { var success = await PatientManagementService.SendMessageAsync(userInfo.Id, selectedDoctor.Id, newMessage); if (success) { messages.Add(new Message(userInfo.Id, newMessage)); newMessage = string.Empty; StateHasChanged(); } else { statusMessage = "Failed to send message."; isSuccess = false; } } } private void HandleKeyDown(KeyboardEventArgs e) { if (e.Key == "Enter") { SendMessage().GetAwaiter().GetResult(); } } }