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.
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) };
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.
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é
In our application "Today" is NEVER a valid selection. But there is no way to turn it off.
Yes, we realize that we can create our own header template. But then we have to reproduce the next/previous functionality, for every single instance of the component -- and we have many dozens of them.