@page "/support" @using Moonlight.App.Services @using Moonlight.App.Database.Entities @using Moonlight.App.Helpers @using Moonlight.App.Services.Support @inject ResourceService ResourceService @inject SupportClientService SupportClientService @inject SmartTranslateService SmartTranslateService
@foreach (var message in Messages) { if (message.IsSystem || message.IsSupport) {
@if (message.IsSystem) { @(message.Message) } else { @(message.Message) }
} else {
@(Formatter.FormatAgoFromDateTime(message.CreatedAt, SmartTranslateService)) @(message.Sender!.FirstName) @(message.Sender!.LastName)
Avatar
@(message.Message)
} }
Welcome to the support chat. Ask your question here and we will help you
@code { private SupportMessage[] Messages; private string Content = ""; private DateTime LastTypingTimestamp = DateTime.UtcNow.AddMinutes(-10); private async Task Load(LazyLoader lazyLoader) { await lazyLoader.SetText("Starting chat client"); SupportClientService.OnNewMessage += OnNewMessage; SupportClientService.OnUpdateTyping += OnUpdateTyping; await SupportClientService.Start(); } private async Task Send() { await SupportClientService.SendMessage(Content); Content = ""; await InvokeAsync(StateHasChanged); } #region Message handling private async void OnNewMessage(object? sender, SupportMessage e) { Messages = (await SupportClientService.GetMessages()).Reverse().ToArray(); await InvokeAsync(StateHasChanged); } private async Task LoadMessages(LazyLoader arg) { Messages = (await SupportClientService.GetMessages()).Reverse().ToArray(); } #endregion #region Typing private async void OnUpdateTyping(object? sender, EventArgs e) { await InvokeAsync(StateHasChanged); } private async void OnTyping() { if ((DateTime.UtcNow - LastTypingTimestamp).TotalSeconds > 5) { LastTypingTimestamp = DateTime.UtcNow; await SupportClientService.TriggerTyping(); } } #endregion }