Filter Layers by Type
All checks were successful
Build Docker Images / test (push) Successful in 1m37s
Build Docker Images / build-and-push (push) Successful in 1m35s

This commit is contained in:
2025-12-01 13:21:45 +01:00
parent 4d7df85df1
commit 7ea5ed506e
7 changed files with 56 additions and 29 deletions

View File

@@ -92,20 +92,15 @@ public class DataInboxController : Controller
[HttpGet] [HttpGet]
[Route("GetAll")] [Route("GetAll")]
public IActionResult GetAll([FromQuery] int start, [FromQuery] int limit, [FromQuery] string? name, [FromQuery] string? source) public IActionResult GetAll([FromQuery] int start, [FromQuery] int limit, [FromQuery] string? search)
{ {
try try
{ {
var query = _db.DataInbox.AsQueryable(); var query = _db.DataInbox.AsQueryable();
if (name != null) if (!string.IsNullOrEmpty(search))
{ {
query = query.Where(x => x.Name.Contains(name)); query = query.Where(x => x.Name.Contains(search) || x.Source.Contains(search));
}
if (source != null)
{
query = query.Where(x => x.Source.Contains(source));
} }
var totalCount = query.Count(); var totalCount = query.Count();
@@ -133,8 +128,8 @@ public class DataInboxController : Controller
PageSize = limit PageSize = limit
}; };
_logger.LogDebug("GetAll: Retrieved {Count} of {TotalCount} data inbox items (page {Page}) with filter name={Name}, source={Source}", _logger.LogDebug("GetAll: Retrieved {Count} of {TotalCount} data inbox items (page {Page}) with filter search={Search}",
items.Count, totalCount, pagedResult.Page, name, source); items.Count, totalCount, pagedResult.Page, search);
return Ok(pagedResult); return Ok(pagedResult);
} }

View File

@@ -3,7 +3,7 @@
<MudExpansionPanel Icon="@Icons.Material.Filled.FilterList" <MudExpansionPanel Icon="@Icons.Material.Filled.FilterList"
Text="Filters" Text="Filters"
Expanded="true"> Expanded="true">
<MudGrid> <MudGrid AlignItems="Center">
<MudItem xs="12" sm="6" md="4"> <MudItem xs="12" sm="6" md="4">
<MudTextField @bind-Value="filterRequest.Search" <MudTextField @bind-Value="filterRequest.Search"
Label="Search" Label="Search"
@@ -12,15 +12,17 @@
DebounceInterval="500" DebounceInterval="500"
OnDebounceIntervalElapsed="SearchDataInbox" OnDebounceIntervalElapsed="SearchDataInbox"
Clearable="true"/> Clearable="true"/>
</MudItem> </MudItem>
<MudItem xs="12" sm="6" md="4"> <MudItem xs="12" sm="6" md="4">
<MudButton Variant="Variant.Outlined" </MudItem>
OnClick="ClearFilters"
StartIcon="Icons.Material.Filled.Clear"> <MudItem xs="12" sm="12" md="4" Class="d-flex justify-end">
Clear filters <MudIconButton Icon="@Icons.Material.Filled.Clear"
</MudButton> OnClick="ClearFilters"
Color="Color.Default"
Size="Size.Medium"
Title="Clear filters"/>
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudExpansionPanel> </MudExpansionPanel>

View File

@@ -1,9 +1,10 @@
@using MudBlazor.Internal @using MudBlazor.Internal
@using DiunaBI.Application.DTOModels
<MudExpansionPanels Class="mb-4"> <MudExpansionPanels Class="mb-4">
<MudExpansionPanel Icon="@Icons.Material.Filled.FilterList" <MudExpansionPanel Icon="@Icons.Material.Filled.FilterList"
Text="Filters" Text="Filters"
Expanded="true"> Expanded="true">
<MudGrid> <MudGrid AlignItems="Center">
<MudItem xs="12" sm="6" md="4"> <MudItem xs="12" sm="6" md="4">
<MudTextField @bind-Value="filterRequest.Search" <MudTextField @bind-Value="filterRequest.Search"
Label="Search" Label="Search"
@@ -12,15 +13,29 @@
DebounceInterval="500" DebounceInterval="500"
OnDebounceIntervalElapsed="SearchLayers" OnDebounceIntervalElapsed="SearchLayers"
Clearable="true"/> Clearable="true"/>
</MudItem> </MudItem>
<MudItem xs="12" sm="6" md="4"> <MudItem xs="12" sm="6" md="4">
<MudButton Variant="Variant.Outlined" <MudSelect T="LayerType?"
OnClick="ClearFilters" Value="filterRequest.Type"
StartIcon="Icons.Material.Filled.Clear"> ValueChanged="OnTypeChanged"
Clear filters Label="Type"
</MudButton> Placeholder="All types"
Clearable="true"
OnClearButtonClick="OnTypeClear">
@foreach (LayerType type in Enum.GetValues(typeof(LayerType)))
{
<MudSelectItem T="LayerType?" Value="@type">@type.ToString()</MudSelectItem>
}
</MudSelect>
</MudItem>
<MudItem xs="12" sm="12" md="4" Class="d-flex justify-end">
<MudIconButton Icon="@Icons.Material.Filled.Clear"
OnClick="ClearFilters"
Color="Color.Default"
Size="Size.Medium"
Title="Clear filters"/>
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudExpansionPanel> </MudExpansionPanel>

View File

@@ -58,6 +58,20 @@ public partial class LayerListComponent : ComponentBase
await LoadLayers(); await LoadLayers();
} }
private async Task OnTypeClear()
{
filterRequest.Type = null;
filterRequest.Page = 1;
await LoadLayers();
}
private async Task OnTypeChanged(LayerType? type)
{
filterRequest.Type = type;
filterRequest.Page = 1;
await LoadLayers();
}
private void OnRowClick(LayerDto layer) private void OnRowClick(LayerDto layer)
{ {
NavigationManager.NavigateTo($"/layers/{layer.Id}"); NavigationManager.NavigateTo($"/layers/{layer.Id}");

View File

@@ -5,6 +5,7 @@
<AuthGuard> <AuthGuard>
<MudThemeProvider Theme="_theme"/> <MudThemeProvider Theme="_theme"/>
<MudPopoverProvider/>
<MudDialogProvider/> <MudDialogProvider/>
<MudSnackbarProvider/> <MudSnackbarProvider/>

View File

@@ -26,7 +26,9 @@ public class DataInboxService
var query = $"DataInbox/GetAll?start={start}&limit={filterRequest.PageSize}"; var query = $"DataInbox/GetAll?start={start}&limit={filterRequest.PageSize}";
if (!string.IsNullOrEmpty(filterRequest.Search)) if (!string.IsNullOrEmpty(filterRequest.Search))
query += $"&name={Uri.EscapeDataString(filterRequest.Search)}"; {
query += $"&search={Uri.EscapeDataString(filterRequest.Search)}";
}
var response = await _httpClient.GetAsync(query); var response = await _httpClient.GetAsync(query);
response.EnsureSuccessStatusCode(); response.EnsureSuccessStatusCode();

View File

@@ -28,10 +28,8 @@ public class LayerService
if (!string.IsNullOrEmpty(filterRequest.Search)) if (!string.IsNullOrEmpty(filterRequest.Search))
query += $"&name={Uri.EscapeDataString(filterRequest.Search)}"; query += $"&name={Uri.EscapeDataString(filterRequest.Search)}";
/* if (filterRequest.Type.HasValue)
if (type.HasValue) query += $"&type={(int)filterRequest.Type.Value}";
query += $"&type={type.Value}";
*/
var response = await _httpClient.GetAsync(query); var response = await _httpClient.GetAsync(query);
response.EnsureSuccessStatusCode(); response.EnsureSuccessStatusCode();