TourIAm/TIAMSharedUI/Pages/Utility/ChatPage.razor

173 lines
4.7 KiB
Plaintext

@page "/chat"
@using Microsoft.AspNetCore.Authorization
@using TIAM.Entities.Users
@using TIAMSharedUI.Pages.Components.EditComponents
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
@using TIAMWebApp.Shared.Application.Services
@using TIAMSharedUI.Pages.Components
@inject SignalRService SignalRService
@attribute [Authorize]
<h3>Chat</h3>
<div class="container mt-5">
<div class="card">
<div class="card-header">
<h3>Chat</h3>
</div>
<div class="card-body">
<ul class="list-unstyled">
@foreach (var message in messages)
{
<li class="mb-2">
<div class="alert alert-secondary" role="alert">
@message
</div>
</li>
}
</ul>
</div>
<div class="card-footer">
<div class="input-group">
<input @bind="newMessage" @bind:event="oninput" class="form-control" placeholder="Enter your message" />
<button @onclick="SendMessage" class="btn btn-primary">Send</button>
<button @onclick="MuteChat" class="btn btn-danger ms-2">Mute Chat</button>
</div>
</div>
</div>
</div>
<DynamicEditForm Data="Data" IgnoreReflection="IgnoreList"></DynamicEditForm>
<ul>
<li>
<NavLink href="tictactoe">
TicTacToe
</NavLink>
</li>
<li>
<NavLink href="phonevalidator">
phone validator
</NavLink>
</li>
<li>
<NavLink href="create-payment">
Create Payment
</NavLink>
</li>
<li>
<NavLink href="@($"mytransfers/{Guid.Parse("108E5A63-AA9E-47BE-ACFA-00306FFC5215")}")">
My transfers
</NavLink>
</li>
<li>
<NavLink href="exchange-rate">
Exchange Rate
</NavLink>
</li>
<li>
<NavLink href="route-calculation">
Google route calculation
</NavLink>
</li>
<li>
<NavLink href="google-address-validation">
Google address validation
</NavLink>
</li>
<li>
<NavLink href="smarty-address-validation">
Smarty address validation
</NavLink>
</li>
<li>
<NavLink href="address-autocomplete">
Google autocomplete
</NavLink>
</li>
<li></li>
</ul>
@code {
private string userName;
private string newMessage;
private List<string> messages = new List<string>();
//private string hrefString = "mytransfers/" + "108E5A63-AA9E-47BE-ACFA-00306FFC5215";
private MessageWizardModel Data;
public List<string> IgnoreList =
[
nameof(MessageWizardModel.ReceiverEmailAddress),
nameof(MessageWizardModel.ReceiverFullName),
nameof(MessageWizardModel.ReceiverId),
nameof(MessageWizardModel.SenderEmailAddress),
nameof(MessageWizardModel.SenderFullName),
nameof(MessageWizardModel.SenderId),
nameof(MessageWizardModel.ContextId)
];
protected override async Task OnInitializedAsync()
{
userName = Guid.NewGuid().ToString();
Data = new MessageWizardModel();
SignalRService.OnMessageReceived += (user, message) =>
{
messages.Add($"{user}: {message}");
InvokeAsync(StateHasChanged);
};
SignalRService.OnUserMuted += (user) =>
{
messages.Add($"{user} has been muted.");
InvokeAsync(StateHasChanged);
};
SignalRService.OnUserLoggedIn += (user) =>
{
messages.Add($"{user} has logged in.");
InvokeAsync(StateHasChanged);
};
SignalRService.OnUserLoggedOut += (user) =>
{
messages.Add($"{user} has logged out.");
InvokeAsync(StateHasChanged);
};
await SignalRService.StartConnection(userName);
}
private async Task SendMessage()
{
await SignalRService.SendMessage(userName, newMessage);
newMessage = string.Empty;
}
private async Task MuteChat()
{
await SignalRService.MuteChat(userName);
}
private async Task LoggedInToChat()
{
await SignalRService.LoggedInToChat(userName);
}
private async Task LoggedOutFromChat()
{
await SignalRService.LoggedOutFromChat(userName);
}
public void Dispose()
{
SignalRService.OnMessageReceived -= (user, message) => { };
SignalRService.OnUserMuted -= (user) => { };
SignalRService.OnUserLoggedIn -= (user) => { };
LoggedOutFromChat();
SignalRService.OnUserLoggedOut -= (user) => { };
}
}