From 2f0bf5630b50a083ca00e1c38ef502fa5c6934e6 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Thu, 26 Oct 2023 13:49:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DTable=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=88=97=E6=8B=96=E5=8A=A8=E7=9A=84bug=EF=BC=8C=E5=90=8C?= =?UTF-8?q?=E6=97=B6=E4=BF=AE=E5=A4=8DResizeColumnCallback=E7=9A=84index?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E4=B8=8D=E6=AD=A3=E7=A1=AE=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/BootstrapBlazor.csproj | 2 +- .../Components/Table/Table.razor.js | 4 +++- .../ValidateForm/ValidateForm.razor.cs | 18 +++++++++--------- .../Extensions/JSModuleExtensions.cs | 2 +- src/BootstrapBlazor/Utils/Utility.cs | 2 -- test/UnitTest/Components/TableTest.cs | 10 +++++----- test/UnitTest/Components/ValidateFormTest.cs | 6 +++--- 7 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 9231d712a..33a4212b7 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@ - 7.11.2 + 7.11.3-beta01 diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.js b/src/BootstrapBlazor/Components/Table/Table.razor.js index 977c1cf36..30ad64832 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.js +++ b/src/BootstrapBlazor/Components/Table/Table.razor.js @@ -266,7 +266,8 @@ const setResizeListener = table => { eff(col, false) if (table.callbacks.resizeColumnCallback) { const width = getWidth(col.parentNode); - table.invoke.invokeMethodAsync(table.callbacks.resizeColumnCallback, index, width) + let currentIndex = [...table.tables[0].querySelectorAll('thead > tr > th')].filter(i => i.draggable).indexOf(col) + table.invoke.invokeMethodAsync(table.callbacks.resizeColumnCallback, currentIndex, width) } } ) @@ -361,6 +362,7 @@ const setDraggable = table => { EventHandler.on(col, 'dragstart', e => { col.parentNode.classList.add('table-dragging') col.classList.add('table-drag') + table.dragColumns = [...table.tables[0].querySelectorAll('thead > tr > th')].filter(i => i.draggable) index = table.dragColumns.indexOf(col) dragItem = col e.dataTransfer.effectAllowed = 'move' diff --git a/src/BootstrapBlazor/Components/ValidateForm/ValidateForm.razor.cs b/src/BootstrapBlazor/Components/ValidateForm/ValidateForm.razor.cs index 3eb8f2008..f6ca33933 100644 --- a/src/BootstrapBlazor/Components/ValidateForm/ValidateForm.razor.cs +++ b/src/BootstrapBlazor/Components/ValidateForm/ValidateForm.razor.cs @@ -99,7 +99,7 @@ public partial class ValidateForm /// /// 验证组件缓存 /// - private ConcurrentDictionary<(string FieldName, Type ModelType), (FieldIdentifier FieldIdentifier, IValidateComponent ValidateComponent)> ValidatorCache { get; } = new(); + private readonly ConcurrentDictionary<(string FieldName, Type ModelType), (FieldIdentifier FieldIdentifier, IValidateComponent ValidateComponent)> _validatorCache = new(); private string? DisableAutoSubmitString => (DisableAutoSubmitFormByEnter.HasValue && DisableAutoSubmitFormByEnter.Value) ? "true" : null; @@ -123,7 +123,7 @@ public partial class ValidateForm /// internal void AddValidator((string FieldName, Type ModelType) key, (FieldIdentifier FieldIdentifier, IValidateComponent IValidateComponent) value) { - ValidatorCache.TryAdd(key, value); + _validatorCache.TryAdd(key, value); } /// @@ -131,7 +131,7 @@ public partial class ValidateForm /// /// /// - internal bool TryRemoveValidator((string FieldName, Type ModelType) key, [MaybeNullWhen(false)] out (FieldIdentifier FieldIdentifier, IValidateComponent IValidateComponent) value) => ValidatorCache.TryRemove(key, out value); + internal bool TryRemoveValidator((string FieldName, Type ModelType) key, [MaybeNullWhen(false)] out (FieldIdentifier FieldIdentifier, IValidateComponent IValidateComponent) value) => _validatorCache.TryRemove(key, out value); /// /// 设置指定字段错误信息 @@ -156,7 +156,7 @@ public partial class ValidateForm if (exp.Expression != null) { var modelType = exp.Expression.Type; - var validator = ValidatorCache.FirstOrDefault(c => c.Key.ModelType == modelType && c.Key.FieldName == fieldName).Value.ValidateComponent; + var validator = _validatorCache.FirstOrDefault(c => c.Key.ModelType == modelType && c.Key.FieldName == fieldName).Value.ValidateComponent; if (validator != null) { var results = new List @@ -209,7 +209,7 @@ public partial class ValidateForm private bool TryGetValidator(Type modelType, string fieldName, [NotNullWhen(true)] out IValidateComponent validator) { - validator = ValidatorCache.FirstOrDefault(c => c.Key.ModelType == modelType && c.Key.FieldName == fieldName).Value.ValidateComponent; + validator = _validatorCache.FirstOrDefault(c => c.Key.ModelType == modelType && c.Key.FieldName == fieldName).Value.ValidateComponent; return validator != null; } @@ -229,10 +229,10 @@ public partial class ValidateForm else { // 遍历所有可验证组件进行数据验证 - foreach (var key in ValidatorCache.Keys) + foreach (var key in _validatorCache.Keys) { // 验证 DataAnnotations - var validatorValue = ValidatorCache[key]; + var validatorValue = _validatorCache[key]; var validator = validatorValue.ValidateComponent; var fieldIdentifier = validatorValue.FieldIdentifier; if (validator.IsNeedValidate) @@ -267,7 +267,7 @@ public partial class ValidateForm /// internal async Task ValidateFieldAsync(ValidationContext context, List results) { - if (!string.IsNullOrEmpty(context.MemberName) && ValidatorCache.TryGetValue((context.MemberName, context.ObjectType), out var v)) + if (!string.IsNullOrEmpty(context.MemberName) && _validatorCache.TryGetValue((context.MemberName, context.ObjectType), out var v)) { var validator = v.ValidateComponent; if (validator.IsNeedValidate) @@ -382,7 +382,7 @@ public partial class ValidateForm context.DisplayName = fieldIdentifier.GetDisplayName(); context.MemberName = fieldIdentifier.FieldName; - if (ValidatorCache.TryGetValue((fieldIdentifier.FieldName, fieldIdentifier.Model.GetType()), out var v)) + if (_validatorCache.TryGetValue((fieldIdentifier.FieldName, fieldIdentifier.Model.GetType()), out var v)) { var validator = v.ValidateComponent; diff --git a/src/BootstrapBlazor/Extensions/JSModuleExtensions.cs b/src/BootstrapBlazor/Extensions/JSModuleExtensions.cs index e921d195d..4bb8c1e3a 100644 --- a/src/BootstrapBlazor/Extensions/JSModuleExtensions.cs +++ b/src/BootstrapBlazor/Extensions/JSModuleExtensions.cs @@ -51,6 +51,6 @@ public static class JSModuleExtensions public static async ValueTask OpenBlankUrl(this IJSRuntime jsRuntime, string url) { var jSObjectReference = await jsRuntime.InvokeAsync(identifier: "import", "./_content/BootstrapBlazor/modules/utility.js"); - await jSObjectReference.InvokeVoidAsync("openBlank", url); + await jSObjectReference.InvokeVoidAsync("openBlankUrl", url); } } diff --git a/src/BootstrapBlazor/Utils/Utility.cs b/src/BootstrapBlazor/Utils/Utility.cs index 3ab1dda64..8904d4e6d 100644 --- a/src/BootstrapBlazor/Utils/Utility.cs +++ b/src/BootstrapBlazor/Utils/Utility.cs @@ -670,8 +670,6 @@ public static class Utility } } break; - default: - break; } return ret; } diff --git a/test/UnitTest/Components/TableTest.cs b/test/UnitTest/Components/TableTest.cs index 3ba0f1a22..6529b60be 100644 --- a/test/UnitTest/Components/TableTest.cs +++ b/test/UnitTest/Components/TableTest.cs @@ -1075,7 +1075,7 @@ public class TableTest : TableTestBase isFirstQuery = option.IsFristQuery; return Task.FromResult(new QueryData() { - Items = new Foo[0], + Items = Array.Empty(), TotalCount = 0, IsAdvanceSearch = true, IsFiltered = true, @@ -1121,7 +1121,7 @@ public class TableTest : TableTestBase isFirstQuery = option.IsFristQuery; return Task.FromResult(new QueryData() { - Items = new Foo[0], + Items = Array.Empty(), TotalCount = 0, IsAdvanceSearch = true, IsFiltered = true, @@ -4794,7 +4794,7 @@ public class TableTest : TableTestBase } [Fact] - public void Delete_Ok() + public async Task Delete_Ok() { var localizer = Context.Services.GetRequiredService>(); var items = Foo.GenerateFoo(localizer, 2); @@ -4817,10 +4817,10 @@ public class TableTest : TableTestBase }); }); var input = cut.Find("tbody tr input"); - cut.InvokeAsync(() => input.Click()); + await cut.InvokeAsync(() => input.Click()); var button = cut.FindComponent>(); - cut.InvokeAsync(() => button.Instance.OnConfirm.Invoke()); + await cut.InvokeAsync(() => button.Instance.OnConfirm.Invoke()); Assert.Single(items); } diff --git a/test/UnitTest/Components/ValidateFormTest.cs b/test/UnitTest/Components/ValidateFormTest.cs index 829d17650..290fcf894 100644 --- a/test/UnitTest/Components/ValidateFormTest.cs +++ b/test/UnitTest/Components/ValidateFormTest.cs @@ -209,9 +209,9 @@ public class ValidateFormTest : ValidateFormTestBase }); cut.Instance.SetError(f => f.Value, "Name_SetError"); - // 利用发射提高代码覆盖率 - var pi = cut.Instance.GetType().GetProperty("ValidatorCache", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)!; - var cache = (ConcurrentDictionary<(string FieldName, Type ModelType), (FieldIdentifier FieldIdentifier, IValidateComponent ValidateComponent)>)pi.GetValue(cut.Instance)!; + // 利用反射提高代码覆盖率 + var fieldInfo = cut.Instance.GetType().GetField("_validatorCache", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)!; + var cache = (ConcurrentDictionary<(string FieldName, Type ModelType), (FieldIdentifier FieldIdentifier, IValidateComponent ValidateComponent)>)fieldInfo.GetValue(cut.Instance)!; cache.Remove(("Value", typeof(Dummy)), out _); cut.Instance.SetError(f => f.Value, "Name_SetError"); } -- Gitee