TF-3427 Implement print draft

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-01-15 16:46:50 +07:00
committed by Dat H. Pham
parent 78600f09e9
commit 6fa66efce2
14 changed files with 454 additions and 66 deletions
@@ -0,0 +1,102 @@
import 'package:core/domain/extensions/datetime_extension.dart';
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/utils/app_logger.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:model/extensions/list_email_address_extension.dart';
import 'package:model/extensions/presentation_email_extension.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:tmail_ui_user/features/base/state/button_state.dart';
import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart';
import 'package:tmail_ui_user/features/composer/presentation/widgets/web/print_draft_dialog_view.dart';
import 'package:tmail_ui_user/features/email/domain/model/email_print.dart';
import 'package:tmail_ui_user/features/email/domain/state/print_email_state.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
extension ComposerPrintDraftExtension on ComposerController {
Future<void> printDraft(BuildContext context) async {
if (printDraftButtonState == ButtonState.disabled) {
log('ComposerPrintDraftExtension::printDraft: Printing draft');
return;
}
printDraftButtonState = ButtonState.disabled;
if (composerArguments.value == null ||
mailboxDashBoardController.sessionCurrent == null ||
mailboxDashBoardController.accountId.value == null) {
log('ComposerPrintDraftExtension::printDraft: SESSION or ACCOUNT_ID or ARGUMENTS is NULL');
printDraftButtonState = ButtonState.enabled;
return;
}
final locale = Localizations.localeOf(context);
final appLocalizations = AppLocalizations.of(context);
final emailContent = await getContentInEditor();
final resultState = await _showPrintDraftsDialog(
appLocalizations: appLocalizations,
locale: locale,
emailContent: emailContent,
);
if (resultState is PrintEmailFailure) {
printDraftButtonState = ButtonState.enabled;
if (context.mounted) {
appToast.showToastErrorMessage(context, appLocalizations.printingFailed);
}
} else if (resultState is PrintEmailSuccess) {
printDraftButtonState = ButtonState.enabled;
}
}
Future<dynamic> _showPrintDraftsDialog({
required AppLocalizations appLocalizations,
required Locale locale,
required String emailContent,
}) {
final presentationEmail = composerArguments.value!.presentationEmail;
final childWidget = PointerInterceptor(
child: PrintDraftDialogView(
emailPrint: EmailPrint(
appName: appLocalizations.app_name,
userName: mailboxDashBoardController.userEmail,
attachments: uploadController.attachmentsUploaded,
emailContent: emailContent,
locale: locale.toLanguageTag(),
fromPrefix: appLocalizations.from_email_address_prefix,
toPrefix: appLocalizations.to_email_address_prefix,
ccPrefix: appLocalizations.cc_email_address_prefix,
bccPrefix: appLocalizations.bcc_email_address_prefix,
replyToPrefix: appLocalizations.replyToEmailAddressPrefix,
titleAttachment: appLocalizations.attachments.toLowerCase(),
toAddress: listToEmailAddress.toSet().toEscapeHtmlStringUseCommaSeparator(),
ccAddress: listCcEmailAddress.toSet().toEscapeHtmlStringUseCommaSeparator(),
bccAddress: listBccEmailAddress.toSet().toEscapeHtmlStringUseCommaSeparator(),
sender: composerArguments.value!.presentationEmail?.from?.isNotEmpty == true
? composerArguments.value!.presentationEmail?.from!.first
: null,
receiveTime: presentationEmail?.getReceivedAt(
locale.toLanguageTag(),
pattern: presentationEmail.receivedAt
?.value
.toLocal()
.toPatternForPrinting(locale.toLanguageTag()),
) ?? '',
subject: presentationEmail?.subject,
),
printEmailInteractor: printEmailInteractor,
),
);
return Get.dialog(
childWidget,
barrierDismissible: false,
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
);
}
}