Skip to content

Commit b1988f8

Browse files
authored
fix(Table): column DefaultSortOrder only work on first render (#8062)
* fix(Table): 默认排序仅首次加载时生效 * test: 增加单元测试 * chore: bump version 10.6.4
1 parent e74637c commit b1988f8

3 files changed

Lines changed: 62 additions & 9 deletions

File tree

src/BootstrapBlazor/BootstrapBlazor.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk.Razor">
22

33
<PropertyGroup>
4-
<Version>10.6.4-beta01</Version>
4+
<Version>10.6.4</Version>
55
</PropertyGroup>
66

77
<ItemGroup>

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1126,6 +1126,14 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
11261126
// 构建列信息
11271127
await BuildTableColumnsAsync();
11281128

1129+
// set default sortName
1130+
var col = Columns.Find(i => i is { Sortable: true, DefaultSort: true });
1131+
if (col != null)
1132+
{
1133+
SortName = col.GetFieldName();
1134+
SortOrder = col.DefaultSortOrder;
1135+
}
1136+
11291137
// 调用查询方法渲染 UI
11301138
await QueryAsync(true, 1, false, true, IsAutoQueryFirstRender);
11311139
return;
@@ -1315,14 +1323,6 @@ private async Task BuildTableColumnsAsync()
13151323
Columns.Clear();
13161324
Columns.AddRange(cols.OrderFunc());
13171325

1318-
// set default sortName
1319-
var col = Columns.Find(i => i is { Sortable: true, DefaultSort: true });
1320-
if (col != null)
1321-
{
1322-
SortName = col.GetFieldName();
1323-
SortOrder = col.DefaultSortOrder;
1324-
}
1325-
13261326
// 加载客户端持久化列状态
13271327
ResetTableColumns();
13281328
}

test/UnitTest/Components/TableTest.cs

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3486,6 +3486,59 @@ public async Task Sortable_Ok()
34863486
await cut.InvokeAsync(() => table.Instance.QueryAsync());
34873487
}
34883488

3489+
[Fact]
3490+
public async Task DefaultSortOrder_FirstRenderQuery_Ok()
3491+
{
3492+
var sortName = string.Empty;
3493+
var sortOrder = SortOrder.Unset;
3494+
var isFirstQuery = false;
3495+
var localizer = Context.Services.GetRequiredService<IStringLocalizer<Foo>>();
3496+
var cut = Context.Render<BootstrapBlazorRoot>(pb =>
3497+
{
3498+
pb.AddChildContent<Table<Foo>>(pb =>
3499+
{
3500+
pb.Add(a => a.RenderMode, TableRenderMode.Table);
3501+
pb.Add(a => a.OnQueryAsync, option =>
3502+
{
3503+
sortName = option.SortName;
3504+
sortOrder = option.SortOrder;
3505+
isFirstQuery = option.IsFirstQuery;
3506+
var items = Foo.GenerateFoo(localizer, 5);
3507+
return Task.FromResult(new QueryData<Foo>()
3508+
{
3509+
Items = items,
3510+
TotalCount = items.Count,
3511+
IsAdvanceSearch = true,
3512+
IsFiltered = true,
3513+
IsSearch = true,
3514+
IsSorted = true
3515+
});
3516+
});
3517+
pb.Add(a => a.TableColumns, foo => builder =>
3518+
{
3519+
builder.OpenComponent<TableColumn<Foo, string>>(0);
3520+
builder.AddAttribute(1, "Field", "Name");
3521+
builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, "Name", typeof(string)));
3522+
builder.AddAttribute(3, "Sortable", true);
3523+
builder.AddAttribute(4, "DefaultSort", true);
3524+
builder.AddAttribute(5, "DefaultSortOrder", SortOrder.Desc);
3525+
builder.CloseComponent();
3526+
});
3527+
});
3528+
});
3529+
3530+
Assert.True(isFirstQuery);
3531+
Assert.Equal(nameof(Foo.Name), sortName);
3532+
Assert.Equal(SortOrder.Desc, sortOrder);
3533+
3534+
// 模拟点击表头排序
3535+
var th = cut.Find("th");
3536+
await cut.InvokeAsync(() => th.Click());
3537+
Assert.False(isFirstQuery);
3538+
Assert.Equal(nameof(Foo.Name), sortName);
3539+
Assert.Equal(SortOrder.Unset, sortOrder);
3540+
}
3541+
34893542
[Fact]
34903543
public async Task OnSort_Ok()
34913544
{

0 commit comments

Comments
 (0)