Fix double init on calendar days.

This commit is contained in:
Burak Kaan Köse
2026-02-19 01:37:43 +01:00
parent ab0810f710
commit 564cb0b16f
2 changed files with 52 additions and 22 deletions
@@ -6,6 +6,7 @@ using Microsoft.UI.Xaml.Controls;
using Wino.Calendar.Views;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Calendar;
using Wino.Core.Domain.Models.Navigation;
using Wino.Helpers;
using Wino.Mail.ViewModels.Data;
@@ -15,6 +16,7 @@ using Wino.Mail.WinUI.Interfaces;
using Wino.Mail.WinUI.Services;
using Wino.Mail.WinUI.Views.Calendar;
using Wino.Messaging.Client.Mails;
using Wino.Messaging.Client.Calendar;
using Wino.Messaging.Client.Navigation;
using Wino.Views;
using Wino.Views.Account;
@@ -136,6 +138,7 @@ public class NavigationService : NavigationServiceBase, INavigationService
NavigationTransitionType transition = NavigationTransitionType.None)
{
var pageType = GetPageType(page);
if (pageType == null) return false;
var currentApplicationMode = GetCoreFrame(NavigationReferenceFrame.ShellFrame)?.Content?.GetType() == typeof(MailAppShell)
? WinoApplicationMode.Mail
@@ -151,6 +154,30 @@ public class NavigationService : NavigationServiceBase, INavigationService
// Calendar navigations.
if (currentApplicationMode == WinoApplicationMode.Calendar)
{
var currentFrameType = GetCurrentFrameType(ref innerShellFrame);
if (page == WinoPage.CalendarPage &&
parameter is CalendarPageNavigationArgs calendarNavigationArgs)
{
var loadCalendarMessage = CreateLoadCalendarMessage(calendarNavigationArgs);
// Date changes while CalendarPage is already active should not re-navigate the frame.
if (currentFrameType == pageType)
{
WeakReferenceMessenger.Default.Send(loadCalendarMessage);
return true;
}
// If CalendarPage is the previous page, reuse it instead of creating a second instance.
var lastBackStackEntry = innerShellFrame.BackStack.Count > 0 ? innerShellFrame.BackStack[^1] : null;
if (innerShellFrame.CanGoBack && lastBackStackEntry?.SourcePageType == pageType)
{
innerShellFrame.GoBack();
WeakReferenceMessenger.Default.Send(loadCalendarMessage);
return true;
}
}
return innerShellFrame.Navigate(pageType, parameter);
}
else
@@ -221,6 +248,19 @@ public class NavigationService : NavigationServiceBase, INavigationService
return false;
}
private static LoadCalendarMessage CreateLoadCalendarMessage(CalendarPageNavigationArgs args)
{
var targetDate = args.RequestDefaultNavigation
? DateTime.Now.Date
: args.NavigationDate;
var initiative = args.RequestDefaultNavigation
? CalendarInitInitiative.App
: CalendarInitInitiative.User;
return new LoadCalendarMessage(targetDate, initiative);
}
public void GoBack(Core.Domain.Enums.NavigationTransitionEffect slideEffect = Core.Domain.Enums.NavigationTransitionEffect.FromRight)
{
// Check if we're navigating within ManageAccountsPage (applies to both modes)