spanreed/Client/Shared/NavMenu.razor
2021-12-17 13:39:34 +00:00

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();
}
}