diff --git a/lib/features/composer/domain/extensions/sending_email_extension.dart b/lib/features/composer/domain/extensions/sending_email_extension.dart index 38997cbd4..750b7b99b 100644 --- a/lib/features/composer/domain/extensions/sending_email_extension.dart +++ b/lib/features/composer/domain/extensions/sending_email_extension.dart @@ -1,3 +1,4 @@ +import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:model/extensions/email_extension.dart'; import 'package:model/extensions/email_id_extensions.dart'; import 'package:model/extensions/identity_id_extension.dart'; @@ -23,9 +24,9 @@ extension SendingEmailExtension on SendingEmail { ); } - EmailRequest toEmailRequest() { + EmailRequest toEmailRequest({Email? emailEdit}) { return EmailRequest( - email: email, + email: emailEdit ?? email, emailActionType: emailActionType, sentMailboxId: sentMailboxId, emailIdDestroyed: emailIdDestroyed, diff --git a/lib/features/composer/domain/model/sending_email.dart b/lib/features/composer/domain/model/sending_email.dart index 36250dd9f..4fdfc95a6 100644 --- a/lib/features/composer/domain/model/sending_email.dart +++ b/lib/features/composer/domain/model/sending_email.dart @@ -66,7 +66,7 @@ class SendingEmail with EquatableMixin { return val; } - PresentationEmail get presentationEmail => email.toPresentationEmail(); + PresentationEmail get presentationEmail => email.sendingEmailToPresentationEmail(); String getCreateTimeAt(String newLocale) { return DateFormat(createTime.toPattern(), newLocale).format(createTime); diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index 6ddbf23a6..65718e41b 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -33,6 +33,7 @@ import 'package:receive_sharing_intent/receive_sharing_intent.dart'; import 'package:rich_text_composer/rich_text_composer.dart'; import 'package:super_tag_editor/tag_editor.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; +import 'package:tmail_ui_user/features/composer/domain/extensions/sending_email_extension.dart'; import 'package:tmail_ui_user/features/composer/domain/model/contact_suggestion_source.dart'; import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart'; import 'package:tmail_ui_user/features/composer/domain/state/download_image_as_base64_state.dart'; @@ -235,9 +236,7 @@ class ComposerController extends BaseController { @override void onReady() async { _initEmail(); - if (isNetworkConnectionAvailable) { - _getAllIdentities(); - } + _getAllIdentities(); if (!BuildUtils.isWeb) { Future.delayed(const Duration(milliseconds: 500), () => _checkContactPermission()); @@ -616,7 +615,8 @@ class ComposerController extends BaseController { { bool asDrafts = false, MailboxId? draftMailboxId, - MailboxId? outboxMailboxId + MailboxId? outboxMailboxId, + ComposerArguments? arguments } ) async { Set listFromEmailAddress = {EmailAddress(null, userProfile.email)}; @@ -663,7 +663,10 @@ class ComposerController extends BaseController { final generatePartId = PartId(_uuid.v1()); + final isUpdateSendingEmail = arguments?.sendingEmail != null; + return Email( + id: isUpdateSendingEmail ? EmailId(Id(arguments!.sendingEmail!.sendingId)) : null, mailboxIds: mailboxIds.isNotEmpty ? mailboxIds : null, from: listFromEmailAddress, to: listToEmailAddress.toSet(), @@ -801,17 +804,19 @@ class ComposerController extends BaseController { final userProfile = mailboxDashBoardController.userProfile.value; if (arguments != null && accountId != null && userProfile != null && session != null) { - final email = await _generateEmail(context, userProfile, outboxMailboxId: outboxMailboxId); - final emailRequest = EmailRequest( - email: email, - sentMailboxId: sentMailboxId, - identityId: identitySelected.value?.id, - emailIdDestroyed: arguments.emailActionType == EmailActionType.edit - ? arguments.presentationEmail?.id - : null, - emailIdAnsweredOrForwarded: arguments.presentationEmail?.id, - emailActionType: arguments.emailActionType - ); + final email = await _generateEmail(context, userProfile, outboxMailboxId: outboxMailboxId, arguments: arguments); + final emailRequest = arguments.sendingEmail != null + ? arguments.sendingEmail!.toEmailRequest(emailEdit: email) + : EmailRequest( + email: email, + sentMailboxId: sentMailboxId, + identityId: identitySelected.value?.id, + emailIdDestroyed: arguments.emailActionType == EmailActionType.edit + ? arguments.presentationEmail?.id + : null, + emailIdAnsweredOrForwarded: arguments.presentationEmail?.id, + emailActionType: arguments.emailActionType + ); final mailboxRequest = outboxMailboxId == null ? CreateNewMailboxRequest(Id(_uuid.v1()), PresentationMailbox.outboxMailboxName) : null; @@ -820,7 +825,8 @@ class ComposerController extends BaseController { session, accountId, emailRequest, - mailboxRequest + mailboxRequest, + isUpdateSendingEmail: arguments.sendingEmail != null, ); uploadController.clearInlineFileUploaded(); @@ -1127,7 +1133,7 @@ class ComposerController extends BaseController { } } - if (arguments.emailContents != null && arguments.emailContents!.isNotEmpty) { + if (arguments.emailContents != null && arguments.emailContents!.isNotEmpty && arguments.sendingEmail != null) { _emailContents = arguments.emailContents; emailContentsViewState.value = Right(GetEmailContentSuccess(_emailContents!, [], [], arguments.presentationEmail?.toEmail())); } else { diff --git a/lib/features/composer/presentation/model/sending_email_arguments.dart b/lib/features/composer/presentation/model/sending_email_arguments.dart index 71c7aa659..61151219b 100644 --- a/lib/features/composer/presentation/model/sending_email_arguments.dart +++ b/lib/features/composer/presentation/model/sending_email_arguments.dart @@ -9,9 +9,18 @@ class SendingEmailArguments extends RouterArguments { final AccountId accountId; final EmailRequest emailRequest; final CreateNewMailboxRequest? mailboxRequest; + final bool? isUpdateSendingEmail; - SendingEmailArguments(this.session, this.accountId, this.emailRequest, this.mailboxRequest); + SendingEmailArguments( + this.session, + this.accountId, + this.emailRequest, + this.mailboxRequest, + { + this.isUpdateSendingEmail + } + ); @override - List get props => [session, accountId, emailRequest, mailboxRequest]; + List get props => [session, accountId, emailRequest, mailboxRequest, isUpdateSendingEmail]; } diff --git a/lib/features/email/presentation/model/composer_arguments.dart b/lib/features/email/presentation/model/composer_arguments.dart index 6a6c0003e..b69d8eb18 100644 --- a/lib/features/email/presentation/model/composer_arguments.dart +++ b/lib/features/email/presentation/model/composer_arguments.dart @@ -2,6 +2,7 @@ import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; 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/domain/model/sending_email.dart'; import 'package:tmail_ui_user/main/routes/router_arguments.dart'; class ComposerArguments extends RouterArguments { @@ -12,6 +13,7 @@ class ComposerArguments extends RouterArguments { final EmailAddress? emailAddress; final List? attachments; final Role? mailboxRole; + final SendingEmail? sendingEmail; ComposerArguments({ this.emailActionType = EmailActionType.compose, @@ -21,6 +23,7 @@ class ComposerArguments extends RouterArguments { this.mailboxRole, this.emailAddress, this.listSharedMediaFile, + this.sendingEmail }); @override @@ -32,5 +35,6 @@ class ComposerArguments extends RouterArguments { mailboxRole, emailAddress, listSharedMediaFile, + sendingEmail ]; } \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index a723d9a1b..a8042bcba 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -1196,7 +1196,8 @@ class MailboxDashBoardController extends ReloadableController { result.session, result.accountId, result.emailRequest, - result.mailboxRequest + result.mailboxRequest, + isUpdateSendingEmail: result.isUpdateSendingEmail ); } } @@ -1317,7 +1318,8 @@ class MailboxDashBoardController extends ReloadableController { result.session, result.accountId, result.emailRequest, - result.mailboxRequest + result.mailboxRequest, + isUpdateSendingEmail: result.isUpdateSendingEmail ?? false, ); } } @@ -1750,7 +1752,8 @@ class MailboxDashBoardController extends ReloadableController { Session session, AccountId accountId, EmailRequest emailRequest, - CreateNewMailboxRequest? mailboxRequest + CreateNewMailboxRequest? mailboxRequest, + {bool? isUpdateSendingEmail = false} ) { if (PlatformInfo.isMobile) { if (networkConnectionController.isNetworkConnectionAvailable()) { @@ -1761,48 +1764,10 @@ class MailboxDashBoardController extends ReloadableController { mailboxRequest: mailboxRequest )); } else { - if (currentContext != null) { - showConfirmDialogAction( - currentContext!, - '', - AppLocalizations.of(currentContext!).proceed, - onConfirmAction: () { - final sendingEmail = emailRequest.toSendingEmail( - _uuid.v1(), - mailboxRequest: mailboxRequest - ); - _storeSendingEmail(accountId, session.username, sendingEmail); - }, - title: AppLocalizations.of(currentContext!).youAreInOfflineMode, - icon: SvgPicture.asset(_imagePaths.icDialogOfflineMode), - alignCenter: true, - messageStyle: const TextStyle( - color: AppColor.colorTitleSendingItem, - fontSize: 15, - fontWeight: FontWeight.normal - ), - listTextSpan: [ - TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailFirst), - TextSpan( - text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailSecond, - style: const TextStyle( - color: AppColor.colorTitleSendingItem, - fontSize: 15, - fontWeight: FontWeight.w600 - ), - ), - TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailThird), - TextSpan( - text: AppLocalizations.of(currentContext!).sendingQueue, - style: const TextStyle( - color: AppColor.colorTitleSendingItem, - fontSize: 15, - fontWeight: FontWeight.w600 - ), - ), - TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailTail) - ] - ); + if (currentContext != null && isUpdateSendingEmail == false) { + _showActionSendingEmail(session, accountId, emailRequest, mailboxRequest); + } else { + _handleStoreSendingEmail(session, accountId, emailRequest, mailboxRequest, isUpdateSendingEmail: isUpdateSendingEmail); } } } else { @@ -1815,22 +1780,104 @@ class MailboxDashBoardController extends ReloadableController { } } - void _storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail) { - log('MailboxDashBoardController::_storeSendingEmail():sendingEmail: $sendingEmail'); - consumeState(_storeSendingEmailInteractor.execute(accountId, userName, sendingEmail)); + void _handleStoreSendingEmail( + Session session, + AccountId accountId, + EmailRequest emailRequest, + CreateNewMailboxRequest? mailboxRequest, + {bool? isUpdateSendingEmail = false} + ) { + final currentEmailId = emailRequest.email.id?.id.value; + final sendingEmail = emailRequest.toSendingEmail( + emailRequest.email.id != null ? currentEmailId! : _uuid.v1(), + mailboxRequest: mailboxRequest + ); + _storeSendingEmail(accountId, session.username, sendingEmail, isUpdateSendingEmail: isUpdateSendingEmail); } - void _handleStoreSendingEmailSuccess(StoreSendingEmailSuccess success) { - if (currentOverlayContext != null && currentContext != null) { - _appToast.showToastSuccessMessage( - currentOverlayContext!, - AppLocalizations.of(currentContext!).messageHasBeenSavedToTheSendingQueue, - leadingSVGIconColor: Colors.white, - leadingSVGIcon: _imagePaths.icEmail); - } + void _showActionSendingEmail( + Session session, + AccountId accountId, + EmailRequest emailRequest, + CreateNewMailboxRequest? mailboxRequest + ) { + showConfirmDialogAction( + currentContext!, + '', + AppLocalizations.of(currentContext!).proceed, + onConfirmAction: () { + _handleStoreSendingEmail(session, accountId, emailRequest, mailboxRequest); + }, + title: AppLocalizations.of(currentContext!).youAreInOfflineMode, + icon: SvgPicture.asset(_imagePaths.icDialogOfflineMode), + alignCenter: true, + messageStyle: const TextStyle( + color: AppColor.colorTitleSendingItem, + fontSize: 15, + fontWeight: FontWeight.normal + ), + listTextSpan: [ + TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailFirst), + TextSpan( + text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailSecond, + style: const TextStyle( + color: AppColor.colorTitleSendingItem, + fontSize: 15, + fontWeight: FontWeight.w600 + ), + ), + TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailThird), + TextSpan( + text: AppLocalizations.of(currentContext!).sendingQueue, + style: const TextStyle( + color: AppColor.colorTitleSendingItem, + fontSize: 15, + fontWeight: FontWeight.w600 + ), + ), + TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailTail) + ] + ); + } - _addSendingEmailToSendingQueue(success.sendingEmail); - getAllSendingEmails(); + void _storeSendingEmail( + AccountId accountId, + UserName userName, + SendingEmail sendingEmail, + {bool? isUpdateSendingEmail} + ) { + log('MailboxDashBoardController::_storeSendingEmail():sendingEmail: $sendingEmail'); + consumeState(_storeSendingEmailInteractor.execute( + accountId, + userName, + sendingEmail, + isUpdateSendingEmail ?? false)); + } + + void _handleStoreSendingEmailSuccess(StoreSendingEmailSuccess success) async { + if (success.isUpdateSendingEmail) { + _cancelSendingEmailToSendingQueue(success.sendingEmail); + _addSendingEmailToSendingQueue(success.sendingEmail); + getAllSendingEmails(); + } else { + _addSendingEmailToSendingQueue(success.sendingEmail); + getAllSendingEmails(); + if (currentOverlayContext != null && currentContext != null) { + _appToast.showToastSuccessMessage( + currentOverlayContext!, + AppLocalizations.of(currentContext!).messageHasBeenSavedToTheSendingQueue, + leadingSVGIconColor: Colors.white, + leadingSVGIcon: _imagePaths.icEmail); + } + } + } + + void _cancelSendingEmailToSendingQueue(SendingEmail sendingEmail) async { + try { + await WorkSchedulerController().cancelByUniqueId(sendingEmail.sendingId); + } catch (e) { + logError('MailboxDashBoardController::_cancelSendingEmailToSendingQueue(): EXCEPTION: $e'); + } } void _addSendingEmailToSendingQueue(SendingEmail sendingEmail) async { diff --git a/lib/features/sending_queue/presentation/extensions/list_sending_email_extension.dart b/lib/features/sending_queue/presentation/extensions/list_sending_email_extension.dart index 61af8b21a..14d78e5a5 100644 --- a/lib/features/sending_queue/presentation/extensions/list_sending_email_extension.dart +++ b/lib/features/sending_queue/presentation/extensions/list_sending_email_extension.dart @@ -14,4 +14,6 @@ extension ListSendingEmailExtension on List { bool isAllSelected() => every((sendingEmail) => sendingEmail.isSelected); bool isAllUnSelected() => every((sendingEmail) => !sendingEmail.isSelected); + + List listSelected() => where((sendingEmail) => sendingEmail.isSelected).toList(); } \ No newline at end of file diff --git a/lib/features/sending_queue/presentation/sending_queue_controller.dart b/lib/features/sending_queue/presentation/sending_queue_controller.dart index 2cb82ac6c..8b32917b3 100644 --- a/lib/features/sending_queue/presentation/sending_queue_controller.dart +++ b/lib/features/sending_queue/presentation/sending_queue_controller.dart @@ -9,6 +9,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:model/email/email_action_type.dart'; +import 'package:model/extensions/list_email_content_extension.dart'; import 'package:model/mailbox/select_mode.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_mixin.dart'; @@ -35,6 +36,7 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi final _appToast = getBinding(); final listSendingEmailController = ScrollController(); + final listSendingEmailSelected = [].obs; final selectionState = Rx(SelectMode.INACTIVE); @@ -69,6 +71,8 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi selectionState.value = newListSendingEmail.isAllUnSelected() ? SelectMode.INACTIVE : SelectMode.ACTIVE; + + listSendingEmailSelected.value = newListSendingEmail.listSelected(); } void toggleSelectionSendingEmail(SendingEmail sendingEmail) { @@ -78,6 +82,8 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi selectionState.value = newListSendingEmail.isAllUnSelected() ? SelectMode.INACTIVE : SelectMode.ACTIVE; + + listSendingEmailSelected.value = newListSendingEmail.listSelected(); } bool get isAllUnSelected => dashboardController!.listSendingEmails.isAllUnSelected(); @@ -178,7 +184,8 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi emailActionType: EmailActionType.edit, presentationEmail: sendingEmail.presentationEmail, mailboxRole: dashboardController?.selectedMailbox.value?.role, - emailContents: sendingEmail.email.subject, + emailContents: sendingEmail.presentationEmail.emailContentList.asHtmlString, + sendingEmail: sendingEmail ); dashboardController?.goToComposer(arguments); @@ -212,55 +219,4 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi _sendingQueueIsolateManager?.release(); super.onClose(); } - - // - // void pressEmailAction( - // BuildContext context, - // EmailActionType actionType, - // PresentationEmail selectedEmail, - // {PresentationMailbox? mailboxContain} - // ) { - // switch(actionType) { - // case EmailActionType.edit: - // editEmail(selectedEmail); - // break; - // case EmailActionType.selection: - // selectEmail(context, selectedEmail); - // break; - // default: - // break; - // } - // } - // - // void pressEmailSelectionAction( - // BuildContext context, - // EmailActionType actionType, - // List selectionEmail - // ) { - // switch(actionType) { - // case EmailActionType.edit: - // editEmail(selectionEmail.first); - // break; - // default: - // break; - // } - // } - - // bool isSelectionEnabled() => currentSelectMode.value == SelectMode.ACTIVE; - // - // bool? _isUnSelectedAll() { - // return dashboardController?.sendingEmailsInCurrentMailbox.every((email) => email.selectMode == SelectMode.INACTIVE); - // } - // - // void cancelSelectEmail() { - // final newEmailList = dashboardController?.sendingEmailsInCurrentMailbox - // .map((email) => email.toSelectedEmail(selectMode: SelectMode.INACTIVE)) - // .toList(); - // updateEmailList(newEmailList); - // currentSelectMode.value = SelectMode.INACTIVE; - // listEmailSelected.clear(); - // } - - // List get listEmailSelected => dashboardController?.sendingEmailsInCurrentMailbox.listEmailSelected ?? []; - } \ No newline at end of file diff --git a/lib/features/sending_queue/presentation/sending_queue_view.dart b/lib/features/sending_queue/presentation/sending_queue_view.dart index 720eafe61..7cfe51a3d 100644 --- a/lib/features/sending_queue/presentation/sending_queue_view.dart +++ b/lib/features/sending_queue/presentation/sending_queue_view.dart @@ -22,12 +22,14 @@ class SendingQueueView extends GetWidget with AppLoaderM body: SafeArea( child: Column( children: [ - Obx(() => AppBarSendingQueueWidget( - listSendingEmails: controller.dashboardController!.listSendingEmails, - onOpenMailboxMenu: controller.openMailboxMenu, - onBackAction: controller.disableSelectionMode, - selectMode: controller.selectionState.value, - )), + Obx(() { + return AppBarSendingQueueWidget( + listSendingEmails: controller.listSendingEmailSelected, + onOpenMailboxMenu: controller.openMailboxMenu, + onBackAction: controller.disableSelectionMode, + selectMode: controller.selectionState.value, + ); + }), const Divider(color: AppColor.colorDividerComposer, height: 1), const BannerMessageSendingQueueWidget(), Expanded(child: _buildListSendingEmails(context)), @@ -36,7 +38,7 @@ class SendingQueueView extends GetWidget with AppLoaderM return const SizedBox.shrink(); } else { return BottomBarSendingQueueWidget( - listSendingEmails: controller.dashboardController!.listSendingEmails, + listSendingEmails: controller.listSendingEmailSelected, onHandleSendingEmailActionType: (actionType, listSendingEmails) => controller.handleSendingEmailActionType(context, actionType, listSendingEmails), ); } @@ -60,8 +62,9 @@ class SendingQueueView extends GetWidget with AppLoaderM sendingEmail: controller.dashboardController!.listSendingEmails[index], selectMode: controller.selectionState.value, onLongPressAction: controller.handleOnLongPressAction, - onSelectAction: controller.toggleSelectionSendingEmail, - )); + onSelectLeadingAction: controller.toggleSelectionSendingEmail, + onTapAction: (actionType, listSendingEmails) => + controller.handleSendingEmailActionType(context, actionType, [listSendingEmails]))); } ); } else { diff --git a/lib/features/sending_queue/presentation/widgets/bottom_bar_sending_queue_widget.dart b/lib/features/sending_queue/presentation/widgets/bottom_bar_sending_queue_widget.dart index 6f3753acb..39b19e36b 100644 --- a/lib/features/sending_queue/presentation/widgets/bottom_bar_sending_queue_widget.dart +++ b/lib/features/sending_queue/presentation/widgets/bottom_bar_sending_queue_widget.dart @@ -5,6 +5,7 @@ import 'package:core/presentation/views/button/button_builder.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart'; +import 'package:tmail_ui_user/features/sending_queue/presentation/extensions/list_sending_email_extension.dart'; import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_action_type.dart'; typedef OnHandleSendingEmailActionType = void Function(SendingEmailActionType, List); @@ -35,15 +36,16 @@ class BottomBarSendingQueueWidget extends StatelessWidget { child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - Expanded(child: (ButtonBuilder(imagePaths.icEdit) - ..key(Key(SendingEmailActionType.edit.getButtonKey())) - ..iconColor(SendingEmailActionType.edit.getButtonIconColor()) - ..padding(const EdgeInsets.all(8)) - ..radiusSplash(8) - ..textStyle(TextStyle(fontSize: 12, color: SendingEmailActionType.edit.getButtonTitleColor())) - ..onPressActionClick(() => onHandleSendingEmailActionType?.call(SendingEmailActionType.edit, listSendingEmails)) - ..text(SendingEmailActionType.edit.getButtonTitle(context), isVertical: true) - ).build()), + if (!listSendingEmails.isAllSelected() || listSendingEmails.length < 2) + Expanded(child: (ButtonBuilder(imagePaths.icEdit) + ..key(Key(SendingEmailActionType.edit.getButtonKey())) + ..iconColor(SendingEmailActionType.edit.getButtonIconColor()) + ..padding(const EdgeInsets.all(8)) + ..radiusSplash(8) + ..textStyle(TextStyle(fontSize: 12, color: SendingEmailActionType.edit.getButtonTitleColor())) + ..onPressActionClick(() => onHandleSendingEmailActionType?.call(SendingEmailActionType.edit, listSendingEmails)) + ..text(SendingEmailActionType.edit.getButtonTitle(context), isVertical: true) + ).build()), Expanded(child: (ButtonBuilder(imagePaths.icDeleteComposer) ..key(Key(SendingEmailActionType.delete.getButtonKey())) ..iconColor(SendingEmailActionType.delete.getButtonIconColor()) diff --git a/lib/features/sending_queue/presentation/widgets/sending_email_tile_widget.dart b/lib/features/sending_queue/presentation/widgets/sending_email_tile_widget.dart index 8c0b18a72..e6110e1d2 100644 --- a/lib/features/sending_queue/presentation/widgets/sending_email_tile_widget.dart +++ b/lib/features/sending_queue/presentation/widgets/sending_email_tile_widget.dart @@ -8,24 +8,27 @@ import 'package:get/get.dart'; import 'package:model/extensions/presentation_email_extension.dart'; import 'package:model/mailbox/select_mode.dart'; import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart'; +import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_action_type.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; typedef OnLongPressSendingEmailItemAction = void Function(SendingEmail); -typedef OnSelectSendingEmailItemAction = void Function(SendingEmail); +typedef OnSelectSendingEmailItemAction = void Function(SendingEmailActionType, SendingEmail); +typedef OnSelectLeadingSendingEmailItemAction = void Function(SendingEmail); class SendingEmailTileWidget extends StatelessWidget { final SendingEmail sendingEmail; final SelectMode selectMode; final OnLongPressSendingEmailItemAction? onLongPressAction; - final OnSelectSendingEmailItemAction? onSelectAction; - + final OnSelectSendingEmailItemAction? onTapAction; + final OnSelectLeadingSendingEmailItemAction? onSelectLeadingAction; const SendingEmailTileWidget({ super.key, required this.sendingEmail, required this.selectMode, this.onLongPressAction, - this.onSelectAction + this.onTapAction, + this.onSelectLeadingAction, }); @override @@ -35,7 +38,7 @@ class SendingEmailTileWidget extends StatelessWidget { return Material( color: Colors.transparent, child: InkWell( - onTap: () => {}, + onTap: () => onTapAction?.call(SendingEmailActionType.edit ,sendingEmail), onLongPress: () => onLongPressAction?.call(sendingEmail), child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -63,7 +66,7 @@ class SendingEmailTileWidget extends StatelessWidget { height: 24 ), ), - onTap: () => onSelectAction?.call(sendingEmail), + onTap: () => onSelectLeadingAction?.call(sendingEmail), ) else SvgPicture.asset( diff --git a/model/lib/extensions/email_extension.dart b/model/lib/extensions/email_extension.dart index d66b01076..eb08ae5ef 100644 --- a/model/lib/extensions/email_extension.dart +++ b/model/lib/extensions/email_extension.dart @@ -161,7 +161,8 @@ extension EmailExtension on Email { mailboxIds: mailboxIds, selectMode: selectMode, emailHeader: headers?.toList(), - bodyValues: bodyValues + bodyValues: bodyValues, + htmlBody: htmlBody ); } } \ No newline at end of file diff --git a/model/lib/extensions/presentation_email_extension.dart b/model/lib/extensions/presentation_email_extension.dart index 44b77c7d1..a95308b96 100644 --- a/model/lib/extensions/presentation_email_extension.dart +++ b/model/lib/extensions/presentation_email_extension.dart @@ -82,19 +82,21 @@ extension PresentationEmailExtension on PresentationEmail { Email toEmail() { return Email( - id: this.id, - keywords: keywords, - size: size, - receivedAt: receivedAt, - hasAttachment: hasAttachment, - preview: preview, - subject: subject, - sentAt: sentAt, - from: from, - to: to, - cc: cc, - bcc: bcc, - replyTo: replyTo + id: this.id, + keywords: keywords, + size: size, + receivedAt: receivedAt, + hasAttachment: hasAttachment, + preview: preview, + subject: subject, + sentAt: sentAt, + from: from, + to: to, + cc: cc, + bcc: bcc, + replyTo: replyTo, + htmlBody: htmlBody, + bodyValues: bodyValues, ); }