TF-3480 Handle reopen multiple composer when reload page or session expired

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-02-28 01:29:38 +07:00
committed by Dat H. Pham
parent 810d86b100
commit cfc72a6f4f
24 changed files with 318 additions and 101 deletions
@@ -10,11 +10,20 @@ abstract class ComposerCacheRepository {
required ComposerCache composerCache,
});
Future<ComposerCache> getComposerCacheOnWeb(
Future<List<ComposerCache>> getComposerCacheOnWeb(
AccountId accountId,
UserName userName);
Future<void> removeComposerCacheOnWeb();
Future<void> removeAllComposerCacheOnWeb(
AccountId accountId,
UserName userName,
);
Future<void> removeComposerCacheByIdOnWeb(
AccountId accountId,
UserName userName,
String composerId,
);
Future<String> restoreEmailInlineImages(
String htmlContent,
@@ -4,12 +4,12 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cac
class GetComposerCacheSuccess extends UIState {
final ComposerCache composerCache;
final List<ComposerCache> listComposerCache;
GetComposerCacheSuccess(this.composerCache);
GetComposerCacheSuccess(this.listComposerCache);
@override
List<Object> get props => [composerCache];
List<Object> get props => [listComposerCache];
}
class GetComposerCacheFailure extends FeatureFailure {
@@ -13,8 +13,11 @@ class GetComposerCacheOnWebInteractor {
Stream<Either<Failure, Success>> execute(AccountId accountId, UserName userName) async* {
try {
final data = await composerCacheRepository.getComposerCacheOnWeb(accountId, userName);
yield Right(GetComposerCacheSuccess(data));
final listComposerCache = await composerCacheRepository.getComposerCacheOnWeb(
accountId,
userName,
);
yield Right(GetComposerCacheSuccess(listComposerCache));
} catch (exception) {
yield Left(GetComposerCacheFailure(exception));
}
@@ -0,0 +1,22 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/user_name.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 RemoveAllComposerCacheOnWebInteractor {
final ComposerCacheRepository composerCacheRepository;
RemoveAllComposerCacheOnWebInteractor(this.composerCacheRepository);
Future<Either<Failure, Success>> execute(AccountId accountId, UserName userName) async {
try {
composerCacheRepository.removeAllComposerCacheOnWeb(accountId, userName);
return Right(RemoveComposerCacheSuccess());
} catch (exception) {
return Left(RemoveComposerCacheFailure(exception));
}
}
}
@@ -0,0 +1,30 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/user_name.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 RemoveComposerCacheByIdOnWebInteractor {
final ComposerCacheRepository composerCacheRepository;
RemoveComposerCacheByIdOnWebInteractor(this.composerCacheRepository);
Future<Either<Failure, Success>> execute(
AccountId accountId,
UserName userName,
String composerId,
) async {
try {
composerCacheRepository.removeComposerCacheByIdOnWeb(
accountId,
userName,
composerId,
);
return Right(RemoveComposerCacheSuccess());
} catch (exception) {
return Left(RemoveComposerCacheFailure(exception));
}
}
}
@@ -1,19 +0,0 @@
import 'package:core/core.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/remove_composer_cache_state.dart';
class RemoveComposerCacheOnWebInteractor {
final ComposerCacheRepository composerCacheRepository;
RemoveComposerCacheOnWebInteractor(this.composerCacheRepository);
Future<Either<Failure, Success>> execute() async {
try {
composerCacheRepository.removeComposerCacheOnWeb();
return Right(RemoveComposerCacheSuccess());
} catch (exception) {
return Left(RemoveComposerCacheFailure(exception));
}
}
}