Skip to content

Commit 02a1b0f

Browse files
committed
TF-3358 Auto close draft list dialog when click outside
1 parent 1ca994e commit 02a1b0f

File tree

5 files changed

+68
-55
lines changed

5 files changed

+68
-55
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import 'package:core/presentation/extensions/color_extension.dart';
2+
import 'package:get/get.dart';
3+
import 'package:jmap_dart_client/jmap/account_id.dart';
4+
import 'package:jmap_dart_client/jmap/core/session/session.dart';
5+
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/presentation_local_email_draft.dart';
6+
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/local_email_draft/local_email_draft_item_widget.dart';
7+
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/local_email_draft/local_email_draft_list_dialog_builder.dart';
8+
9+
class DialogBuilderManager {
10+
static final _instance = DialogBuilderManager._();
11+
12+
factory DialogBuilderManager() => _instance;
13+
14+
DialogBuilderManager._();
15+
16+
final _isOpened = RxBool(false);
17+
18+
RxBool get isOpened => _isOpened;
19+
20+
Future<void> showLocalEmailDraftListDialog({
21+
required List<PresentationLocalEmailDraft> emailDrafts,
22+
required AccountId? accountId,
23+
required Session? session,
24+
required String ownEmailAddress,
25+
OnEditLocalEmailDraftAction? onEditLocalEmailDraftAction,
26+
OnRestoreAllLocalEmailDraftsAction? onRestoreAllLocalEmailDraftsAction,
27+
}) {
28+
_isOpened.value = true;
29+
return Get.dialog(
30+
LocalEmailDraftListDialogBuilder(
31+
accountId: accountId,
32+
session: session,
33+
ownEmailAddress: ownEmailAddress,
34+
presentationLocalEmailDrafts: emailDrafts,
35+
onEditLocalEmailDraftAction: onEditLocalEmailDraftAction,
36+
onRestoreAllLocalEmailDraftsAction: onRestoreAllLocalEmailDraftsAction,
37+
),
38+
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
39+
).whenComplete(() => _isOpened.value = false);
40+
}
41+
}

lib/features/composer/presentation/composer_view_web.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import 'package:get/get.dart';
55
import 'package:model/email/prefix_email_address.dart';
66
import 'package:pointer_interceptor/pointer_interceptor.dart';
77
import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_manager.dart';
8+
import 'package:tmail_ui_user/features/base/widget/dialog_builder/dialog_builder_manager.dart';
89
import 'package:tmail_ui_user/features/base/widget/dialog_picker/color_dialog_picker.dart';
910
import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart';
1011
import 'package:tmail_ui_user/features/composer/presentation/extensions/composer_print_draft_extension.dart';
@@ -47,6 +48,7 @@ class ComposerView extends GetWidget<ComposerController> {
4748
bool isOverlayEnabled = controller.mailboxDashBoardController.isDisplayedOverlayViewOnIFrame ||
4849
MessageDialogActionManager().isDialogOpened ||
4950
ColorDialogPicker().isOpened.isTrue ||
51+
DialogBuilderManager().isOpened.isTrue ||
5052
DialogRouter.isRuleFilterDialogOpened.isTrue ||
5153
DialogRouter.isDialogOpened;
5254

lib/features/email/presentation/email_view.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import 'package:model/extensions/presentation_email_extension.dart';
1414
import 'package:model/mailbox/presentation_mailbox.dart';
1515
import 'package:pointer_interceptor/pointer_interceptor.dart';
1616
import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_manager.dart';
17+
import 'package:tmail_ui_user/features/base/widget/dialog_builder/dialog_builder_manager.dart';
1718
import 'package:tmail_ui_user/features/base/widget/dialog_picker/color_dialog_picker.dart';
1819
import 'package:tmail_ui_user/features/base/widget/optional_expanded.dart';
1920
import 'package:tmail_ui_user/features/base/widget/optional_scroll.dart';
@@ -541,6 +542,7 @@ class EmailView extends GetWidget<SingleEmailController> {
541542
MessageDialogActionManager().isDialogOpened ||
542543
EmailActionReactor.isDialogOpened ||
543544
ColorDialogPicker().isOpened.isTrue ||
545+
DialogBuilderManager().isOpened.isTrue ||
544546
DialogRouter.isRuleFilterDialogOpened.isTrue ||
545547
DialogRouter.isDialogOpened;
546548

lib/features/mailbox_dashboard/presentation/extensions/restore_local_email_draft_extension.dart

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11

2-
import 'package:core/presentation/extensions/color_extension.dart';
3-
import 'package:get/get.dart';
4-
import 'package:pointer_interceptor/pointer_interceptor.dart';
2+
import 'package:tmail_ui_user/features/base/widget/dialog_builder/dialog_builder_manager.dart';
53
import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart';
64
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
75
import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/local_email_draft.dart';
@@ -10,7 +8,6 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
108
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/local_email_draft_extension.dart';
119
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/open_and_close_composer_extension.dart';
1210
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/presentation_local_email_draft.dart';
13-
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/local_email_draft/local_email_draft_list_dialog_builder.dart';
1411
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
1512
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
1613

@@ -43,18 +40,13 @@ extension RestoreLocalEmailDraftExtension on MailboxDashBoardController {
4340
}
4441

4542
void showLocalEmailDraftListDialog(List<PresentationLocalEmailDraft> presentationLocalEmailDrafts) {
46-
Get.dialog(
47-
PointerInterceptor(
48-
child: LocalEmailDraftListDialogBuilder(
49-
accountId: accountId.value,
50-
session: sessionCurrent,
51-
ownEmailAddress: ownEmailAddress.value,
52-
presentationLocalEmailDrafts: presentationLocalEmailDrafts,
53-
onEditLocalEmailDraftAction: _editLocalEmailDraft,
54-
onRestoreAllLocalEmailDraftsAction: _restoreAllLocalEmailDrafts,
55-
),
56-
),
57-
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
43+
DialogBuilderManager().showLocalEmailDraftListDialog(
44+
emailDrafts: presentationLocalEmailDrafts,
45+
accountId: accountId.value,
46+
session: sessionCurrent,
47+
ownEmailAddress: ownEmailAddress.value,
48+
onEditLocalEmailDraftAction: _editLocalEmailDraft,
49+
onRestoreAllLocalEmailDraftsAction: _restoreAllLocalEmailDrafts,
5850
);
5951
}
6052

lib/features/mailbox_dashboard/presentation/widgets/local_email_draft/local_email_draft_list_dialog_builder.dart

Lines changed: 15 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ import 'package:core/presentation/resources/image_paths.dart';
55
import 'package:core/presentation/utils/app_toast.dart';
66
import 'package:core/presentation/utils/responsive_utils.dart';
77
import 'package:core/presentation/views/button/tmail_button_widget.dart';
8-
import 'package:core/presentation/views/dialog/confirmation_dialog_builder.dart';
98
import 'package:dio/dio.dart';
109
import 'package:flutter/material.dart';
1110
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
1211
import 'package:get/get.dart';
1312
import 'package:jmap_dart_client/jmap/account_id.dart';
1413
import 'package:jmap_dart_client/jmap/core/session/session.dart';
1514
import 'package:pointer_interceptor/pointer_interceptor.dart';
15+
import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_manager.dart';
1616
import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.dart';
1717
import 'package:tmail_ui_user/features/composer/domain/exceptions/compose_email_exception.dart';
1818
import 'package:tmail_ui_user/features/composer/domain/state/save_email_as_drafts_state.dart';
@@ -259,25 +259,13 @@ class _LocalEmailDraftListDialogBuilderState
259259
BuildContext context,
260260
) {
261261
final appLocalizations = AppLocalizations.of(context);
262-
Get.dialog(
263-
PointerInterceptor(child: ConfirmationDialogBuilder(
264-
imagePath: _imagePaths,
265-
useIconAsBasicLogo: true,
266-
textContent: appLocalizations.messageWarningDialogDiscardLocalDraft,
267-
confirmText: appLocalizations.yes,
268-
cancelText: appLocalizations.no,
269-
cancelBackgroundButtonColor: AppColor.blue700,
270-
cancelLabelButtonColor: Colors.white,
271-
confirmBackgroundButtonColor: AppColor.grayBackgroundColor,
272-
confirmLabelButtonColor: AppColor.steelGray600,
273-
onConfirmButtonAction: () {
274-
popBack();
275-
_removeLocalEmailDraft(context, emailDraft.id);
276-
},
277-
onCancelButtonAction: popBack,
278-
onCloseButtonAction: popBack,
279-
)),
280-
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
262+
MessageDialogActionManager().showConfirmDialogAction(
263+
context,
264+
appLocalizations.messageWarningDialogDiscardLocalDraft,
265+
appLocalizations.yes,
266+
cancelTitle: appLocalizations.no,
267+
onConfirmAction: () => _removeLocalEmailDraft(context, emailDraft.id),
268+
onCloseButtonAction: popBack,
281269
);
282270
}
283271

@@ -384,25 +372,13 @@ class _LocalEmailDraftListDialogBuilderState
384372

385373
void _handleDiscardAllLocalEmailDraftAction(BuildContext context) {
386374
final appLocalizations = AppLocalizations.of(context);
387-
Get.dialog(
388-
PointerInterceptor(child: ConfirmationDialogBuilder(
389-
imagePath: _imagePaths,
390-
useIconAsBasicLogo: true,
391-
textContent: appLocalizations.messageWarningDialogDiscardAllLocalDrafts,
392-
confirmText: appLocalizations.yes,
393-
cancelText: appLocalizations.no,
394-
cancelBackgroundButtonColor: AppColor.blue700,
395-
cancelLabelButtonColor: Colors.white,
396-
confirmBackgroundButtonColor: AppColor.grayBackgroundColor,
397-
confirmLabelButtonColor: AppColor.steelGray600,
398-
onConfirmButtonAction: () {
399-
popBack();
400-
_removeAllLocalEmailDrafts(context);
401-
},
402-
onCancelButtonAction: popBack,
403-
onCloseButtonAction: popBack,
404-
)),
405-
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
375+
MessageDialogActionManager().showConfirmDialogAction(
376+
context,
377+
appLocalizations.messageWarningDialogDiscardAllLocalDrafts,
378+
appLocalizations.yes,
379+
cancelTitle: appLocalizations.no,
380+
onConfirmAction: () => _removeAllLocalEmailDrafts(context),
381+
onCloseButtonAction: popBack,
406382
);
407383
}
408384

0 commit comments

Comments
 (0)