TF-4053 Implement move folder content on mailbox list view

This commit is contained in:
dab246
2025-10-29 14:56:07 +07:00
committed by Dat H. Pham
parent ac99fccfb0
commit 58c05c38b2
19 changed files with 313 additions and 28 deletions
+44 -1
View File
@@ -2,12 +2,16 @@ import 'dart:io';
import 'package:core/domain/exceptions/file_exception.dart';
import 'package:core/domain/exceptions/web_session_exception.dart';
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/app_toast.dart';
import 'package:core/utils/app_logger.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_appauth_web/authorization_exception.dart';
import 'package:flutter_svg/svg.dart';
import 'package:jmap_dart_client/jmap/core/error/method/error_method_response.dart';
import 'package:jmap_dart_client/jmap/core/error/method/exception/error_method_response_exception.dart';
import 'package:jmap_dart_client/jmap/core/error/set_error.dart';
@@ -27,6 +31,7 @@ import 'package:tmail_ui_user/features/login/data/network/oidc_error.dart';
import 'package:tmail_ui_user/features/login/domain/exceptions/authentication_exception.dart';
import 'package:tmail_ui_user/features/login/domain/exceptions/oauth_authorization_error.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/clear_mailbox_state.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/move_folder_content_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/add_recipient_in_forwarding_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/create_new_rule_filter_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/delete_recipient_in_forwarding_state.dart';
@@ -45,8 +50,9 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart';
class ToastManager {
final AppToast appToast;
final ImagePaths imagePaths;
ToastManager(this.appToast);
ToastManager(this.appToast, this.imagePaths);
String getDefaultMessageByException(
AppLocalizations appLocalizations,
@@ -187,6 +193,9 @@ class ToastManager {
} else if (failure is CalendarEventReplyFailure) {
message = message ??
appLocalizations.eventReplyWasSentUnsuccessfully;
} else if (failure is MoveFolderContentFailure) {
message = message ??
appLocalizations.moveFolderContentToastMessage;
}
log('ToastManager::showMessageFailure: Message: $message');
if (message?.trim().isNotEmpty == true) {
@@ -256,4 +265,38 @@ class ToastManager {
appToast.showToastSuccessMessage(overlayContext, message!);
}
}
void showMessageSuccessWithAction({
required Success success,
required VoidCallback onActionCallback,
}) {
final context = currentContext;
final overlayContext = currentOverlayContext;
if (context == null || overlayContext == null) {
logError('$runtimeType::showMessageSuccessWithAction: Context or OverlayContext is null');
return;
}
String? message;
final appLocalizations = AppLocalizations.of(context);
if (success is MoveFolderContentSuccess) {
message = appLocalizations.movedToFolder(
success.request.destinationMailboxDisplayName,
);
}
log('$runtimeType::showMessageSuccessWithAction: Message: $message');
if (message?.trim().isNotEmpty == true) {
appToast.showToastMessage(
overlayContext,
message!,
actionName: appLocalizations.undo,
onActionClick: onActionCallback,
leadingSVGIcon: imagePaths.icFolderMailbox,
leadingSVGIconColor: Colors.white,
backgroundColor: AppColor.toastSuccessBackgroundColor,
textColor: Colors.white,
actionIcon: SvgPicture.asset(imagePaths.icUndo),
);
}
}
}