DateInput shows minvalue by default when bound to a nullable DateTime with value null. While this might not be a bug, in almost all cases, it would be much better to have the default value set to DateTime.Now rather than DateTime.Min which seem to be the case today.
Currently, when dates need to be disable in the DatePicker and DateRangePicker, a collection of induvial dates are provided. As a result, when I need to disable a 90 day or 180 day continuous range I need to add to the collection 90 or 180 day individual DateTime objects.
It would be more efficient to provide a range of dates to disable instead of induvial dates.
The DisabledDates should accept a collection of DisableDateItems that is similar to the below:
public class DisableDateItem
{
public DateTime RangeBegin { get; set; }
public DateTime RangeEnd { get; set; }
}
Using this collection I can disable an individual date by having the RangeBegin and RangeEnd dates be the same, as shown below:
var bankHoliday = new DisableDateTime
{
RangeBegin = new DateTime(2021, 09, 01),
RangeEnd = new DateTime(2021, 09, 01)
};
To disable a date range, for example the Eastern Good Friday Weekend, I would provide a DisableDateTime as:
var bankHoliday = new DisableDateTime
{
RangeBegin = new DateTime(2021, 04, 30),
RangeEnd = new DateTime(2021, 05, 02)
};
To disable a 90 day range, I would provide a DisableDateTime object as:
var bankHoliday = new DisableDateTime { RangeBegin = new DateTime(2021, 05, 01), RangeEnd = new DateTime(2021, 07, 30) };
If I set a Min-Date like this:
<TelerikDatePicker @bind-Value="myDate"
Format="dd.MM.yyyy"
Min="@DateTime.Today.AddDays(1)">
</TelerikDatePicker>
clicking on the "Today" link in the calendar does not do anything!
If I don't set Min then a click on "Today" correctly sets the current date.
Regards,
René
I'm making a wrapper on top of TelerikDatePicker and this is how my component is working
<TelerikDatePicker T="TDate"
Value="@_value"
ValueChanged="@ValueChanged"
ValueExpression="@ValueExpression"
Enabled="@Enabled"
Class="@ClassMapper.AsString()"
Format="@Format" />
@code {
// ... the other properties
[Parameter]
public virtual string Format { get; set; }
}
But here is the problem. This component will give me the error
Error: System.AggregateException: One or more errors occurred. (Value cannot be null. (Parameter 'input'))
---> System.ArgumentNullException: Value cannot be null. (Parameter 'input')
at System.Text.RegularExpressions.Regex.Replace(String input, String replacement)
at System.Text.RegularExpressions.Regex.Replace(String input, String pattern, String replacement)
at Telerik.Blazor.Common.DateHelpers.FormatHelper.ExpandFormat(String format)
at Telerik.Blazor.Common.DateHelpers.FormatHelper.ConvertToKendoIntl(String format)
at Telerik.Blazor.Components.TelerikDateInputBase`1.GetDateInputOptions()
at Telerik.Blazor.Components.TelerikDateInputBase`1.OnAfterRenderAsync(Boolean firstRender)
So another solution would be set it to string.Empty, but than it will have a different result when I don't pass the Format property.
Here are the cases:
[Parameter]
public virtual string Format { get; set; } // gives the error
[Parameter]
public virtual string Format { get; set; } = ""; // doesn't give the default result
I had to make a walkaround to not pass Format to the component for it to work
@if (!string.IsNullOrEmpty(Format))
{
<TelerikDatePicker T="TDate"
Value="@_value"
ValueChanged="@ValueChanged"
ValueExpression="@ValueExpression"
Enabled="@Enabled"
Class="@ClassMapper.AsString()"
Format="@Format" />
}
else
{
<TelerikDatePicker T="TDate"
Value="@_value"
ValueChanged="@ValueChanged"
ValueExpression="@ValueExpression"
Enabled="@Enabled"
Class="@ClassMapper.AsString()" />
}
What should I set as a default value to my wrapper's Format property so it doesn't give me the error and also get's the default value of Format?
Please don't say that I should keep the @if (!string.IsNullOrEmpty(Format)), it's so bad and I don't want to use telerik and still have to make walkarounds.