From 95d892fef22d83c4dc65fbcaf053ca2ec7d96d3c Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Wed, 16 Feb 2022 12:32:19 +0800 Subject: [PATCH 1/8] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Filters/NumberFilter.razor.cs | 42 +++++++++++-------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/src/BootstrapBlazor/Components/Filters/NumberFilter.razor.cs b/src/BootstrapBlazor/Components/Filters/NumberFilter.razor.cs index 80df967de..26434b41e 100644 --- a/src/BootstrapBlazor/Components/Filters/NumberFilter.razor.cs +++ b/src/BootstrapBlazor/Components/Filters/NumberFilter.razor.cs @@ -42,12 +42,12 @@ public partial class NumberFilter Items = new SelectedItem[] { - new SelectedItem("GreaterThanOrEqual", Localizer["GreaterThanOrEqual"]?.Value ?? "GreaterThanOrEqual"), - new SelectedItem("LessThanOrEqual", Localizer["LessThanOrEqual"]?.Value ?? "LessThanOrEqual"), - new SelectedItem("GreaterThan", Localizer["GreaterThan"]?.Value ?? "GreaterThan"), - new SelectedItem("LessThan", Localizer["LessThan"]?.Value ?? "LessThan"), - new SelectedItem("Equal", Localizer["Equal"]?.Value ?? "Equal"), - new SelectedItem("NotEqual", Localizer["NotEqual"]?.Value ?? "NotEqual") + new SelectedItem("GreaterThanOrEqual", Localizer["GreaterThanOrEqual"].Value), + new SelectedItem("LessThanOrEqual", Localizer["LessThanOrEqual"].Value), + new SelectedItem("GreaterThan", Localizer["GreaterThan"].Value), + new SelectedItem("LessThan", Localizer["LessThan"].Value), + new SelectedItem("Equal", Localizer["Equal"].Value), + new SelectedItem("NotEqual", Localizer["NotEqual"].Value) }; } @@ -61,6 +61,7 @@ public partial class NumberFilter Action1 = FilterAction.GreaterThanOrEqual; Action2 = FilterAction.LessThanOrEqual; Count = 0; + Logic = FilterLogic.And; StateHasChanged(); } @@ -71,19 +72,26 @@ public partial class NumberFilter public override IEnumerable GetFilterConditions() { var filters = new List(); - if (Value1 != null) filters.Add(new FilterKeyValueAction() + if (Value1 != null) { - FieldKey = FieldKey, - FieldValue = Value1, - FilterAction = Action1 - }); - if (Count > 0 && Value2 != null) filters.Add(new FilterKeyValueAction() + filters.Add(new FilterKeyValueAction() + { + FieldKey = FieldKey, + FieldValue = Value1, + FilterAction = Action1 + }); + } + + if (Count > 0 && Value2 != null) { - FieldKey = FieldKey, - FieldValue = Value2, - FilterAction = Action2, - FilterLogic = Logic - }); + filters.Add(new FilterKeyValueAction() + { + FieldKey = FieldKey, + FieldValue = Value2, + FilterAction = Action2, + FilterLogic = Logic + }); + } return filters; } } -- Gitee From 33aed6021a15a6133e8f8f34a4449cf220543c12 Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Wed, 16 Feb 2022 12:32:31 +0800 Subject: [PATCH 2/8] =?UTF-8?q?refactor:=20=E6=A0=BC=E5=BC=8F=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Components/TableBoolFilterTest.cs | 1 + test/UnitTest/Components/TableDateTimeFilterTest.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/test/UnitTest/Components/TableBoolFilterTest.cs b/test/UnitTest/Components/TableBoolFilterTest.cs index e6a960f16..76b4ba0dc 100644 --- a/test/UnitTest/Components/TableBoolFilterTest.cs +++ b/test/UnitTest/Components/TableBoolFilterTest.cs @@ -17,6 +17,7 @@ public class TableBoolFilterTest : BootstrapBlazorTestBase var filter = cut.Instance; cut.InvokeAsync(() => filter.Reset()); } + [Fact] public void GetFilterConditions_Ok() { diff --git a/test/UnitTest/Components/TableDateTimeFilterTest.cs b/test/UnitTest/Components/TableDateTimeFilterTest.cs index cdeb1e21f..7d5337b5f 100644 --- a/test/UnitTest/Components/TableDateTimeFilterTest.cs +++ b/test/UnitTest/Components/TableDateTimeFilterTest.cs @@ -18,6 +18,7 @@ public class TableDateTimeFilterTest : BootstrapBlazorTestBase var filter = cut.Instance; cut.InvokeAsync(() => filter.Reset()); } + [Fact] public void GetFilterConditions_Ok() { -- Gitee From 755b3eab07f30ee0594a452aac7ea94995c0b1d4 Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Wed, 16 Feb 2022 12:32:48 +0800 Subject: [PATCH 3/8] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Components/TableNumberFilterTest.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 test/UnitTest/Components/TableNumberFilterTest.cs diff --git a/test/UnitTest/Components/TableNumberFilterTest.cs b/test/UnitTest/Components/TableNumberFilterTest.cs new file mode 100644 index 000000000..f9829ad99 --- /dev/null +++ b/test/UnitTest/Components/TableNumberFilterTest.cs @@ -0,0 +1,12 @@ +// Copyright (c) Argo Zhang (argo@163.com). All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Website: https://www.blazor.zone or https://argozhang.github.io/ + +using BootstrapBlazor.Shared; +using UnitTest.Extensions; + +namespace UnitTest.Components; + +public class TableNumberFilterTest : BootstrapBlazorTestBase +{ +} -- Gitee From 41276016af60335975161bbe4e76909c4fb7e19d Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Wed, 16 Feb 2022 12:33:00 +0800 Subject: [PATCH 4/8] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E8=A6=86=E7=9B=96=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/TableNumberFilterTest.cs | 116 ++++++++++++++++++ 1 file changed, 116 insertions(+) diff --git a/test/UnitTest/Components/TableNumberFilterTest.cs b/test/UnitTest/Components/TableNumberFilterTest.cs index f9829ad99..be4e5db4c 100644 --- a/test/UnitTest/Components/TableNumberFilterTest.cs +++ b/test/UnitTest/Components/TableNumberFilterTest.cs @@ -9,4 +9,120 @@ namespace UnitTest.Components; public class TableNumberFilterTest : BootstrapBlazorTestBase { + [Fact] + public void Reset_Ok() + { + var cut = Context.RenderComponent>(); + + var filter = cut.Instance; + cut.InvokeAsync(() => filter.Reset()); + } + + [Fact] + public void GetFilterConditions_Ok() + { + var cut = Context.RenderComponent>(); + + var filter = cut.Instance; + IEnumerable? condtions = null; + cut.InvokeAsync(() => condtions = filter.GetFilterConditions()); + Assert.Empty(condtions); + + // Set Value + var dt = cut.FindComponent>(); + cut.InvokeAsync(() => dt.Instance.SetValue(10)); + cut.InvokeAsync(() => condtions = filter.GetFilterConditions()); + Assert.Single(condtions); + } + + [Fact] + public void Count_Ok() + { + var cut = Context.RenderComponent>(pb => + { + pb.Add(a => a.Count, 2); + }); + + var logic = cut.FindComponent(); + Assert.NotNull(logic); + + var conditions = cut.Instance.GetFilterConditions(); + Assert.Empty(conditions); + + var dt = cut.FindComponent>().Instance; + cut.InvokeAsync(() => dt.SetValue(10)); + + conditions = cut.Instance.GetFilterConditions(); + Assert.Single(conditions); + + dt = cut.FindComponents>()[1].Instance; + cut.InvokeAsync(() => dt.SetValue(10)); + + conditions = cut.Instance.GetFilterConditions(); + Assert.Equal(2, conditions.Count()); + } + + [Fact] + public void NotNumber_Ok() + { + var cut = Context.RenderComponent>(pb => + { + pb.Add(a => a.Count, 2); + }); + } + + [Fact] + public void Misc_Ok() + { + var cut = Context.RenderComponent(pb => + { + pb.AddChildContent>(pb => + { + pb.Add(a => a.Items, new List() { new Foo() }); + pb.Add(a => a.RenderMode, TableRenderMode.Table); + pb.Add(a => a.ShowFilterHeader, true); + pb.Add(a => a.TableColumns, new RenderFragment(foo => builder => + { + var index = 0; + builder.OpenComponent>(index++); + builder.AddAttribute(index++, nameof(TableColumn.Field), foo.Count); + builder.AddAttribute(index++, nameof(TableColumn.FieldExpression), foo.GenerateValueExpression(nameof(Foo.Count), typeof(int))); + builder.AddAttribute(index++, nameof(TableColumn.Filterable), true); + builder.CloseComponent(); + })); + }); + }); + var filter = cut.FindComponent>(); + var input = filter.FindComponent>(); + IEnumerable? condtions = null; + + // Click ToDay Cell + cut.InvokeAsync(() => + { + input.Instance.SetValue(10); + }); + + // OnFilterValueChanged + var filterButton = cut.FindComponent>(); + var logics = filterButton.FindAll(".dropdown-item"); + Assert.Equal(6, logics.Count); + cut.InvokeAsync(() => + { + logics[1].Click(); + condtions = filter.Instance.GetFilterConditions(); + }); + Assert.Single(condtions); + Assert.Equal(10, condtions!.First().FieldValue); + Assert.Equal(FilterAction.LessThanOrEqual, condtions!.First().FilterAction); + + // OnClearFilter + cut.InvokeAsync(() => + { + filterButton.Find(".fa-ban").Click(); + condtions = filter.Instance.GetFilterConditions(); + }); + Assert.Single(condtions); + Assert.Equal(0, condtions!.First().FieldValue); + Assert.Equal(FilterAction.GreaterThanOrEqual, condtions!.First().FilterAction); + } } -- Gitee From 2ecc1e44db1afd2a85ed522f6ea78b8b11fbc891 Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Wed, 16 Feb 2022 12:53:48 +0800 Subject: [PATCH 5/8] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Components/TableFilterTest.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/UnitTest/Components/TableFilterTest.cs b/test/UnitTest/Components/TableFilterTest.cs index 40d61de2c..06575d93a 100644 --- a/test/UnitTest/Components/TableFilterTest.cs +++ b/test/UnitTest/Components/TableFilterTest.cs @@ -108,8 +108,8 @@ public class TableFilterTest : BootstrapBlazorTestBase var column = new TableColumn(); column.SetParametersAsync(ParameterView.FromDictionary(new Dictionary() { - ["Field"] = foo.Name, - ["FieldExpression"] = foo.GenerateValueExpression() + [nameof(TableColumn.Field)] = foo.Name, + [nameof(TableColumn.FieldExpression)] = foo.GenerateValueExpression(), })); pb.Add(a => a.IsHeaderRow, true); pb.Add(a => a.Column, column); -- Gitee From e5b7b81e5ea6bf08bef0e84f76adaf19b1214b52 Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Wed, 16 Feb 2022 12:53:59 +0800 Subject: [PATCH 6/8] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E8=A6=86=E7=9B=96=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/TableNumberFilterTest.cs | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/UnitTest/Components/TableNumberFilterTest.cs b/test/UnitTest/Components/TableNumberFilterTest.cs index be4e5db4c..2a14e4606 100644 --- a/test/UnitTest/Components/TableNumberFilterTest.cs +++ b/test/UnitTest/Components/TableNumberFilterTest.cs @@ -125,4 +125,29 @@ public class TableNumberFilterTest : BootstrapBlazorTestBase Assert.Equal(0, condtions!.First().FieldValue); Assert.Equal(FilterAction.GreaterThanOrEqual, condtions!.First().FilterAction); } + + [Fact] + public void NotNumberType_OnFilterValueChanged() + { + var cut = Context.RenderComponent(pb => + { + var foo = new Foo(); + var column = new TableColumn(); + column.SetParametersAsync(ParameterView.FromDictionary(new Dictionary() + { + [nameof(TableColumn.Field)] = foo.Name, + [nameof(TableColumn.FieldExpression)] = foo.GenerateValueExpression(), + [nameof(TableColumn.FilterTemplate)] = new RenderFragment(builder => + { + builder.OpenComponent>(0); + builder.CloseComponent(); + }) + })); + pb.Add(a => a.IsHeaderRow, true); + pb.Add(a => a.Column, column); + }); + + var input = cut.FindComponent>().Instance; + cut.InvokeAsync(() => input.SetValue("10")); + } } -- Gitee From 3be030fdc4b130048d04bdf0f80bd09046754845 Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Wed, 16 Feb 2022 13:01:10 +0800 Subject: [PATCH 7/8] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Filters/FilterBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/Filters/FilterBase.cs b/src/BootstrapBlazor/Components/Filters/FilterBase.cs index 698e65ba2..6ca9b68cf 100644 --- a/src/BootstrapBlazor/Components/Filters/FilterBase.cs +++ b/src/BootstrapBlazor/Components/Filters/FilterBase.cs @@ -36,7 +36,7 @@ public abstract class FilterBase : ComponentBase, IFilterAction /// /// 获得 当前过滤条件是否激活 /// - protected bool HasFilter => TableFilter?.HasFilter ?? false; + protected bool HasFilter => TableFilter!.HasFilter; // IsHeaderRow 为真时使用 TableFilter 不为空 /// /// 获得/设置 条件数量 -- Gitee From 18ee76eed1fd01ec15296061f11a57ef7570f642 Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Wed, 16 Feb 2022 13:01:19 +0800 Subject: [PATCH 8/8] =?UTF-8?q?doc:=20=E5=A2=9E=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Components/TableNumberFilterTest.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/test/UnitTest/Components/TableNumberFilterTest.cs b/test/UnitTest/Components/TableNumberFilterTest.cs index 2a14e4606..12ff6f4d6 100644 --- a/test/UnitTest/Components/TableNumberFilterTest.cs +++ b/test/UnitTest/Components/TableNumberFilterTest.cs @@ -147,6 +147,7 @@ public class TableNumberFilterTest : BootstrapBlazorTestBase pb.Add(a => a.Column, column); }); + // InHeaderRow 非数字类型过滤器测试 var input = cut.FindComponent>().Instance; cut.InvokeAsync(() => input.SetValue("10")); } -- Gitee