Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions lib/features/composer/presentation/composer_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_paywall_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/open_and_close_composer_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_text_formatting_menu_state_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/draggable_app_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_identities_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart';
Expand Down Expand Up @@ -669,6 +670,12 @@ class ComposerController extends BaseController
responsiveUtils.isWebDesktop(currentContext!)) {
await setupSelectedIdentityWithoutApplySignature();
}

if (PlatformInfo.isWeb) {
richTextWebController?.updateFormattingOptions(
mailboxDashBoardController.isTextFormattingMenuOpened.value,
);
}
}

void initAttachmentsAndInlineImages({
Expand Down Expand Up @@ -1473,6 +1480,11 @@ class ComposerController extends BaseController
}

void _closeComposerAction({dynamic result, bool closeOverlays = false}) {
if (PlatformInfo.isWeb && richTextWebController != null) {
mailboxDashBoardController.updateTextFormattingMenuState(
richTextWebController!.isFormattingOptionsEnabled,
);
}
mailboxDashBoardController.closeComposer(
result: result,
closeOverlays: closeOverlays,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,12 @@ class RichTextWebController extends GetxController {
}
}

void updateFormattingOptions(bool isDisplayed) {
formattingOptionsState.value = isDisplayed
? FormattingOptionsState.enabled
: FormattingOptionsState.disabled;
}

bool get isFormattingOptionsEnabled => formattingOptionsState.value == FormattingOptionsState.enabled;

@override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';

class GettingTextFormattingMenuState extends LoadingState {}

class GetTextFormattingMenuStateSuccess extends UIState {
final bool isDisplayed;

GetTextFormattingMenuStateSuccess(this.isDisplayed);

@override
List<Object?> get props => [isDisplayed];
}

class GetTextFormattingMenuStateFailure extends FeatureFailure {
GetTextFormattingMenuStateFailure(dynamic exception) : super(exception: exception);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';

class SavingTextFormattingMenuState extends LoadingState {}

class SaveTextFormattingMenuStateSuccess extends UIState {
final bool isDisplayed;

SaveTextFormattingMenuStateSuccess(this.isDisplayed);

@override
List<Object?> get props => [isDisplayed];
}

class SaveTextFormattingMenuStateFailure extends FeatureFailure {
SaveTextFormattingMenuStateFailure(dynamic exception) : super(exception: exception);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_text_formatting_menu_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';

class GetTextFormattingMenuStateInteractor {
final ManageAccountRepository _manageAccountRepository;

GetTextFormattingMenuStateInteractor(this._manageAccountRepository);

Stream<Either<Failure, Success>> execute() async* {
try {
yield Right(GettingTextFormattingMenuState());
final preferencesSetting =
await _manageAccountRepository.getLocalSettings();
yield Right(GetTextFormattingMenuStateSuccess(
preferencesSetting.textFormattingMenuConfig.isDisplayed,
));
} catch (exception) {
yield Left(GetTextFormattingMenuStateFailure(exception));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class RemoveAllComposerCacheOnWebInteractor {

Future<Either<Failure, Success>> execute(AccountId accountId, UserName userName) async {
try {
composerCacheRepository.removeAllComposerCacheOnWeb(accountId, userName);
await composerCacheRepository.removeAllComposerCacheOnWeb(accountId, userName,);
return Right(RemoveComposerCacheSuccess());
} catch (exception) {
return Left(RemoveComposerCacheFailure(exception));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class RemoveComposerCacheByIdOnWebInteractor {
String composerId,
) async {
try {
composerCacheRepository.removeComposerCacheByIdOnWeb(
await composerCacheRepository.removeComposerCacheByIdOnWeb(
accountId,
userName,
composerId,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/save_text_formatting_menu_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/text_formatting_menu_config.dart';
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';

class SaveTextFormattingMenuStateInteractor {
final ManageAccountRepository _manageAccountRepository;

SaveTextFormattingMenuStateInteractor(this._manageAccountRepository);

Stream<Either<Failure, Success>> execute(bool isDisplayed) async* {
try {
yield Right(SavingTextFormattingMenuState());
final preferencesSetting = await _manageAccountRepository.toggleLocalSettingsState(
TextFormattingMenuConfig(isDisplayed: isDisplayed),
);
yield Right(SaveTextFormattingMenuStateSuccess(
preferencesSetting.textFormattingMenuConfig.isDisplayed,
));
} catch (exception) {
yield Left(SaveTextFormattingMenuStateFailure(exception));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,13 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_com
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spam_mailbox_cached_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spam_report_state_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_stored_email_sort_order_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_text_formatting_menu_state_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_all_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_text_formatting_menu_state_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_email_sort_order_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_last_time_dismissed_spam_reported_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_spam_report_state_interactor.dart';
Expand All @@ -101,7 +103,9 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart';
import 'package:tmail_ui_user/features/manage_account/data/local/preferences_setting_manager.dart';
import 'package:tmail_ui_user/features/manage_account/domain/repository/identity_repository.dart';
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/bindings/setting_interactor_bindings.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/identities/identity_interactors_bindings.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/identities/utils/identity_utils.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart';
Expand Down Expand Up @@ -378,6 +382,18 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<IdentityCreatorRepository>()
));
PaywallBindings().dependencies();

SettingInteractorBindings().dependencies();
Get.lazyPut(
() => GetTextFormattingMenuStateInteractor(
Get.find<ManageAccountRepository>(),
),
);
Get.lazyPut(
() => SaveTextFormattingMenuStateInteractor(
Get.find<ManageAccountRepository>(),
),
);
}

@override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,12 +101,15 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/exceptions/spam_
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_composer_cache_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_stored_email_sort_order_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_text_formatting_menu_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_email_drafts_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_stored_email_sort_order_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_text_formatting_menu_state_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_all_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_text_formatting_menu_state_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_email_sort_order_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart';
Expand All @@ -128,6 +131,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/set_error_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_current_emails_flags_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_paywall_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_text_formatting_menu_state_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/web_auth_redirect_processor_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/download/download_task_state.dart';
Expand Down Expand Up @@ -262,6 +266,8 @@ class MailboxDashBoardController extends ReloadableController
GetServerSettingInteractor? getServerSettingInteractor;
CreateNewEmailRuleFilterInteractor? createNewEmailRuleFilterInteractor;
SaveLanguageInteractor? saveLanguageInteractor;
GetTextFormattingMenuStateInteractor? getTextFormattingMenuStateInteractor;
SaveTextFormattingMenuStateInteractor? saveTextFormattingMenuStateInteractor;

final scaffoldKey = GlobalKey<ScaffoldState>();
final selectedMailbox = Rxn<PresentationMailbox>();
Expand Down Expand Up @@ -291,6 +297,7 @@ class MailboxDashBoardController extends ReloadableController
final isDrawerOpened = RxBool(false);
final isContextMenuOpened = RxBool(false);
final isPopupMenuOpened = RxBool(false);
final isTextFormattingMenuOpened = RxBool(false);

Map<Role, MailboxId> mapDefaultMailboxIdByRole = {};
Map<MailboxId, PresentationMailbox> mapMailboxById = {};
Expand Down Expand Up @@ -377,6 +384,7 @@ class MailboxDashBoardController extends ReloadableController
listSearchFilterScrollController = ScrollController();
twakeAppManager.setExecutingBeforeReconnect(false);
isRetryGetPaywallUrl = false;
initialTextFormattingMenuState();
}
if (PlatformInfo.isIOS) {
_registerPendingCurrentEmailIdInNotification();
Expand Down Expand Up @@ -508,6 +516,8 @@ class MailboxDashBoardController extends ReloadableController
setUpDefaultEmailSortOrder(success.emailSortOrderType);
} else if (success is GetPaywallUrlSuccess) {
loadPaywallUrlSuccess(success.paywallUrlPattern);
} else if (success is GetTextFormattingMenuStateSuccess) {
updateTextFormattingMenuState(success.isDisplayed);
} else {
super.handleSuccessViewState(success);
}
Expand Down Expand Up @@ -555,6 +565,8 @@ class MailboxDashBoardController extends ReloadableController
backToHomeScreen();
} else if (failure is GetPaywallUrlFailure) {
loadPaywallUrlFailure();
} else if (failure is GetTextFormattingMenuStateFailure) {
updateTextFormattingMenuState(false);
} else {
super.handleFailureViewState(failure);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action
import 'package:tmail_ui_user/features/email/presentation/extensions/composer_arguments_extension.dart';
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_text_formatting_menu_state_extension.dart';
import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_arguments.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
Expand Down Expand Up @@ -116,6 +117,8 @@ extension OpenAndCloseComposerExtension on MailboxDashBoardController {
if (composerId != null) {
await removeComposerCacheByIdOnWeb(composerId);
}

saveTextFormattingMenuState();
}

void _handleResultAfterCloseComposer(dynamic result) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import 'package:core/utils/app_logger.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_text_formatting_menu_state_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_text_formatting_menu_state_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';

extension UpdateTextFormattingMenuStateExtension on MailboxDashBoardController {
void initialTextFormattingMenuState() {
getTextFormattingMenuStateInteractor =
getBinding<GetTextFormattingMenuStateInteractor>();
if (getTextFormattingMenuStateInteractor == null) return;

consumeState(getTextFormattingMenuStateInteractor!.execute());
}

void updateTextFormattingMenuState(bool isDisplayed) {
isTextFormattingMenuOpened.value = isDisplayed;
log('$runtimeType::updateTextFormattingMenuState(): isDisplayed: $isDisplayed');
}

void saveTextFormattingMenuState() {
saveTextFormattingMenuStateInteractor =
getBinding<SaveTextFormattingMenuStateInteractor>();
if (saveTextFormattingMenuStateInteractor == null) return;

final isDisplayed = isTextFormattingMenuOpened.value;
consumeState(
saveTextFormattingMenuStateInteractor!.execute(isDisplayed),
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'package:tmail_ui_user/features/manage_account/data/local/preferences_set
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_config.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_setting.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/spam_report_config.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/text_formatting_menu_config.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/thread_detail_config.dart';
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';

Expand Down Expand Up @@ -39,6 +40,10 @@ class ManageAccountDataSourceImpl extends ManageAccountDataSource {
await _preferencesSettingManager.updateSpamReport(
isEnabled: preferencesConfig.isEnabled,
);
} else if (preferencesConfig is TextFormattingMenuConfig) {
await _preferencesSettingManager.updateTextFormattingMenu(
isDisplayed: preferencesConfig.isDisplayed,
);
} else {
await _preferencesSettingManager.savePreferences(
preferencesConfig,
Expand Down
Loading
Loading