Updating visibilities on calendar events on calendar activation/deactivation.
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using Wino.Core.Domain.Entities.Calendar;
|
||||
using Wino.Core.Domain.Interfaces;
|
||||
|
||||
namespace Wino.Core.Domain.Collections
|
||||
@@ -13,6 +15,8 @@ namespace Wino.Core.Domain.Collections
|
||||
public event EventHandler<List<ICalendarItem>> CalendarItemRangeAdded;
|
||||
public event EventHandler<List<ICalendarItem>> CalendarItemRangeRemoved;
|
||||
|
||||
public event EventHandler CalendarItemsCleared;
|
||||
|
||||
private ObservableRangeCollection<ICalendarItem> _internalRegularEvents = [];
|
||||
private ObservableRangeCollection<ICalendarItem> _internalAllDayEvents = [];
|
||||
|
||||
@@ -25,27 +29,33 @@ namespace Wino.Core.Domain.Collections
|
||||
AllDayEvents = new ReadOnlyObservableCollection<ICalendarItem>(_internalAllDayEvents);
|
||||
}
|
||||
|
||||
public void AddCalendarItemRange(IEnumerable<ICalendarItem> calendarItems, bool reportChange = true)
|
||||
public bool HasCalendarEvent(AccountCalendar accountCalendar)
|
||||
{
|
||||
return _internalAllDayEvents.Any(x => x.AssignedCalendar.Id == accountCalendar.Id) ||
|
||||
_internalRegularEvents.Any(x => x.AssignedCalendar.Id == accountCalendar.Id);
|
||||
}
|
||||
|
||||
public void AddCalendarItemRange(IEnumerable<ICalendarItem> calendarItems)
|
||||
{
|
||||
foreach (var calendarItem in calendarItems)
|
||||
{
|
||||
AddCalendarItem(calendarItem, reportChange: false);
|
||||
AddCalendarItem(calendarItem);
|
||||
}
|
||||
|
||||
CalendarItemRangeAdded?.Invoke(this, new List<ICalendarItem>(calendarItems));
|
||||
}
|
||||
|
||||
public void RemoveCalendarItemRange(IEnumerable<ICalendarItem> calendarItems, bool reportChange = true)
|
||||
public void RemoveCalendarItemRange(IEnumerable<ICalendarItem> calendarItems)
|
||||
{
|
||||
foreach (var calendarItem in calendarItems)
|
||||
{
|
||||
RemoveCalendarItem(calendarItem, reportChange);
|
||||
RemoveCalendarItem(calendarItem);
|
||||
}
|
||||
|
||||
CalendarItemRangeRemoved?.Invoke(this, new List<ICalendarItem>(calendarItems));
|
||||
}
|
||||
|
||||
public void AddCalendarItem(ICalendarItem calendarItem, bool reportChange = true)
|
||||
public void AddCalendarItem(ICalendarItem calendarItem)
|
||||
{
|
||||
if (calendarItem is not ICalendarItemViewModel)
|
||||
throw new ArgumentException("CalendarItem must be of type ICalendarItemViewModel", nameof(calendarItem));
|
||||
@@ -59,13 +69,18 @@ namespace Wino.Core.Domain.Collections
|
||||
_internalRegularEvents.Add(calendarItem);
|
||||
}
|
||||
|
||||
if (reportChange)
|
||||
{
|
||||
CalendarItemAdded?.Invoke(this, calendarItem);
|
||||
}
|
||||
CalendarItemAdded?.Invoke(this, calendarItem);
|
||||
}
|
||||
|
||||
public void RemoveCalendarItem(ICalendarItem calendarItem, bool reportChange = true)
|
||||
public void Clear()
|
||||
{
|
||||
_internalAllDayEvents.Clear();
|
||||
_internalRegularEvents.Clear();
|
||||
|
||||
CalendarItemsCleared?.Invoke(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
public void RemoveCalendarItem(ICalendarItem calendarItem)
|
||||
{
|
||||
if (calendarItem is not ICalendarItemViewModel)
|
||||
throw new ArgumentException("CalendarItem must be of type ICalendarItemViewModel", nameof(calendarItem));
|
||||
@@ -79,10 +94,7 @@ namespace Wino.Core.Domain.Collections
|
||||
_internalRegularEvents.Remove(calendarItem);
|
||||
}
|
||||
|
||||
if (reportChange)
|
||||
{
|
||||
CalendarItemRemoved?.Invoke(this, calendarItem);
|
||||
}
|
||||
CalendarItemRemoved?.Invoke(this, calendarItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Itenso.TimePeriod;
|
||||
using Wino.Core.Domain.Enums;
|
||||
using Wino.Core.Domain.Interfaces;
|
||||
|
||||
namespace Wino.Core.Domain.Models.Calendar
|
||||
{
|
||||
@@ -28,6 +29,8 @@ namespace Wino.Core.Domain.Models.Calendar
|
||||
var representingDate = calendarRenderOptions.DateRange.StartDate.AddDays(i);
|
||||
var calendarDayModel = new CalendarDayModel(representingDate, calendarRenderOptions);
|
||||
|
||||
RegisterCalendarDayEvents(calendarDayModel);
|
||||
|
||||
CalendarDays.Add(calendarDayModel);
|
||||
}
|
||||
|
||||
@@ -50,38 +53,40 @@ namespace Wino.Core.Domain.Models.Calendar
|
||||
}
|
||||
}
|
||||
|
||||
//private void RegisterCalendarDayEvents(CalendarDayModel calendarDayModel)
|
||||
//{
|
||||
// calendarDayModel.EventsCollection.CalendarItemAdded += CalendarItemAdded;
|
||||
// calendarDayModel.EventsCollection.CalendarItemRangeRemoved += CalendarItemRangeRemoved;
|
||||
// calendarDayModel.EventsCollection.CalendarItemRemoved += CalendarItemRemoved;
|
||||
// calendarDayModel.EventsCollection.CalendarItemRangeAdded += CalendarItemRangeAdded;
|
||||
//}
|
||||
private void RegisterCalendarDayEvents(CalendarDayModel calendarDayModel)
|
||||
{
|
||||
calendarDayModel.EventsCollection.CalendarItemAdded += CalendarItemAdded;
|
||||
calendarDayModel.EventsCollection.CalendarItemRangeRemoved += CalendarItemRangeRemoved;
|
||||
calendarDayModel.EventsCollection.CalendarItemRemoved += CalendarItemRemoved;
|
||||
calendarDayModel.EventsCollection.CalendarItemRangeAdded += CalendarItemRangeAdded;
|
||||
}
|
||||
|
||||
//private void CalendarItemRangeAdded(object sender, List<ICalendarItem> e)
|
||||
// => CalendarDayEventCollectionUpdated?.Invoke(this, sender as CalendarDayModel);
|
||||
// TODO: These handlers have incorrect senders. They should be the CalendarDayModel.
|
||||
|
||||
//private void CalendarItemRemoved(object sender, ICalendarItem e)
|
||||
// => CalendarDayEventCollectionUpdated?.Invoke(this, sender as CalendarDayModel);
|
||||
private void CalendarItemRangeAdded(object sender, List<ICalendarItem> e)
|
||||
=> CalendarDayEventCollectionUpdated?.Invoke(this, sender as CalendarDayModel);
|
||||
|
||||
//private void CalendarItemAdded(object sender, ICalendarItem e)
|
||||
// => CalendarDayEventCollectionUpdated?.Invoke(this, sender as CalendarDayModel);
|
||||
private void CalendarItemRemoved(object sender, ICalendarItem e)
|
||||
=> CalendarDayEventCollectionUpdated?.Invoke(this, sender as CalendarDayModel);
|
||||
|
||||
//private void CalendarItemRangeRemoved(object sender, List<ICalendarItem> e)
|
||||
// => CalendarDayEventCollectionUpdated?.Invoke(this, sender as CalendarDayModel);
|
||||
private void CalendarItemAdded(object sender, ICalendarItem e)
|
||||
=> CalendarDayEventCollectionUpdated?.Invoke(this, sender as CalendarDayModel);
|
||||
|
||||
///// <summary>
|
||||
///// Unregisters all calendar item change listeners to draw the UI for calendar events.
|
||||
///// </summary>
|
||||
//public void UnregisterAll()
|
||||
//{
|
||||
// foreach (var day in CalendarDays)
|
||||
// {
|
||||
// day.EventsCollection.CalendarItemRangeRemoved -= CalendarItemRangeRemoved;
|
||||
// day.EventsCollection.CalendarItemRemoved -= CalendarItemRemoved;
|
||||
// day.EventsCollection.CalendarItemRangeAdded -= CalendarItemRangeAdded;
|
||||
// day.EventsCollection.CalendarItemAdded -= CalendarItemAdded;
|
||||
// }
|
||||
//}
|
||||
private void CalendarItemRangeRemoved(object sender, List<ICalendarItem> e)
|
||||
=> CalendarDayEventCollectionUpdated?.Invoke(this, sender as CalendarDayModel);
|
||||
|
||||
/// <summary>
|
||||
/// Unregisters all calendar item change listeners to draw the UI for calendar events.
|
||||
/// </summary>
|
||||
public void UnregisterAll()
|
||||
{
|
||||
foreach (var day in CalendarDays)
|
||||
{
|
||||
day.EventsCollection.CalendarItemRangeRemoved -= CalendarItemRangeRemoved;
|
||||
day.EventsCollection.CalendarItemRemoved -= CalendarItemRemoved;
|
||||
day.EventsCollection.CalendarItemRangeAdded -= CalendarItemRangeAdded;
|
||||
day.EventsCollection.CalendarItemAdded -= CalendarItemAdded;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user