diff --git a/lib/features/identity_creator/presentation/identity_creator_controller.dart b/lib/features/identity_creator/presentation/identity_creator_controller.dart index bd812b6e8..3db2f56fe 100644 --- a/lib/features/identity_creator/presentation/identity_creator_controller.dart +++ b/lib/features/identity_creator/presentation/identity_creator_controller.dart @@ -470,6 +470,7 @@ class IdentityCreatorController extends BaseController { void closeView(BuildContext context) { isCompressingInlineImage.value = false; clearFocusEditor(context); + publicAssetController?.discardChanges(); popBack(); } diff --git a/lib/features/public_asset/domain/state/delete_public_assets_state.dart b/lib/features/public_asset/domain/state/delete_public_assets_state.dart new file mode 100644 index 000000000..68c0d780c --- /dev/null +++ b/lib/features/public_asset/domain/state/delete_public_assets_state.dart @@ -0,0 +1,10 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; + +class DeletingPublicAssetsState extends LoadingState {} + +class DeletePublicAssetsSuccessState extends UIState {} + +class DeletePublicAssetsFailureState extends FeatureFailure { + DeletePublicAssetsFailureState({super.exception}); +} \ No newline at end of file diff --git a/lib/features/public_asset/domain/usecase/delete_public_assets_interactor.dart b/lib/features/public_asset/domain/usecase/delete_public_assets_interactor.dart new file mode 100644 index 000000000..8426932cb --- /dev/null +++ b/lib/features/public_asset/domain/usecase/delete_public_assets_interactor.dart @@ -0,0 +1,33 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:core/utils/app_logger.dart'; +import 'package:dartz/dartz.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; +import 'package:tmail_ui_user/features/public_asset/domain/repository/public_asset_repository.dart'; +import 'package:tmail_ui_user/features/public_asset/domain/state/delete_public_assets_state.dart'; +import 'package:tmail_ui_user/features/public_asset/presentation/public_asset_controller.dart'; + +class DeletePublicAssetsInteractor { + DeletePublicAssetsInteractor(this._publicAssetRepository); + + final PublicAssetRepository _publicAssetRepository; + + Stream> execute( + Session session, + AccountId accountId, + {required List publicAssetIds} + ) async* { + try { + yield Right(DeletingPublicAssetsState()); + await _publicAssetRepository.deletePublicAssets( + session, + accountId, + publicAssetIds: publicAssetIds); + yield Right(DeletePublicAssetsSuccessState()); + } catch (exception) { + logError('DeletePublicAssetsInteractor::execute():error: $exception'); + yield Left(DeletePublicAssetsFailureState(exception: exception)); + } + } +} \ No newline at end of file diff --git a/lib/features/public_asset/presentation/public_asset_bindings.dart b/lib/features/public_asset/presentation/public_asset_bindings.dart index a0bb30e60..8527be196 100644 --- a/lib/features/public_asset/presentation/public_asset_bindings.dart +++ b/lib/features/public_asset/presentation/public_asset_bindings.dart @@ -18,6 +18,7 @@ import 'package:tmail_ui_user/features/public_asset/data/datasource_impl/remote_ import 'package:tmail_ui_user/features/public_asset/data/network/public_asset_api.dart'; import 'package:tmail_ui_user/features/public_asset/data/repository/public_asset_repository_impl.dart'; import 'package:tmail_ui_user/features/public_asset/domain/repository/public_asset_repository.dart'; +import 'package:tmail_ui_user/features/public_asset/domain/usecase/delete_public_assets_interactor.dart'; import 'package:tmail_ui_user/features/public_asset/presentation/model/public_asset_arguments.dart'; import 'package:tmail_ui_user/features/public_asset/presentation/public_asset_controller.dart'; import 'package:tmail_ui_user/features/upload/data/datasource/attachment_upload_datasource.dart'; diff --git a/lib/features/public_asset/presentation/public_asset_controller.dart b/lib/features/public_asset/presentation/public_asset_controller.dart index f143ffa72..4a000d895 100644 --- a/lib/features/public_asset/presentation/public_asset_controller.dart +++ b/lib/features/public_asset/presentation/public_asset_controller.dart @@ -22,6 +22,7 @@ import 'package:tmail_ui_user/features/public_asset/domain/state/create_public_a import 'package:tmail_ui_user/features/public_asset/domain/usecase/create_public_asset_interactor.dart'; import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_controller.dart'; import 'package:tmail_ui_user/features/identity_creator/presentation/utils/identity_creator_constants.dart'; +import 'package:tmail_ui_user/features/public_asset/domain/usecase/delete_public_assets_interactor.dart'; import 'package:tmail_ui_user/features/public_asset/presentation/model/public_asset_arguments.dart'; import 'package:tmail_ui_user/features/upload/domain/extensions/platform_file_extension.dart'; import 'package:tmail_ui_user/features/upload/domain/state/attachment_upload_state.dart'; @@ -33,11 +34,13 @@ class PublicAssetController extends BaseController { PublicAssetController( this._uploadAttachmentInteractor, this._createPublicAssetInteractor, + this._deletePublicAssetsInteractor, {required this.arguments} ); final UploadAttachmentInteractor _uploadAttachmentInteractor; final CreatePublicAssetInteractor _createPublicAssetInteractor; + final DeletePublicAssetsInteractor _deletePublicAssetsInteractor; final PublicAssetArguments? arguments; List preExistingPublicAssetIds = [];