TF-1865: Update UI and replace task in workmanager when update sending email
(cherry picked from commit 15168421c994c5f928873e0794bcbf0c36b015c9)
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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<EmailAddress> 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 {
|
||||
|
||||
@@ -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<Object?> get props => [session, accountId, emailRequest, mailboxRequest];
|
||||
List<Object?> get props => [session, accountId, emailRequest, mailboxRequest, isUpdateSendingEmail];
|
||||
}
|
||||
|
||||
@@ -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<Attachment>? 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
|
||||
];
|
||||
}
|
||||
+105
-58
@@ -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 {
|
||||
|
||||
@@ -14,4 +14,6 @@ extension ListSendingEmailExtension on List<SendingEmail> {
|
||||
bool isAllSelected() => every((sendingEmail) => sendingEmail.isSelected);
|
||||
|
||||
bool isAllUnSelected() => every((sendingEmail) => !sendingEmail.isSelected);
|
||||
|
||||
List<SendingEmail> listSelected() => where((sendingEmail) => sendingEmail.isSelected).toList();
|
||||
}
|
||||
@@ -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<AppToast>();
|
||||
|
||||
final listSendingEmailController = ScrollController();
|
||||
final listSendingEmailSelected = <SendingEmail>[].obs;
|
||||
|
||||
final selectionState = Rx<SelectMode>(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<PresentationEmail> 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<PresentationEmail> get listEmailSelected => dashboardController?.sendingEmailsInCurrentMailbox.listEmailSelected ?? [];
|
||||
|
||||
}
|
||||
@@ -22,12 +22,14 @@ class SendingQueueView extends GetWidget<SendingQueueController> 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<SendingQueueController> 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<SendingQueueController> 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 {
|
||||
|
||||
+11
-9
@@ -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<SendingEmail>);
|
||||
@@ -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())
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -161,7 +161,8 @@ extension EmailExtension on Email {
|
||||
mailboxIds: mailboxIds,
|
||||
selectMode: selectMode,
|
||||
emailHeader: headers?.toList(),
|
||||
bodyValues: bodyValues
|
||||
bodyValues: bodyValues,
|
||||
htmlBody: htmlBody
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user