UI/SpawnMenu/Ents/EntityListCloud.razor
@using Sandbox;
@using Sandbox.UI;
@inherits Panel
@namespace Sandbox
@if ( LastResult is null )
{
// loading
return;
}
@if ( LastResult.Packages.Count() == 0 )
{
<p>#spawnmenu.entity.no_results</p>
return;
}
<SpawnMenuContent>
<Header>
<SpawnMenuToolbar>
<Left>
<TextEntry Placeholder="#spawnmenu.common.search" class="filter menu-input" Value:bind=@Filter />
</Left>
<Right>
<DropDown Value:bind=@SortOrder />
</Right>
</SpawnMenuToolbar>
</Header>
<Body>
<VirtualGrid Items=@(LastResult.Packages) ItemSize=@(160)>
<Item Context="item">
@if (item is Package entry)
{
<SpawnMenuIcon Ident=@($"{entry.TypeName}:{entry.FullIdent}") [email protected]></SpawnMenuIcon>
}
</Item>
</VirtualGrid>
</Body>
</SpawnMenuContent>
@code
{
public string Query { get; set; } = "";
private string Filter
{
get;
set { field = value; Rebuild(); }
}
public PackageSortMode SortOrder
{
get;
set { field = value; Rebuild(); }
}
protected override void OnParametersSet()
{
SortOrder = PackageSortMode.Popular;
Rebuild();
}
Package.FindResult LastResult;
async void Rebuild()
{
var query = $"sort:{SortOrder.ToIdentifier()} type:sent";
if ( !string.IsNullOrEmpty( Query ) ) query += $" {Query}";
if ( !string.IsNullOrEmpty( Filter ) ) query += $" {Filter}";
LastResult = await Package.FindAsync( query );
StateHasChanged();
}
}