From 4289c099c56845835ada1b14dfd254ded8961247 Mon Sep 17 00:00:00 2001 From: DatDang Date: Wed, 3 Jul 2024 15:58:00 +0700 Subject: [PATCH] fixup! TF-2901 Implement caching composer on log out --- .../save_composer_cache_on_web_interactor.dart | 5 ++++- .../presentation/composer_controller.dart | 5 ++++- .../presentation/model/screen_display_mode.dart | 15 ++++++++++++++- .../composer_arguments_extension.dart | 17 +---------------- .../presentation/model/composer_arguments.dart | 6 ++++++ .../session_storage_composer_datasource.dart | 2 ++ ...session_storage_composer_datasoure_impl.dart | 5 ++++- .../data/model/composer_cache.dart | 7 ++++++- .../composer_cache_repository_impl.dart | 3 +++ .../repository/composer_cache_repository.dart | 2 ++ 10 files changed, 46 insertions(+), 21 deletions(-) diff --git a/lib/features/composer/domain/usecases/save_composer_cache_on_web_interactor.dart b/lib/features/composer/domain/usecases/save_composer_cache_on_web_interactor.dart index 7af8c9f3be..086709ab73 100644 --- a/lib/features/composer/domain/usecases/save_composer_cache_on_web_interactor.dart +++ b/lib/features/composer/domain/usecases/save_composer_cache_on_web_interactor.dart @@ -5,6 +5,7 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.dart'; +import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/save_composer_cache_state.dart'; @@ -20,7 +21,8 @@ class SaveComposerCacheOnWebInteractor { Future> execute( CreateEmailRequest createEmailRequest, AccountId accountId, - UserName userName + UserName userName, + {required ScreenDisplayMode displayMode} ) async { try { final emailCreated = await _composerRepository.generateEmail(createEmailRequest); @@ -29,6 +31,7 @@ class SaveComposerCacheOnWebInteractor { emailCreated, accountId: accountId, userName: userName, + displayMode: displayMode, identity: identity, readReceipentEnabled: createEmailRequest.isRequestReadReceipt); return Right(SaveComposerCacheSuccess()); diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index 589ee2971b..829561f833 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -394,7 +394,8 @@ class ComposerController extends BaseController with DragDropFileMixin implement await _saveComposerCacheOnWebInteractor.execute( createEmailRequest, mailboxDashBoardController.accountId.value!, - mailboxDashBoardController.sessionCurrent!.username); + mailboxDashBoardController.sessionCurrent!.username, + displayMode: screenDisplayMode.value); } Future _generateCreateEmailRequest() async { @@ -604,6 +605,8 @@ class ComposerController extends BaseController with DragDropFileMixin implement case EmailActionType.reopenComposerBrowser: if (!PlatformInfo.isWeb) return; + screenDisplayMode.value = arguments.displayMode; + _initEmailAddress( presentationEmail: arguments.presentationEmail!, actionType: EmailActionType.reopenComposerBrowser diff --git a/lib/features/composer/presentation/model/screen_display_mode.dart b/lib/features/composer/presentation/model/screen_display_mode.dart index 074587b32c..f480c16974 100644 --- a/lib/features/composer/presentation/model/screen_display_mode.dart +++ b/lib/features/composer/presentation/model/screen_display_mode.dart @@ -2,5 +2,18 @@ enum ScreenDisplayMode { fullScreen, minimize, - normal + normal; + + factory ScreenDisplayMode.fromJson(String value) { + switch (value) { + case 'fullScreen': + return ScreenDisplayMode.fullScreen; + case 'minimize': + return ScreenDisplayMode.minimize; + default: + return ScreenDisplayMode.normal; + } + } + + String toJson() => name; } \ No newline at end of file diff --git a/lib/features/email/presentation/extensions/composer_arguments_extension.dart b/lib/features/email/presentation/extensions/composer_arguments_extension.dart index 15f3e6a4e4..3840d6ece5 100644 --- a/lib/features/email/presentation/extensions/composer_arguments_extension.dart +++ b/lib/features/email/presentation/extensions/composer_arguments_extension.dart @@ -4,24 +4,9 @@ import 'package:tmail_ui_user/features/email/presentation/model/composer_argumen extension ComposerArgumentsExtension on ComposerArguments { ComposerArguments withIdentity({List? identities, Identity? selectedIdentity}) { - return ComposerArguments( - emailActionType: emailActionType, - presentationEmail: presentationEmail, - emailContents: emailContents, - attachments: attachments, - mailboxRole: mailboxRole, - listEmailAddress: listEmailAddress, - listSharedMediaFile: listSharedMediaFile, - sendingEmail: sendingEmail, - subject: subject, - body: body, - messageId: messageId, - references: references, - previousEmailId: previousEmailId, + return copyWith( identities: identities, selectedIdentity: selectedIdentity, - inlineImages: inlineImages, - readRecepientEnabled: readRecepientEnabled ); } } \ No newline at end of file diff --git a/lib/features/email/presentation/model/composer_arguments.dart b/lib/features/email/presentation/model/composer_arguments.dart index 654e1a0383..8330462039 100644 --- a/lib/features/email/presentation/model/composer_arguments.dart +++ b/lib/features/email/presentation/model/composer_arguments.dart @@ -6,6 +6,7 @@ import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/model.dart'; import 'package:receive_sharing_intent/receive_sharing_intent.dart'; +import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cache.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart'; import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_action_type.dart'; @@ -29,6 +30,7 @@ class ComposerArguments extends RouterArguments { final Identity? selectedIdentity; final List? inlineImages; final bool? readRecepientEnabled; + final ScreenDisplayMode displayMode; ComposerArguments({ this.emailActionType = EmailActionType.compose, @@ -48,6 +50,7 @@ class ComposerArguments extends RouterArguments { this.selectedIdentity, this.inlineImages, this.readRecepientEnabled, + this.displayMode = ScreenDisplayMode.normal }); factory ComposerArguments.fromSendingEmail(SendingEmail sendingEmail) => @@ -99,6 +102,7 @@ class ComposerArguments extends RouterArguments { selectedIdentity: composerCache.identity, inlineImages: composerCache.email?.attachmentsWithCid, readRecepientEnabled: composerCache.readReceipentEnabled, + displayMode: composerCache.displayMode, ); factory ComposerArguments.replyEmail({ @@ -201,6 +205,7 @@ class ComposerArguments extends RouterArguments { Identity? selectedIdentity, List? inlineImages, bool? readRecepientEnabled, + ScreenDisplayMode? displayMode, }) { return ComposerArguments( emailActionType: emailActionType ?? this.emailActionType, @@ -220,6 +225,7 @@ class ComposerArguments extends RouterArguments { selectedIdentity: selectedIdentity ?? this.selectedIdentity, inlineImages: inlineImages ?? this.inlineImages, readRecepientEnabled: readRecepientEnabled ?? this.readRecepientEnabled, + displayMode: displayMode ?? this.displayMode, ); } } diff --git a/lib/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart b/lib/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart index 4f05515615..1c36acf85d 100644 --- a/lib/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart +++ b/lib/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart @@ -3,6 +3,7 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:jmap_dart_client/jmap/identities/identity.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; +import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cache.dart'; abstract class SessionStorageComposerDatasource { @@ -11,6 +12,7 @@ abstract class SessionStorageComposerDatasource { { required AccountId accountId, required UserName userName, + required ScreenDisplayMode displayMode, Identity? identity, bool? readReceipentEnabled, } diff --git a/lib/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart b/lib/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart index 913042d54b..b3b9d2d636 100644 --- a/lib/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart +++ b/lib/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart @@ -7,6 +7,7 @@ import 'package:jmap_dart_client/jmap/identities/identity.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:model/model.dart'; import 'package:tmail_ui_user/features/caching/utils/cache_utils.dart'; +import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cache.dart'; import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart'; @@ -54,6 +55,7 @@ class SessionStorageComposerDatasourceImpl { required AccountId accountId, required UserName userName, + required ScreenDisplayMode displayMode, Identity? identity, bool? readReceipentEnabled } @@ -65,9 +67,10 @@ class SessionStorageComposerDatasourceImpl userName.value).toString(); Map entries = { composerCacheKey: jsonEncode(ComposerCache( + displayMode: displayMode, email: email, identity: identity, - readReceipentEnabled: readReceipentEnabled + readReceipentEnabled: readReceipentEnabled, ).toJson()) }; html.window.sessionStorage.addAll(entries); diff --git a/lib/features/mailbox_dashboard/data/model/composer_cache.dart b/lib/features/mailbox_dashboard/data/model/composer_cache.dart index 3f1d028ade..5eda2a6ba6 100644 --- a/lib/features/mailbox_dashboard/data/model/composer_cache.dart +++ b/lib/features/mailbox_dashboard/data/model/composer_cache.dart @@ -1,14 +1,17 @@ import 'package:equatable/equatable.dart'; import 'package:jmap_dart_client/jmap/identities/identity.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; +import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart'; class ComposerCache with EquatableMixin { final Email? email; final Identity? identity; final bool? readReceipentEnabled; + final ScreenDisplayMode displayMode; ComposerCache({ + required this.displayMode, this.email, this.identity, this.readReceipentEnabled, @@ -25,12 +28,14 @@ class ComposerCache with EquatableMixin { return { 'email': email?.toJson(), 'identity': identity?.toJson(), - 'readReceipentEnabled': readReceipentEnabled + 'readReceipentEnabled': readReceipentEnabled, + 'displayMode': displayMode.toJson() }; } factory ComposerCache.fromJson(Map map) { return ComposerCache( + displayMode: ScreenDisplayMode.fromJson(map['displayMode'] ?? ''), email: map['email'] != null ? Email.fromJson(map['email']) : null, identity: map['identity'] != null ? Identity.fromJson(map['identity']) : null, readReceipentEnabled: map['readReceipentEnabled'] as bool? diff --git a/lib/features/mailbox_dashboard/data/repository/composer_cache_repository_impl.dart b/lib/features/mailbox_dashboard/data/repository/composer_cache_repository_impl.dart index 7ea791a3da..cb0e6d903a 100644 --- a/lib/features/mailbox_dashboard/data/repository/composer_cache_repository_impl.dart +++ b/lib/features/mailbox_dashboard/data/repository/composer_cache_repository_impl.dart @@ -3,6 +3,7 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:jmap_dart_client/jmap/identities/identity.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; +import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cache.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart'; @@ -32,6 +33,7 @@ class ComposerCacheRepositoryImpl extends ComposerCacheRepository { { required AccountId accountId, required UserName userName, + required ScreenDisplayMode displayMode, Identity? identity, bool? readReceipentEnabled } @@ -40,6 +42,7 @@ class ComposerCacheRepositoryImpl extends ComposerCacheRepository { email, accountId: accountId, userName: userName, + displayMode: displayMode, identity: identity, readReceipentEnabled: readReceipentEnabled); } diff --git a/lib/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart b/lib/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart index 25d3a72f80..07175440fd 100644 --- a/lib/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart +++ b/lib/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart @@ -3,6 +3,7 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:jmap_dart_client/jmap/identities/identity.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; +import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cache.dart'; abstract class ComposerCacheRepository { @@ -11,6 +12,7 @@ abstract class ComposerCacheRepository { { required AccountId accountId, required UserName userName, + required ScreenDisplayMode displayMode, Identity? identity, bool? readReceipentEnabled }