@page "/doctor/chat" @attribute [Authorize(Roles = UserRoles.Doctor)] @layout DoctorLayout @inject IDoctorManagementService DoctorManagementService @inject IAuthenticationService AuthenticationService

Chat with Patients

@if (!string.IsNullOrEmpty(statusMessage)) { }
@foreach (var patient in patients) { }
@if (selectedPatient != null) {
Chat with @selectedPatient.Name
@foreach (var message in messages) {
@(message.UserId == userInfo.Id ? "You" : selectedPatient.Name): @message.Content
}
}
@code { private string statusMessage = string.Empty; private bool isSuccess = false; private List patients = new(); private Patient selectedPatient; private List messages = new(); private string newMessage = string.Empty; private UserInformation userInfo; protected override async Task OnInitializedAsync() { userInfo = await AuthenticationService.GetUserInformation(); patients = await DoctorManagementService.GetAllPatientsAsync(); } private async Task OpenChat(Guid patientId, string patientName) { selectedPatient = new Patient { Id = patientId, Name = patientName }; var chat = await DoctorManagementService.GetConversationAsync(userInfo.Id, patientId); messages = chat?.Messages ?? new List(); StateHasChanged(); } private void CloseChat() { selectedPatient = null; messages.Clear(); } private async Task SendMessage() { if (!string.IsNullOrWhiteSpace(newMessage) && selectedPatient != null) { var success = await DoctorManagementService.SendMessageAsync(userInfo.Id, selectedPatient.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(); } } }