add either and state in interactor
This commit is contained in:
@@ -1,3 +1,3 @@
|
||||
SERVER_URL=https://gateway.upn.integration-open-paas.org
|
||||
SERVER_URL=http://localhost
|
||||
DOMAIN_REDIRECT_URL=http://localhost:3000
|
||||
WEB_OIDC_CLIENT_ID=teammail-web
|
||||
@@ -29,8 +29,8 @@ import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/repository/email_repository_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/get_email_content_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_on_web.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_composer_cache_on_web.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/save_composer_cache_on_web_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_account_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart';
|
||||
|
||||
@@ -39,8 +39,8 @@ import 'package:tmail_ui_user/features/composer/presentation/model/screen_displa
|
||||
import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/get_email_content_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_on_web.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_composer_cache_on_web.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/save_composer_cache_on_web_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.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';
|
||||
@@ -814,11 +814,15 @@ class ComposerController extends BaseController {
|
||||
}
|
||||
|
||||
void _getEmailContentAction(ComposerArguments arguments) async {
|
||||
final baseDownloadUrl = mailboxDashBoardController.sessionCurrent?.getDownloadUrl();
|
||||
final accountId = mailboxDashBoardController.sessionCurrent?.accounts.keys.first;
|
||||
final emailId = arguments.presentationEmail?.id;
|
||||
if (emailId != null && baseDownloadUrl != null && accountId != null) {
|
||||
consumeState(_getEmailContentInteractor.execute(accountId, emailId, baseDownloadUrl));
|
||||
if(arguments.emailContents != null && arguments.emailContents!.isNotEmpty){
|
||||
emailContents.value = arguments.emailContents;
|
||||
} else {
|
||||
final baseDownloadUrl = mailboxDashBoardController.sessionCurrent?.getDownloadUrl();
|
||||
final accountId = mailboxDashBoardController.sessionCurrent?.accounts.keys.first;
|
||||
final emailId = arguments.presentationEmail?.id;
|
||||
if (emailId != null && baseDownloadUrl != null && accountId != null) {
|
||||
consumeState(_getEmailContentInteractor.execute(accountId, emailId, baseDownloadUrl));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cac
|
||||
abstract class ComposerCacheDataSource {
|
||||
void saveComposerCacheOnWeb(Email email);
|
||||
|
||||
ComposerCache? getComposerCacheOnWeb();
|
||||
ComposerCache getComposerCacheOnWeb();
|
||||
|
||||
void removeComposerCacheOnWeb();
|
||||
}
|
||||
+29
-15
@@ -6,29 +6,43 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/compose
|
||||
import 'package:universal_html/html.dart' as html;
|
||||
|
||||
class ComposerCacheDataSourceImpl extends ComposerCacheDataSource {
|
||||
|
||||
@override
|
||||
ComposerCache? getComposerCacheOnWeb() {
|
||||
final result = html.window.localStorage.entries
|
||||
.where((e) => e.key == EmailActionType.edit.name)
|
||||
.toList();
|
||||
if (result.isNotEmpty) {
|
||||
final jsonHandle = json.decode(result.first.value) as Map<String, dynamic>;
|
||||
final emailCache = ComposerCache.fromJson(jsonHandle);
|
||||
return emailCache;
|
||||
} else {
|
||||
return null;
|
||||
ComposerCache getComposerCacheOnWeb() {
|
||||
try {
|
||||
final result = html.window.sessionStorage.entries
|
||||
.where((e) => e.key == EmailActionType.edit.name)
|
||||
.toList();
|
||||
if (result.isNotEmpty) {
|
||||
final jsonHandle = json.decode(result.first.value) as Map<String, dynamic>;
|
||||
final emailCache = ComposerCache.fromJson(jsonHandle);
|
||||
return emailCache;
|
||||
} else {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
} catch (e) {
|
||||
throw UnimplementedError(e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void removeComposerCacheOnWeb() {
|
||||
html.window.localStorage.removeWhere((key, value) => key == EmailActionType.edit.name);
|
||||
try {
|
||||
html.window.sessionStorage
|
||||
.removeWhere((key, value) => key == EmailActionType.edit.name);
|
||||
} catch (e) {
|
||||
throw UnimplementedError(e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void saveComposerCacheOnWeb(Email email) {
|
||||
Map<String,String> entries = { EmailActionType.edit.name: json.encode(email.toJson()) };
|
||||
html.window.localStorage.addAll(entries);
|
||||
try {
|
||||
Map<String, String> entries = {
|
||||
EmailActionType.edit.name: json.encode(email.toJson())
|
||||
};
|
||||
html.window.sessionStorage.addAll(entries);
|
||||
} catch (e) {
|
||||
throw UnimplementedError(e.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ class ComposerCacheRepositoryImpl extends ComposerCacheRepository {
|
||||
ComposerCacheRepositoryImpl(this.composerCacheDataSource);
|
||||
|
||||
@override
|
||||
ComposerCache? getComposerCacheOnWeb() {
|
||||
ComposerCache getComposerCacheOnWeb() {
|
||||
return composerCacheDataSource.getComposerCacheOnWeb();
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cac
|
||||
abstract class ComposerCacheRepository {
|
||||
void saveComposerCacheOnWeb(Email email);
|
||||
|
||||
ComposerCache? getComposerCacheOnWeb();
|
||||
ComposerCache getComposerCacheOnWeb();
|
||||
|
||||
void removeComposerCacheOnWeb();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cache.dart';
|
||||
|
||||
class GetComposerCacheSuccess extends UIState {
|
||||
|
||||
final ComposerCache composerCache;
|
||||
|
||||
GetComposerCacheSuccess(this.composerCache);
|
||||
|
||||
@override
|
||||
List<Object> get props => [composerCache];
|
||||
}
|
||||
|
||||
class GetComposerCacheFailure extends FeatureFailure {
|
||||
final dynamic exception;
|
||||
|
||||
GetComposerCacheFailure(this.exception);
|
||||
|
||||
@override
|
||||
List<Object> get props => [exception];
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
import 'package:core/core.dart';
|
||||
|
||||
class RemoveComposerCacheSuccess extends UIState {
|
||||
|
||||
RemoveComposerCacheSuccess();
|
||||
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
class RemoveComposerCacheFailure extends FeatureFailure {
|
||||
final dynamic exception;
|
||||
|
||||
RemoveComposerCacheFailure(this.exception);
|
||||
|
||||
@override
|
||||
List<Object> get props => [exception];
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
import 'package:core/core.dart';
|
||||
|
||||
class SaveComposerCacheSuccess extends UIState {
|
||||
|
||||
SaveComposerCacheSuccess();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class SaveComposerCacheFailure extends FeatureFailure {
|
||||
final dynamic exception;
|
||||
|
||||
SaveComposerCacheFailure(this.exception);
|
||||
|
||||
@override
|
||||
List<Object> get props => [exception];
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cache.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart';
|
||||
|
||||
class GetComposerCacheOnWebInteractor {
|
||||
final ComposerCacheRepository composerCacheRepository;
|
||||
|
||||
GetComposerCacheOnWebInteractor(this.composerCacheRepository);
|
||||
|
||||
ComposerCache? execute() {
|
||||
return composerCacheRepository.getComposerCacheOnWeb();
|
||||
}
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
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/get_composer_cache_state.dart';
|
||||
|
||||
class GetComposerCacheOnWebInteractor {
|
||||
final ComposerCacheRepository composerCacheRepository;
|
||||
|
||||
GetComposerCacheOnWebInteractor(this.composerCacheRepository);
|
||||
|
||||
Either<Failure, Success> execute() {
|
||||
try {
|
||||
final data = composerCacheRepository.getComposerCacheOnWeb();
|
||||
return Right(GetComposerCacheSuccess(data));
|
||||
} catch (exception) {
|
||||
return Left(GetComposerCacheFailure(exception));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart';
|
||||
|
||||
class RemoveComposerCacheOnWebInteractor {
|
||||
final ComposerCacheRepository composerCacheRepository;
|
||||
|
||||
RemoveComposerCacheOnWebInteractor(this.composerCacheRepository);
|
||||
|
||||
execute() {
|
||||
return composerCacheRepository.removeComposerCacheOnWeb();
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
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/remove_composer_cache_state.dart';
|
||||
|
||||
class RemoveComposerCacheOnWebInteractor {
|
||||
final ComposerCacheRepository composerCacheRepository;
|
||||
|
||||
RemoveComposerCacheOnWebInteractor(this.composerCacheRepository);
|
||||
|
||||
execute() {
|
||||
try {
|
||||
composerCacheRepository.removeComposerCacheOnWeb();
|
||||
return const Right(RemoveComposerCacheSuccess);
|
||||
} catch (exception) {
|
||||
return Left(RemoveComposerCacheFailure(exception));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart';
|
||||
|
||||
class SaveComposerCacheOnWebInteractor {
|
||||
final ComposerCacheRepository composerCacheRepository;
|
||||
|
||||
SaveComposerCacheOnWebInteractor(this.composerCacheRepository);
|
||||
|
||||
execute(Email email) {
|
||||
return composerCacheRepository.saveComposerCacheOnWeb(email);
|
||||
}
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.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/save_composer_cache_state.dart';
|
||||
|
||||
class SaveComposerCacheOnWebInteractor {
|
||||
final ComposerCacheRepository composerCacheRepository;
|
||||
|
||||
SaveComposerCacheOnWebInteractor(this.composerCacheRepository);
|
||||
|
||||
execute(Email email) {
|
||||
try {
|
||||
composerCacheRepository.saveComposerCacheOnWeb(email);
|
||||
return const Right(SaveComposerCacheSuccess);
|
||||
} catch (exception) {
|
||||
return Left(SaveComposerCacheFailure(exception));
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -23,7 +23,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/compose
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/composer_cache_datasoure_impl.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/composer_cache_repository_impl.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/email_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/login/data/datasource/account_datasource.dart';
|
||||
@@ -63,9 +63,9 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_user_profile_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/mark_as_mailbox_read_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_composer_cache_on_web.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';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_composer_cache_on_web.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_composer_cache_on_web_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/presentation/controller/advanced_filter_controller.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||
|
||||
+24
-19
@@ -27,7 +27,8 @@ import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_reques
|
||||
import 'package:tmail_ui_user/features/email/domain/state/delete_email_permanently_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/delete_email_permanently_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web.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/usecases/get_composer_cache_on_web_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
|
||||
import 'package:tmail_ui_user/features/login/domain/usecases/delete_authority_oidc_interactor.dart';
|
||||
@@ -123,23 +124,27 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
super.onReady();
|
||||
}
|
||||
|
||||
void _handleEmailCache() async {
|
||||
final emailCache = _getEmailCacheOnWebInteractor.execute();
|
||||
if (emailCache !=null) {
|
||||
final ComposerArguments composerArguments = ComposerArguments(
|
||||
emailActionType: EmailActionType.edit,
|
||||
presentationEmail: PresentationEmail(
|
||||
emailCache.id,
|
||||
subject: emailCache.subject,
|
||||
from: emailCache.from,
|
||||
to: emailCache.to,
|
||||
cc: emailCache.cc,
|
||||
bcc: emailCache.bcc,
|
||||
),
|
||||
emailContents: emailCache.emailContentList,
|
||||
);
|
||||
openComposerOverlay(composerArguments);
|
||||
}
|
||||
void _handleComposerCache() async {
|
||||
_getEmailCacheOnWebInteractor.execute().fold(
|
||||
(failure) {},
|
||||
(success) {
|
||||
if(success is GetComposerCacheSuccess){
|
||||
final ComposerArguments composerArguments = ComposerArguments(
|
||||
emailActionType: EmailActionType.edit,
|
||||
presentationEmail: PresentationEmail(
|
||||
success.composerCache.id,
|
||||
subject: success.composerCache.subject,
|
||||
from: success.composerCache.from,
|
||||
to: success.composerCache.to,
|
||||
cc: success.composerCache.cc,
|
||||
bcc: success.composerCache.bcc,
|
||||
),
|
||||
emailContents: success.composerCache.emailContentList,
|
||||
);
|
||||
openComposerOverlay(composerArguments);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -243,7 +248,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
void _getUserProfile() async {
|
||||
userProfile.value = sessionCurrent != null ? UserProfile(sessionCurrent!.username.value) : null;
|
||||
if (kIsWeb && userProfile.value != null) {
|
||||
_handleEmailCache();
|
||||
_handleComposerCache();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-2
@@ -1,4 +1,4 @@
|
||||
// Mocks generated by Mockito 5.2.0 from annotations
|
||||
// Mocks generated by Mockito 5.0.17 from annotations
|
||||
// in tmail_ui_user/test/features/thread/domain/usecases/get_emails_in_mailbox_interactor_test.dart.
|
||||
// Do not manually edit this file.
|
||||
|
||||
@@ -24,7 +24,6 @@ import 'package:tmail_ui_user/features/thread/domain/model/get_email_request.dar
|
||||
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart'
|
||||
as _i2;
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: avoid_redundant_argument_values
|
||||
// ignore_for_file: avoid_setters_without_getters
|
||||
// ignore_for_file: comment_references
|
||||
|
||||
+1
-2
@@ -1,4 +1,4 @@
|
||||
// Mocks generated by Mockito 5.2.0 from annotations
|
||||
// Mocks generated by Mockito 5.0.17 from annotations
|
||||
// in tmail_ui_user/test/features/thread/domain/usecases/refresh_changes_emails_in_mailbox_interactor_test.dart.
|
||||
// Do not manually edit this file.
|
||||
|
||||
@@ -24,7 +24,6 @@ import 'package:tmail_ui_user/features/thread/domain/model/get_email_request.dar
|
||||
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart'
|
||||
as _i2;
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: avoid_redundant_argument_values
|
||||
// ignore_for_file: avoid_setters_without_getters
|
||||
// ignore_for_file: comment_references
|
||||
|
||||
Reference in New Issue
Block a user