Skip to content

Commit 48ffa8c

Browse files
committed
refactor: 更新可为空逻辑
1 parent 903ed04 commit 48ffa8c

File tree

1 file changed

+16
-47
lines changed

1 file changed

+16
-47
lines changed

src/BootstrapBlazor/Components/Select/Select.razor.cs

Lines changed: 16 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public partial class Select<TValue> : ISelect, ILookup
4242
.AddClass($"text-danger", IsValid.HasValue && !IsValid.Value)
4343
.Build();
4444

45-
private bool GetClearable() => IsClearable && !IsDisabled;
45+
private bool GetClearable() => IsClearable && !IsDisabled && IsNullable();
4646

4747
/// <summary>
4848
/// 设置当前项是否 Active 方法
@@ -294,15 +294,17 @@ private SelectedItem? SelectedRow
294294

295295
private SelectedItem? GetSelectedRow()
296296
{
297-
298-
var canBeNull = ValueCanBeNull();
297+
if (Value is null)
298+
{
299+
return null;
300+
}
301+
299302
var item = GetItemWithEnumValue()
300303
?? Rows.Find(i => i.Value == CurrentValueAsString)
301304
?? Rows.Find(i => i.Active)
302-
?? Rows.FirstOrDefault(i => !i.IsDisabled&&!canBeNull)
305+
?? Rows.FirstOrDefault(i => !i.IsDisabled)
303306
?? GetVirtualizeItem(CurrentValueAsString);
304-
305-
307+
306308
if (item != null)
307309
{
308310
if (_init && DisableItemChangedWhenFirstRender)
@@ -396,7 +398,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
396398
/// </summary>
397399
private int TotalCount { get; set; }
398400

399-
private List<SelectedItem> GetVirtualItems() => FilterBySearchText(GetRowsByItems()).ToList();
401+
private List<SelectedItem> GetVirtualItems() => [.. FilterBySearchText(GetRowsByItems())];
400402

401403
/// <summary>
402404
/// 虚拟滚动数据加载回调方法
@@ -542,7 +544,6 @@ private async Task SelectedItemChanged(SelectedItem item)
542544
{
543545
if (_lastSelectedValueString != item.Value)
544546
{
545-
546547
item.Active = true;
547548
SelectedItem = item;
548549

@@ -559,7 +560,7 @@ private async Task SelectedItemChanged(SelectedItem item)
559560
}
560561

561562
/// <summary>
562-
/// 添加静态下拉项方法
563+
/// <inheritdoc/>
563564
/// </summary>
564565
/// <param name="item"></param>
565566
public void Add(SelectedItem item) => _children.Add(item);
@@ -579,50 +580,18 @@ private async Task OnClearValue()
579580
{
580581
await OnClearAsync();
581582
}
582-
583-
if (ValueCanBeNull())
584-
{
585583

586-
if (SelectedItem != null) SelectedItem.Active = false;
587-
SelectedItem = null;
588-
if (Items != null) //数据中存在多个IsActive= true的 需要都清空
589-
foreach (var nowItems in Items)
590-
{
591-
nowItems.Active = false;
592-
}
593-
// 触发 StateHasChanged
594-
_lastSelectedValueString = string.Empty;
595-
CurrentValueAsString = _lastSelectedValueString;
596-
this.Value = default;
597-
if (this.ValueChanged.HasDelegate)
598-
await this.ValueChanged.InvokeAsync(default);
599-
// 触发 SelectedItemChanged 事件--由于设置成了null
600-
//if (OnSelectedItemChanged != null)
601-
//{
602-
// await OnSelectedItemChanged(SelectedItem);
603-
//}
604-
return;
605-
}
606-
SelectedItem? item;
607584
if (OnQueryAsync != null)
608585
{
609586
await VirtualizeElement.RefreshDataAsync();
610-
item = _result.Items.FirstOrDefault();
611587
}
612-
else
613-
{
614-
item = Items.FirstOrDefault();
615-
}
616-
if (item != null)
617-
{
618-
await SelectedItemChanged(item);
619-
}
620-
}
621-
private bool ValueCanBeNull()
622-
{
623-
var tType = typeof(TValue);
624-
return !tType.IsValueType || Nullable.GetUnderlyingType(tType) != null;
588+
589+
_lastSelectedValueString = string.Empty;
590+
CurrentValue = default;
625591
}
592+
593+
private bool IsNullable() => !ValueType.IsValueType || NullableUnderlyingType != null;
594+
626595
private string? ReadonlyString => IsEditable ? null : "readonly";
627596

628597
private async Task OnChange(ChangeEventArgs args)

0 commit comments

Comments
 (0)