Disabled Dates are only available in Date or DateRange pickers. They need to be in the DateTime pickers as well.
Now I am going to have to split my components into a Date Picker and a Time Picker, which isn't a great user experience.
DateTimePicker
DatePicker
I want to to be able to catch the click of the Set button regardless of whether or not the value was changed.
==========
ADMIN EDIT
==========
For the time being, a possible workaround could be to use some JS Interop to catch the click of the Set button. You can create a custom OnOpen event for the DateTimePicker dropdown as per the admin edit example in this post. You can use the OnOpenHandler to invoke the JS responsible for catching the click event of the Set button. The example below demonstrates the described approach.
@inject IJSRuntime JSInterop
Selected time: @selectedTime
<br />
<span class="datetimepicker-span" @onclick="@OnOpenHandler">
<TelerikDateTimePicker Min="@Min" Max="@Max" @bind-Value="@selectedTime"
Format="dd MMM yyyy HH:mm:ss" Width="250px">
</TelerikDateTimePicker>
</span>
@code {
public bool isOpened { get; set; } = false;
public async Task OnOpenHandler()
{
isOpened = !isOpened;
if (isOpened)
{
await JSInterop.InvokeVoidAsync("SetBtnClicked", ".k-time-accept");
isOpened = false;
}
}
private DateTime? selectedTime = DateTime.Now;
public DateTime Min = new DateTime(1990, 1, 1, 8, 15, 0);
public DateTime Max = new DateTime(2025, 1, 1, 19, 30, 45);
}
<script>
function SetBtnClicked(selector) {
var element = document.querySelector(selector);
element.addEventListener('click', function () {
alert("Set button clicked");
});
}
</script>
I'd like to have the ability to disable dates and times.
Just an idea would be awesome to Add a object with a max and min properties which you can pass as a collection to the component.Add "OnOpen" event that fires when the DateTimePicker button is clicked but before the DateTimePicker dropdown is shown
=============
ADMIN EDIT
=============
You can currently achieve the desired behavior by wrapping the DateTimePicker in a container (for example span), add a handler on the on-click event of the span to catch the click event and perform the desired actions in that handler.
<span class="datetimepicker-span" @onclick="@OnOpenHandler">
<TelerikDateTimePicker Class="my-date-time-picker" Value="@selectedTime"
Format="dd MMM yyyy HH:mm:ss" Width="250px"></TelerikDateTimePicker>
</span>
@code {
public DateTime? selectedTime { get; set; }
public bool isOpened { get; set; } = false;
public void OnOpenHandler()
{
isOpened = !isOpened;
if (isOpened)
{
Console.WriteLine("DateTimePicker was opened.");
}
else
{
Console.WriteLine("DateTimePicker was closed.");
}
}
}
Based on the example https://demos.telerik.com/blazor-ui/datetimepicker/overview, on Cancel or Set, the Input gets focused. On the mobile, it causes the keyboard to appear as well, which is not an intuitive behaviour.
Is it possible for this behaviour to be removed?
---
ADMIN EDIT
This behavior is OS specific, in our tests iOS does not exhibit it. It is generally up to the OS to show the soft keyboard and the web app should not be able to alter that.
Also, generally speaking from an accessibility point of view, popups must have a default focus (we do that), and when they close, they must return the user to the flow of the application in the place where they took it from. In this case, that's an interaction with the picker component.
Nevertheless, if the focus went to the button rather than the input, it is highly likely that the behavior would be resolved. The only downside would be that Android users will need a second action to get the focus back in the input.
---
With Blazor server, clicking the NOW button (obviously) sets the time to the time on the server since that's where the code is running. Is there a way to trap the NOW button click or somehow give it an offset or define the value that NOW means so NOW will mean the time that the user is sitting in?
---
ADMIN EDIT
One way this could land could be through templates for the header areas of the calendars - that would let you put your own NOW button there so you can handle its click and change the value as desired. So, you may want to follow and/or Vote for this approach here: https://feedback.telerik.com/blazor/1468855-header-template-for-the-calendars.
A workaround for the time being could be hiding the Now button with some CSS:
<style>
.no-now-button .k-time-now {
display: none;
}
</style>
Selected time: @selectedTime
<br />
<TelerikDateTimePicker PopupClass="no-now-button"
Min="@Min" Max="@Max" @bind-Value="@selectedTime"
Format="dd MMM yyyy HH:mm:ss" Width="250px"></TelerikDateTimePicker>
@code {
private DateTime? selectedTime = DateTime.Now;
public DateTime Min = new DateTime(1990, 1, 1, 8, 15, 0);
public DateTime Max = new DateTime(2025, 1, 1, 19, 30, 45);
}
---
I want the user to only be able to select times between, for example, 11AM and 1PM. Setting Min and Max does not limit that, I can select any time:
Selected time: @selectedTimeIs there any way to display the DateTimePicker and for the time picker to display time intervals of less than one second? For example every 15 minutes?
Select a time:
15:00
15:15
15:30
15:45
etc?