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