TF-4384 Fix page not found 404 error when refreshing label views (#4390)
This commit is contained in:
@@ -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,
|
||||
];
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user