Revert "File scoped namespaces"

This reverts commit d31d8f574e.
This commit is contained in:
Burak Kaan Köse
2025-02-16 11:43:30 +01:00
parent d31d8f574e
commit cf9869b71e
617 changed files with 32097 additions and 31478 deletions

View File

@@ -2,25 +2,26 @@
using Itenso.TimePeriod;
using Wino.Core.Domain.Collections;
namespace Wino.Core.Domain.Models.Calendar;
/// <summary>
/// Represents a day in the calendar.
/// Can hold events, appointments, wheather status etc.
/// </summary>
public class CalendarDayModel
namespace Wino.Core.Domain.Models.Calendar
{
public ITimePeriod Period { get; }
public CalendarEventCollection EventsCollection { get; }
public CalendarDayModel(DateTime representingDate, CalendarRenderOptions calendarRenderOptions)
/// <summary>
/// Represents a day in the calendar.
/// Can hold events, appointments, wheather status etc.
/// </summary>
public class CalendarDayModel
{
RepresentingDate = representingDate;
Period = new TimeRange(representingDate, representingDate.AddDays(1));
CalendarRenderOptions = calendarRenderOptions;
EventsCollection = new CalendarEventCollection(Period, calendarRenderOptions.CalendarSettings);
}
public ITimePeriod Period { get; }
public CalendarEventCollection EventsCollection { get; }
public DateTime RepresentingDate { get; }
public CalendarRenderOptions CalendarRenderOptions { get; }
public CalendarDayModel(DateTime representingDate, CalendarRenderOptions calendarRenderOptions)
{
RepresentingDate = representingDate;
Period = new TimeRange(representingDate, representingDate.AddDays(1));
CalendarRenderOptions = calendarRenderOptions;
EventsCollection = new CalendarEventCollection(Period, calendarRenderOptions.CalendarSettings);
}
public DateTime RepresentingDate { get; }
public CalendarRenderOptions CalendarRenderOptions { get; }
}
}

View File

@@ -1,6 +1,7 @@
using Wino.Core.Domain.Entities.Calendar;
using Wino.Core.Domain.Enums;
namespace Wino.Core.Domain.Models.Calendar;
public record CalendarItemTarget(CalendarItem Item, CalendarEventTargetType TargetType);
namespace Wino.Core.Domain.Models.Calendar
{
public record CalendarItemTarget(CalendarItem Item, CalendarEventTargetType TargetType);
}

View File

@@ -1,16 +1,17 @@
using System;
namespace Wino.Core.Domain.Models.Calendar;
public class CalendarPageNavigationArgs
namespace Wino.Core.Domain.Models.Calendar
{
/// <summary>
/// When the app launches, automatically request the default calendar navigation options.
/// </summary>
public bool RequestDefaultNavigation { get; set; }
public class CalendarPageNavigationArgs
{
/// <summary>
/// When the app launches, automatically request the default calendar navigation options.
/// </summary>
public bool RequestDefaultNavigation { get; set; }
/// <summary>
/// Display the calendar view for the specified date.
/// </summary>
public DateTime NavigationDate { get; set; }
/// <summary>
/// Display the calendar view for the specified date.
/// </summary>
public DateTime NavigationDate { get; set; }
}
}

View File

@@ -1,13 +1,14 @@
namespace Wino.Core.Domain.Models.Calendar;
public class CalendarRenderOptions
namespace Wino.Core.Domain.Models.Calendar
{
public CalendarRenderOptions(DateRange dateRange, CalendarSettings calendarSettings)
public class CalendarRenderOptions
{
DateRange = dateRange;
CalendarSettings = calendarSettings;
public CalendarRenderOptions(DateRange dateRange, CalendarSettings calendarSettings)
{
DateRange = dateRange;
CalendarSettings = calendarSettings;
}
public int TotalDayCount => DateRange.TotalDays;
public DateRange DateRange { get; }
public CalendarSettings CalendarSettings { get; }
}
public int TotalDayCount => DateRange.TotalDays;
public DateRange DateRange { get; }
public CalendarSettings CalendarSettings { get; }
}

View File

@@ -3,45 +3,46 @@ using System.Collections.Generic;
using System.Globalization;
using Wino.Core.Domain.Enums;
namespace Wino.Core.Domain.Models.Calendar;
public record CalendarSettings(DayOfWeek FirstDayOfWeek,
List<DayOfWeek> WorkingDays,
TimeSpan WorkingHourStart,
TimeSpan WorkingHourEnd,
double HourHeight,
DayHeaderDisplayType DayHeaderDisplayType,
CultureInfo CultureInfo)
namespace Wino.Core.Domain.Models.Calendar
{
public TimeSpan? GetTimeSpan(string selectedTime)
public record CalendarSettings(DayOfWeek FirstDayOfWeek,
List<DayOfWeek> WorkingDays,
TimeSpan WorkingHourStart,
TimeSpan WorkingHourEnd,
double HourHeight,
DayHeaderDisplayType DayHeaderDisplayType,
CultureInfo CultureInfo)
{
// Regardless of the format, we need to parse the time to a TimeSpan.
// User may list as 14:00 but enters 2:00 PM by input.
// Be flexible, not annoying.
if (DateTime.TryParse(selectedTime, out DateTime parsedTime))
public TimeSpan? GetTimeSpan(string selectedTime)
{
return parsedTime.TimeOfDay;
// Regardless of the format, we need to parse the time to a TimeSpan.
// User may list as 14:00 but enters 2:00 PM by input.
// Be flexible, not annoying.
if (DateTime.TryParse(selectedTime, out DateTime parsedTime))
{
return parsedTime.TimeOfDay;
}
else
{
return null;
}
}
else
public string GetTimeString(TimeSpan timeSpan)
{
return null;
// Here we don't need to be flexible cuz we're saving back the value to the combos.
// They are populated based on the format and must be returned with the format.
var format = DayHeaderDisplayType switch
{
DayHeaderDisplayType.TwelveHour => "h:mm tt",
DayHeaderDisplayType.TwentyFourHour => "HH:mm",
_ => throw new ArgumentOutOfRangeException(nameof(DayHeaderDisplayType))
};
var dateTime = DateTime.Today.Add(timeSpan);
return dateTime.ToString(format, CultureInfo.InvariantCulture);
}
}
public string GetTimeString(TimeSpan timeSpan)
{
// Here we don't need to be flexible cuz we're saving back the value to the combos.
// They are populated based on the format and must be returned with the format.
var format = DayHeaderDisplayType switch
{
DayHeaderDisplayType.TwelveHour => "h:mm tt",
DayHeaderDisplayType.TwentyFourHour => "HH:mm",
_ => throw new ArgumentOutOfRangeException(nameof(DayHeaderDisplayType))
};
var dateTime = DateTime.Today.Add(timeSpan);
return dateTime.ToString(format, CultureInfo.InvariantCulture);
}
}

View File

@@ -2,36 +2,37 @@
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.Calendar;
namespace Wino.Core.Domain.Models.Calendar.CalendarTypeStrategies;
public abstract class BaseCalendarTypeDrawingStrategy
namespace Wino.Core.Domain.Models.Calendar.CalendarTypeStrategies
{
public CalendarSettings Settings { get; }
public CalendarDisplayType HandlingType { get; }
/// <summary>
/// Day range of the pre-rendered items.
/// </summary>
public abstract DateRange GetRenderDateRange(DateTime DisplayDate, int DayDisplayCount);
/// <summary>
/// Gets the previous date range for rendering.
/// For example, 1 week view with 7 days will return -7 <> 0 days.
/// </summary>
/// <param name="CurrentDateRange">Current displayed date range.</param>
/// <param name="DayDisplayCount">Day display count/</param>
public abstract DateRange GetPreviousDateRange(DateRange CurrentDateRange, int DayDisplayCount);
public abstract DateRange GetNextDateRange(DateRange CurrentDateRange, int DayDisplayCount);
/// <summary>
/// How many items should be placed in 1 FlipViewItem.
/// </summary>
public abstract int GetRenderDayCount(DateTime DisplayDate, int DayDisplayCount);
protected BaseCalendarTypeDrawingStrategy(CalendarSettings settings, CalendarDisplayType handlingType)
public abstract class BaseCalendarTypeDrawingStrategy
{
Settings = settings;
HandlingType = handlingType;
public CalendarSettings Settings { get; }
public CalendarDisplayType HandlingType { get; }
/// <summary>
/// Day range of the pre-rendered items.
/// </summary>
public abstract DateRange GetRenderDateRange(DateTime DisplayDate, int DayDisplayCount);
/// <summary>
/// Gets the previous date range for rendering.
/// For example, 1 week view with 7 days will return -7 <> 0 days.
/// </summary>
/// <param name="CurrentDateRange">Current displayed date range.</param>
/// <param name="DayDisplayCount">Day display count/</param>
public abstract DateRange GetPreviousDateRange(DateRange CurrentDateRange, int DayDisplayCount);
public abstract DateRange GetNextDateRange(DateRange CurrentDateRange, int DayDisplayCount);
/// <summary>
/// How many items should be placed in 1 FlipViewItem.
/// </summary>
public abstract int GetRenderDayCount(DateTime DisplayDate, int DayDisplayCount);
protected BaseCalendarTypeDrawingStrategy(CalendarSettings settings, CalendarDisplayType handlingType)
{
Settings = settings;
HandlingType = handlingType;
}
}
}

View File

@@ -2,34 +2,35 @@
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.Calendar;
namespace Wino.Core.Domain.Models.Calendar.CalendarTypeStrategies;
public class DayCalendarDrawingStrategy : BaseCalendarTypeDrawingStrategy
namespace Wino.Core.Domain.Models.Calendar.CalendarTypeStrategies
{
public DayCalendarDrawingStrategy(CalendarSettings settings) : base(settings, CalendarDisplayType.Day)
public class DayCalendarDrawingStrategy : BaseCalendarTypeDrawingStrategy
{
public DayCalendarDrawingStrategy(CalendarSettings settings) : base(settings, CalendarDisplayType.Day)
{
}
public override DateRange GetNextDateRange(DateRange CurrentDateRange, int DayDisplayCount)
{
return new DateRange(CurrentDateRange.EndDate, CurrentDateRange.EndDate.AddDays(DayDisplayCount * 5));
}
public override DateRange GetPreviousDateRange(DateRange CurrentDateRange, int DayDisplayCount)
{
return new DateRange(CurrentDateRange.StartDate.AddDays(-DayDisplayCount * 5), CurrentDateRange.StartDate);
}
public override DateRange GetRenderDateRange(DateTime DisplayDate, int DayDisplayCount)
{
// Add good amount of days to the left and right of the DisplayDate.
var start = DisplayDate.AddDays(-4 * DayDisplayCount);
var end = DisplayDate.AddDays(4 * DayDisplayCount);
return new DateRange(start, end);
}
public override int GetRenderDayCount(DateTime DisplayDate, int DayDisplayCount) => DayDisplayCount;
}
public override DateRange GetNextDateRange(DateRange CurrentDateRange, int DayDisplayCount)
{
return new DateRange(CurrentDateRange.EndDate, CurrentDateRange.EndDate.AddDays(DayDisplayCount * 5));
}
public override DateRange GetPreviousDateRange(DateRange CurrentDateRange, int DayDisplayCount)
{
return new DateRange(CurrentDateRange.StartDate.AddDays(-DayDisplayCount * 5), CurrentDateRange.StartDate);
}
public override DateRange GetRenderDateRange(DateTime DisplayDate, int DayDisplayCount)
{
// Add good amount of days to the left and right of the DisplayDate.
var start = DisplayDate.AddDays(-4 * DayDisplayCount);
var end = DisplayDate.AddDays(4 * DayDisplayCount);
return new DateRange(start, end);
}
public override int GetRenderDayCount(DateTime DisplayDate, int DayDisplayCount) => DayDisplayCount;
}

View File

@@ -2,31 +2,32 @@
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Extensions;
namespace Wino.Core.Domain.Models.Calendar.CalendarTypeStrategies;
public class MonthCalendarDrawingStrategy : BaseCalendarTypeDrawingStrategy
namespace Wino.Core.Domain.Models.Calendar.CalendarTypeStrategies
{
public MonthCalendarDrawingStrategy(CalendarSettings settings)
: base(settings, CalendarDisplayType.Month)
public class MonthCalendarDrawingStrategy : BaseCalendarTypeDrawingStrategy
{
}
public MonthCalendarDrawingStrategy(CalendarSettings settings)
: base(settings, CalendarDisplayType.Month)
{
}
public override DateRange GetNextDateRange(DateRange CurrentDateRange, int DayDisplayCount)
{
return new DateRange(CurrentDateRange.EndDate, CurrentDateRange.EndDate.AddDays(35));
}
public override DateRange GetNextDateRange(DateRange CurrentDateRange, int DayDisplayCount)
{
return new DateRange(CurrentDateRange.EndDate, CurrentDateRange.EndDate.AddDays(35));
}
public override DateRange GetPreviousDateRange(DateRange CurrentDateRange, int DayDisplayCount)
{
return new DateRange(CurrentDateRange.StartDate.AddDays(-35), CurrentDateRange.StartDate);
}
public override DateRange GetPreviousDateRange(DateRange CurrentDateRange, int DayDisplayCount)
{
return new DateRange(CurrentDateRange.StartDate.AddDays(-35), CurrentDateRange.StartDate);
}
public override DateRange GetRenderDateRange(DateTime DisplayDate, int DayDisplayCount)
{
// Get the first day of the month.
var firstDayOfMonth = new DateTime(DisplayDate.Year, DisplayDate.Month, 1);
return DateTimeExtensions.GetMonthDateRangeStartingWeekday(firstDayOfMonth, Settings.FirstDayOfWeek);
}
public override DateRange GetRenderDateRange(DateTime DisplayDate, int DayDisplayCount)
{
// Get the first day of the month.
var firstDayOfMonth = new DateTime(DisplayDate.Year, DisplayDate.Month, 1);
return DateTimeExtensions.GetMonthDateRangeStartingWeekday(firstDayOfMonth, Settings.FirstDayOfWeek);
}
public override int GetRenderDayCount(DateTime DisplayDate, int DayDisplayCount) => 35;
public override int GetRenderDayCount(DateTime DisplayDate, int DayDisplayCount) => 35;
}
}

View File

@@ -1,34 +1,35 @@
using System;
using Wino.Core.Domain.Models.Calendar;
namespace Wino.Core.Domain.Models.Calendar.CalendarTypeStrategies;
public class WeekCalendarDrawingStrategy : BaseCalendarTypeDrawingStrategy
namespace Wino.Core.Domain.Models.Calendar.CalendarTypeStrategies
{
public WeekCalendarDrawingStrategy(CalendarSettings settings) : base(settings, Enums.CalendarDisplayType.Week) { }
public override DateRange GetNextDateRange(DateRange CurrentDateRange, int DayDisplayCount)
=> new DateRange(CurrentDateRange.EndDate, CurrentDateRange.EndDate.AddDays(7 * 2));
public override DateRange GetPreviousDateRange(DateRange CurrentDateRange, int DayDisplayCount)
=> new DateRange(CurrentDateRange.StartDate.AddDays(-7 * 2), CurrentDateRange.StartDate);
public override DateRange GetRenderDateRange(DateTime DisplayDate, int DayDisplayCount)
public class WeekCalendarDrawingStrategy : BaseCalendarTypeDrawingStrategy
{
// Detect the first day of the week that contains the selected date.
DayOfWeek firstDayOfWeek = Settings.FirstDayOfWeek;
public WeekCalendarDrawingStrategy(CalendarSettings settings) : base(settings, Enums.CalendarDisplayType.Week) { }
int diff = (7 + (DisplayDate.DayOfWeek - Settings.FirstDayOfWeek)) % 7;
public override DateRange GetNextDateRange(DateRange CurrentDateRange, int DayDisplayCount)
=> new DateRange(CurrentDateRange.EndDate, CurrentDateRange.EndDate.AddDays(7 * 2));
// Start loading from this date instead of visible date.
var weekStartDate = DisplayDate.AddDays(-diff).Date;
public override DateRange GetPreviousDateRange(DateRange CurrentDateRange, int DayDisplayCount)
=> new DateRange(CurrentDateRange.StartDate.AddDays(-7 * 2), CurrentDateRange.StartDate);
// Load -+ 14 days
var startDate = weekStartDate.AddDays(-14);
var endDte = weekStartDate.AddDays(14);
public override DateRange GetRenderDateRange(DateTime DisplayDate, int DayDisplayCount)
{
// Detect the first day of the week that contains the selected date.
DayOfWeek firstDayOfWeek = Settings.FirstDayOfWeek;
return new DateRange(startDate, endDte);
int diff = (7 + (DisplayDate.DayOfWeek - Settings.FirstDayOfWeek)) % 7;
// Start loading from this date instead of visible date.
var weekStartDate = DisplayDate.AddDays(-diff).Date;
// Load -+ 14 days
var startDate = weekStartDate.AddDays(-14);
var endDte = weekStartDate.AddDays(14);
return new DateRange(startDate, endDte);
}
public override int GetRenderDayCount(DateTime DisplayDate, int DayDisplayCount) => 7;
}
public override int GetRenderDayCount(DateTime DisplayDate, int DayDisplayCount) => 7;
}

View File

@@ -1,9 +1,10 @@
using System;
namespace Wino.Core.Domain.Models.Calendar;
/// <summary>
/// Contains the clicked date on the calendar view.
/// </summary>
/// <param name="ClickedDate">Requested date.</param>
public record CalendarViewDayClickedEventArgs(DateTime ClickedDate);
namespace Wino.Core.Domain.Models.Calendar
{
/// <summary>
/// Contains the clicked date on the calendar view.
/// </summary>
/// <param name="ClickedDate">Requested date.</param>
public record CalendarViewDayClickedEventArgs(DateTime ClickedDate);
}

View File

@@ -1,41 +1,42 @@
using System;
using System.Linq;
namespace Wino.Core.Domain.Models.Calendar;
public class DateRange
namespace Wino.Core.Domain.Models.Calendar
{
public DateRange(DateTime startDate, DateTime endDate)
public class DateRange
{
StartDate = startDate;
EndDate = endDate;
}
public DateRange(DateTime startDate, DateTime endDate)
{
StartDate = startDate;
EndDate = endDate;
}
public DateTime StartDate { get; }
public DateTime EndDate { get; }
public DateTime StartDate { get; }
public DateTime EndDate { get; }
public int TotalDays => (EndDate - StartDate).Days;
public int TotalDays => (EndDate - StartDate).Days;
public override string ToString() => $"{StartDate.ToString("dd MMMM")} - {EndDate.ToString("dd MMMM")}";
public override string ToString() => $"{StartDate.ToString("dd MMMM")} - {EndDate.ToString("dd MMMM")}";
public bool IsInRange(DateTime date)
{
return date >= StartDate && date <= EndDate;
}
public bool IsInRange(DateTime date)
{
return date >= StartDate && date <= EndDate;
}
/// <summary>
/// Gets the most visible month index in the visible date range.
/// </summary>
public int GetMostVisibleMonthIndex()
{
var dateRange = Enumerable.Range(0, (EndDate - StartDate).Days + 1).Select(offset => StartDate.AddDays(offset));
/// <summary>
/// Gets the most visible month index in the visible date range.
/// </summary>
public int GetMostVisibleMonthIndex()
{
var dateRange = Enumerable.Range(0, (EndDate - StartDate).Days + 1).Select(offset => StartDate.AddDays(offset));
var groupedByMonth = dateRange.GroupBy(date => date.Month)
.Select(g => new { Month = g.Key, DayCount = g.Count() });
var groupedByMonth = dateRange.GroupBy(date => date.Month)
.Select(g => new { Month = g.Key, DayCount = g.Count() });
// Find the month with the maximum count of days
var mostVisibleMonth = groupedByMonth.OrderByDescending(g => g.DayCount).FirstOrDefault();
// Find the month with the maximum count of days
var mostVisibleMonth = groupedByMonth.OrderByDescending(g => g.DayCount).FirstOrDefault();
return mostVisibleMonth?.Month ?? -1;
return mostVisibleMonth?.Month ?? -1;
}
}
}

View File

@@ -1,13 +1,14 @@
namespace Wino.Core.Domain.Models.Calendar;
public class DayHeaderRenderModel
namespace Wino.Core.Domain.Models.Calendar
{
public DayHeaderRenderModel(string dayHeader, double hourHeight)
public class DayHeaderRenderModel
{
DayHeader = dayHeader;
HourHeight = hourHeight;
}
public DayHeaderRenderModel(string dayHeader, double hourHeight)
{
DayHeader = dayHeader;
HourHeight = hourHeight;
}
public string DayHeader { get; }
public double HourHeight { get; }
public string DayHeader { get; }
public double HourHeight { get; }
}
}

View File

@@ -3,49 +3,50 @@ using System.Linq;
using Itenso.TimePeriod;
using Wino.Core.Domain.Enums;
namespace Wino.Core.Domain.Models.Calendar;
/// <summary>
/// Represents a range of days in the calendar.
/// Corresponds to 1 view of the FlipView in CalendarPage.
/// </summary>
public class DayRangeRenderModel
namespace Wino.Core.Domain.Models.Calendar
{
public ITimePeriod Period { get; }
public List<CalendarDayModel> CalendarDays { get; } = [];
// TODO: Get rid of this at some point.
public List<DayHeaderRenderModel> DayHeaders { get; } = [];
public CalendarRenderOptions CalendarRenderOptions { get; }
public DayRangeRenderModel(CalendarRenderOptions calendarRenderOptions)
/// <summary>
/// Represents a range of days in the calendar.
/// Corresponds to 1 view of the FlipView in CalendarPage.
/// </summary>
public class DayRangeRenderModel
{
CalendarRenderOptions = calendarRenderOptions;
public ITimePeriod Period { get; }
public List<CalendarDayModel> CalendarDays { get; } = [];
for (var i = 0; i < CalendarRenderOptions.TotalDayCount; i++)
// TODO: Get rid of this at some point.
public List<DayHeaderRenderModel> DayHeaders { get; } = [];
public CalendarRenderOptions CalendarRenderOptions { get; }
public DayRangeRenderModel(CalendarRenderOptions calendarRenderOptions)
{
var representingDate = calendarRenderOptions.DateRange.StartDate.AddDays(i);
var calendarDayModel = new CalendarDayModel(representingDate, calendarRenderOptions);
CalendarRenderOptions = calendarRenderOptions;
CalendarDays.Add(calendarDayModel);
}
Period = new TimeRange(CalendarDays.First().RepresentingDate, CalendarDays.Last().RepresentingDate.AddDays(1));
// Create day headers based on culture info.
for (var i = 0; i < 24; i++)
{
var representingDate = calendarRenderOptions.DateRange.StartDate.Date.AddHours(i);
string dayHeader = calendarRenderOptions.CalendarSettings.DayHeaderDisplayType switch
for (var i = 0; i < CalendarRenderOptions.TotalDayCount; i++)
{
DayHeaderDisplayType.TwelveHour => representingDate.ToString("h tt", calendarRenderOptions.CalendarSettings.CultureInfo),
DayHeaderDisplayType.TwentyFourHour => representingDate.ToString("HH", calendarRenderOptions.CalendarSettings.CultureInfo),
_ => "N/A"
};
var representingDate = calendarRenderOptions.DateRange.StartDate.AddDays(i);
var calendarDayModel = new CalendarDayModel(representingDate, calendarRenderOptions);
DayHeaders.Add(new DayHeaderRenderModel(dayHeader, calendarRenderOptions.CalendarSettings.HourHeight));
CalendarDays.Add(calendarDayModel);
}
Period = new TimeRange(CalendarDays.First().RepresentingDate, CalendarDays.Last().RepresentingDate.AddDays(1));
// Create day headers based on culture info.
for (var i = 0; i < 24; i++)
{
var representingDate = calendarRenderOptions.DateRange.StartDate.Date.AddHours(i);
string dayHeader = calendarRenderOptions.CalendarSettings.DayHeaderDisplayType switch
{
DayHeaderDisplayType.TwelveHour => representingDate.ToString("h tt", calendarRenderOptions.CalendarSettings.CultureInfo),
DayHeaderDisplayType.TwentyFourHour => representingDate.ToString("HH", calendarRenderOptions.CalendarSettings.CultureInfo),
_ => "N/A"
};
DayHeaders.Add(new DayHeaderRenderModel(dayHeader, calendarRenderOptions.CalendarSettings.HourHeight));
}
}
}
}