Skip to content

Commit 91b5efb

Browse files
committed
Merge branch 'main' into feat-upload
2 parents 20bebc4 + 5fdaee0 commit 91b5efb

File tree

8 files changed

+45
-30
lines changed

8 files changed

+45
-30
lines changed

src/BootstrapBlazor/BootstrapBlazor.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk.Razor">
22

33
<PropertyGroup>
4-
<Version>9.7.1-beta01</Version>
4+
<Version>9.7.1-beta02</Version>
55
</PropertyGroup>
66

77
<ItemGroup>

src/BootstrapBlazor/Components/BaseComponents/IdComponentBase.cs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,6 @@ public abstract class IdComponentBase : BootstrapComponentBase
2929
/// </summary>
3030
protected virtual string? RetrieveId() => Id;
3131

32-
/// <summary>
33-
/// <inheritdoc/>
34-
/// </summary>
35-
protected override void OnInitialized()
36-
{
37-
base.OnInitialized();
38-
39-
Id ??= ComponentIdGenerator.Generate(this);
40-
}
41-
4232
/// <summary>
4333
/// <inheritdoc/>
4434
/// </summary>

src/BootstrapBlazor/Components/Select/Select.razor.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ export function hide(id) {
5050
}
5151
}
5252

53+
export function resetValue(id, value) {
54+
const input = document.getElementById(id);
55+
if (input) {
56+
input.value = value;
57+
}
58+
}
59+
5360
export function dispose(id) {
5461
const select = Data.get(id)
5562
Data.remove(id)

src/BootstrapBlazor/Components/SelectGeneric/SelectGeneric.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<div class="dropdown-toggle" data-bs-toggle="@ToggleString" data-bs-placement="@PlacementString" data-bs-offset="@OffsetString" data-bs-custom-class="@CustomClassString">
1717
@if (DisplayTemplate != null)
1818
{
19-
<div id="@InputId" class="@InputClassString" tabindex="0">
19+
<div id="@InputId" class="@InputClassString">
2020
@DisplayTemplate(SelectedRow)
2121
</div>
2222
}

src/BootstrapBlazor/Components/SelectGeneric/SelectGeneric.razor.cs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,11 @@ public partial class SelectGeneric<TValue> : ISelectGeneric<TValue>, IModelEqual
7070

7171
/// <summary>
7272
/// 获得/设置 选项输入更新后转换为 Value 回调方法 默认 null
73+
/// <para>返回值为 null 时放弃操作</para>
7374
/// </summary>
7475
/// <remarks>设置 <see cref="IsEditable"/> 后生效</remarks>
7576
[Parameter]
76-
public Func<string, Task<TValue>>? TextConvertToValueCallback { get; set; }
77+
public Func<string, Task<TValue?>>? TextConvertToValueCallback { get; set; }
7778

7879
/// <summary>
7980
/// 获得/设置 选项模板支持静态数据
@@ -486,17 +487,24 @@ private async Task OnChange(ChangeEventArgs args)
486487

487488
if (item == null)
488489
{
489-
TValue val = default!;
490+
TValue? val = default;
490491
if (TextConvertToValueCallback != null)
491492
{
492493
val = await TextConvertToValueCallback(v);
493494
}
494-
item = new SelectedItem<TValue>(val, v);
495495

496-
var items = new List<SelectedItem<TValue>>() { item };
497-
items.AddRange(Items);
498-
Items = items;
499-
CurrentValue = val;
496+
if (val is not null)
497+
{
498+
item = new SelectedItem<TValue>(val, v);
499+
var items = new List<SelectedItem<TValue>>() { item };
500+
items.AddRange(Items);
501+
Items = items;
502+
CurrentValue = val;
503+
}
504+
else
505+
{
506+
await InvokeVoidAsync("resetValue", InputId, SelectedRow?.Text);
507+
}
500508
}
501509
else
502510
{

src/BootstrapBlazor/Components/Tab/TabItem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace BootstrapBlazor.Components;
88
/// <summary>
99
/// TabItem component
1010
/// </summary>
11-
public class TabItem : ComponentBase
11+
public class TabItem : IdComponentBase
1212
{
1313
/// <summary>
1414
/// Gets or sets the text. Default is null

src/BootstrapBlazor/Components/Tab/TabItemContent.cs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,6 @@ internal class TabItemContent : IComponent
1515
[Parameter, NotNull]
1616
public TabItem? Item { get; set; }
1717

18-
/// <summary>
19-
/// Gets <see cref="IComponentIdGenerator"/> instrance
20-
/// </summary>
21-
[Inject]
22-
[NotNull]
23-
private IComponentIdGenerator? ComponentIdGenerator { get; set; }
24-
2518
private RenderHandle _renderHandle;
2619

2720
void IComponent.Attach(RenderHandle renderHandle)
@@ -49,7 +42,7 @@ private void BuildRenderTree(RenderTreeBuilder builder)
4942
builder.OpenElement(0, "div");
5043
builder.SetKey(_key);
5144
builder.AddAttribute(5, "class", ClassString);
52-
builder.AddAttribute(6, "id", ComponentIdGenerator.Generate(Item));
45+
builder.AddAttribute(6, "id", Item.Id);
5346
builder.AddContent(10, Item.ChildContent);
5447
builder.CloseElement();
5548
}

test/UnitTest/Components/SelectGenericTest.cs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -856,14 +856,31 @@ public async Task IsEditable_Ok()
856856
});
857857
pb.Add(a => a.TextConvertToValueCallback, v =>
858858
{
859-
return Task.FromResult(v);
859+
return Task.FromResult(v)!;
860860
});
861861
});
862862
Assert.False(input.IsReadOnly());
863863

864864
await cut.InvokeAsync(() => { input.Change("Test3"); });
865865
Assert.Equal("Test3", cut.Instance.Value);
866866
Assert.True(updated);
867+
868+
// 覆盖返回 null 逻辑
869+
cut.SetParametersAndRender(pb =>
870+
{
871+
pb.Add(a => a.TextConvertToValueCallback, async v =>
872+
{
873+
await Task.Yield();
874+
return null;
875+
});
876+
});
877+
await cut.InvokeAsync(() => { input.Change("Test4"); });
878+
879+
cut.SetParametersAndRender(pb =>
880+
{
881+
pb.Add(a => a.Value, null);
882+
});
883+
await cut.InvokeAsync(() => { input.Change("Test5"); });
867884
}
868885

869886
[Fact]
@@ -881,7 +898,7 @@ public async Task IsEditable_Generic()
881898
pb.Add(a => a.IsEditable, true);
882899
pb.Add(a => a.TextConvertToValueCallback, v =>
883900
{
884-
return Task.FromResult(new Foo() { Id = 3, Address = "Foo3" });
901+
return Task.FromResult(new Foo() { Id = 3, Address = "Foo3" })!;
885902
});
886903
});
887904

0 commit comments

Comments
 (0)