From fc6d851b9933715b25653e129e4bba575fb282ec Mon Sep 17 00:00:00 2001 From: Argo-Asicotech Date: Fri, 2 Dec 2022 16:18:10 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20AutoSelectFirs?= =?UTF-8?q?tWhenValueIsNull=20=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Radio/RadioList.razor.cs | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/Radio/RadioList.razor.cs b/src/BootstrapBlazor/Components/Radio/RadioList.razor.cs index 0db1a26ad..e1518ef1d 100644 --- a/src/BootstrapBlazor/Components/Radio/RadioList.razor.cs +++ b/src/BootstrapBlazor/Components/Radio/RadioList.razor.cs @@ -42,6 +42,12 @@ public partial class RadioList [Parameter] public RenderFragment? ItemTemplate { get; set; } + /// + /// 获得/设置 未设置选中项时是否自动选择第一项 默认 true + /// + [Parameter] + public bool AutoSelectFirstWhenValueIsNull { get; set; } = true; + private string? GroupName => Id; private string? RadioClassString => CssBuilder.Default("radio-list") @@ -64,7 +70,7 @@ public partial class RadioList NullItemText ??= ""; - if (!Items.Any(i => i.Value == CurrentValueAsString)) + if (AutoSelectFirstWhenValueIsNull && !Items.Any(i => i.Value == CurrentValueAsString)) { CurrentValueAsString = Items.FirstOrDefault()?.Value ?? ""; } @@ -77,6 +83,31 @@ public partial class RadioList /// protected override string? FormatValueAsString(TValue value) => value is SelectedItem v ? v.Value : base.FormatValueAsString(value); + /// + /// + /// + /// + /// + /// + /// + protected override bool TryParseValueFromString(string value, [MaybeNullWhen(false)] out TValue result, out string? validationErrorMessage) + { + var ret = false; + var t = NullableUnderlyingType ?? typeof(TValue); + result = default; + if (t == typeof(SelectedItem)) + { + var item = Items.FirstOrDefault(i => i.Value == value); + if (item != null) + { + result = (TValue)(object)item; + ret = true; + } + } + validationErrorMessage = null; + return ret || base.TryParseValueFromString(value, out result, out validationErrorMessage); + } + /// /// /// -- Gitee From be1f3e9f8cecb03d4901c4ea5fd2f48b7a618c8b Mon Sep 17 00:00:00 2001 From: Argo-Asicotech Date: Fri, 2 Dec 2022 16:18:19 +0800 Subject: [PATCH 2/4] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor.Shared/Samples/Radios.razor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor.Shared/Samples/Radios.razor.cs b/src/BootstrapBlazor.Shared/Samples/Radios.razor.cs index 0594c5703..809e3e8c7 100644 --- a/src/BootstrapBlazor.Shared/Samples/Radios.razor.cs +++ b/src/BootstrapBlazor.Shared/Samples/Radios.razor.cs @@ -70,7 +70,7 @@ public sealed partial class Radios }; Items = new SelectedItem[] { - new SelectedItem("1", Localizer["Add1"]) { Active = true }, + new SelectedItem("1", Localizer["Add1"]), new SelectedItem("2", Localizer["Add2"]) }; Model = Foo.Generate(LocalizerFoo); -- Gitee From 24fb4bad5d21756e04e8f794f8f87d8c079a5295 Mon Sep 17 00:00:00 2001 From: Argo-Asicotech Date: Fri, 2 Dec 2022 16:27:02 +0800 Subject: [PATCH 3/4] =?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/RadioTest.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/test/UnitTest/Components/RadioTest.cs b/test/UnitTest/Components/RadioTest.cs index 0c7096ab9..0f1aad21e 100644 --- a/test/UnitTest/Components/RadioTest.cs +++ b/test/UnitTest/Components/RadioTest.cs @@ -170,6 +170,23 @@ public class RadioTest : BootstrapBlazorTestBase cut.Contains("item-template-2"); } + [Fact] + public void AutoSelectFirstWhenValueIsNull_Ok() + { + var cut = Context.RenderComponent>(pb => + { + pb.Add(a => a.AutoSelectFirstWhenValueIsNull, false); + pb.Add(a => a.Items, new List + { + new("1", "Test1"), + new("2", "Test2") + }); + pb.Add(a => a.Value, new SelectedItem()); + }); + cut.Contains("class=\"form-check-label\""); + cut.DoesNotContain("is-checked"); + } + [Fact] public void ValidateForm_Ok() { -- Gitee From 4997e7fe11255dfb1b905962444461b384912874 Mon Sep 17 00:00:00 2001 From: Argo-Asicotech Date: Fri, 2 Dec 2022 16:27:26 +0800 Subject: [PATCH 4/4] chore: bump version 7.0.10 --- src/BootstrapBlazor/BootstrapBlazor.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 13944d574..496c5aec3 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@ - 7.0.10-beta03 + 7.0.10 -- Gitee