@using Template.Shared.Core.Dto @using Template.Shared.Core.Interface @inject IManageDataService manageData
@foreach (var nomeGiorno in _giorniSettimana) {
@nomeGiorno
} @for (var i = 0; i < StartDays; i++) {
} @for (var day = 1; day <= DaysInMonth; day++) { var currentDate = new DateTime(Date.Year, Date.Month, day); var events = GetEventsForDay(currentDate); var daySelected = SelectedDate == currentDate; var isToday = currentDate == DateTime.Today; var topRight = StartDays == 0 ? 7 : 7 - StartDays; var bottomLeft = DaysInMonth - (6 - EndDays); var categoryActivityCount = events.Select(x => x.Category).Distinct().ToList();
@day @if (events.Any()) {
@foreach (var activityCategory in categoryActivityCount) {
}
}
} @for (var i = 0; i < EndDays; i++) {
}
@if (!FilteredActivityList.IsNullOrEmpty()) { @foreach (var activity in FilteredActivityList!) { } }
@code { [Parameter] public required DateTime Date { get; set; } [Parameter] public EventCallback DateChanged { get; set; } private List ActivityList { get; set; } = []; private List FilteredActivityList { get; set; } = []; private DateTime SelectedDate { get; set; } = DateTime.Today; private int DaysInMonth { get; set; } private int StartDays { get; set; } private int EndDays { get; set; } readonly string[] _giorniSettimana = ["Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"]; protected override async Task OnInitializedAsync() { await ChangeMonth(); } protected override async Task OnParametersSetAsync() { await ChangeMonth(); } private async Task ChangeMonth() { var firstDay = Date; DaysInMonth = DateTime.DaysInMonth(firstDay.Year, firstDay.Month); var dayOfWeek = (int)firstDay.DayOfWeek; StartDays = dayOfWeek == 0 ? 6 : dayOfWeek - 1; var tempTotalCell = (int)Math.Ceiling((double)(DaysInMonth + StartDays) / 7); var totalCell = tempTotalCell * 7; EndDays = totalCell - (DaysInMonth + StartDays); await LoadData(); } private async Task LoadData() { // Load = true; // StateHasChanged(); await Task.Delay(500); var refreshActivity = await RefreshActivity(); ActivityList = refreshActivity; // Load = false; StateHasChanged(); } private async Task> RefreshActivity() { var startDate = Date; var endDate = Date.AddDays(DateTime.DaysInMonth(startDate.Year, startDate.Month) - 1); var dateRange = new DateRange(Date, endDate); var activityDto = await Task.Run(async () => { return (await manageData.GetActivity(x => (x.EffectiveDate == null && x.EstimatedDate >= dateRange.Start && x.EstimatedDate <= dateRange.End) || (x.EffectiveDate >= dateRange.Start && x.EffectiveDate <= dateRange.End) )) .OrderBy(x => x.EffectiveDate ?? x.EstimatedDate) .ToList(); }); return activityDto; } private List GetEventsForDay(DateTime day) { return ActivityList.IsNullOrEmpty() ? [] : ActivityList.Where(x => (x.EffectiveDate ?? x.EstimatedDate) == day.Date).ToList(); } private void SelectDay(DateTime currentDate) { SelectedDate = currentDate; StateHasChanged(); FilteredActivityList = GetEventsForDay(currentDate); } }