Skip to content

Commit c4f78b4

Browse files
authored
feat(Search): remove IsAutoClearAfterSearch parameter (#5205)
* refactor: 增加虚方法规范子类 * refactor: 实现虚方法 * doc: 更新搜索示例 * refactor: 修复获得焦点自动全选失效问题 * refactor: 移除 IsAutoClearAfterSearch 参数 * doc: 更新示例代码说明 * refactor: 更新提示信息 * refactor: 增加过期标签 * test: 更新单元测试 * test: 更新单元测试
1 parent c95a60f commit c4f78b4

File tree

13 files changed

+83
-39
lines changed

13 files changed

+83
-39
lines changed

src/BootstrapBlazor.Server/Components/Samples/Searches.razor

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,6 @@
1818
<ConsoleLogger @ref="Logger" />
1919
</DemoBlock>
2020

21-
<DemoBlock Title="@Localizer["SearchesClearValueTitle"]"
22-
Introduction="@Localizer["SearchesClearValueIntro"]"
23-
Name="ClearValue">
24-
<Search IsAutoClearAfterSearch="true"
25-
PlaceHolder="@Localizer["SearchesPlaceHolder"]"
26-
OnSearch="@OnClearSearch" />
27-
<ConsoleLogger @ref="ClearLogger" />
28-
</DemoBlock>
29-
3021
<DemoBlock Title="@Localizer["SearchesDisplayButtonTitle"]"
3122
Introduction="@Localizer["SearchesDisplayButtonIntro"]"
3223
Name="DisplayButton">
@@ -73,7 +64,7 @@
7364
Introduction="@Localizer["SearchesValidateFormIntro"]"
7465
Name="ValidateForm">
7566
<ValidateForm Model="@Model">
76-
<Search @bind-Value="Model.Name" />
67+
<Search @bind-Value="Model.Name" OnSearch="@OnModelSearch" />
7768
</ValidateForm>
7869
</DemoBlock>
7970

src/BootstrapBlazor.Server/Components/Samples/Searches.razor.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ private Task<IEnumerable<string>> OnKeyboardSearch(string searchText)
5454

5555
private Foo Model { get; } = new() { Name = "" };
5656

57-
private string? OnGetDisplayText(Foo foo) => foo.Name;
57+
private static string? OnGetDisplayText(Foo? foo) => foo?.Name;
5858

5959
private async Task<IEnumerable<Foo>> OnSearchFoo(string searchText)
6060
{
@@ -69,6 +69,15 @@ private async Task<IEnumerable<Foo>> OnSearchFoo(string searchText)
6969
}).ToList();
7070
}
7171

72+
private async Task<IEnumerable<string>> OnModelSearch(string v)
73+
{
74+
// 模拟异步延时
75+
await Task.Delay(100);
76+
return string.IsNullOrEmpty(v)
77+
? Enumerable.Empty<string>()
78+
: Enumerable.Range(1, 10).Select(i => LocalizerFoo["Foo.Name", $"{i:d4}"].Value).ToList();
79+
}
80+
7281
/// <summary>
7382
/// 获得属性方法
7483
/// </summary>

src/BootstrapBlazor.Server/Locales/en-US.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4191,8 +4191,6 @@
41914191
"SearchesNormalTitle": "Basic usage",
41924192
"SearchesNormalIntro": "Enter some of the data to search",
41934193
"SearchesNormalDescription": "Please enter <code>1234</code> to get the Smart Prompt and turn on auto focus by setting <code>IsAutoFocus='true'</code>",
4194-
"SearchesClearValueTitle": "Values are automatically emptied after searching",
4195-
"SearchesClearValueIntro": "Turn on the automatic emptying of the search box after search by setting <code>IsAutoClearAfterSearch=&quot;true&quot;</code>",
41964194
"SearchesDisplayButtonTitle": "The Empty button is displayed",
41974195
"SearchesDisplayButtonIntro": "Control whether the Empty button is displayed by setting the <code>ShowClearButton</code> parameter",
41984196
"SearchesKeyboardsTitle": "Keyboard input instant search",

src/BootstrapBlazor.Server/Locales/zh-CN.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4191,12 +4191,10 @@
41914191
"SearchesNormalTitle": "基础用法",
41924192
"SearchesNormalIntro": "输入部分数据进行搜索",
41934193
"SearchesNormalDescription": "请输入 <code>1234</code> 获取智能提示,通过设置 <code>IsAutoFocus='true'</code> 开启自动获得焦点功能",
4194-
"SearchesClearValueTitle": "搜索后自动清空值",
4195-
"SearchesClearValueIntro": "通过设置 <code>IsAutoClearAfterSearch=&quot;true&quot;</code> 开启搜索后自动清空搜索框功能",
41964194
"SearchesDisplayButtonTitle": "显示清空按钮",
41974195
"SearchesDisplayButtonIntro": "通过设置 <code>ShowClearButton</code> 参数控制是否显示清空按钮",
41984196
"SearchesKeyboardsTitle": "键盘输入即时搜索",
4199-
"SearchesKeyboardsIntro": "通过设置 <code>IsTriggerSearchByInput</code> 参数控制是否实时进行搜索操作",
4197+
"SearchesKeyboardsIntro": "通过设置 <code>IsTriggerSearchByInput</code> 参数控制是否实时进行搜索操作,组件默认输入时即进行搜索,可通过 <code>IsTriggerSearchByInput=\"false\"</code> 关闭",
42004198
"SearchesValidateFormTitle": "验证表单内使用",
42014199
"SearchesValidateFormIntro": "内置于 <code>ValidateForm</code> 使用,输入中文时不会多次触发搜索功能",
42024200
"SearchesNoDataTip": "自动完成数据无匹配项时提示信息",

src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ private async Task OnClickItem(string val)
133133
/// </summary>
134134
/// <param name="val"></param>
135135
[JSInvokable]
136-
public async Task TriggerFilter(string val)
136+
public override async Task TriggerFilter(string val)
137137
{
138138
if (OnCustomFilter != null)
139139
{
@@ -165,7 +165,7 @@ public async Task TriggerFilter(string val)
165165
/// </summary>
166166
/// <param name="val"></param>
167167
[JSInvokable]
168-
public Task TriggerChange(string val)
168+
public override Task TriggerChange(string val)
169169
{
170170
CurrentValue = val;
171171
if (!ValueChanged.HasDelegate)

src/BootstrapBlazor/Components/AutoComplete/PopoverCompleteBase.cs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,11 @@ public abstract class PopoverCompleteBase<TValue> : BootstrapInputBase<TValue>,
131131
/// </summary>
132132
protected string? PlacementString => Placement == Placement.Auto ? null : Placement.ToDescriptionString();
133133

134+
/// <summary>
135+
/// 获得输入框 Id
136+
/// </summary>
137+
protected override string? GetInputId() => InputId;
138+
134139
/// <summary>
135140
/// 获得 CustomClass 字符串
136141
/// </summary>
@@ -149,9 +154,8 @@ protected override void OnParametersSet()
149154
}
150155

151156
/// <summary>
152-
/// 出发 OnBlur 回调方法 由 Javascript 触发
157+
/// 触发 OnBlur 回调方法 由 Javascript 触发
153158
/// </summary>
154-
/// <returns></returns>
155159
[JSInvokable]
156160
public async Task TriggerBlur()
157161
{
@@ -161,6 +165,22 @@ public async Task TriggerBlur()
161165
}
162166
}
163167

168+
/// <summary>
169+
/// TriggerFilter 方法
170+
/// </summary>
171+
/// <param name="val"></param>
172+
/// <returns></returns>
173+
[JSInvokable]
174+
public virtual Task TriggerFilter(string val) => Task.CompletedTask;
175+
176+
/// <summary>
177+
/// TriggerChange 方法
178+
/// </summary>
179+
/// <param name="val"></param>
180+
/// <returns></returns>
181+
[JSInvokable]
182+
public virtual Task TriggerChange(string val) => Task.CompletedTask;
183+
164184
/// <summary>
165185
/// <inheritdoc/>
166186
/// </summary>

src/BootstrapBlazor/Components/AutoFill/AutoFill.razor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ private async Task OnClickItem(TValue val)
142142
/// </summary>
143143
/// <param name="val"></param>
144144
[JSInvokable]
145-
public async Task TriggerFilter(string val)
145+
public override async Task TriggerFilter(string val)
146146
{
147147
if (OnCustomFilter != null)
148148
{
@@ -174,7 +174,7 @@ public async Task TriggerFilter(string val)
174174
/// </summary>
175175
/// <param name="val"></param>
176176
[JSInvokable]
177-
public Task TriggerChange(string val)
177+
public override Task TriggerChange(string val)
178178
{
179179
_displayText = val;
180180
StateHasChanged();

src/BootstrapBlazor/Components/Search/Search.razor

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<Button Color="SearchButtonColor" Text="@SearchButtonText" Icon="@ButtonIcon" OnClick="OnSearchClick" aria-label="Search"></Button>
2121
</div>
2222
<ul class="dropdown-menu">
23-
@foreach (var item in FilterItems)
23+
@foreach (var item in _filterItems)
2424
{
2525
<li class="dropdown-item" @onclick="() => OnClickItem(item)">
2626
@if (ItemTemplate != null)
@@ -33,7 +33,7 @@
3333
}
3434
</li>
3535
}
36-
@if (FilterItems.Count == 0)
36+
@if (_filterItems.Count == 0)
3737
{
3838
<li class="dropdown-item">@NoDataTip</li>
3939
}

src/BootstrapBlazor/Components/Search/Search.razor.cs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ public partial class Search<TValue>
6565
/// 获得/设置 点击搜索后是否自动清空搜索框
6666
/// </summary>
6767
[Parameter]
68+
[Obsolete("已弃用,删除即可; Deprecated. Just delete it")]
69+
[ExcludeFromCodeCoverage]
6870
public bool IsAutoClearAfterSearch { get; set; }
6971

7072
/// <summary>
@@ -111,7 +113,7 @@ public partial class Search<TValue>
111113
/// 获得/设置 UI 呈现数据集合
112114
/// </summary>
113115
[NotNull]
114-
private List<TValue>? FilterItems { get; set; }
116+
private List<TValue>? _filterItems = null;
115117

116118
/// <summary>
117119
/// <inheritdoc/>
@@ -126,7 +128,7 @@ protected override void OnParametersSet()
126128
SearchButtonText ??= Localizer[nameof(SearchButtonText)];
127129
ButtonIcon ??= SearchButtonIcon;
128130
NoDataTip ??= Localizer[nameof(NoDataTip)];
129-
FilterItems ??= [];
131+
_filterItems ??= [];
130132
}
131133

132134
private string _displayText = "";
@@ -142,13 +144,8 @@ private async Task OnSearchClick()
142144
await Task.Yield();
143145

144146
var items = await OnSearch(_displayText);
145-
FilterItems = items.ToList();
147+
_filterItems = items.ToList();
146148
ButtonIcon = SearchButtonIcon;
147-
if (IsAutoClearAfterSearch)
148-
{
149-
_displayText = "";
150-
}
151-
152149
if (IsTriggerSearchByInput == false)
153150
{
154151
await InvokeVoidAsync("showList", Id);
@@ -168,7 +165,7 @@ private async Task OnClearClick()
168165
await OnClear(_displayText);
169166
}
170167
_displayText = "";
171-
FilterItems = [];
168+
_filterItems = [];
172169
}
173170

174171
private string? GetDisplayText(TValue item)
@@ -195,12 +192,19 @@ private async Task OnClickItem(TValue val)
195192
}
196193
}
197194

195+
/// <summary>
196+
/// TriggerFilter 方法
197+
/// </summary>
198+
/// <param name="val"></param>
199+
[JSInvokable]
200+
public override Task TriggerFilter(string val) => TriggerChange(val);
201+
198202
/// <summary>
199203
/// TriggerOnChange 方法
200204
/// </summary>
201205
/// <param name="val"></param>
202206
[JSInvokable]
203-
public async Task TriggerChange(string val)
207+
public override async Task TriggerChange(string val)
204208
{
205209
_displayText = val;
206210

src/BootstrapBlazor/Locales/en.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@
148148
},
149149
"BootstrapBlazor.Components.Search": {
150150
"SearchButtonText": "Search",
151-
"NoDataTip": "Type something to search"
151+
"NoDataTip": "No records found"
152152
},
153153
"BootstrapBlazor.Components.Select": {
154154
"PlaceHolder": "Please select ...",

0 commit comments

Comments
 (0)