Files
sbox-public/game/addons/menu/Code/MenuUI/MapsPage.razor

100 lines
2.8 KiB
Plaintext

@using MenuProject.MenuUI.Components
@using MenuProject.MenuUI.Layout
@using Sandbox;
@using Sandbox.UI;
@using MenuProject.UI;
@page "/maps/all"
@inherits Panel
<root class="root">
<Page>
<Left>
<div class="flex-column flex-gap-32">
<div class="flex-column flex-gap-16">
<GamePackageSortOrder Value:bind="@filterOrder" ></GamePackageSortOrder>
</div>
<TextEntry @ref="SearchEntry" placeholder="Search games..."></TextEntry>
@if (Result?.Properties is not null && Result.Properties.Length > 0 )
{
<div class="flex-column flex-gap-16">
<h2><WithIcon Icon="filter_alt" Text="Filters"></WithIcon></h2>
<PackagePropertyFilter Result=@Result Selected="@SelectedTags"></PackagePropertyFilter>
</div>
}
@if ( Result?.Facets is not null)
{
foreach (var facet in Result.Facets)
{
<div class="flex-column flex-gap-16">
<h2><WithIcon Icon="@facet.Entries.FirstOrDefault()?.Icon" Text="@facet.Title"></WithIcon></h2>
<PackageCategoryFilter Result=@Result Selected="@SelectedCategory" Facet="@facet"></PackageCategoryFilter>
</div>
}
}
<div class="flex-column flex-gap-16">
<h2><WithIcon Icon="tag" Text="Tags"></WithIcon></h2>
<PackageTagFilter Result=@Result Selected="@SelectedTags"></PackageTagFilter>
</div>
</div>
</Left>
<Body>
<PackageList @ref=PackageList ShowFilters="@false" Query=@($"type:map sort:{filterOrder} {GetQuery()}") OnSelected="@OnPackageSelected" Take=@(200)></PackageList>
</Body>
</Page>
</root>
@code {
string filterOrder = "trending";
TextEntry SearchEntry = default;
List<string> SelectedTags = new();
Dictionary<string, string> SelectedCategory = new();
PackageList PackageList = default;
Package.FindResult Result => PackageList?.Result;
void OnPackageSelected(Package package)
{
package.OpenModal();
}
void OnOrderChanged(string value)
{
filterOrder = value;
}
void OnMenu(Package package)
{
MenuHelpers.OpenPackageMenu(this, package);
}
string GetQuery()
{
string tagString = SearchEntry?.Text ?? "";
foreach (var tag in SelectedTags)
{
tagString += $" +{tag}";
}
foreach (var cat in SelectedCategory)
{
tagString += $" {cat.Key}:{cat.Value}";
}
return tagString;
}
protected override int BuildHash() => System.HashCode.Combine(Result, GetQuery(), filterOrder);
}