private void OnSelectDateInternal(DateTime selectedDate, bool shouldLetOpenDatePicker) { // stop propagation - needed? DateTime selectedDateWithTime = selectedDate.Add(timeOfDay); List <DateTime>?dateRange = DateUtilities.GetDateRangeArray(selectedDate, DateRangeType, FirstDayOfWeek, WorkWeekDays); if (DateRangeType != DateRangeType.Day) { dateRange = GetBoundedDateRange(dateRange, MinDate, MaxDate); } dateRange = dateRange.Where(d => !GetIsRestrictedDate(d)).ToList(); OnSelectDate.InvokeAsync(new SelectedDateResult() { Date = selectedDateWithTime, SelectedDateRange = dateRange, ShouldLetOpenDatePicker = shouldLetOpenDatePicker }); // Navigate to next or previous month if needed if (AutoNavigateOnSelection && selectedDateWithTime.Month != NavigatedDate.Month) { int compareResult = DateTime.Compare(selectedDateWithTime.Date, NavigatedDate.Date); if (compareResult < 0) { OnSelectPrevMonth(); } else if (compareResult > 0) { OnSelectNextMonth(); } } }
protected async void OnGotoToday(MouseEventArgs args) { if (SelectDateOnClick) { // When using Defaultprops, TypeScript doesn't know that React is going to inject defaults // so we use exclamation mark as a hint to the type checker (see link below) // https://decembersoft.com/posts/error-ts2532-optional-react-component-props-in-typescript/ var dates = DateUtilities.GetDateRangeArray(Today, DateRangeType, FirstDayOfWeek, WorkWeekDays); await OnSelectDateInternal(new SelectedDateResult() { Date = Today, SelectedDateRange = dates }); } NavigateDayPickerDay(Today); GoTodayEnabled = false; focusOnUpdate = true; }
protected override Task OnParametersSetAsync() { if (onFirstRender) { timeOfDay = NavigatedDate.TimeOfDay; onFirstRender = false; } GenerateWeeks(); if (ShowWeekNumbers) { WeekNumbers = DateUtilities.GetWeekNumbersInMonth(Weeks.Count, FirstDayOfWeek, FirstWeekOfYear, NavigatedDate); } else { WeekNumbers = null; } WeekCornersStyled = CreateWeekCornerStyles(); // determine if previous/next months are in bounds DateTime firstDayOfMonth = new(NavigatedDate.Year, NavigatedDate.Month, 1); PrevMonthInBounds = DateTime.Compare(MinDate, firstDayOfMonth) < 0; NextMonthInBounds = DateTime.Compare(firstDayOfMonth.AddMonths(1).AddDays(-1), MaxDate) < 0; #region time of day setting if (timeOfDay != NavigatedDate.TimeOfDay) { timeOfDay = NavigatedDate.TimeOfDay; OnSelectDateInternal(NavigatedDate.Date, true); } #endregion return(base.OnParametersSetAsync()); }
protected override Task OnParametersSetAsync() { GenerateWeeks(); if (ShowWeekNumbers) { WeekNumbers = DateUtilities.GetWeekNumbersInMonth(Weeks.Count, FirstDayOfWeek, FirstWeekOfYear, NavigatedDate); } else { WeekNumbers = null; } WeekCornersStyled = CreateWeekCornerStyles(); // determine if previous/next months are in bounds var firstDayOfMonth = new DateTime(NavigatedDate.Year, NavigatedDate.Month, 1); PrevMonthInBounds = DateTime.Compare(MinDate, firstDayOfMonth) < 0; NextMonthInBounds = DateTime.Compare(firstDayOfMonth.AddMonths(1).AddDays(-1), MaxDate) < 0; return(base.OnParametersSetAsync()); }
private void GenerateWeeks() { DateTime date = new(NavigatedDate.Year, NavigatedDate.Month, 1); DateTime todaysDate = DateTime.Now; Weeks = new List <List <DayInfo> >(); // cycle backwards to get first day of week while (date.DayOfWeek != FirstDayOfWeek) { date -= TimeSpan.FromDays(1); } // a flag to indicate whether all days of the week are in the month bool isAllDaysOfWeekOutOfMonth = false; // in work week view we want to select the whole week //DateRangeType selecteDateRangeType = DateRangeType == DateRangeType.WorkWeek ? DateRangeType.Week : DateRangeType; DateRangeType selecteDateRangeType = DateRangeType; List <DateTime>?selectedDates = SelectedDate == null ? new List <DateTime>() : DateUtilities.GetDateRangeArray((DateTime)SelectedDate, selecteDateRangeType, FirstDayOfWeek, WorkWeekDays); if (DateRangeType != DateRangeType.Day) { selectedDates = GetBoundedDateRange(selectedDates, MinDate, MaxDate); } bool shouldGetWeeks = true; for (int weekIndex = 0; shouldGetWeeks; weekIndex++) { List <DayInfo> week = new(); isAllDaysOfWeekOutOfMonth = true; for (int dayIndex = 0; dayIndex < 7; dayIndex++) { DateTime originalDate = new(date.Year, date.Month, date.Day); DayInfo? dayInfo = new() { Key = date.ToString(), Date = date.Date.ToString("D"), OriginalDate = originalDate, WeekIndex = weekIndex, IsInMonth = date.Month == NavigatedDate.Month, IsToday = DateTime.Compare(DateTime.Now.Date, originalDate) == 0, IsSelected = IsInDateRangeArray(date, selectedDates), IsHighlightedOnHover = IsInWorkweekRange(date), OnSelected = () => OnSelectDateInternal(originalDate, false), IsInBounds = (DateTime.Compare(MinDate, date) < 1) && (DateTime.Compare(date, MaxDate) < 1) && !GetIsRestrictedDate(date) }; week.Add(dayInfo); if (dayInfo.IsInMonth) { isAllDaysOfWeekOutOfMonth = false; } date = date.AddDays(1); } // We append the condition of the loop depending upon the ShowSixWeeksByDefault parameter. shouldGetWeeks = ShowSixWeeksByDefault ? !isAllDaysOfWeekOutOfMonth || weekIndex <= 5 : !isAllDaysOfWeekOutOfMonth; if (shouldGetWeeks) { Weeks.Add(week); } } }