Ui/LobbyBrowser.razor
@using System
@using Clover.Data
@using Sandbox;
@using Sandbox.Network
@using Sandbox.UI;
@inherits Panel
@namespace Clover.Ui

<root>
	@if ( Lobbies.Any() )
	{
		@foreach ( var lobby in Lobbies )
		{
			<div class="lobby">
				<h2>@lobby.Name</h2>
				<button @onclick=@( () => Networking.Connect( lobby.LobbyId ) )>Join</button>
			</div>
		}
	}
	@if ( _isRefreshing )
	{
		<div class="loading">Refreshing...</div>
	}
	<button @onclick=@( () => Refresh() )>Refresh</button>
	<div style="flex-direction: column;" onclick=@( () => Clipboard.SetText( Game.SteamId.ToString() ) )>
		
		<span>@($"Steam ID: {Game.SteamId}")</span>
		<span>@($"Host: {Connection.Host.SteamId}")</span>
		<span>@($"Address: {Connection.Host.Address}")</span>
		<span>@($"Party: {Connection.Host.PartyId}")</span>
	</div>
</root>

@code {
	
	private List<LobbyInformation> Lobbies = new();
	
	private bool _isRefreshing = false;

	private async void Refresh()
	{
		_isRefreshing = true;
		Lobbies = await Networking.QueryLobbies();
		_isRefreshing = false;
	}

	protected override int BuildHash()
	{
		return HashCode.Combine( _isRefreshing, Lobbies );
	}

}