Skip to content

Commit

Permalink
TF-2143 Implement delete composed email on local storage browser afte…
Browse files Browse the repository at this point in the history
…r open new tab completed
  • Loading branch information
dab246 committed May 28, 2024
1 parent 8bf44e4 commit 6f4adc3
Show file tree
Hide file tree
Showing 9 changed files with 66 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ abstract class LocalStorageBrowserDatasource {
Future<void> storeComposedEmail(Email email);

Future<Email> getComposedEmail();

Future<void> deleteComposedEmail();
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,11 @@ class LocalStorageBrowserDatasourceImpl extends LocalStorageBrowserDatasource {
}
}).catchError(_exceptionThrower.throwException);
}

@override
Future<void> deleteComposedEmail() {
return Future.sync(() async {
return html.window.localStorage.remove(composedEmailLocalStorageKey);
}).catchError(_exceptionThrower.throwException);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,9 @@ class ComposerCacheRepositoryImpl extends ComposerCacheRepository {
Future<void> storeComposedEmailToLocalStorageBrowser(Email email) {
return _localStorageBrowserDatasource.storeComposedEmail(email);
}

@override
Future<void> deleteComposedEmailOnLocalStorageBrowser() {
return _localStorageBrowserDatasource.deleteComposedEmail();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,6 @@ abstract class ComposerCacheRepository {
Future<void> storeComposedEmailToLocalStorageBrowser(Email email);

Future<Email> getComposedEmailFromLocalStorageBrowser();

Future<void> deleteComposedEmailOnLocalStorageBrowser();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';

class DeleteComposedEmailOnLocalStorageBrowserLoading extends LoadingState {}

class DeleteComposedEmailOnLocalStorageBrowserSuccess extends UIState {}

class DeleteComposedEmailOnLocalStorageBrowserFailure extends FeatureFailure {

DeleteComposedEmailOnLocalStorageBrowserFailure(dynamic exception) : super(exception: exception);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
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/repository/composer_cache_repository.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/delete_composed_email_on_local_storage_browser_state.dart';

class DeleteComposedEmailOnLocalStorageBrowserInteractor {
final ComposerCacheRepository _composerCacheRepository;

DeleteComposedEmailOnLocalStorageBrowserInteractor(this._composerCacheRepository);

Stream<Either<Failure, Success>> execute() async* {
try {
yield Right<Failure, Success>(DeleteComposedEmailOnLocalStorageBrowserLoading());
await _composerCacheRepository.deleteComposedEmailOnLocalStorageBrowser();
yield Right<Failure, Success>(DeleteComposedEmailOnLocalStorageBrowserSuccess());
} catch (exception) {
yield Left<Failure, Success>(DeleteComposedEmailOnLocalStorageBrowserFailure(exception));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/spam_re
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/search_repository.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/spam_report_repository.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/delete_composed_email_on_local_storage_browser_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_app_dashboard_configuration_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
Expand Down Expand Up @@ -181,6 +182,7 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<RemoveComposerCacheOnWebInteractor>(),
Get.find<GetAllIdentitiesInteractor>(),
Get.find<GetComposedEmailFromLocalStorageBrowserInteractor>(),
Get.find<DeleteComposedEmailOnLocalStorageBrowserInteractor>(),
));
Get.put(AdvancedFilterController());
}
Expand Down Expand Up @@ -288,6 +290,7 @@ class MailboxDashBoardBindings extends BaseBindings {
);
Get.lazyPut(() => GetComposerCacheOnWebInteractor(Get.find<ComposerCacheRepository>()));
Get.lazyPut(() => GetComposedEmailFromLocalStorageBrowserInteractor(Get.find<ComposerCacheRepository>()));
Get.lazyPut(() => DeleteComposedEmailOnLocalStorageBrowserInteractor(Get.find<ComposerCacheRepository>()));
Get.lazyPut(() => RemoveComposerCacheOnWebInteractor(Get.find<ComposerCacheRepository>()));
Get.lazyPut(() => MarkAsEmailReadInteractor(
Get.find<EmailRepository>(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_app_da
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/remove_email_drafts_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_composed_email_from_local_storage_browser_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/delete_composed_email_on_local_storage_browser_interactor.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/remove_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
Expand Down Expand Up @@ -192,6 +193,7 @@ class MailboxDashBoardController extends ReloadableController {
final RemoveComposerCacheOnWebInteractor _removeComposerCacheOnWebInteractor;
final GetAllIdentitiesInteractor _getAllIdentitiesInteractor;
final GetComposedEmailFromLocalStorageBrowserInteractor _getComposedEmailFromLocalStorageBrowserInteractor;
final DeleteComposedEmailOnLocalStorageBrowserInteractor _deleteComposedEmailOnLocalStorageBrowserInteractor;

GetAllVacationInteractor? _getAllVacationInteractor;
UpdateVacationInteractor? _updateVacationInteractor;
Expand Down Expand Up @@ -273,6 +275,7 @@ class MailboxDashBoardController extends ReloadableController {
this._removeComposerCacheOnWebInteractor,
this._getAllIdentitiesInteractor,
this._getComposedEmailFromLocalStorageBrowserInteractor,
this._deleteComposedEmailOnLocalStorageBrowserInteractor,
);

@override
Expand Down Expand Up @@ -379,6 +382,7 @@ class MailboxDashBoardController extends ReloadableController {
_handleGetAllIdentitiesSuccess(success);
} else if (success is GetComposedEmailFromLocalStorageBrowserSuccess) {
goToComposer(ComposerArguments.fromLocalStorageBrowser(success.email));
_deleteComposedEmailOnLocalStorageBrowser();
}
}

Expand All @@ -403,6 +407,8 @@ class MailboxDashBoardController extends ReloadableController {
_handleRestoreDeletedMessageFailed();
} else if (failure is GetRestoredDeletedMessageFailure) {
_handleRestoreDeletedMessageFailed();
} else if (failure is GetComposedEmailFromLocalStorageBrowserFailure) {
_deleteComposedEmailOnLocalStorageBrowser();
}
}

Expand Down Expand Up @@ -2557,6 +2563,10 @@ class MailboxDashBoardController extends ReloadableController {
consumeState(_getComposedEmailFromLocalStorageBrowserInteractor.execute());
}

void _deleteComposedEmailOnLocalStorageBrowser() {
consumeState(_deleteComposedEmailOnLocalStorageBrowserInteractor.execute());
}

@override
void onClose() {
_emailReceiveManager.closeEmailReceiveManagerStream();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_multipl
import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_controller.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/delete_composed_email_on_local_storage_browser_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.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/quick_search_email_interactor.dart';
Expand Down Expand Up @@ -154,6 +155,7 @@ const fallbackGenerators = {
MockSpec<SearchMoreEmailInteractor>(),
MockSpec<RemoveComposerCacheOnWebInteractor>(),
MockSpec<GetComposedEmailFromLocalStorageBrowserInteractor>(),
MockSpec<DeleteComposedEmailOnLocalStorageBrowserInteractor>(),
])
void main() {
// mock mailbox dashboard controller direct dependencies
Expand Down Expand Up @@ -236,6 +238,7 @@ void main() {
final removeComposerCacheOnWebInteractor = MockRemoveComposerCacheOnWebInteractor();
final getAllIdentitiesInteractor = MockGetAllIdentitiesInteractor();
final getComposedEmailFromLocalStorageBrowserInteractor = MockGetComposedEmailFromLocalStorageBrowserInteractor();
final deleteComposedEmailOnLocalStorageBrowserInteractor = MockDeleteComposedEmailOnLocalStorageBrowserInteractor();
late MailboxController mailboxController;

// mock thread controller direct dependencies
Expand Down Expand Up @@ -289,6 +292,7 @@ void main() {
Get.put<GetAllIdentitiesInteractor>(getAllIdentitiesInteractor);
Get.put<RemoveComposerCacheOnWebInteractor>(removeComposerCacheOnWebInteractor);
Get.put<GetComposedEmailFromLocalStorageBrowserInteractor>(getComposedEmailFromLocalStorageBrowserInteractor);
Get.put<DeleteComposedEmailOnLocalStorageBrowserInteractor>(deleteComposedEmailOnLocalStorageBrowserInteractor);

Get.testMode = true;
PackageInfo.setMockInitialValues(
Expand Down Expand Up @@ -334,6 +338,7 @@ void main() {
removeComposerCacheOnWebInteractor,
getAllIdentitiesInteractor,
getComposedEmailFromLocalStorageBrowserInteractor,
deleteComposedEmailOnLocalStorageBrowserInteractor,
);
Get.put(mailboxDashboardController);
mailboxDashboardController.onReady();
Expand Down

0 comments on commit 6f4adc3

Please sign in to comment.