Skip to content

Commit ef092e1

Browse files
committed
refactor: 重构组件名称
1 parent 11149cf commit ef092e1

File tree

15 files changed

+332
-332
lines changed

15 files changed

+332
-332
lines changed

src/BootstrapBlazor.Server/Components/Samples/Table/TablesFilter.razor

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
</TableColumn>
6666
<TableColumn @bind-Field="@context.Count" Width="100" Sortable="true" Filterable="true">
6767
<FilterTemplate>
68-
<TableColumnFilter TFilter="CustomerFilter"></TableColumnFilter>
68+
<Filter TFilter="CustomerFilter"></Filter>
6969
</FilterTemplate>
7070
</TableColumn>
7171
</TableColumns>
@@ -211,22 +211,22 @@
211211
<TableColumn @bind-Field="@context.DateTime" Width="180" Sortable="true" />
212212
<TableColumn @bind-Field="@context.Name" Width="100" Sortable="true" Filterable="true">
213213
<FilterTemplate>
214-
<TableColumnFilter TFilter="MultiFilter" FilterParameters="_multiFilterParameter1"></TableColumnFilter>
214+
<Filter TFilter="MultiFilter" FilterParameters="_multiFilterParameter1"></Filter>
215215
</FilterTemplate>
216216
</TableColumn>
217217
<TableColumn @bind-Field="@context.Address" Sortable="true" Filterable="true">
218218
<FilterTemplate>
219-
<TableColumnFilter TFilter="MultiFilter" FilterParameters="_multiFilterParameter2"></TableColumnFilter>
219+
<Filter TFilter="MultiFilter" FilterParameters="_multiFilterParameter2"></Filter>
220220
</FilterTemplate>
221221
</TableColumn>
222222
<TableColumn @bind-Field="@context.Complete" Width="100" Sortable="true" Filterable="true">
223223
<FilterTemplate>
224-
<TableColumnFilter TFilter="MultiFilter" FilterParameters="_multiFilterParameter3"></TableColumnFilter>
224+
<Filter TFilter="MultiFilter" FilterParameters="_multiFilterParameter3"></Filter>
225225
</FilterTemplate>
226226
</TableColumn>
227227
<TableColumn @bind-Field="@context.Education" Width="100" Sortable="true" Filterable="true">
228228
<FilterTemplate>
229-
<TableColumnFilter TFilter="MultiFilter" FilterParameters="_multiFilterParameter4"></TableColumnFilter>
229+
<Filter TFilter="MultiFilter" FilterParameters="_multiFilterParameter4"></Filter>
230230
</FilterTemplate>
231231
</TableColumn>
232232
<TableColumn @bind-Field="@context.Count" Width="150" Sortable="true" />
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
@namespace BootstrapBlazor.Components
2+
@inherits ComponentBase
3+
@typeparam TFilter
4+
5+
@if (_isHeaderRow)
6+
{
7+
@RenderFilter()
8+
}
9+
else
10+
{
11+
<div class="card filter-item">
12+
<div class="card-header"><span>@Title</span></div>
13+
<div class="card-body">
14+
@RenderFilter()
15+
</div>
16+
<div class="card-footer">
17+
<div class="d-flex flex-fill">
18+
@if (ShowMoreButton)
19+
{
20+
<Button Color="Color.None" OnClick="OnClickPlus" Icon="@PlusIcon" IsDisabled="@(_count == 1)"></Button>
21+
<Button Color="Color.None" OnClick="OnClickMinus" Icon="@MinusIcon" IsDisabled="@(_count == 0)"></Button>
22+
}
23+
</div>
24+
<Button Color="Color.None" class="filter-dismiss" OnClick="OnClickReset" Text="@ClearButtonText"></Button>
25+
<Button Color="Color.None" class="filter-dismiss" OnClick="OnClickConfirm" Text="@FilterButtonText"></Button>
26+
</div>
27+
</div>
28+
}
Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the Apache 2.0 License
3+
// See the LICENSE file in the project root for more information.
4+
// Maintainer: Argo Zhang([email protected]) Website: https://www.blazor.zone
5+
6+
using Microsoft.Extensions.Localization;
7+
8+
namespace BootstrapBlazor.Components;
9+
10+
/// <summary>
11+
/// Filter 组件
12+
/// </summary>
13+
public partial class Filter<TFilter> where TFilter : IComponent
14+
{
15+
/// <summary>
16+
/// 获得/设置 过滤器组件参数集合 Default is null
17+
/// </summary>
18+
[Parameter]
19+
public IDictionary<string, object>? FilterParameters { get; set; }
20+
21+
/// <summary>
22+
/// 获得/设置 重置按钮文本
23+
/// </summary>
24+
[Parameter]
25+
[NotNull]
26+
public string? ClearButtonText { get; set; }
27+
28+
/// <summary>
29+
/// 获得/设置 过滤按钮文本
30+
/// </summary>
31+
[Parameter]
32+
[NotNull]
33+
public string? FilterButtonText { get; set; }
34+
35+
/// <summary>
36+
/// 获得/设置 Header 显示文字
37+
/// </summary>
38+
[Parameter]
39+
[NotNull]
40+
public string? Title { get; set; }
41+
42+
/// <summary>
43+
/// 获得/设置 增加过滤条件图标
44+
/// </summary>
45+
[Parameter]
46+
public string? PlusIcon { get; set; }
47+
48+
/// <summary>
49+
/// 获得/设置 减少过滤条件图标
50+
/// </summary>
51+
[Parameter]
52+
public string? MinusIcon { get; set; }
53+
54+
/// <summary>
55+
/// Gets or sets whether show the more button. Default is false.
56+
/// </summary>
57+
[Parameter]
58+
public bool ShowMoreButton { get; set; }
59+
60+
[CascadingParameter]
61+
private TableColumnFilter? TableColumnFilter { get; set; }
62+
63+
[Inject]
64+
[NotNull]
65+
private IStringLocalizer<TableColumnFilter>? Localizer { get; set; }
66+
67+
[Inject]
68+
[NotNull]
69+
private IIconTheme? IconTheme { get; set; }
70+
71+
private int _count;
72+
private string? _fieldKey;
73+
private bool _isHeaderRow = false;
74+
75+
/// <summary>
76+
/// <inheritdoc/>
77+
/// </summary>
78+
protected override void OnParametersSet()
79+
{
80+
base.OnParametersSet();
81+
82+
PlusIcon ??= IconTheme.GetIconByKey(ComponentIcons.TableFilterPlusIcon);
83+
MinusIcon ??= IconTheme.GetIconByKey(ComponentIcons.TableFilterMinusIcon);
84+
85+
FilterButtonText ??= Localizer[nameof(FilterButtonText)];
86+
ClearButtonText ??= Localizer[nameof(ClearButtonText)];
87+
88+
_isHeaderRow = TableColumnFilter.IsHeaderRow();
89+
_fieldKey = TableColumnFilter.GetFieldKey();
90+
}
91+
92+
/// <summary>
93+
/// 点击重置按钮时回调此方法
94+
/// </summary>
95+
/// <returns></returns>
96+
protected void OnClickReset()
97+
{
98+
TableColumnFilter?.Reset();
99+
}
100+
101+
/// <summary>
102+
/// 点击确认时回调此方法
103+
/// </summary>
104+
/// <returns></returns>
105+
protected async Task OnClickConfirm()
106+
{
107+
if (TableColumnFilter != null)
108+
{
109+
await TableColumnFilter.OnFilterAsync();
110+
}
111+
}
112+
113+
/// <summary>
114+
/// 点击增加按钮时回调此方法
115+
/// </summary>
116+
/// <returns></returns>
117+
private void OnClickPlus()
118+
{
119+
if (_count == 0)
120+
{
121+
_count++;
122+
}
123+
}
124+
125+
/// <summary>
126+
/// 点击减少按钮时回调此方法
127+
/// </summary>
128+
/// <returns></returns>
129+
private void OnClickMinus()
130+
{
131+
if (_count == 1)
132+
{
133+
_count--;
134+
}
135+
}
136+
137+
/// <summary>
138+
/// 渲染自定义过滤器方法
139+
/// </summary>
140+
/// <returns></returns>
141+
protected virtual RenderFragment RenderFilter() => builder =>
142+
{
143+
var filterType = typeof(TFilter);
144+
builder.OpenComponent<TFilter>(0);
145+
if (filterType.IsSubclassOf(typeof(FilterBase)))
146+
{
147+
builder.AddAttribute(1, nameof(FilterBase.FieldKey), _fieldKey);
148+
builder.AddAttribute(2, nameof(FilterBase.IsHeaderRow), _isHeaderRow);
149+
}
150+
if (filterType.IsSubclassOf(typeof(MultipleFilterBase)))
151+
{
152+
builder.AddAttribute(10, nameof(MultipleFilterBase.Count), _count);
153+
}
154+
155+
if (FilterParameters != null)
156+
{
157+
builder.AddMultipleAttributes(100, FilterParameters);
158+
}
159+
builder.CloseComponent();
160+
};
161+
}

src/BootstrapBlazor/Components/Filters/FilterBase.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public abstract class FilterBase : BootstrapModuleComponentBase, IFilterAction
1717
/// </summary>
1818
[Inject]
1919
[NotNull]
20-
protected IStringLocalizer<TableFilter>? Localizer { get; set; }
20+
protected IStringLocalizer<TableColumnFilter>? Localizer { get; set; }
2121

2222
/// <summary>
2323
/// 获得/设置 相关 Field 字段名称
@@ -36,7 +36,7 @@ public abstract class FilterBase : BootstrapModuleComponentBase, IFilterAction
3636
/// 获得/设置 所属 TableFilter 实例
3737
/// </summary>
3838
[CascadingParameter, NotNull]
39-
protected TableFilter? TableFilter { get; set; }
39+
protected TableColumnFilter? TableFilter { get; set; }
4040

4141
/// <summary>
4242
/// <inheritdoc/>
Lines changed: 66 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,75 @@
11
@namespace BootstrapBlazor.Components
2-
@inherits ComponentBase
3-
@typeparam TFilter
2+
@inherits BootstrapModuleComponentBase
3+
@attribute [BootstrapModuleAutoLoader("Filters/TableColumnFilter.razor.js")]
44

5-
@if (_isHeaderRow)
5+
@if (IsHeaderRow)
66
{
7-
@RenderFilter()
7+
@RenderFilter(Column)
88
}
99
else
1010
{
11-
<div class="card filter-item">
12-
<div class="card-header"><span>@Title</span></div>
13-
<div class="card-body">
14-
@RenderFilter()
15-
</div>
16-
<div class="card-footer">
17-
<div class="d-flex flex-fill">
18-
@if (ShowMoreButton)
11+
<span @attributes="@AdditionalAttributes" id="@Id" class="@ClassString" data-bb-dismiss=".filter-dismiss">
12+
<i class="@FilterClassString" data-bs-placement="bottom" data-bs-auto-close="outside"
13+
data-bs-toggle="bb.dropdown" data-bs-custom-class="shadow">
14+
</i>
15+
@RenderFilter(Column)
16+
</span>
17+
}
18+
19+
@code {
20+
RenderFragment<ITableColumn> RenderFilter => Column =>
21+
@<CascadingValue Value="this" IsFixed="true">
22+
@if (Column.FilterTemplate != null)
23+
{
24+
@Column.FilterTemplate
25+
}
26+
else
27+
{
28+
@if (Column.PropertyType.IsEnum())
29+
{
30+
<Filter TFilter="EnumFilter" ShowMoreButton="true"></Filter>
31+
}
32+
else if (Column.IsLookup())
33+
{
34+
<Filter TFilter="LookupFilter"></Filter>
35+
}
36+
else
37+
{
38+
var fieldType = Nullable.GetUnderlyingType(Column.PropertyType) ?? Column.PropertyType;
39+
switch (fieldType.Name)
1940
{
20-
<Button Color="Color.None" OnClick="OnClickPlus" Icon="@PlusIcon" IsDisabled="@(_count == 1)"></Button>
21-
<Button Color="Color.None" OnClick="OnClickMinus" Icon="@MinusIcon" IsDisabled="@(_count == 0)"></Button>
41+
case nameof(String):
42+
<Filter TFilter="StringFilter" ShowMoreButton="true"></Filter>
43+
break;
44+
case nameof(Boolean):
45+
<Filter TFilter="BoolFilter"></Filter>
46+
break;
47+
case nameof(DateTime):
48+
<Filter TFilter="DateTimeFilter" ShowMoreButton="true"></Filter>
49+
break;
50+
case nameof(Int16):
51+
<Filter TFilter="NumberFilter<Int16?>" ShowMoreButton="true"></Filter>
52+
break;
53+
case nameof(Int32):
54+
<Filter TFilter="NumberFilter<Int32?>" ShowMoreButton="true"></Filter>
55+
break;
56+
case nameof(Int64):
57+
<Filter TFilter="NumberFilter<Int64?>" ShowMoreButton="true"></Filter>
58+
break;
59+
case nameof(Single):
60+
<Filter TFilter="NumberFilter<Single?>" ShowMoreButton="true"></Filter>
61+
break;
62+
case nameof(Double):
63+
<Filter TFilter="NumberFilter<Double?>" ShowMoreButton="true"></Filter>
64+
break;
65+
case nameof(Decimal):
66+
<Filter TFilter="NumberFilter<Decimal?>" ShowMoreButton="true"></Filter>
67+
break;
68+
default:
69+
<div>@NotSupportedMessage</div>
70+
break;
2271
}
23-
</div>
24-
<Button Color="Color.None" class="filter-dismiss" OnClick="OnClickReset" Text="@ClearButtonText"></Button>
25-
<Button Color="Color.None" class="filter-dismiss" OnClick="OnClickConfirm" Text="@FilterButtonText"></Button>
26-
</div>
27-
</div>
72+
}
73+
}
74+
</CascadingValue>;
2875
}

0 commit comments

Comments
 (0)