Fixing load more issue during flip switches.
This commit is contained in:
@@ -227,6 +227,8 @@ namespace Wino.Calendar.ViewModels
|
|||||||
DateTime? loadingDisplayDate = null,
|
DateTime? loadingDisplayDate = null,
|
||||||
CalendarLoadDirection calendarLoadDirection = CalendarLoadDirection.Replace)
|
CalendarLoadDirection calendarLoadDirection = CalendarLoadDirection.Replace)
|
||||||
{
|
{
|
||||||
|
isLoadMoreBlocked = calendarLoadDirection == CalendarLoadDirection.Replace;
|
||||||
|
|
||||||
// This is the part we arrange the flip view calendar logic.
|
// This is the part we arrange the flip view calendar logic.
|
||||||
|
|
||||||
/* Loading for a month of the selected date is fine.
|
/* Loading for a month of the selected date is fine.
|
||||||
@@ -504,28 +506,28 @@ namespace Wino.Calendar.ViewModels
|
|||||||
|
|
||||||
if (isLoadMoreBlocked) return;
|
if (isLoadMoreBlocked) return;
|
||||||
|
|
||||||
// Send the loading message initiated by the app.
|
_ = LoadMoreAsync();
|
||||||
if (SelectedDateRangeIndex == DayRanges.Count - 1)
|
|
||||||
{
|
|
||||||
// Load next, starting from the end date.
|
|
||||||
_ = LoadMoreAsync(CalendarLoadDirection.Next);
|
|
||||||
}
|
|
||||||
else if (SelectedDateRangeIndex == 0)
|
|
||||||
{
|
|
||||||
// Load previous, starting from the start date.
|
|
||||||
|
|
||||||
_ = LoadMoreAsync(CalendarLoadDirection.Previous);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task LoadMoreAsync(CalendarLoadDirection direction)
|
private async Task LoadMoreAsync()
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"Loading {direction} items.");
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await _calendarLoadingSemaphore.WaitAsync();
|
await _calendarLoadingSemaphore.WaitAsync();
|
||||||
await RenderDatesAsync(CalendarInitInitiative.App, calendarLoadDirection: direction);
|
|
||||||
|
// Depending on the selected index, we'll load more dates.
|
||||||
|
// Day ranges may change while the async update is in progress.
|
||||||
|
// Therefore we wait for semaphore to be released before we continue.
|
||||||
|
// There is no need to load more if the current index is not in ideal position.
|
||||||
|
|
||||||
|
if (SelectedDateRangeIndex == DayRanges.Count - 1)
|
||||||
|
{
|
||||||
|
await RenderDatesAsync(CalendarInitInitiative.App, calendarLoadDirection: CalendarLoadDirection.Next);
|
||||||
|
}
|
||||||
|
else if (SelectedDateRangeIndex == 0)
|
||||||
|
{
|
||||||
|
await RenderDatesAsync(CalendarInitInitiative.App, calendarLoadDirection: CalendarLoadDirection.Previous);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user