155 lines
4.6 KiB
Plaintext
155 lines
4.6 KiB
Plaintext
@page "/"
|
|
@using LiveChat.Models;
|
|
@using Microsoft.AspNetCore.SignalR.Client
|
|
@inject Blazored.LocalStorage.ILocalStorageService localStorage
|
|
@inject NavigationManager Navigation
|
|
@implements IAsyncDisposable
|
|
|
|
<PageTitle>LiveChat app</PageTitle>
|
|
|
|
<div class="container d-flex flex-column flex-wrap gap-4">
|
|
|
|
<div hidden="@(!ModalIsVisible)">
|
|
<EditForm Model="@userModel" OnValidSubmit="@SetUser">
|
|
<DataAnnotationsValidator />
|
|
<ValidationSummary />
|
|
|
|
<div class="giveNameMessage">
|
|
<h1>Skriv inn navnet ditt</h1>
|
|
<p>Dette kan ikke endres (helt til du oppdaterer sida)</p>
|
|
<input @bind-value="userModel.User" disabled="@(!ModalIsVisible)" placeholder="Navn" class="MessageFormName" />
|
|
<button type="submit" disabled="@(!IsConnected)" class="MessageFormButton"><i class="bi bi-send-fill"></i> Sett navn</button>
|
|
</div>
|
|
</EditForm>
|
|
</div>
|
|
|
|
<div hidden="@(!ModalIsVisible)">
|
|
<div >
|
|
<h1>Skriv inn romkode</h1>
|
|
<p>Få tak i koden av eieren av rommet eller noen som er i det.</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div hidden="@(!ModalIsVisible)">
|
|
<div>
|
|
<h1>Lag et rom</h1>
|
|
<p>Snakk med venner osv.</p>
|
|
<button type="submit" disabled="@(!IsConnected)" class="MessageFormButton">Lag et tilfeldig rom</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
@if (msgs != null)
|
|
{
|
|
<div class="MessagesList" id="messagesList" hidden="@(ModalIsVisible)">
|
|
@foreach (var message in msgs)
|
|
{
|
|
<div class="message">@message</div>
|
|
}
|
|
</div>
|
|
}
|
|
else
|
|
{
|
|
<h1>Ingen meldinger tilgjengelig.</h1>
|
|
}
|
|
|
|
<div class="messageFormContainer" hidden="@(ModalIsVisible)">
|
|
@if (messageModel == null)
|
|
{
|
|
<p>laster inn meldingsboks</p>
|
|
}
|
|
else
|
|
{
|
|
<EditForm Model="@messageModel" OnValidSubmit="@HandleSubmit" class="MessageForm">
|
|
<DataAnnotationsValidator />
|
|
<div class="MessageFormValidation">
|
|
<ValidationSummary />
|
|
</div>
|
|
|
|
<div class="MessageFormInputs">
|
|
<input @bind-value="messageModel.Message" placeholder="Skriv inn din melding..." class="MessageFormMessage" />
|
|
<button type="submit" disabled="@(!IsConnected || ModalIsVisible)" class="MessageFormButton"><i class="bi bi-send-fill"></i></button>
|
|
</div>
|
|
</EditForm>
|
|
}
|
|
</div>
|
|
@code {
|
|
private HubConnection? hubConnection;
|
|
|
|
private bool ModalIsVisible = true;
|
|
private MessageModel messageModel = new MessageModel() { User = "", Message = "" };
|
|
private UserModel userModel = new UserModel() { User = "" };
|
|
private List<string> msgs = new List<string>();
|
|
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
hubConnection = new HubConnectionBuilder()
|
|
.WithUrl(Navigation.ToAbsoluteUri("/chathub"))
|
|
.Build();
|
|
|
|
using (var db = new ChattingContext())
|
|
{
|
|
var messages = db.Messages.ToList();
|
|
|
|
foreach (var msg in messages)
|
|
{
|
|
var encodedMsg = $"{msg.User}: {msg.Message}";
|
|
msgs.Add(encodedMsg);
|
|
}
|
|
await InvokeAsync(StateHasChanged);
|
|
}
|
|
|
|
hubConnection.On<string, string>("ReceiveMessage", (user, message) =>
|
|
{
|
|
var encodedMsg = $"{user}: {message}";
|
|
msgs.Add(encodedMsg);
|
|
InvokeAsync(StateHasChanged);
|
|
});
|
|
|
|
await hubConnection.StartAsync();
|
|
}
|
|
|
|
private async Task SetUser()
|
|
{
|
|
ModalIsVisible = false;
|
|
messageModel.User = userModel.User;
|
|
await localStorage.SetItemAsync("user", userModel.User);
|
|
}
|
|
|
|
private async Task HandleSubmit()
|
|
{
|
|
var filter = new ProfanityFilter.ProfanityFilter();
|
|
|
|
// Kjempegøy
|
|
filter.AddProfanity("faen");
|
|
filter.AddProfanity("jævla");
|
|
filter.AddProfanity("jævel");
|
|
filter.AddProfanity("homse");
|
|
filter.AddProfanity("homo");
|
|
filter.AddProfanity("neger");
|
|
filter.AddProfanity("transe");
|
|
filter.AddProfanity("dritt");
|
|
|
|
messageModel.User = filter.CensorString(messageModel.User);
|
|
messageModel.Message = filter.CensorString(messageModel.Message);
|
|
|
|
if (hubConnection is not null)
|
|
{
|
|
await hubConnection.SendAsync("SendMessage", messageModel.User, messageModel.Message);
|
|
}
|
|
}
|
|
|
|
public bool IsConnected =>
|
|
hubConnection?.State == HubConnectionState.Connected;
|
|
|
|
public async ValueTask DisposeAsync()
|
|
{
|
|
if (hubConnection is not null)
|
|
{
|
|
await hubConnection.DisposeAsync();
|
|
}
|
|
}
|
|
}
|