update log filter

This commit is contained in:
kwan.nguyen 2024-10-29 23:59:03 +07:00
parent d11ec2a31d
commit 28538e22db
3 changed files with 81 additions and 5 deletions

View File

@ -7,7 +7,8 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewmodels="using:PCUT.ViewModels" xmlns:viewmodels="using:PCUT.ViewModels"
mc:Ignorable="d"> mc:Ignorable="d"
Loaded="Page_Loaded">
<Page.Resources> <Page.Resources>
<localCV:LogTimestampConverter x:Key="timestampConverter"/> <localCV:LogTimestampConverter x:Key="timestampConverter"/>
</Page.Resources> </Page.Resources>
@ -26,10 +27,36 @@
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="0.9*"/> <RowDefinition Height="0.1*"/>
<RowDefinition Height="0.8*"/>
<RowDefinition Height="0.1*"/> <RowDefinition Height="0.1*"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid Grid.Row="1"> <Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.7*" />
<ColumnDefinition Width="0.15*" />
<ColumnDefinition Width="0.15*"/>
</Grid.ColumnDefinitions>
<ComboBox
Grid.Column="1"
x:Name="Users"
ItemsSource="{Binding Users.Items}"
DisplayMemberPath="UserName"
SelectedIndex="{Binding Users.SelectedIndex, Mode=TwoWay}"
PlaceholderText="Users"
IsTextSearchEnabled="True"
Margin="5,0,5,0"
HorizontalAlignment="Stretch" VerticalAlignment="Center"/>
<ComboBox
Grid.Column="2"
x:Name="Types"
ItemsSource="{Binding Types.Items}"
PlaceholderText="Log Types"
SelectedIndex="{Binding Types.SelectedIndex, Mode=TwoWay}"
Margin="5,0,5,0"
HorizontalAlignment="Stretch" VerticalAlignment="Center"/>
</Grid>
<Grid Grid.Row="2">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center"> <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
<Button x:Name="btnFirst" Content="First" Click="btnFirst_Click"/> <Button x:Name="btnFirst" Content="First" Click="btnFirst_Click"/>
<Button x:Name="btnPrevious" Content="Previous" Click="btnPrevious_Click"/> <Button x:Name="btnPrevious" Content="Previous" Click="btnPrevious_Click"/>
@ -52,7 +79,7 @@
</TextBlock> </TextBlock>
</StackPanel> </StackPanel>
</Grid> </Grid>
<ListView Grid.Row="0" ItemsSource="{Binding Logs}"> <ListView Grid.Row="1" ItemsSource="{Binding Logs}">
<ListView.ItemTemplate> <ListView.ItemTemplate>
<DataTemplate> <DataTemplate>
<TextBlock> <TextBlock>

View File

@ -19,6 +19,13 @@ namespace PCUT.Pages
ViewModels = DataContext as LogViewModel; ViewModels = DataContext as LogViewModel;
} }
private async void Page_Loaded(object sender, RoutedEventArgs e)
{
ViewModels.Types.Bind(Types);
ViewModels.Users.Bind(Users);
await ViewModels.LoadUsersAsync();
}
protected override void OnNavigatedTo(NavigationEventArgs e) protected override void OnNavigatedTo(NavigationEventArgs e)
{ {
ViewModels.Pagination.Page = 1; ViewModels.Pagination.Page = 1;

View File

@ -3,9 +3,12 @@ using Http.Core.Extensions;
using PCUT.Entities; using PCUT.Entities;
using PCUT.Entities.ApiResponse; using PCUT.Entities.ApiResponse;
using PCUT.Models; using PCUT.Models;
using PCUT.Models.Users;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using static Http.Core.Constants.HttpConstants; using static Http.Core.Constants.HttpConstants;
@ -14,13 +17,16 @@ namespace PCUT.ViewModels
public class LogViewModel : NotificationBase public class LogViewModel : NotificationBase
{ {
public PaginationViewModel Pagination { get; } = new PaginationViewModel(withSearch: false); public PaginationViewModel Pagination { get; } = new PaginationViewModel(withSearch: false);
public SelectableCollection<UsersModel> Users { get; set; } = new SelectableCollection<UsersModel>(new UsersModel { UserName = "-None-" });
public SelectableCollection<string> Types { get; set; } = new SelectableCollection<string>("-None-", new string[] { "login", "logout", "download", "cut" });
public ObservableCollection<Log> Logs { get; } public ObservableCollection<Log> Logs { get; }
public LogViewModel() public LogViewModel()
{ {
Logs = new ObservableCollection<Log>(); Logs = new ObservableCollection<Log>();
Pagination.PageChanged += OnPageChanged; Pagination.PageChanged += OnPageChanged;
Users.PropertyChanged += OnFilterChanged;
Types.PropertyChanged += OnFilterChanged;
} }
private async void OnPageChanged(object sender, PageChangedEventArgs args) private async void OnPageChanged(object sender, PageChangedEventArgs args)
@ -28,6 +34,34 @@ namespace PCUT.ViewModels
await LoadLogsAsync(args.Page, args.PageSize); await LoadLogsAsync(args.Page, args.PageSize);
} }
public async Task LoadUsersAsync()
{
using (var httpClient = HttpClientFactory.CreateClient(ClientNames.ApiClient))
{
try
{
var response = await httpClient.GetAsync(Api.Users);
if (response.IsSuccessStatusCode)
{
var apiResponse = await response.DeserializeObjectAsync<PaginationResponse<IEnumerable<UsersModel>>>();
var data = apiResponse.Data;
Users.Load(data);
}
}
catch
{
}
}
}
private async void OnFilterChanged(object sender, PropertyChangedEventArgs e)
{
if (Pagination.Page == 1)
await LoadLogsAsync(Pagination.Page, Pagination.PageSize);
else
Pagination.Page = 1;
}
public async Task LoadLogsAsync(int page, int pageSize) public async Task LoadLogsAsync(int page, int pageSize)
{ {
var url = CreateFilterUrl(page, pageSize); var url = CreateFilterUrl(page, pageSize);
@ -61,6 +95,14 @@ namespace PCUT.ViewModels
var builder = PathBuilder.FromRouteTemplate(Api.Log) var builder = PathBuilder.FromRouteTemplate(Api.Log)
.AddQuery("page", page.ToString()) .AddQuery("page", page.ToString())
.AddQuery("pageSize", pageSize.ToString()); .AddQuery("pageSize", pageSize.ToString());
var filterBuilder = new StringBuilder();
if (Users.SelectedItem != default)
filterBuilder.AppendFilter("userId", Users.SelectedItem.Id);
if (Types.SelectedItem != default)
filterBuilder.AppendFilter("action", Types.SelectedItem);
var filter = filterBuilder.BuildFilter().ToString();
builder.AddQuery("filter", filter);
//if (!string.IsNullOrEmpty(searchText)) //if (!string.IsNullOrEmpty(searchText))
//{ //{
// var filter = new StringBuilder().AppendFilter("username", "cn", searchText).BuildFilter().ToString(); // var filter = new StringBuilder().AppendFilter("username", "cn", searchText).BuildFilter().ToString();