diff --git a/src/Calendar.Plugin/Shared/Controls/MultiSelectionCalendar.cs b/src/Calendar.Plugin/Shared/Controls/MultiSelectionCalendar.cs new file mode 100644 index 0000000..9ae07d5 --- /dev/null +++ b/src/Calendar.Plugin/Shared/Controls/MultiSelectionCalendar.cs @@ -0,0 +1,14 @@ +using Xamarin.Plugin.Calendar.Controls.SelectionEngines; + +namespace Xamarin.Plugin.Calendar.Controls +{ + public class MultiSelectionCalendar : Calendar + { + private readonly MultiSelectionEngine _multiSelectionEngine; + + public MultiSelectionCalendar() + { + monthDaysView.CurrentSelectionEngine = _multiSelectionEngine = new MultiSelectionEngine(); + } + } +} \ No newline at end of file diff --git a/src/Calendar.Plugin/Shared/Controls/SelectionEngines/MultiSelectionEngine.cs b/src/Calendar.Plugin/Shared/Controls/SelectionEngines/MultiSelectionEngine.cs new file mode 100644 index 0000000..c72113a --- /dev/null +++ b/src/Calendar.Plugin/Shared/Controls/SelectionEngines/MultiSelectionEngine.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using Xamarin.Plugin.Calendar.Controls.Interfaces; +using Xamarin.Plugin.Calendar.Models; + +namespace Xamarin.Plugin.Calendar.Controls.SelectionEngines +{ + public class MultiSelectionEngine : ISelectionEngine + { + private readonly HashSet _selectedDates; + + public MultiSelectionEngine() + { + _selectedDates = new HashSet(); + } + + public string GetSelectedDateText(string selectedDateTextFormat, CultureInfo culture) + { + return _selectedDates + .Select(item => item.ToString(selectedDateTextFormat, culture)) + .Aggregate((a, b) => $"{a}, {b}"); + } + + public bool TryGetSelectedEvents(EventCollection allEvents, out ICollection selectedEvents) + { + return allEvents.TryGetValues(_selectedDates, out selectedEvents); + } + + public bool IsDateSelected(DateTime dateToCheck) + { + return _selectedDates.Contains(dateToCheck); + } + + public List PerformDateSelection(DateTime dateToSelect) + { + if (_selectedDates.Contains(dateToSelect)) + _selectedDates.Remove(dateToSelect); + else + _selectedDates.Add(dateToSelect); + + return _selectedDates.ToList(); + } + + public void UpdateDateSelection(List datesToSelect) + { + datesToSelect.ForEach(date => _selectedDates.Add(date)); + } + } +} \ No newline at end of file