Skip to content

Commit 6e214a7

Browse files
committed
feat(Table): add search col.Name and InverseSelected in ColumnListSelectExtension
1 parent 698a1f7 commit 6e214a7

3 files changed

Lines changed: 63 additions & 6 deletions

File tree

src/BootstrapBlazor/Components/Table/Table.razor

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,14 +120,21 @@
120120
<div class="dropdown-menu dropdown-menu-end shadow">
121121
@if (ShowColumnListSelectExtension)
122122
{
123-
<div class="dropdown-item">
124-
<Checkbox TValue="string" State="@VisibleColumnsCurrentSelectedResult"
125-
OnStateChanged="@OnToggleAllColumnsVisibleState">
126-
</Checkbox>
123+
<div class="dropdown-item column-list-select-extension">
124+
<BootstrapInputGroup>
125+
<Checkbox TValue="string" State="@VisibleColumnsCurrentSelectedResult"
126+
OnStateChanged="@OnToggleAllColumnsVisibleState">
127+
</Checkbox>
128+
<BootstrapInput Value="@_visibleColumnsSearchKey" IsClearable="true"
129+
OnValueChanged="@SearchVisibleColumns" UseInputEvent="true"/>
130+
<Button Icon="fa-solid fa-arrows-rotate" TooltipText="反选当前列显示"
131+
TooltipTrigger="hover" Color="Color.Secondary"
132+
OnClick="@InverseSelected"></Button>
133+
</BootstrapInputGroup>
127134
</div>
128135
<Divider/>
129136
}
130-
@foreach (var item in _visibleColumns)
137+
@foreach (var item in ShowColumnListSelectExtension ? VisibleColumnsSearchResult : _visibleColumns)
131138
{
132139
<div class="dropdown-item">
133140
<Checkbox ShowAfterLabel="true" DisplayText="@item.DisplayName"

src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,47 @@ private CheckboxState VisibleColumnsCurrentSelectedResult
184184
? CheckboxState.UnChecked
185185
: CheckboxState.Indeterminate;
186186

187+
private string _visibleColumnsSearchKey = "";
188+
189+
/// <summary>
190+
/// 获得/设置 各列是否显示状态集合
191+
/// </summary>
192+
private List<ColumnVisibleItem> VisibleColumnsSearchResult
193+
=> string.IsNullOrWhiteSpace(_visibleColumnsSearchKey)
194+
? _visibleColumns : _visibleColumnsSearchResult;
195+
196+
/// <summary>
197+
/// 获得/设置 各列是否显示状态集合
198+
/// </summary>
199+
private List<ColumnVisibleItem> _visibleColumnsSearchResult = [];
200+
201+
private async Task SearchVisibleColumns(string searchKey)
202+
{
203+
_visibleColumnsSearchKey = searchKey;
204+
_visibleColumnsSearchResult = _visibleColumns
205+
.Where(r =>
206+
string.IsNullOrWhiteSpace(_visibleColumnsSearchKey) ||
207+
(r.DisplayName ?? r.Name).Contains(_visibleColumnsSearchKey))
208+
.ToList();
209+
await InvokeAsync(StateHasChanged);
210+
}
211+
212+
private async Task InverseSelected()
213+
{
214+
foreach (var column in _visibleColumns)
215+
{
216+
column.Visible = !column.Visible;
217+
await OnToggleColumnVisible(column.Name, column.Visible);
218+
}
219+
220+
if (VisibleColumnsCurrentSelectedResult == CheckboxState.UnChecked && _visibleColumns.Any())
221+
{
222+
await ShowToastAsync("提示", "表格需要至少有一列显示,全不选时默认第一列维持显示状态", ToastCategory.Warning);
223+
_visibleColumns[0].Visible = true;
224+
}
225+
await InvokeAsync(StateHasChanged);
226+
}
227+
187228
private async Task OnToggleAllColumnsVisibleState(CheckboxState state, string _)
188229
{
189230
if (state == CheckboxState.Checked)
@@ -194,7 +235,7 @@ private async Task OnToggleAllColumnsVisibleState(CheckboxState state, string _)
194235
}
195236
else if (state == CheckboxState.UnChecked)
196237
{
197-
await ShowToastAsync("提示", "表格需要至少有一列显示,点击全不选时默认第一列维持显示状态", ToastCategory.Warning);
238+
await ShowToastAsync("提示", "表格需要至少有一列显示,全不选时默认第一列维持显示状态", ToastCategory.Warning);
198239
foreach (var column in _visibleColumns.Skip(1).ToList())
199240
{
200241
column.Visible = false;

src/BootstrapBlazor/Components/Table/Table.razor.scss

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -975,3 +975,12 @@ form .table .table-cell > textarea {
975975
margin-inline-end: .25rem;
976976
}
977977
}
978+
979+
.column-list-select-extension {
980+
min-width: 250px;
981+
}
982+
983+
.column-list-select-extension > .input-group > .form-check {
984+
flex-grow: 0;
985+
width: 40px;
986+
}

0 commit comments

Comments
 (0)