Skip to content

Commit b18a550

Browse files
authored
perf(DateTimePicker): update cache when click year button (#4381)
* fix: 年视图切换时获得禁用日期数据 * test: 增加单元测试 * refactor: 更新单元测试
1 parent 3739e9b commit b18a550

File tree

2 files changed

+34
-7
lines changed

2 files changed

+34
-7
lines changed

src/BootstrapBlazor/Components/DateTimePicker/DatePickerBody.razor.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,10 @@ private async Task OnClickPrevYear()
576576
? GetSafeYearDateTime(CurrentDate, -20)
577577
: GetSafeYearDateTime(CurrentDate, -1);
578578

579+
_render = false;
580+
await UpdateDisabledDaysCache(false);
581+
_render = true;
582+
579583
if (OnDateChanged != null)
580584
{
581585
await OnDateChanged(CurrentDate);
@@ -608,6 +612,10 @@ private async Task OnClickNextYear()
608612
? GetSafeYearDateTime(CurrentDate, 20)
609613
: GetSafeYearDateTime(CurrentDate, 1);
610614

615+
_render = false;
616+
await UpdateDisabledDaysCache(false);
617+
_render = true;
618+
611619
if (OnDateChanged != null)
612620
{
613621
await OnDateChanged(CurrentDate);

test/UnitTest/Components/DateTimePickerTest.cs

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1177,31 +1177,32 @@ public void MinValueToEmpty_Ok()
11771177
public async Task OnGetDisabledDaysCallback_Ok()
11781178
{
11791179
var fetched = false;
1180-
1180+
var dtm = new DateTime(2024, 9, 25);
11811181
// 禁用当天
11821182
var cut = Context.RenderComponent<DateTimePicker<DateTime?>>(pb =>
11831183
{
11841184
pb.Add(a => a.OnGetDisabledDaysCallback, async (start, end) =>
11851185
{
11861186
fetched = true;
11871187
await Task.Yield();
1188-
return [DateTime.Today];
1188+
return [dtm];
11891189
});
1190-
pb.Add(a => a.Value, DateTime.Today);
1190+
pb.Add(a => a.Value, dtm);
11911191
});
11921192

11931193
// 组件值为 null
11941194
Assert.True(fetched);
1195-
Assert.Equal(DateTime.Today, cut.Instance.Value);
1195+
Assert.Equal(dtm, cut.Instance.Value);
11961196

1197-
fetched = false;
11981197
// 设置组件值不为当前天
1198+
// 相同月数据已缓存不会触发回调
1199+
fetched = false;
11991200
cut.SetParametersAndRender(pb =>
12001201
{
1201-
pb.Add(a => a.Value, DateTime.Today.AddDays(1));
1202+
pb.Add(a => a.Value, dtm.AddDays(1));
12021203
});
12031204
Assert.False(fetched);
1204-
Assert.Equal(DateTime.Today.AddDays(1), cut.Instance.Value);
1205+
Assert.Equal(dtm.AddDays(1), cut.Instance.Value);
12051206

12061207
// 禁用缓存
12071208
// 每次组件渲染都会触发回调
@@ -1210,11 +1211,29 @@ public async Task OnGetDisabledDaysCallback_Ok()
12101211
pb.Add(a => a.EnableDisabledDaysCache, false);
12111212
});
12121213

1214+
// 获得所有按钮
12131215
var buttons = cut.FindAll(".picker-panel-header button");
1216+
12141217
// 下一月
12151218
await cut.InvokeAsync(() => buttons[2].Click());
12161219
Assert.True(fetched);
12171220

1221+
// 上一月
1222+
// 数据已缓存不会触发回调
1223+
fetched = false;
1224+
await cut.InvokeAsync(() => buttons[1].Click());
1225+
Assert.False(fetched);
1226+
1227+
// 上一年
1228+
await cut.InvokeAsync(() => buttons[0].Click());
1229+
Assert.True(fetched);
1230+
1231+
// 下一年
1232+
// 数据已缓存不会触发回调
1233+
fetched = false;
1234+
await cut.InvokeAsync(() => buttons[3].Click());
1235+
Assert.False(fetched);
1236+
12181237
// 调用清除缓存方法
12191238
cut.Instance.ClearDisabledDays();
12201239
}

0 commit comments

Comments
 (0)