Added filter to /list, potential change: live filter without seperate submit when onclick and oninput would work

This commit is contained in:
BeatriceAl
2026-05-11 23:41:08 +02:00
parent 6931d1e626
commit b8ca28e46f
2 changed files with 61 additions and 8 deletions
+32 -8
View File
@@ -7,14 +7,30 @@
<p class="text-secondary mb-0">Read-only access for guests.</p> <p class="text-secondary mb-0">Read-only access for guests.</p>
</div> </div>
@if (ShowLeaveGuestList) <div class="d-flex flex-column flex-sm-row gap-3 w-100 w-md-auto">
{ <form method="get" action="/list" class="w-100 w-md-auto">
<form method="post" action="/guest/logout"> <label class="form-label" for="guest-list-search">Search</label>
<button type="submit" class="btn btn-outline-secondary"> <div class="d-flex gap-2">
Leave guest list <input id="guest-list-search" class="form-control" name="search" value="@SearchTerm" placeholder="Name, note or user" />
</button> <button type="submit" class="btn btn-outline-primary">
Search
</button>
@if (!string.IsNullOrWhiteSpace(SearchTerm))
{
<a class="btn btn-outline-secondary" href="/list">Clear</a>
}
</div>
</form> </form>
}
@if (ShowLeaveGuestList)
{
<form method="post" action="/guest/logout" class="align-self-sm-end">
<button type="submit" class="btn btn-outline-secondary">
Leave guest list
</button>
</form>
}
</div>
</div> </div>
@if (GuestEntries is null) @if (GuestEntries is null)
@@ -33,10 +49,18 @@ else if (GuestEntries.Count == 0)
</div> </div>
</div> </div>
} }
else if (!FilteredGuestEntries.Any())
{
<div class="card shadow-sm">
<div class="card-body">
<p class="text-secondary mb-0">No guests match the current filter.</p>
</div>
</div>
}
else else
{ {
<div class="guest-card-grid"> <div class="guest-card-grid">
@foreach (var guest in GuestEntries) @foreach (var guest in FilteredGuestEntries)
{ {
<article class="card shadow-sm"> <article class="card shadow-sm">
<div class="card-body"> <div class="card-body">
@@ -20,9 +20,38 @@ public partial class GuestList : ComponentBase
protected List<GuestEntryDocument>? GuestEntries { get; set; } protected List<GuestEntryDocument>? GuestEntries { get; set; }
protected bool ShowLeaveGuestList { get; set; } protected bool ShowLeaveGuestList { get; set; }
protected string SearchTerm { get; set; } = "";
[SupplyParameterFromQuery(Name = "search")]
public string? IncomingSearchTerm { get; set; }
protected IEnumerable<GuestEntryDocument> FilteredGuestEntries
{
get
{
if (GuestEntries is null)
{
return [];
}
if (string.IsNullOrWhiteSpace(SearchTerm))
{
return GuestEntries;
}
var searchTerm = SearchTerm.Trim();
return GuestEntries.Where(guest =>
guest.Name.Contains(searchTerm, StringComparison.OrdinalIgnoreCase) ||
(guest.Notes?.Contains(searchTerm, StringComparison.OrdinalIgnoreCase) == true) ||
guest.AddedByUsername.Contains(searchTerm, StringComparison.OrdinalIgnoreCase));
}
}
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
SearchTerm = IncomingSearchTerm ?? "";
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync(); var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
var user = authState.User; var user = authState.User;
var isStaffUser = var isStaffUser =