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
3 changes: 2 additions & 1 deletion src/BootstrapBlazor.Server/Components/Pages/Coms.razor
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
<div class="coms-search">
<div class="row">
<div class="col-12">
<Search @bind-Value="@SearchText" PlaceHolder="@Localizer["Search"]" OnSearch="@OnSearch" ShowClearButton="true"></Search>
<Search @bind-Value="@SearchText" PlaceHolder="@Localizer["Search"]"
OnSearch="@OnSearch" OnClear="OnClear" ShowClearButton="true"></Search>
</div>
</div>
<div class="coms-search-filter">
Expand Down
7 changes: 7 additions & 0 deletions src/BootstrapBlazor.Server/Components/Pages/Coms.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,11 @@ public sealed partial class Coms
SearchText = searchText;
return Task.FromResult<IEnumerable<string?>>(ComponentItems.Where(i => i.Contains(searchText, StringComparison.OrdinalIgnoreCase)).ToList());
}

private Task OnClear(string searchText)
{
SearchText = "";
StateHasChanged();
return Task.CompletedTask;
}
}
2 changes: 1 addition & 1 deletion src/BootstrapBlazor/BootstrapBlazor.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Razor">

<PropertyGroup>
<Version>9.4.9-beta01</Version>
<Version>9.4.9-beta02</Version>
</PropertyGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@
placeholder="@PlaceHolder" disabled="@Disabled" @ref="FocusElement"/>
<span class="form-select-append"><i class="@Icon"></i></span>
<span class="form-select-append ac-loading"><i class="@LoadingIcon"></i></span>
<RenderTemplate ChildContent="RenderItems"></RenderTemplate>
<RenderTemplate @ref="_dropdown">
@RenderDropdown
</RenderTemplate>
</div>

@code {
Expand Down
12 changes: 2 additions & 10 deletions src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ public partial class AutoComplete
private List<string>? _filterItems;

[NotNull]
private AutoCompleteItems? _dropdown = default;
private RenderTemplate? _dropdown = default;

/// <summary>
/// <inheritdoc/>
Expand Down Expand Up @@ -187,15 +187,7 @@ public override Task TriggerChange(string val)
StateHasChanged();
}
_render = true;
_dropdown.RenderContent();
_dropdown.Render();
return Task.CompletedTask;
}

private RenderFragment RenderItems => builder =>
{
builder.OpenComponent<AutoCompleteItems>(0);
builder.AddAttribute(10, "ChildContent", RenderDropdown);
builder.AddComponentReferenceCapture(20, dropdown => _dropdown = (AutoCompleteItems)dropdown);
builder.CloseComponent();
};
}
60 changes: 0 additions & 60 deletions src/BootstrapBlazor/Components/AutoComplete/AutoCompleteItems.cs

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@
namespace BootstrapBlazor.Components;

/// <summary>
/// RenderTemplate 组件
/// RenderTemplate component
/// </summary>
public partial class RenderTemplate
{
/// <summary>
/// 获得/设置 子组件
/// Gets or sets the child component
/// </summary>
[Parameter]
public RenderFragment? ChildContent { get; set; }

/// <summary>
/// 获得/设置 首次加载回调委托
/// Gets or sets the callback delegate for the first load
/// </summary>
[Parameter]
public Func<bool, Task>? OnRenderAsync { get; set; }
Expand All @@ -36,4 +36,12 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
await OnRenderAsync(firstRender);
}
}

/// <summary>
/// Render method
/// </summary>
public void Render()
{
StateHasChanged();
}
}
13 changes: 10 additions & 3 deletions src/BootstrapBlazor/Components/Search/Search.razor
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,14 @@
<Button Color="SearchButtonColor" Text="@SearchButtonText" Icon="@ButtonIcon" OnClick="OnSearchClick" aria-label="Search"></Button>
}
</div>
<ul class="dropdown-menu">
<RenderTemplate @ref="_dropdown">
@RenderDropdown
</RenderTemplate>
</div>

@code {
RenderFragment RenderDropdown =>
@<ul class="dropdown-menu">
@foreach (var item in _filterItems)
{
<li class="dropdown-item" @onclick="() => OnClickItem(item)">
Expand All @@ -73,5 +80,5 @@
{
<li class="dropdown-item">@NoDataTip</li>
}
</ul>
</div>
</ul>;
}
17 changes: 15 additions & 2 deletions src/BootstrapBlazor/Components/Search/Search.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,9 @@ public partial class Search<TValue>

private SearchContext<TValue> _context = default!;

[NotNull]
private RenderTemplate? _dropdown = default;

/// <summary>
/// <inheritdoc/>
/// </summary>
Expand Down Expand Up @@ -205,6 +208,14 @@ protected override void OnParametersSet()
}
}

private bool _render = true;

/// <summary>
/// <inheritdoc/>
/// </summary>
/// <returns></returns>
protected override bool ShouldRender() => _render;

private string _displayText = "";
/// <summary>
/// 点击搜索按钮时触发此方法
Expand All @@ -218,7 +229,7 @@ private async Task OnSearchClick()
await Task.Yield();

var items = await OnSearch(_displayText);
_filterItems = items.ToList();
_filterItems = [.. items];
ButtonIcon = SearchButtonIcon;
if (IsTriggerSearchByInput == false)
{
Expand Down Expand Up @@ -280,11 +291,13 @@ private async Task OnClickItem(TValue val)
[JSInvokable]
public override async Task TriggerChange(string val)
{
_render = false;
_displayText = val;

if (IsTriggerSearchByInput)
{
await OnSearchClick();
}
_render = true;
_dropdown.Render();
}
}