TF-1311: [Presentation] Implement hide mailbox in presentation
This commit is contained in:
@@ -296,7 +296,7 @@ class MailboxAPI with HandleSetErrorMixin {
|
|||||||
final setMailboxMethod = SetMailboxMethod(accountId)
|
final setMailboxMethod = SetMailboxMethod(accountId)
|
||||||
..addUpdates({
|
..addUpdates({
|
||||||
request.mailboxId.id : PatchObject({
|
request.mailboxId.id : PatchObject({
|
||||||
'isSubscribed': request.newState == MailboxSubscribeState.disabled ? true : false
|
'isSubscribed': request.newState == MailboxSubscribeState.disabled ? false : true
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
enum MailboxSubscribeState {
|
enum MailboxSubscribeState {
|
||||||
enabled,
|
enabled,
|
||||||
disabled;
|
disabled
|
||||||
|
|
||||||
String get keyValue {
|
|
||||||
switch(this) {
|
|
||||||
case MailboxSubscribeState.enabled:
|
|
||||||
return 'enabled';
|
|
||||||
case MailboxSubscribeState.disabled:
|
|
||||||
return 'disabled';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1,15 +1,19 @@
|
|||||||
import 'package:core/core.dart';
|
import 'package:core/core.dart';
|
||||||
|
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||||
|
|
||||||
|
|
||||||
class LoadingSubscribeMailbox extends UIState {}
|
class LoadingSubscribeMailbox extends UIState {}
|
||||||
|
|
||||||
class SubscribeMailboxSuccess extends UIState {
|
class SubscribeMailboxSuccess extends UIActionState {
|
||||||
|
|
||||||
final bool subscribeMailbox;
|
SubscribeMailboxSuccess({
|
||||||
|
jmap.State? currentEmailState,
|
||||||
SubscribeMailboxSuccess(this.subscribeMailbox);
|
jmap.State? currentMailboxState,
|
||||||
|
}) : super(currentEmailState, currentMailboxState);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [subscribeMailbox];
|
List<Object?> get props => [];
|
||||||
}
|
}
|
||||||
|
|
||||||
class SubscribeMailboxFailure extends FeatureFailure {
|
class SubscribeMailboxFailure extends FeatureFailure {
|
||||||
|
|||||||
@@ -6,18 +6,25 @@ import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_mailbox_re
|
|||||||
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/state/subscribe_mailbox_state.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/state/subscribe_mailbox_state.dart';
|
||||||
|
|
||||||
class SearchMailboxInteractor {
|
class SubscribeMailboxInteractor {
|
||||||
final MailboxRepository _mailboxRepository;
|
final MailboxRepository _mailboxRepository;
|
||||||
|
|
||||||
SearchMailboxInteractor(this._mailboxRepository);
|
SubscribeMailboxInteractor(this._mailboxRepository);
|
||||||
|
|
||||||
Stream<Either<Failure, Success>> execute(AccountId accountId, SubscribeMailboxRequest request) async* {
|
Stream<Either<Failure, Success>> execute(AccountId accountId, SubscribeMailboxRequest request) async* {
|
||||||
try {
|
try {
|
||||||
yield Right<Failure, Success>(LoadingSubscribeMailbox());
|
yield Right<Failure, Success>(LoadingSubscribeMailbox());
|
||||||
|
|
||||||
final resultList = await _mailboxRepository.subscribeMailbox(accountId, request);
|
final currentMailboxState = await _mailboxRepository.getMailboxState();
|
||||||
|
|
||||||
|
final result = await _mailboxRepository.subscribeMailbox(accountId, request);
|
||||||
|
|
||||||
|
if (result) {
|
||||||
|
yield Right<Failure, Success>(SubscribeMailboxSuccess(currentMailboxState: currentMailboxState));
|
||||||
|
} else {
|
||||||
|
yield Left<Failure, Success>(SubscribeMailboxFailure(null));
|
||||||
|
}
|
||||||
|
|
||||||
yield Right<Failure, Success>(SubscribeMailboxSuccess(resultList));
|
|
||||||
} catch (exception) {
|
} catch (exception) {
|
||||||
yield Left<Failure, Success>(SubscribeMailboxFailure(exception));
|
yield Left<Failure, Success>(SubscribeMailboxFailure(exception));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/usecases/move_mailbox_inte
|
|||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/rename_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/rename_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/search_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/search_mailbox_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_controller.dart';
|
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/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_creator/domain/usecases/verify_name_interactor.dart';
|
||||||
@@ -55,6 +56,7 @@ class MailboxBindings extends BaseBindings {
|
|||||||
Get.find<VerifyNameInteractor>(),
|
Get.find<VerifyNameInteractor>(),
|
||||||
Get.find<RenameMailboxInteractor>(),
|
Get.find<RenameMailboxInteractor>(),
|
||||||
Get.find<MoveMailboxInteractor>(),
|
Get.find<MoveMailboxInteractor>(),
|
||||||
|
Get.find<SubscribeMailboxInteractor>(),
|
||||||
Get.find<TreeBuilder>(),
|
Get.find<TreeBuilder>(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -96,6 +98,7 @@ class MailboxBindings extends BaseBindings {
|
|||||||
Get.lazyPut(() => VerifyNameInteractor());
|
Get.lazyPut(() => VerifyNameInteractor());
|
||||||
Get.lazyPut(() => RenameMailboxInteractor(Get.find<MailboxRepository>()));
|
Get.lazyPut(() => RenameMailboxInteractor(Get.find<MailboxRepository>()));
|
||||||
Get.lazyPut(() => MoveMailboxInteractor(Get.find<MailboxRepository>()));
|
Get.lazyPut(() => MoveMailboxInteractor(Get.find<MailboxRepository>()));
|
||||||
|
Get.lazyPut(() => SubscribeMailboxInteractor(Get.find<MailboxRepository>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -27,8 +27,10 @@ import 'package:tmail_ui_user/features/email/domain/state/delete_multiple_emails
|
|||||||
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_subscribe_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/model/move_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/model/move_mailbox_request.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/model/rename_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/model/rename_mailbox_request.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_mailbox_request.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/state/create_new_mailbox_state.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/state/create_new_mailbox_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/state/delete_multiple_mailbox_state.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/state/delete_multiple_mailbox_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/state/get_all_mailboxes_state.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/state/get_all_mailboxes_state.dart';
|
||||||
@@ -37,6 +39,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/state/move_mailbox_state.d
|
|||||||
import 'package:tmail_ui_user/features/mailbox/domain/state/refresh_changes_all_mailboxes_state.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/state/refresh_changes_all_mailboxes_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/state/rename_mailbox_state.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/state/rename_mailbox_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/state/search_mailbox_state.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/state/search_mailbox_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/domain/state/subscribe_mailbox_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/create_new_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/create_new_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/delete_multiple_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/delete_multiple_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart';
|
||||||
@@ -44,6 +47,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/usecases/move_mailbox_inte
|
|||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/rename_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/rename_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/search_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/search_mailbox_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/action/mailbox_ui_action.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/action/mailbox_ui_action.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart';
|
||||||
@@ -92,6 +96,7 @@ class MailboxController extends BaseMailboxController {
|
|||||||
final VerifyNameInteractor _verifyNameInteractor;
|
final VerifyNameInteractor _verifyNameInteractor;
|
||||||
final RenameMailboxInteractor _renameMailboxInteractor;
|
final RenameMailboxInteractor _renameMailboxInteractor;
|
||||||
final MoveMailboxInteractor _moveMailboxInteractor;
|
final MoveMailboxInteractor _moveMailboxInteractor;
|
||||||
|
final SubscribeMailboxInteractor _subscribeMailboxInteractor;
|
||||||
|
|
||||||
final listMailboxSearched = <PresentationMailbox>[].obs;
|
final listMailboxSearched = <PresentationMailbox>[].obs;
|
||||||
final searchState = SearchState.initial().obs;
|
final searchState = SearchState.initial().obs;
|
||||||
@@ -118,6 +123,7 @@ class MailboxController extends BaseMailboxController {
|
|||||||
this._verifyNameInteractor,
|
this._verifyNameInteractor,
|
||||||
this._renameMailboxInteractor,
|
this._renameMailboxInteractor,
|
||||||
this._moveMailboxInteractor,
|
this._moveMailboxInteractor,
|
||||||
|
this._subscribeMailboxInteractor,
|
||||||
treeBuilder,
|
treeBuilder,
|
||||||
) : super(treeBuilder);
|
) : super(treeBuilder);
|
||||||
|
|
||||||
@@ -156,7 +162,7 @@ class MailboxController extends BaseMailboxController {
|
|||||||
_buildMailboxTreeHasSubscribed(success.mailboxList);
|
_buildMailboxTreeHasSubscribed(success.mailboxList);
|
||||||
} else if (success is RefreshChangesAllMailboxSuccess) {
|
} else if (success is RefreshChangesAllMailboxSuccess) {
|
||||||
_currentMailboxState = success.currentMailboxState;
|
_currentMailboxState = success.currentMailboxState;
|
||||||
await refreshTree(success.mailboxList);
|
_refreshMailboxTreeHasSubscribed(success.mailboxList);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -192,6 +198,8 @@ class MailboxController extends BaseMailboxController {
|
|||||||
refreshMailboxChanges(currentMailboxState: success.currentMailboxState);
|
refreshMailboxChanges(currentMailboxState: success.currentMailboxState);
|
||||||
} else if (success is MoveMailboxSuccess) {
|
} else if (success is MoveMailboxSuccess) {
|
||||||
_moveMailboxSuccess(success);
|
_moveMailboxSuccess(success);
|
||||||
|
} else if (success is SubscribeMailboxSuccess){
|
||||||
|
refreshMailboxChanges(currentMailboxState: success.currentMailboxState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -1142,7 +1150,10 @@ class MailboxController extends BaseMailboxController {
|
|||||||
case MailboxActions.disableSpamReport:
|
case MailboxActions.disableSpamReport:
|
||||||
case MailboxActions.enableSpamReport:
|
case MailboxActions.enableSpamReport:
|
||||||
mailboxDashBoardController.storeSpamReportStateAction();
|
mailboxDashBoardController.storeSpamReportStateAction();
|
||||||
return;
|
break;
|
||||||
|
case MailboxActions.disableMailbox:
|
||||||
|
subscribeMailboxAction(mailbox);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1206,4 +1217,19 @@ class MailboxController extends BaseMailboxController {
|
|||||||
final _mailboxList = mailboxList.where((mailbox) => mailbox.isSubscribed?.value == true).toList();
|
final _mailboxList = mailboxList.where((mailbox) => mailbox.isSubscribed?.value == true).toList();
|
||||||
await buildTree(_mailboxList);
|
await buildTree(_mailboxList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _refreshMailboxTreeHasSubscribed(List<PresentationMailbox> mailboxList) async {
|
||||||
|
final _mailboxList = mailboxList.where((mailbox) => mailbox.isSubscribed?.value == true).toList();
|
||||||
|
await refreshTree(_mailboxList);
|
||||||
|
}
|
||||||
|
|
||||||
|
void subscribeMailboxAction(PresentationMailbox mailboxSelected) {
|
||||||
|
final _accountId = mailboxDashBoardController.accountId.value;
|
||||||
|
if(_accountId != null) {
|
||||||
|
consumeState(_subscribeMailboxInteractor.execute(_accountId, SubscribeMailboxRequest(
|
||||||
|
mailboxSelected.id,
|
||||||
|
MailboxSubscribeState.disabled,
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -331,11 +331,15 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
|
|
||||||
void _openBottomSheetSpamMenuAction(BuildContext context, PresentationMailbox mailbox) {
|
void _openBottomSheetSpamMenuAction(BuildContext context, PresentationMailbox mailbox) {
|
||||||
final _spamActionsSupported = [
|
final _spamActionsSupported = [
|
||||||
controller.mailboxDashBoardController.enableSpamReport
|
MailboxActions.disableMailbox
|
||||||
? MailboxActions.disableSpamReport
|
|
||||||
: MailboxActions.enableSpamReport
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
if (mailbox.isSpam) {
|
||||||
|
_spamActionsSupported.add(controller.mailboxDashBoardController.enableSpamReport
|
||||||
|
? MailboxActions.disableSpamReport
|
||||||
|
: MailboxActions.enableSpamReport);
|
||||||
|
}
|
||||||
|
|
||||||
final listContextSpamPopupMenuItemAction = _spamActionsSupported
|
final listContextSpamPopupMenuItemAction = _spamActionsSupported
|
||||||
.map((action) => ContextMenuItemMailboxAction(action, action.getContextMenuItemState(mailbox)))
|
.map((action) => ContextMenuItemMailboxAction(action, action.getContextMenuItemState(mailbox)))
|
||||||
.toList();
|
.toList();
|
||||||
@@ -381,6 +385,7 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND,
|
isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND,
|
||||||
parent: Obx(() => (MailBoxFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode,
|
parent: Obx(() => (MailBoxFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode,
|
||||||
allSelectMode: controller.currentSelectMode.value)
|
allSelectMode: controller.currentSelectMode.value)
|
||||||
|
..addOnLongPressMailboxFolderClick((mailboxNode) => _openBottomSheetSpamMenuAction(context, mailboxNode.item))
|
||||||
..addOnOpenMailboxFolderClick((mailboxNode) => controller.openMailbox(context, mailboxNode.item))
|
..addOnOpenMailboxFolderClick((mailboxNode) => controller.openMailbox(context, mailboxNode.item))
|
||||||
..addOnExpandFolderActionClick((mailboxNode) => controller.toggleMailboxFolder(mailboxNode))
|
..addOnExpandFolderActionClick((mailboxNode) => controller.toggleMailboxFolder(mailboxNode))
|
||||||
..addOnSelectMailboxFolderClick((mailboxNode) => controller.selectMailboxNode(mailboxNode)))
|
..addOnSelectMailboxFolderClick((mailboxNode) => controller.selectMailboxNode(mailboxNode)))
|
||||||
@@ -389,7 +394,7 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
).build()
|
).build()
|
||||||
: Obx(() => (MailBoxFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode,
|
: Obx(() => (MailBoxFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode,
|
||||||
allSelectMode: controller.currentSelectMode.value)
|
allSelectMode: controller.currentSelectMode.value)
|
||||||
..addOnLongPressSpamReport((mailboxNode) => _openBottomSheetSpamMenuAction(context, mailboxNode.item))
|
..addOnLongPressMailboxFolderClick((mailboxNode) => _openBottomSheetSpamMenuAction(context, mailboxNode.item))
|
||||||
..addOnOpenMailboxFolderClick((mailboxNode) => controller.openMailbox(context, mailboxNode.item))
|
..addOnOpenMailboxFolderClick((mailboxNode) => controller.openMailbox(context, mailboxNode.item))
|
||||||
..addOnSelectMailboxFolderClick((mailboxNode) => controller.selectMailboxNode(mailboxNode)))
|
..addOnSelectMailboxFolderClick((mailboxNode) => controller.selectMailboxNode(mailboxNode)))
|
||||||
.build())
|
.build())
|
||||||
|
|||||||
@@ -205,14 +205,22 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
|
|||||||
]),
|
]),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
_buildHeaderMailboxCategory(context, MailboxCategories.personalMailboxes),
|
|
||||||
Obx(() => controller.personalMailboxHasChild
|
Obx(() => controller.personalMailboxHasChild
|
||||||
? _buildMailboxCategory(context, MailboxCategories.personalMailboxes, controller.personalRootNode)
|
? Column(
|
||||||
|
children: [
|
||||||
|
_buildHeaderMailboxCategory(context, MailboxCategories.personalMailboxes),
|
||||||
|
_buildMailboxCategory(context, MailboxCategories.personalMailboxes, controller.personalRootNode),
|
||||||
|
],
|
||||||
|
)
|
||||||
: const SizedBox.shrink()),
|
: const SizedBox.shrink()),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
_buildHeaderMailboxCategory(context, MailboxCategories.teamMailboxes),
|
|
||||||
Obx(() => controller.teamMailboxesHasChild
|
Obx(() => controller.teamMailboxesHasChild
|
||||||
? _buildMailboxCategory(context, MailboxCategories.teamMailboxes, controller.teamMailboxesRootNode)
|
? Column(
|
||||||
|
children: [
|
||||||
|
_buildHeaderMailboxCategory(context, MailboxCategories.teamMailboxes),
|
||||||
|
_buildMailboxCategory(context, MailboxCategories.teamMailboxes, controller.teamMailboxesRootNode),
|
||||||
|
],
|
||||||
|
)
|
||||||
: const SizedBox.shrink()),
|
: const SizedBox.shrink()),
|
||||||
])
|
])
|
||||||
),
|
),
|
||||||
@@ -446,9 +454,13 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
|
|||||||
MailboxActions.markAsRead,
|
MailboxActions.markAsRead,
|
||||||
MailboxActions.move,
|
MailboxActions.move,
|
||||||
MailboxActions.rename,
|
MailboxActions.rename,
|
||||||
MailboxActions.delete
|
MailboxActions.delete,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
if(mailbox.isShowDisableMailbox) {
|
||||||
|
mailboxActionsSupported.add(MailboxActions.disableMailbox);
|
||||||
|
}
|
||||||
|
|
||||||
if (mailbox.isSpam) {
|
if (mailbox.isSpam) {
|
||||||
mailboxActionsSupported.insert(
|
mailboxActionsSupported.insert(
|
||||||
1,
|
1,
|
||||||
|
|||||||
@@ -16,7 +16,8 @@ enum MailboxActions {
|
|||||||
selectForRuleAction,
|
selectForRuleAction,
|
||||||
openInNewTab,
|
openInNewTab,
|
||||||
disableSpamReport,
|
disableSpamReport,
|
||||||
enableSpamReport
|
enableSpamReport,
|
||||||
|
disableMailbox
|
||||||
}
|
}
|
||||||
|
|
||||||
extension MailboxActionsExtension on MailboxActions {
|
extension MailboxActionsExtension on MailboxActions {
|
||||||
@@ -52,6 +53,8 @@ extension MailboxActionsExtension on MailboxActions {
|
|||||||
return AppLocalizations.of(context).rename_mailbox;
|
return AppLocalizations.of(context).rename_mailbox;
|
||||||
case MailboxActions.delete:
|
case MailboxActions.delete:
|
||||||
return AppLocalizations.of(context).deleteMailbox;
|
return AppLocalizations.of(context).deleteMailbox;
|
||||||
|
case MailboxActions.disableMailbox:
|
||||||
|
return AppLocalizations.of(context).hideMailBoxes;
|
||||||
default:
|
default:
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
@@ -73,6 +76,8 @@ extension MailboxActionsExtension on MailboxActions {
|
|||||||
return imagePaths.icRenameMailbox;
|
return imagePaths.icRenameMailbox;
|
||||||
case MailboxActions.delete:
|
case MailboxActions.delete:
|
||||||
return imagePaths.icDelete;
|
return imagePaths.icDelete;
|
||||||
|
case MailboxActions.disableMailbox:
|
||||||
|
return imagePaths.icEyeOff;
|
||||||
default:
|
default:
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
@@ -93,6 +98,7 @@ extension MailboxActionsExtension on MailboxActions {
|
|||||||
return AppColor.colorActionDeleteConfirmDialog;
|
return AppColor.colorActionDeleteConfirmDialog;
|
||||||
case MailboxActions.disableSpamReport:
|
case MailboxActions.disableSpamReport:
|
||||||
case MailboxActions.enableSpamReport:
|
case MailboxActions.enableSpamReport:
|
||||||
|
case MailboxActions.disableMailbox:
|
||||||
return AppColor.primaryColor;
|
return AppColor.primaryColor;
|
||||||
default:
|
default:
|
||||||
return Colors.black;
|
return Colors.black;
|
||||||
@@ -140,6 +146,7 @@ extension MailboxActionsExtension on MailboxActions {
|
|||||||
case MailboxActions.openInNewTab:
|
case MailboxActions.openInNewTab:
|
||||||
case MailboxActions.disableSpamReport:
|
case MailboxActions.disableSpamReport:
|
||||||
case MailboxActions.enableSpamReport:
|
case MailboxActions.enableSpamReport:
|
||||||
|
case MailboxActions.disableMailbox:
|
||||||
return ContextMenuItemState.activated;
|
return ContextMenuItemState.activated;
|
||||||
case MailboxActions.markAsRead:
|
case MailboxActions.markAsRead:
|
||||||
return mailbox.getCountUnReadEmails().isNotEmpty
|
return mailbox.getCountUnReadEmails().isNotEmpty
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ typedef OnOpenMailboxFolderClick = void Function(MailboxNode);
|
|||||||
typedef OnSelectMailboxFolderClick = void Function(MailboxNode);
|
typedef OnSelectMailboxFolderClick = void Function(MailboxNode);
|
||||||
typedef OnMenuActionClick = void Function(RelativeRect, MailboxNode);
|
typedef OnMenuActionClick = void Function(RelativeRect, MailboxNode);
|
||||||
typedef OnDragItemAccepted = void Function(List<PresentationEmail>, PresentationMailbox);
|
typedef OnDragItemAccepted = void Function(List<PresentationEmail>, PresentationMailbox);
|
||||||
typedef OnLongPressSpamReport = void Function(MailboxNode);
|
typedef OnLongPressMailboxFolderClick = void Function(MailboxNode);
|
||||||
|
|
||||||
class MailBoxFolderTileBuilder {
|
class MailBoxFolderTileBuilder {
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ class MailBoxFolderTileBuilder {
|
|||||||
OnSelectMailboxFolderClick? _onSelectMailboxFolderClick;
|
OnSelectMailboxFolderClick? _onSelectMailboxFolderClick;
|
||||||
OnMenuActionClick? _onMenuActionClick;
|
OnMenuActionClick? _onMenuActionClick;
|
||||||
OnDragItemAccepted? _onDragItemAccepted;
|
OnDragItemAccepted? _onDragItemAccepted;
|
||||||
OnLongPressSpamReport? _onLongPressSpamReport;
|
OnLongPressMailboxFolderClick? _onLongPressMailboxFolderClick;
|
||||||
|
|
||||||
bool isHoverItem = false;
|
bool isHoverItem = false;
|
||||||
|
|
||||||
@@ -74,8 +74,8 @@ class MailBoxFolderTileBuilder {
|
|||||||
_onDragItemAccepted = onDragItemAccepted;
|
_onDragItemAccepted = onDragItemAccepted;
|
||||||
}
|
}
|
||||||
|
|
||||||
void addOnLongPressSpamReport(OnLongPressSpamReport onLongPressSpamReport) {
|
void addOnLongPressMailboxFolderClick(OnLongPressMailboxFolderClick onLongPressMailboxFolderClick) {
|
||||||
_onLongPressSpamReport = onLongPressSpamReport;
|
_onLongPressMailboxFolderClick = onLongPressMailboxFolderClick;
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget build() => DragTarget<List<PresentationEmail>>(
|
Widget build() => DragTarget<List<PresentationEmail>>(
|
||||||
@@ -127,9 +127,11 @@ class MailBoxFolderTileBuilder {
|
|||||||
child: Opacity(
|
child: Opacity(
|
||||||
opacity: _mailboxNode.isActivated ? 1.0 : 0.3,
|
opacity: _mailboxNode.isActivated ? 1.0 : 0.3,
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onLongPress: _mailboxNode.item.isSpam ? () {
|
onLongPress: () {
|
||||||
_onLongPressSpamReport?.call(_mailboxNode);
|
if(_mailboxNode.item.isShowDisableMailbox || _mailboxNode.item.isSpam) {
|
||||||
} : null,
|
_onLongPressMailboxFolderClick?.call(_mailboxNode);
|
||||||
|
}
|
||||||
|
},
|
||||||
onTap: () => allSelectMode == SelectMode.ACTIVE
|
onTap: () => allSelectMode == SelectMode.ACTIVE
|
||||||
? _onSelectMailboxFolderClick?.call(_mailboxNode)
|
? _onSelectMailboxFolderClick?.call(_mailboxNode)
|
||||||
: _onOpenMailboxFolderClick?.call(_mailboxNode),
|
: _onOpenMailboxFolderClick?.call(_mailboxNode),
|
||||||
@@ -170,6 +172,7 @@ class MailBoxFolderTileBuilder {
|
|||||||
child: Material(
|
child: Material(
|
||||||
color: Colors.transparent,
|
color: Colors.transparent,
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
|
onLongPress: () => print('123'),
|
||||||
onTap: () => _onOpenMailboxFolderClick?.call(_mailboxNode),
|
onTap: () => _onOpenMailboxFolderClick?.call(_mailboxNode),
|
||||||
child: Container(
|
child: Container(
|
||||||
padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 24),
|
padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 24),
|
||||||
@@ -199,7 +202,7 @@ class MailBoxFolderTileBuilder {
|
|||||||
if (_mailboxNode.hasChildren())
|
if (_mailboxNode.hasChildren())
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(width: 8),
|
SizedBox(width: _mailboxNode.item.hasRole() ? 0 : 8),
|
||||||
buildIconWeb(
|
buildIconWeb(
|
||||||
icon: SvgPicture.asset(
|
icon: SvgPicture.asset(
|
||||||
_mailboxNode.expandMode == ExpandMode.EXPAND
|
_mailboxNode.expandMode == ExpandMode.EXPAND
|
||||||
@@ -216,11 +219,10 @@ class MailBoxFolderTileBuilder {
|
|||||||
? AppLocalizations.of(_context).collapse
|
? AppLocalizations.of(_context).collapse
|
||||||
: AppLocalizations.of(_context).expand,
|
: AppLocalizations.of(_context).expand,
|
||||||
onTap: () => _onExpandFolderActionClick?.call(_mailboxNode)),
|
onTap: () => _onExpandFolderActionClick?.call(_mailboxNode)),
|
||||||
const SizedBox(width: 4),
|
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
SizedBox(width:_mailboxNode.item.hasRole() ? 0 : 24),
|
SizedBox(width: !_mailboxNode.item.hasRole() ? 32 : 24),
|
||||||
Transform(
|
Transform(
|
||||||
transform: Matrix4.translationValues(-4.0, 0.0, 0.0),
|
transform: Matrix4.translationValues(-4.0, 0.0, 0.0),
|
||||||
child: _buildLeadingIcon()),
|
child: _buildLeadingIcon()),
|
||||||
@@ -254,7 +256,7 @@ class MailBoxFolderTileBuilder {
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
SizedBox(width: _mailboxNode.item.hasRole() ? 0 : 36),
|
const SizedBox(width: 36),
|
||||||
_buildLeadingIcon(),
|
_buildLeadingIcon(),
|
||||||
]);
|
]);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -101,6 +101,8 @@ class PresentationMailbox with EquatableMixin {
|
|||||||
(namespace?.value.indexOf('[') ?? 0) + 1,
|
(namespace?.value.indexOf('[') ?? 0) + 1,
|
||||||
namespace?.value.indexOf(']'));
|
namespace?.value.indexOf(']'));
|
||||||
|
|
||||||
|
bool get isShowDisableMailbox => isTeamMailboxes || hasRole() || !hasParentId();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [
|
List<Object?> get props => [
|
||||||
id,
|
id,
|
||||||
|
|||||||
Reference in New Issue
Block a user