Skip to content

Commit cf30213

Browse files
authored
feat(DateTimePicker): add OnBlurAsync parameter (#4529)
* feat: 增加 OnBlurAsync 参数 * test: 更新单元测试
1 parent 7bc5225 commit cf30213

File tree

3 files changed

+35
-1
lines changed

3 files changed

+35
-1
lines changed

src/BootstrapBlazor/Components/DateTimePicker/DateTimePicker.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<BootstrapLabel required="@Required" for="@Id" ShowLabelTooltip="ShowLabelTooltip" Value="@DisplayText" />
99
}
1010
<div @attributes="@AdditionalAttributes" tabindex="@TabIndexString" id="@Id" class="@ClassString" data-bb-dropdown=".picker-panel" data-bb-dismiss=".picker-panel-link-btn">
11-
<input readonly="@ReadonlyString" class="@InputClassName" @bind="@CurrentValueAsString" placeholder="@PlaceholderString" disabled="@Disabled" data-bs-toggle="@Constants.DropdownToggleString" data-bs-placement="@PlacementString" data-bs-custom-class="@CustomClassString" />
11+
<input readonly="@ReadonlyString" class="@InputClassName" @bind="@CurrentValueAsString" placeholder="@PlaceholderString" disabled="@Disabled" data-bs-toggle="@Constants.DropdownToggleString" data-bs-placement="@PlacementString" data-bs-custom-class="@CustomClassString" @onblur="OnBlur" />
1212
@if (ShowIcon)
1313
{
1414
<i class="@DateTimePickerIconClassString"></i>

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,12 @@ public string? Format
228228
[Parameter]
229229
public bool DisplayDisabledDayAsEmpty { get; set; }
230230

231+
/// <summary>
232+
/// 获得/设置 失去焦点回调方法 默认 null
233+
/// </summary>
234+
[Parameter]
235+
public Func<TValue, Task>? OnBlurAsync { get; set; }
236+
231237
[Inject]
232238
[NotNull]
233239
private IStringLocalizer<DateTimePicker<DateTime>>? Localizer { get; set; }
@@ -437,4 +443,15 @@ protected override bool TryParseValueFromString(string value, [MaybeNullWhen(fal
437443
}
438444

439445
private string? ReadonlyString => IsEditable ? null : "readonly";
446+
447+
/// <summary>
448+
/// <inheritdoc/>
449+
/// </summary>
450+
protected virtual async Task OnBlur()
451+
{
452+
if (OnBlurAsync != null)
453+
{
454+
await OnBlurAsync(Value);
455+
}
456+
}
440457
}

test/UnitTest/Components/DateTimePickerTest.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,6 +1239,23 @@ public async Task OnGetDisabledDaysCallback_Ok()
12391239
cut.Instance.ClearDisabledDays();
12401240
}
12411241

1242+
[Fact]
1243+
public async Task OnBlurAsync_Ok()
1244+
{
1245+
var blur = false;
1246+
var cut = Context.RenderComponent<DateTimePicker<DateTime>>(builder =>
1247+
{
1248+
builder.Add(a => a.OnBlurAsync, v =>
1249+
{
1250+
blur = true;
1251+
return Task.CompletedTask;
1252+
});
1253+
});
1254+
var input = cut.Find("input");
1255+
await cut.InvokeAsync(() => { input.Blur(); });
1256+
Assert.True(blur);
1257+
}
1258+
12421259
class MockDateTimePicker : DatePickerBody
12431260
{
12441261
public static bool GetSafeYearDateTime_Ok()

0 commit comments

Comments
 (0)