TF-4384 Fix page not found 404 error when refreshing label views (#4390)

This commit is contained in:
Dat Vu
2026-03-21 17:23:18 +07:00
committed by GitHub
parent 8d82eac16f
commit 8a9901a0a4
13 changed files with 220 additions and 21 deletions
+8 -1
View File
@@ -1,5 +1,6 @@
import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
@@ -14,6 +15,7 @@ enum DashboardType {
class NavigationRouter with EquatableMixin {
final EmailId? emailId;
final MailboxId? mailboxId;
final Id? labelId;
final DashboardType dashboardType;
final SearchQuery? searchQuery;
final String? routeName;
@@ -36,7 +38,11 @@ class NavigationRouter with EquatableMixin {
this.accountMenuItem = AccountMenuItem.none,
this.cc,
this.bcc,
});
this.labelId,
}) : assert(
!(mailboxId != null && labelId != null),
'NavigationRouter accepts either mailboxId or labelId, not both.',
);
factory NavigationRouter.initial() => NavigationRouter();
@@ -53,5 +59,6 @@ class NavigationRouter with EquatableMixin {
accountMenuItem,
cc,
bcc,
labelId,
];
}
+10 -2
View File
@@ -20,6 +20,7 @@ abstract class RouteUtils {
static const String paramID = 'id';
static const String paramType = 'type';
static const String paramContext = 'context';
static const String paramLabelId = 'labelId';
static const String paramQuery = 'q';
static const String paramRouteName = 'routeName';
static const String paramMailtoAddress = 'mailtoAddress';
@@ -60,7 +61,9 @@ abstract class RouteUtils {
}
servicePath = servicePath.withQueryParameters([
StringQueryParameter(paramType, router.dashboardType.name),
if (router.mailboxId != null)
if (router.labelId != null)
StringQueryParameter(paramLabelId, router.labelId!.value)
else if (router.mailboxId != null)
StringQueryParameter(paramContext, router.mailboxId!.id.value),
if (router.searchQuery != null)
StringQueryParameter(paramQuery, router.searchQuery!.value),
@@ -124,6 +127,7 @@ abstract class RouteUtils {
final idParam = parameters[paramID];
final typeParam = parameters[paramType];
final contextPram = parameters[paramContext];
final labelIdPram = parameters[paramLabelId];
final queryParam = parameters[paramQuery];
final routeName = parameters[paramRouteName];
final mailtoAddress = parameters[paramMailtoAddress];
@@ -133,7 +137,10 @@ abstract class RouteUtils {
final body = parameters[paramBody];
final emailId = idParam != null ? EmailId(Id(idParam)) : null;
final mailboxId = contextPram != null ? MailboxId(Id(contextPram)) : null;
final labelId = labelIdPram != null ? Id(labelIdPram) : null;
final mailboxId = labelId == null && contextPram != null
? MailboxId(Id(contextPram))
: null;
final searchQuery = queryParam != null ? SearchQuery(queryParam) : null;
final dashboardType = DashboardType.values.firstWhereOrNull((type) => type.name == typeParam) ?? DashboardType.normal;
final settingType = AccountMenuItem.values.firstWhereOrNull((type) => type.getAliasBrowser() == typeParam) ?? AccountMenuItem.none;
@@ -147,6 +154,7 @@ abstract class RouteUtils {
return NavigationRouter(
emailId: emailId,
mailboxId: mailboxId,
labelId: labelId,
searchQuery: searchQuery,
dashboardType: dashboardType,
routeName: routeName,