156 lines
4.2 KiB
Plaintext
156 lines
4.2 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></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) => { };
|
|
}
|
|
}
|