From 44c3eecb53a1c8a9bceba1b3fb0f139cbf557e26 Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Wed, 22 Jun 2022 14:46:38 +0800 Subject: [PATCH 1/9] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20IsAutoCollapse?= =?UTF-8?q?dToolbarButton=20=E5=8F=82=E6=95=B0=E7=94=A8=E4=BA=8E=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E6=89=8B=E6=9C=BA=E7=AB=AF=E6=98=AF=E5=90=A6=E6=8A=98?= =?UTF-8?q?=E5=8F=A0=E5=B7=A5=E5=85=B7=E6=A0=8F=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Samples/Table/TablesEdit.razor | 2 +- .../Components/Table/Table.razor | 2 +- .../Components/Table/Table.razor.Toolbar.cs | 6 ++ .../Components/Table/TableToolbar.razor | 71 ++++++++++--------- .../Components/Table/TableToolbar.razor.cs | 10 +++ 5 files changed, 55 insertions(+), 36 deletions(-) diff --git a/src/BootstrapBlazor.Shared/Samples/Table/TablesEdit.razor b/src/BootstrapBlazor.Shared/Samples/Table/TablesEdit.razor index 7808fc2d0..a2cce5e6f 100644 --- a/src/BootstrapBlazor.Shared/Samples/Table/TablesEdit.razor +++ b/src/BootstrapBlazor.Shared/Samples/Table/TablesEdit.razor @@ -6,7 +6,7 @@

本例中设置 Count 右侧对齐,Complete 列设置为居中对齐,布尔类型列自动渲染成 Switch 组件

- @if (IsExcel || ShowToolbar) { - + @if (IsExcel || ShowDefaultButtons) { @if (ShowAddButton) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs index b8c3e466f..d24e1d752 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs @@ -75,6 +75,12 @@ public partial class Table [Parameter] public bool ShowExtendButtons { get; set; } + /// + /// 获得/设置 是否自动收缩工具栏按钮 默认 true + /// + [Parameter] + public bool IsAutoCollapsedToolbarButton { get; set; } = true; + /// /// 获得/设置 扩展按钮是否在前面 默认 false 在行尾 /// diff --git a/src/BootstrapBlazor/Components/Table/TableToolbar.razor b/src/BootstrapBlazor/Components/Table/TableToolbar.razor index b3d72418c..ef38f881b 100644 --- a/src/BootstrapBlazor/Components/Table/TableToolbar.razor +++ b/src/BootstrapBlazor/Components/Table/TableToolbar.razor @@ -8,7 +8,7 @@ @if (Buttons.Count > 0) { -
+
@foreach (var button in Buttons) { @if (button is TableToolbarButton b && b.IsShow) @@ -31,42 +31,45 @@ } }
-
- - + } }
diff --git a/src/BootstrapBlazor/Components/Table/TableToolbar.razor.cs b/src/BootstrapBlazor/Components/Table/TableToolbar.razor.cs index 38dc8b5be..abfa6bacf 100644 --- a/src/BootstrapBlazor/Components/Table/TableToolbar.razor.cs +++ b/src/BootstrapBlazor/Components/Table/TableToolbar.razor.cs @@ -34,6 +34,16 @@ public partial class TableToolbar : ComponentBase [NotNull] public Func>? OnGetSelectedRows { get; set; } + /// + /// 获得/设置 是否自动收缩工具栏按钮 默认 true + /// + [Parameter] + public bool IsAutoCollapsedToolbarButton { get; set; } = true; + + private string? ToolbarClassString => CssBuilder.Default("btn-toolbar btn-group") + .AddClass("d-none d-sm-inline-flex", IsAutoCollapsedToolbarButton) + .Build(); + private async Task OnToolbarButtonClick(TableToolbarButton button) { _asyncButtonStateCache.TryGetValue(button, out var disabled); -- Gitee From 4cba392c6e44e6473a8675f0cbd77eaf50d98b81 Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Wed, 22 Jun 2022 14:49:38 +0800 Subject: [PATCH 2/9] =?UTF-8?q?doc:=20=E5=A2=9E=E5=8A=A0=20IsAutoCollapsed?= =?UTF-8?q?ToolbarButtonAttr=20=E5=8F=82=E6=95=B0=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor.Shared/Locales/en.json | 1 + src/BootstrapBlazor.Shared/Locales/zh.json | 1 + src/BootstrapBlazor.Shared/Samples/Table/Tables.razor.cs | 8 ++++++++ 3 files changed, 10 insertions(+) diff --git a/src/BootstrapBlazor.Shared/Locales/en.json b/src/BootstrapBlazor.Shared/Locales/en.json index 68f069822..6c0f423cf 100644 --- a/src/BootstrapBlazor.Shared/Locales/en.json +++ b/src/BootstrapBlazor.Shared/Locales/en.json @@ -2924,6 +2924,7 @@ "BeforeRowButtonTemplateAttr": "Table Row Button Template Before Button", "RowButtonTemplateAttr": "Table Row Button Templates are placed after buttons by default", "DetailRowTemplateAttr": "Table Detail Line Template", + "IsAutoCollapsedToolbarButtonAttr": "Whether auto collapsed the buttons on toolbar", "IsBorderedAttr": "Border", "IsPaginationAttr": "Display pagination", "IsStripedAttr": "Zebra stripe", diff --git a/src/BootstrapBlazor.Shared/Locales/zh.json b/src/BootstrapBlazor.Shared/Locales/zh.json index b472ff3ed..c321fef3e 100644 --- a/src/BootstrapBlazor.Shared/Locales/zh.json +++ b/src/BootstrapBlazor.Shared/Locales/zh.json @@ -2936,6 +2936,7 @@ "BeforeRowButtonTemplateAttr": "Table 行按钮模板 放置到按钮前", "RowButtonTemplateAttr": "Table 行按钮模板 默认放置到按钮后", "DetailRowTemplateAttr": "Table 明细行模板", + "IsAutoCollapsedToolbarButtonAttr": "小屏时是否自动收缩工具栏按钮", "IsBorderedAttr": "边框", "IsPaginationAttr": "显示分页", "IsStripedAttr": "斑马纹", diff --git a/src/BootstrapBlazor.Shared/Samples/Table/Tables.razor.cs b/src/BootstrapBlazor.Shared/Samples/Table/Tables.razor.cs index 7c3f4208a..aec887379 100644 --- a/src/BootstrapBlazor.Shared/Samples/Table/Tables.razor.cs +++ b/src/BootstrapBlazor.Shared/Samples/Table/Tables.razor.cs @@ -501,6 +501,14 @@ public partial class Tables DefaultValue = " — " }, new() + { + Name = "IsAutoCollapsedToolbarButton", + Description = TablesLocalizer["IsAutoCollapsedToolbarButtonAttr"], + Type = "boolean", + ValueList = "true / false", + DefaultValue = "true" + }, + new() { Name = "IsBordered", Description = TablesLocalizer["IsBorderedAttr"], -- Gitee From d0573cc32de123962a369132c5831faf5e442ee8 Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Wed, 22 Jun 2022 15:53:21 +0800 Subject: [PATCH 3/9] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E5=8C=96=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor.Shared/Pages/Localization.razor | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/BootstrapBlazor.Shared/Pages/Localization.razor b/src/BootstrapBlazor.Shared/Pages/Localization.razor index bf43376e6..99cfb89f4 100644 --- a/src/BootstrapBlazor.Shared/Pages/Localization.razor +++ b/src/BootstrapBlazor.Shared/Pages/Localization.razor @@ -183,13 +183,13 @@ public class CultureController : Controller
public void ConfigureServices(IServiceCollection services)
 {
-    services.AddBootstrapBlazor(localizationAction: options =>
+    services.AddBootstrapBlazor(null, options =>
     {
         // 设置 RESX 格式多语言资源文件 如 Program.{CultureName}.resx
         options.ResourceManagerStringLocalizerType = typeof(Program);
 
         // 设置 Json 格式嵌入式资源文件
-        options.AdditionalAssemblies = new[] { typeof(BootstrapBlazor.Shared.App).Assembly };
+        options.AdditionalJsonAssemblies = new[] { typeof(BootstrapBlazor.Shared.App).Assembly };
 
         // 设置 Json 物理路径文件
         options.AdditionalJsonFiles = new string[]
@@ -215,7 +215,7 @@ public class CultureController : Controller
         };
 
         // 设置 Json 物理路径文件
-        options.AdditionalJsonFiles = new string[]
+        op.AdditionalJsonFiles = new string[]
         {
             @@"D:\Argo\src\BootstrapBlazor\src\BootstrapBlazor.Server\Locales\zh-TW.json",
             @@"D:\Argo\src\BootstrapBlazor\src\BootstrapBlazor.Server\Locales\zh-CN.json"
-- 
Gitee


From 40b8b693cf56f1109c43aef49720476dfa896d71 Mon Sep 17 00:00:00 2001
From: Argo-Lenovo 
Date: Wed, 22 Jun 2022 16:50:09 +0800
Subject: [PATCH 4/9] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E7=BC=96=E8=BE=91?=
 =?UTF-8?q?=E6=97=B6=E8=A7=A6=E5=8F=91=20SelectedRow=20=E5=8F=8C=E7=BB=91?=
 =?UTF-8?q?=E7=A4=BA=E4=BE=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Samples/Table/TablesDynamic.razor                       | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/BootstrapBlazor.Shared/Samples/Table/TablesDynamic.razor b/src/BootstrapBlazor.Shared/Samples/Table/TablesDynamic.razor
index f18c6c9db..32a300023 100644
--- a/src/BootstrapBlazor.Shared/Samples/Table/TablesDynamic.razor
+++ b/src/BootstrapBlazor.Shared/Samples/Table/TablesDynamic.razor
@@ -13,6 +13,12 @@
     
+
+ @foreach(var item in SelectedItems) + { +
@item.GetValue(nameof(Foo.Name))
+ } +
-- Gitee From a7c2f9d743e914b810aede06fbdd5493a8d8e9ab Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Wed, 22 Jun 2022 16:50:40 +0800 Subject: [PATCH 5/9] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20SelectedRow=20?= =?UTF-8?q?=E5=8F=8C=E7=BB=91=E6=97=B6=20=E7=BC=96=E8=BE=91=E4=B8=8D?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs index bc6b9ef17..01f799105 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs @@ -646,6 +646,10 @@ public partial class Table { SelectedRows.Clear(); SelectedRows.Add(item); + if(SelectedRowsChanged.HasDelegate) + { + await SelectedRowsChanged.InvokeAsync(SelectedRows); + } // 更新行选中状态 await EditAsync(); -- Gitee From 1456df83907d4c6965c06ce5ea5d1c0eb8c23ef8 Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Wed, 22 Jun 2022 17:03:51 +0800 Subject: [PATCH 6/9] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E8=A1=8C=E8=A7=A6=E5=8F=91=20SelectedRow=20=E5=8F=8C?= =?UTF-8?q?=E5=90=91=E7=BB=91=E5=AE=9A=E5=8D=95=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/TableTest.cs | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/test/UnitTest/Components/TableTest.cs b/test/UnitTest/Components/TableTest.cs index 1c125a616..e0af644e6 100644 --- a/test/UnitTest/Components/TableTest.cs +++ b/test/UnitTest/Components/TableTest.cs @@ -58,6 +58,35 @@ public class TableTest : TableTestBase Assert.True(binded); } + [Fact] + public async void SelectedRowsChanged_Bind() + { + var localizer = Context.Services.GetRequiredService>(); + var items = Foo.GenerateFoo(localizer, 2); + var selectedRows = new List(); + var count = 0; + var cut = Context.RenderComponent(pb => + { + pb.AddChildContent>(pb => + { + pb.Add(a => a.Items, items); + pb.Add(a => a.SelectedRows, selectedRows); + pb.Add(a => a.SelectedRowsChanged, EventCallback.Factory.Create>(this, rows => count = rows.Count)); + pb.Add(a => a.EditMode, EditMode.InCell); + pb.Add(a => a.RenderMode, TableRenderMode.Table); + pb.Add(a => a.ShowExtendButtons, true); + }); + }); + + // 编辑时触发 SelectedRow + var button = cut.Find("button"); + await cut.InvokeAsync(() => button.Click()); + + button = cut.Find("button"); + await cut.InvokeAsync(() => button.Click()); + Assert.Equal(1, count); + } + [Theory] [InlineData(InsertRowMode.First)] [InlineData(InsertRowMode.Last)] -- Gitee From 224cb8fb54493cc838399eb6a1c378803498c513 Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Wed, 22 Jun 2022 17:04:29 +0800 Subject: [PATCH 7/9] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=20IsAutoCollapse?= =?UTF-8?q?dToolbarButton=20=E5=8F=82=E6=95=B0=E5=8D=95=E5=85=83=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Components/TableTest.cs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/test/UnitTest/Components/TableTest.cs b/test/UnitTest/Components/TableTest.cs index e0af644e6..8b67fe938 100644 --- a/test/UnitTest/Components/TableTest.cs +++ b/test/UnitTest/Components/TableTest.cs @@ -5081,6 +5081,32 @@ public class TableTest : TableTestBase await cut.InvokeAsync(() => table.Instance.AddAsync()); } + [Fact] + public void IsAutoCollapsedToolbarButton_Ok() + { + var localizer = Context.Services.GetRequiredService>(); + var cut = Context.RenderComponent(pb => + { + pb.AddChildContent>(pb => + { + pb.Add(a => a.RenderMode, TableRenderMode.CardView); + pb.Add(a => a.IsAutoCollapsedToolbarButton, false); + pb.Add(a => a.ShowToolbar, true); + pb.Add(a => a.ShowExtendButtons, true); + pb.Add(a => a.OnQueryAsync, OnQueryAsync(localizer)); + pb.Add(a => a.TableColumns, foo => builder => + { + builder.OpenComponent>(0); + builder.AddAttribute(1, "Field", "Name"); + builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, "Name", typeof(string))); + builder.CloseComponent(); + }); + }); + }); + + Assert.DoesNotContain("btn-gear", cut.Markup); + Assert.Contains("btn-toolbar btn-group", cut.Markup); + } private static DataTable CreateDataTable(IStringLocalizer localizer) { var userData = new DataTable(); -- Gitee From 1102ffb55d4feea6027a63104cca938225f3de64 Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Wed, 22 Jun 2022 17:26:25 +0800 Subject: [PATCH 8/9] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E9=80=89=E4=B8=AD=E8=A1=8C=E5=8F=8C=E7=BB=91?= =?UTF-8?q?=E8=A2=AB=E6=B8=85=E9=99=A4=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs | 5 +---- .../Components/Table/Table.razor.Toolbar.cs | 7 ------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs index 01f799105..c22e395e2 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs @@ -646,10 +646,7 @@ public partial class Table { SelectedRows.Clear(); SelectedRows.Add(item); - if(SelectedRowsChanged.HasDelegate) - { - await SelectedRowsChanged.InvokeAsync(SelectedRows); - } + OnSelectedRowsChanged(); // 更新行选中状态 await EditAsync(); diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs index d24e1d752..5144af070 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs @@ -302,7 +302,6 @@ public partial class Table // 数据源为 DataTable 新建后重建行与列 await DynamicContext.AddAsync(SelectedRows.OfType()); ResetDynamicContext(); - SelectedRows.Clear(); StateHasChanged(); } else @@ -669,7 +668,6 @@ public partial class Table { await DynamicContext.DeleteAsync(SelectedRows.AsEnumerable().OfType()); ResetDynamicContext(); - SelectedRows.Clear(); StateHasChanged(); } else @@ -692,11 +690,6 @@ public partial class Table QueryItems = DynamicContext.GetItems().Cast(); RowsCache = null; - SelectedRows.Clear(); - if (DynamicContext.OnGetSelectedRows != null) - { - SelectedRows.AddRange(DynamicContext.OnGetSelectedRows().Cast()); - } } } -- Gitee From 22f143768e4177be43c12cf47dd04f2607ee0872 Mon Sep 17 00:00:00 2001 From: Argo-Lenovo Date: Wed, 22 Jun 2022 19:22:34 +0800 Subject: [PATCH 9/9] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=20OnSelectedRow?= =?UTF-8?q?=20=E5=9B=9E=E8=B0=83=E6=96=B9=E6=B3=95=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Table/Table.razor.Edit.cs | 6 ++++- test/UnitTest/Components/TableTest.cs | 24 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs index c22e395e2..905f90880 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs @@ -419,6 +419,10 @@ public partial class Table // 动态数据 SelectedRows.Clear(); QueryItems = DynamicContext.GetItems().Cast(); + if (DynamicContext.OnGetSelectedRows != null) + { + SelectedRows.AddRange(DynamicContext.OnGetSelectedRows().Cast()); + } TotalCount = QueryItems.Count(); } else @@ -646,7 +650,7 @@ public partial class Table { SelectedRows.Clear(); SelectedRows.Add(item); - OnSelectedRowsChanged(); + await OnSelectedRowsChanged(); // 更新行选中状态 await EditAsync(); diff --git a/test/UnitTest/Components/TableTest.cs b/test/UnitTest/Components/TableTest.cs index 8b67fe938..7ae1652fa 100644 --- a/test/UnitTest/Components/TableTest.cs +++ b/test/UnitTest/Components/TableTest.cs @@ -5107,6 +5107,30 @@ public class TableTest : TableTestBase Assert.DoesNotContain("btn-gear", cut.Markup); Assert.Contains("btn-toolbar btn-group", cut.Markup); } + + [Fact] + public void OnSelectedRows_Ok() + { + var localizer = Context.Services.GetRequiredService>(); + var items = Foo.GenerateFoo(localizer, 2); + var context = CreateDynamicContext(localizer); + var rows = context.GetItems().Take(1); + context.OnGetSelectedRows = () => rows; + var cut = Context.RenderComponent(pb => + { + pb.AddChildContent>(pb => + { + pb.Add(a => a.ShowToolbar, true); + pb.Add(a => a.RenderMode, TableRenderMode.Table); + pb.Add(a => a.IsMultipleSelect, true); + pb.Add(a => a.DynamicContext, context); + }); + }); + + var check = cut.FindComponents>().FirstOrDefault(i => i.Instance.State == CheckboxState.Checked); + Assert.NotNull(check); + } + private static DataTable CreateDataTable(IStringLocalizer localizer) { var userData = new DataTable(); -- Gitee