86 lines
2.7 KiB
Plaintext
86 lines
2.7 KiB
Plaintext
@using Microsoft.AspNetCore.SignalR.Client
|
|
@using spanreed.Shared
|
|
@inject NavigationManager NavigationManager
|
|
@implements IDisposable
|
|
@inject HttpClient Http
|
|
|
|
<div class="top-row pl-4 navbar navbar-dark">
|
|
<a class="navbar-brand" href="">spanreed</a>
|
|
<button class="navbar-toggler" @onclick="ToggleNavMenu">
|
|
<span class="navbar-toggler-icon"></span>
|
|
</button>
|
|
</div>
|
|
|
|
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
|
|
<ul class="nav flex-column">
|
|
@foreach (var room in rooms) {
|
|
<li class="nav-item px-3">
|
|
<NavLink class="nav-link" href=@room>
|
|
<span class="oi oi-list-rich" aria-hidden="true"></span> @room
|
|
</NavLink>
|
|
</li>
|
|
}
|
|
<li class="nav-item px-3">
|
|
<span class="oi" aria-hidden="true"></span> <input id="nav-text" class="nav" type="text" @bind=NewRoomBox @onkeypress=EnterBar placeholder="Create Room">
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
|
|
@code {
|
|
private string NewRoom;
|
|
private string NewRoomBox;
|
|
private bool collapseNavMenu = true;
|
|
|
|
private string NavMenuCssClass => collapseNavMenu ? "collapse" : null;
|
|
|
|
private void ToggleNavMenu()
|
|
{
|
|
collapseNavMenu = !collapseNavMenu;
|
|
}
|
|
|
|
private HubConnection hubConnection;
|
|
private List<string> rooms = new List<string>();
|
|
|
|
protected override async Task OnInitializedAsync() {
|
|
hubConnection = new HubConnectionBuilder().WithUrl(NavigationManager.ToAbsoluteUri("/addroom")).Build();
|
|
hubConnection.On<string>("NewRoom", name => {
|
|
rooms.Add(name);
|
|
rooms.Sort();
|
|
StateHasChanged();
|
|
});
|
|
var existing_rooms = await Http.GetFromJsonAsync<string[]>("Room");
|
|
|
|
if (existing_rooms != null) {
|
|
foreach (var room in existing_rooms)
|
|
{
|
|
rooms.Add(room);
|
|
rooms.Sort();
|
|
}
|
|
}
|
|
await hubConnection.StartAsync();
|
|
var roomName = NavigationManager.Uri.Split("/").LastOrDefault();
|
|
if (roomName.Length > 0) {
|
|
await hubConnection.SendAsync("AddRoom", NavigationManager.Uri.Split("/").LastOrDefault());
|
|
}
|
|
}
|
|
|
|
async Task EnterBar(KeyboardEventArgs e) {
|
|
if (e.Key.Equals("Enter")) {
|
|
Console.WriteLine(NewRoom);
|
|
await hubConnection.SendAsync("AddRoom", NewRoom);
|
|
NavigationManager.NavigateTo(NewRoom);
|
|
NewRoom = "";
|
|
NewRoomBox = "";
|
|
} else if (e.Key.Length == 1) {
|
|
NewRoom = NewRoom + e.Key;
|
|
}
|
|
}
|
|
|
|
public bool IsConnected =>
|
|
hubConnection.State == HubConnectionState.Connected;
|
|
|
|
public void Dispose() {
|
|
_ = hubConnection.DisposeAsync();
|
|
}
|
|
}
|