Skip to content

Commit b3d84b0

Browse files
committed
Merge branch 'Feat-Table-FitColumn' into feat-table-column
2 parents 83d2295 + 0817694 commit b3d84b0

File tree

3 files changed

+30
-19
lines changed

3 files changed

+30
-19
lines changed

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

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1065,7 +1065,7 @@ private async Task OnTableRenderAsync(bool firstRender)
10651065
await InvokeVoidAsync("init", Id, Interop, new
10661066
{
10671067
DragColumnCallback = nameof(DragColumnCallback),
1068-
AutoFitContentCallback = OnAutoFitContentAsync == null ? null : nameof(AutoFitContentCallback),
1068+
AutoFitColumnWidthCallback = OnAutoFitColumnWidthCallback == null ? null : nameof(AutoFitColumnWidthCallback),
10691069
ResizeColumnCallback = OnResizeColumnAsync != null ? nameof(ResizeColumnCallback) : null,
10701070
ColumnMinWidth = ColumnMinWidth ?? Options.CurrentValue.TableSettings.ColumnMinWidth,
10711071
ScrollWidth = ActualScrollWidth,
@@ -1588,7 +1588,15 @@ private async Task OnContextMenu(MouseEventArgs e, TItem item)
15881588
/// 获得/设置 自动调整列宽回调方法
15891589
/// </summary>
15901590
[Parameter]
1591-
public Func<string, Task<float>>? OnAutoFitContentAsync { get; set; }
1591+
[Obsolete("已弃用,请使用 OnAutoFitColumnWidthCallback 替代; Deprecated, please use OnAutoFitColumnWidthCallback instead")]
1592+
[ExcludeFromCodeCoverage]
1593+
public Func<string, float, Task<float>>? OnAutoFitContentAsync { get; set; }
1594+
1595+
/// <summary>
1596+
/// 获得/设置 自动调整列宽回调方法
1597+
/// </summary>
1598+
[Parameter]
1599+
public Func<string, float, Task<float>>? OnAutoFitColumnWidthCallback { get; set; }
15921600

15931601
/// <summary>
15941602
/// 获得/设置 列宽自适应时是否包含表头 默认 false
@@ -1654,14 +1662,15 @@ public async Task ResizeColumnCallback(int index, float width)
16541662
/// 列宽自适应回调方法 由 JavaScript 脚本调用
16551663
/// </summary>
16561664
/// <param name="fieldName">当前列名称</param>
1665+
/// <param name="calcWidth">当前列宽</param>
16571666
/// <returns></returns>
16581667
[JSInvokable]
1659-
public async Task<float> AutoFitContentCallback(string fieldName)
1668+
public async Task<float> AutoFitColumnWidthCallback(string fieldName, float calcWidth)
16601669
{
16611670
float ret = 0;
1662-
if (OnAutoFitContentAsync != null)
1671+
if (OnAutoFitColumnWidthCallback != null)
16631672
{
1664-
ret = await OnAutoFitContentAsync(fieldName);
1673+
ret = await OnAutoFitColumnWidthCallback(fieldName, calcWidth);
16651674
}
16661675
return ret;
16671676
}

src/BootstrapBlazor/Components/Table/Table.razor.js

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -726,10 +726,6 @@ const indexOfCol = col => {
726726

727727
const autoFitColumnWidth = async (table, col) => {
728728
const field = col.getAttribute('data-bb-field');
729-
let widthValue = 0;
730-
if (table.options.autoFitContentCallback !== null) {
731-
widthValue = await table.invoke.invokeMethodAsync(table.options.autoFitContentCallback, field);
732-
}
733729

734730
const index = indexOfCol(col);
735731
let rows = null;
@@ -740,12 +736,17 @@ const autoFitColumnWidth = async (table, col) => {
740736
rows = table.tables[0].querySelectorAll('table > tbody > tr:not(.is-detail)');
741737
}
742738

743-
let maxWidth = widthValue;
744-
if (maxWidth === 0) {
745-
[...rows].forEach(row => {
746-
const cell = row.cells[index];
747-
maxWidth = Math.max(maxWidth, calcCellWidth(cell));
748-
});
739+
let maxWidth = 0;
740+
[...rows].forEach(row => {
741+
const cell = row.cells[index];
742+
maxWidth = Math.max(maxWidth, calcCellWidth(cell));
743+
});
744+
745+
if (table.options.autoFitColumnWidthCallback !== null) {
746+
const widthValue = await table.invoke.invokeMethodAsync(table.options.autoFitColumnWidthCallback, field, maxWidth);
747+
if (widthValue > 0) {
748+
maxWidth = widthValue;
749+
}
749750
}
750751

751752
if (maxWidth > 0) {

test/UnitTest/Components/TableTest.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8371,7 +8371,7 @@ public void ShowRowCheckboxCallback_Ok()
83718371
}
83728372

83738373
[Fact]
8374-
public async Task AutoFitContentCallback_Ok()
8374+
public async Task OnAutoFitColumnWidthCallback_Ok()
83758375
{
83768376
var name = "";
83778377
var localizer = Context.Services.GetRequiredService<IStringLocalizer<Foo>>();
@@ -8383,10 +8383,11 @@ public async Task AutoFitContentCallback_Ok()
83838383
pb.Add(a => a.AllowDragColumn, true);
83848384
pb.Add(a => a.ClientTableName, "table-unit-test");
83858385
pb.Add(a => a.OnQueryAsync, OnQueryAsync(localizer));
8386-
pb.Add(a => a.OnAutoFitContentAsync, fieldName =>
8386+
pb.Add(a => a.OnAutoFitColumnWidthCallback, (fieldName, calcWidth) =>
83878387
{
83888388
name = fieldName;
8389-
return Task.FromResult(100.65f);
8389+
var resWidth = Math.Max(100.65f, calcWidth);
8390+
return Task.FromResult(resWidth);
83908391
});
83918392
pb.Add(a => a.TableColumns, foo => builder =>
83928393
{
@@ -8405,7 +8406,7 @@ public async Task AutoFitContentCallback_Ok()
84058406

84068407
var table = cut.FindComponent<Table<Foo>>();
84078408
float v = 0f;
8408-
await cut.InvokeAsync(async () => v = await table.Instance.AutoFitContentCallback("DateTime"));
8409+
await cut.InvokeAsync(async () => v = await table.Instance.AutoFitColumnWidthCallback("DateTime", 90));
84098410
Assert.Equal(100.65f, v);
84108411
}
84118412

0 commit comments

Comments
 (0)