Skip to content

Commit

Permalink
fix(Select): can not switch Value when data type is SelectedItem on V…
Browse files Browse the repository at this point in the history
…irtual mode (#4850)

* fix: 修复虚拟数据无法切换数据问题

* test: 更新单元测试

* refactor: 精简代码

* Revert "refactor: 精简代码"

This reverts commit 114d3ad.

* refactor: 重构代码

* test: 更新单元测试
  • Loading branch information
ArgoZhang authored Dec 14, 2024
1 parent c673833 commit 8b246b8
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 22 deletions.
19 changes: 10 additions & 9 deletions src/BootstrapBlazor/Components/Select/Select.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ private SelectedItem? SelectedRow
var item = Rows.Find(i => i.Value == CurrentValueAsString)
?? Rows.Find(i => i.Active)
?? Rows.Where(i => !i.IsDisabled).FirstOrDefault()
?? GetVirtualizeItem();
?? GetVirtualizeItem(CurrentValueAsString);

if (item != null)
{
Expand Down Expand Up @@ -376,22 +376,23 @@ protected override bool TryParseValueFromString(string value, [MaybeNullWhen(fal

private bool TryParseSelectItem(string value, [MaybeNullWhen(false)] out TValue result, out string? validationErrorMessage)
{
SelectedItem = Items.FirstOrDefault(i => i.Value == value)
?? GetVirtualizeItem();
SelectedItem = Rows.FirstOrDefault(i => i.Value == value)
?? GetVirtualizeItem(value);

// support SelectedItem? type
result = SelectedItem != null ? (TValue)(object)SelectedItem : default;
validationErrorMessage = "";
return SelectedItem != null;
}

private SelectedItem? GetVirtualizeItem()
private SelectedItem? GetVirtualizeItem(string value)
{
return OnQueryAsync == null ? null : GetSelectedItem();

SelectedItem? GetSelectedItem() => ValueType == typeof(SelectedItem)
? (SelectedItem)(object)Value
: new SelectedItem(CurrentValueAsString, DefaultVirtualizeItemText ?? CurrentValueAsString);
SelectedItem? item = null;
if (_result.Items != null)
{
item = _result.Items.FirstOrDefault(i => i.Value == value) ?? new SelectedItem(value, DefaultVirtualizeItemText ?? value);
}
return item;
}

/// <summary>
Expand Down
23 changes: 10 additions & 13 deletions test/UnitTest/Components/SelectTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -747,7 +747,7 @@ public async Task IsVirtualize_OnQueryAsync_Clearable_Ok()
}

[Fact]
public void IsVirtualize_BindValue()
public async Task IsVirtualize_BindValue()
{
var value = new SelectedItem("3", "Test 3");
var cut = Context.RenderComponent<Select<SelectedItem>>(pb =>
Expand All @@ -772,24 +772,21 @@ public void IsVirtualize_BindValue()
});
});

cut.InvokeAsync(() =>
{
var input = cut.Find(".form-select");
Assert.Equal("Test 3", input.GetAttribute("value"));
});
cut.Contains("Test 3");
var input = cut.Find(".form-select");
Assert.Null(input.GetAttribute("value"));

var select = cut.Instance;
Assert.Equal("3", select.Value?.Value);

cut.InvokeAsync(() =>
var item = cut.Find(".dropdown-item");
await cut.InvokeAsync(() =>
{
var item = cut.Find(".dropdown-item");
item.Click();
Assert.Equal("1", value.Value);

var input = cut.Find(".form-select");
Assert.Equal("Test1", input.GetAttribute("value"));
});
Assert.Equal("1", value.Value);

input = cut.Find(".form-select");
Assert.Equal("Test1", input.GetAttribute("value"));
}

[Fact]
Expand Down

0 comments on commit 8b246b8

Please sign in to comment.