Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 19 additions & 14 deletions src/BootstrapBlazor/Components/Select/Select.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,12 @@ public partial class Select<TValue> : ISelect, ILookup
[Parameter]
public object? LookupServiceData { get; set; }

/// <summary>
/// Gets or sets the default text for virtualized items. Default is null.
/// </summary>
[Parameter]
public string? DefaultVirtualizeItemText { get; set; }

/// <summary>
/// <inheritdoc/>
/// </summary>
Expand Down Expand Up @@ -169,17 +175,7 @@ private SelectedItem? SelectedRow
return null;
}

if (IsVirtualize)
{
_init = false;
return new SelectedItem(CurrentValueAsString, CurrentValueAsString);
}

var item = GetItemWithEnumValue()
?? Rows.Find(i => i.Value == CurrentValueAsString)
?? Rows.Find(i => i.Active)
?? Rows.FirstOrDefault(i => !i.IsDisabled);

var item = IsVirtualize ? GetItemByVirtulized() : GetItemByRows();
if (item != null)
{
if (_init && DisableItemChangedWhenFirstRender)
Expand All @@ -195,9 +191,18 @@ private SelectedItem? SelectedRow
return item;
}

private SelectedItem? GetItemWithEnumValue() => ValueType.IsEnum
? Rows.Find(i => i.Value == Convert.ToInt32(Value).ToString())
: null;
private SelectedItem? GetItemWithEnumValue() => ValueType.IsEnum ? Rows.Find(i => i.Value == Convert.ToInt32(Value).ToString()) : null;

private SelectedItem GetItemByVirtulized() => new(CurrentValueAsString, DefaultVirtualizeItemText ?? CurrentValueAsString);

private SelectedItem? GetItemByRows()
{
var item = GetItemWithEnumValue()
?? Rows.Find(i => i.Value == CurrentValueAsString)
?? Rows.Find(i => i.Active)
?? Rows.FirstOrDefault(i => !i.IsDisabled);
return item;
}

/// <summary>
/// <inheritdoc/>
Expand Down
8 changes: 0 additions & 8 deletions src/BootstrapBlazor/Components/Select/SelectBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -111,14 +111,6 @@ public abstract class SelectBase<TValue> : PopoverSelectBase<TValue>
[Parameter]
public int OverscanCount { get; set; } = 4;

/// <summary>
/// Gets or sets the default text for virtualized items. Default is null.
/// </summary>
[Parameter]
[ExcludeFromCodeCoverage]
[Obsolete("已弃用,删除即可;Deprecated, just delete")]
public string? DefaultVirtualizeItemText { get; set; }

/// <summary>
/// Gets or sets the callback method when the clear button is clicked. Default is null.
/// </summary>
Expand Down
50 changes: 49 additions & 1 deletion test/UnitTest/Components/SelectTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,7 @@ await cut.InvokeAsync(() =>
}

[Fact]
public void DisableItemChangedWhenFirstRender_Ok()
public void DisableItemChangedWhenFirstRender_False()
{
var triggered = false;

Expand All @@ -394,6 +394,30 @@ public void DisableItemChangedWhenFirstRender_Ok()
Assert.False(triggered);
}

[Fact]
public void DisableItemChangedWhenFirstRender_True()
{
var triggered = false;

// 空值时,不触发 OnSelectedItemChanged 回调
var cut = Context.RenderComponent<Select<string>>(pb =>
{
pb.Add(a => a.Items, new SelectedItem[]
{
new("1", "Test"),
new("2", "Test2")
});
pb.Add(a => a.Value, "");
pb.Add(a => a.OnSelectedItemChanged, item =>
{
triggered = true;
return Task.CompletedTask;
});
pb.Add(a => a.DisableItemChangedWhenFirstRender, false);
});
Assert.True(triggered);
}

[Fact]
public void Color_Ok()
{
Expand Down Expand Up @@ -736,6 +760,30 @@ public void ItemClick_Ok()
});
}

[Fact]
public void DefaultVirtualizeItemText_Ok()
{
var cut = Context.RenderComponent<Select<string>>(pb =>
{
pb.Add(a => a.Items, new SelectedItem[]
{
new("1", "Test1"),
new("2", "Test2")
});
pb.Add(a => a.Value, "3");
pb.Add(a => a.IsVirtualize, true);
});

var input = cut.Find(".form-select");
Assert.Contains("value=\"3\"", input.OuterHtml);

cut.SetParametersAndRender(pb =>
{
pb.Add(a => a.DefaultVirtualizeItemText, "Test3");
});
Assert.Contains("value=\"Test3\"", input.OuterHtml);
}

[Fact]
public void IsVirtualize_Items()
{
Expand Down
1 change: 1 addition & 0 deletions test/UnitTest/Components/TreeViewTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -596,6 +596,7 @@ public async Task IsVirtualize_Ok()
{
pb.Add(a => a.IsVirtualize, true);
pb.Add(a => a.RowHeight, 30f);
pb.Add(a => a.OverscanCount, 4);
pb.Add(a => a.OnExpandNodeAsync, async item =>
{
await Task.Delay(10);
Expand Down
Loading