TF-2597 Handles the ability to click save as drafts button only once
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -31,7 +31,6 @@ import 'package:model/model.dart';
|
|||||||
import 'package:permission_handler/permission_handler.dart';
|
import 'package:permission_handler/permission_handler.dart';
|
||||||
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
|
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
|
||||||
import 'package:rich_text_composer/rich_text_composer.dart';
|
import 'package:rich_text_composer/rich_text_composer.dart';
|
||||||
import 'package:rxdart/rxdart.dart';
|
|
||||||
import 'package:super_tag_editor/tag_editor.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/base/base_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/base/state/button_state.dart';
|
import 'package:tmail_ui_user/features/base/state/button_state.dart';
|
||||||
@@ -56,7 +55,6 @@ import 'package:tmail_ui_user/features/composer/presentation/model/image_source.
|
|||||||
import 'package:tmail_ui_user/features/composer/presentation/model/inline_image.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/model/inline_image.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/model/prefix_recipient_state.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/model/prefix_recipient_state.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/model/save_to_draft_arguments.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/model/save_to_draft_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/model/save_to_draft_view_event.dart';
|
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/styles/composer_style.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/styles/composer_style.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/from_composer_bottom_sheet_builder.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/from_composer_bottom_sheet_builder.dart';
|
||||||
@@ -158,10 +156,6 @@ class ComposerController extends BaseController {
|
|||||||
final ScrollController scrollControllerAttachment = ScrollController();
|
final ScrollController scrollControllerAttachment = ScrollController();
|
||||||
final ScrollController scrollControllerIdentities = ScrollController();
|
final ScrollController scrollControllerIdentities = ScrollController();
|
||||||
|
|
||||||
final _saveToDraftEventController = StreamController<SaveToDraftViewEvent>();
|
|
||||||
Stream<SaveToDraftViewEvent> get _saveToDraftEventStream => _saveToDraftEventController.stream;
|
|
||||||
late StreamSubscription _saveToDraftStreamSubscription;
|
|
||||||
|
|
||||||
List<Attachment> initialAttachments = <Attachment>[];
|
List<Attachment> initialAttachments = <Attachment>[];
|
||||||
String? _textEditorWeb;
|
String? _textEditorWeb;
|
||||||
String? _initTextEditor;
|
String? _initTextEditor;
|
||||||
@@ -169,6 +163,7 @@ class ComposerController extends BaseController {
|
|||||||
EmailId? _emailIdEditing;
|
EmailId? _emailIdEditing;
|
||||||
bool isAttachmentCollapsed = false;
|
bool isAttachmentCollapsed = false;
|
||||||
ButtonState _closeComposerButtonState = ButtonState.enabled;
|
ButtonState _closeComposerButtonState = ButtonState.enabled;
|
||||||
|
ButtonState _saveToDraftButtonState = ButtonState.enabled;
|
||||||
|
|
||||||
late Worker uploadInlineImageWorker;
|
late Worker uploadInlineImageWorker;
|
||||||
late Worker dashboardViewStateWorker;
|
late Worker dashboardViewStateWorker;
|
||||||
@@ -246,8 +241,6 @@ class ComposerController extends BaseController {
|
|||||||
scrollControllerEmailAddress.dispose();
|
scrollControllerEmailAddress.dispose();
|
||||||
scrollControllerAttachment.dispose();
|
scrollControllerAttachment.dispose();
|
||||||
scrollControllerIdentities.dispose();
|
scrollControllerIdentities.dispose();
|
||||||
_saveToDraftStreamSubscription.cancel();
|
|
||||||
_saveToDraftEventController.close();
|
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -325,21 +318,26 @@ class ComposerController extends BaseController {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
_saveToDraftStreamSubscription = _saveToDraftEventStream
|
|
||||||
.debounceTime(const Duration(milliseconds: 300))
|
|
||||||
.listen(_handleSaveToDraft);
|
|
||||||
|
|
||||||
dashboardViewStateWorker = ever(mailboxDashBoardController.viewState, (state) {
|
dashboardViewStateWorker = ever(mailboxDashBoardController.viewState, (state) {
|
||||||
state.fold((failure) => null, (success) {
|
state.fold(
|
||||||
if (success is SaveEmailAsDraftsSuccess) {
|
(failure) {
|
||||||
_emailIdEditing = success.emailAsDrafts.id;
|
if (failure is SaveEmailAsDraftsFailure ||
|
||||||
log('ComposerController::_listenStreamEvent::dashboardViewStateWorker:SaveEmailAsDraftsSuccess:emailIdEditing: $_emailIdEditing');
|
failure is UpdateEmailDraftsFailure) {
|
||||||
} else if (success is UpdateEmailDraftsSuccess) {
|
_saveToDraftButtonState = ButtonState.enabled;
|
||||||
_emailIdEditing = success.emailAsDrafts.id;
|
}
|
||||||
log('ComposerController::_listenStreamEvent::dashboardViewStateWorker:UpdateEmailDraftsSuccess:emailIdEditing: $_emailIdEditing');
|
},
|
||||||
}
|
(success) {
|
||||||
|
if (success is SaveEmailAsDraftsSuccess) {
|
||||||
|
_emailIdEditing = success.emailAsDrafts.id;
|
||||||
|
_saveToDraftButtonState = ButtonState.enabled;
|
||||||
|
log('ComposerController::_listenStreamEvent::dashboardViewStateWorker:SaveEmailAsDraftsSuccess:emailIdEditing: $_emailIdEditing');
|
||||||
|
} else if (success is UpdateEmailDraftsSuccess) {
|
||||||
|
_emailIdEditing = success.emailAsDrafts.id;
|
||||||
|
_saveToDraftButtonState = ButtonState.enabled;
|
||||||
|
log('ComposerController::_listenStreamEvent::dashboardViewStateWorker:UpdateEmailDraftsSuccess:emailIdEditing: $_emailIdEditing');
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _listenBrowserTabRefresh() {
|
void _listenBrowserTabRefresh() {
|
||||||
@@ -1133,8 +1131,8 @@ class ComposerController extends BaseController {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<SaveToDraftArguments?> _handleSaveAsDrafts(BuildContext context) async {
|
Future<SaveToDraftArguments?> _generateSaveAsDraftsArguments(BuildContext context) async {
|
||||||
log('ComposerController::_handleSaveAsDrafts:');
|
log('ComposerController::_generateSaveAsDraftsArguments:');
|
||||||
final arguments = composerArguments.value;
|
final arguments = composerArguments.value;
|
||||||
final userProfile = mailboxDashBoardController.userProfile.value;
|
final userProfile = mailboxDashBoardController.userProfile.value;
|
||||||
final accountId = mailboxDashBoardController.accountId.value;
|
final accountId = mailboxDashBoardController.accountId.value;
|
||||||
@@ -1194,45 +1192,37 @@ class ComposerController extends BaseController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void saveToDraftAction(BuildContext context) {
|
void saveToDraftAction(BuildContext context) async {
|
||||||
|
if (_saveToDraftButtonState == ButtonState.disabled) {
|
||||||
|
log('ComposerController::saveToDraftAction: Saving to draft');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_saveToDraftButtonState = ButtonState.disabled;
|
||||||
|
|
||||||
final userProfile = mailboxDashBoardController.userProfile.value;
|
final userProfile = mailboxDashBoardController.userProfile.value;
|
||||||
final accountId = mailboxDashBoardController.accountId.value;
|
final accountId = mailboxDashBoardController.accountId.value;
|
||||||
final session = mailboxDashBoardController.sessionCurrent;
|
final session = mailboxDashBoardController.sessionCurrent;
|
||||||
final draftMailboxId = mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleDrafts];
|
final draftMailboxId = mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleDrafts];
|
||||||
|
|
||||||
if (draftMailboxId == null || userProfile == null || session == null || accountId == null) {
|
if (draftMailboxId == null || userProfile == null || session == null || accountId == null) {
|
||||||
logError('ComposerController::saveToDraftAction: Param is NULL');
|
log('ComposerController::saveToDraftAction: Param is NULL');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_saveToDraftEventController.add(
|
|
||||||
SaveToDraftViewEvent(
|
|
||||||
context: context,
|
|
||||||
session: session,
|
|
||||||
accountId: accountId,
|
|
||||||
userProfile: userProfile,
|
|
||||||
draftMailboxId: draftMailboxId,
|
|
||||||
emailIdEditing: _emailIdEditing,
|
|
||||||
arguments: mailboxDashBoardController.composerArguments,
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
void _handleSaveToDraft(SaveToDraftViewEvent event) async {
|
|
||||||
log('ComposerController::_handleSaveToDraft:emailIdEditing: ${event.emailIdEditing}');
|
|
||||||
final newEmail = await _generateEmail(
|
final newEmail = await _generateEmail(
|
||||||
event.context,
|
context,
|
||||||
event.userProfile,
|
userProfile,
|
||||||
asDrafts: true,
|
asDrafts: true,
|
||||||
draftMailboxId: event.draftMailboxId,
|
draftMailboxId: draftMailboxId,
|
||||||
arguments: event.arguments
|
arguments: mailboxDashBoardController.composerArguments);
|
||||||
);
|
|
||||||
mailboxDashBoardController.saveEmailToDraft(
|
mailboxDashBoardController.saveEmailToDraft(
|
||||||
arguments: SaveToDraftArguments(
|
arguments: SaveToDraftArguments(
|
||||||
session: event.session,
|
session: session,
|
||||||
accountId: event.accountId,
|
accountId:accountId,
|
||||||
newEmail: newEmail,
|
newEmail: newEmail,
|
||||||
oldEmailId: event.emailIdEditing
|
oldEmailId: _emailIdEditing
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -2163,7 +2153,7 @@ class ComposerController extends BaseController {
|
|||||||
|
|
||||||
_closeComposerButtonState = ButtonState.disabled;
|
_closeComposerButtonState = ButtonState.disabled;
|
||||||
clearFocus(context);
|
clearFocus(context);
|
||||||
final draftArgs = await _handleSaveAsDrafts(context);
|
final draftArgs = await _generateSaveAsDraftsArguments(context);
|
||||||
_closeComposerAction(result: draftArgs);
|
_closeComposerAction(result: draftArgs);
|
||||||
_closeComposerButtonState = ButtonState.enabled;
|
_closeComposerButtonState = ButtonState.enabled;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user