TF-3385 Update mailbox name
This commit is contained in:
@@ -553,4 +553,19 @@ abstract class BaseMailboxController extends BaseController {
|
||||
mailboxNode = personalMailboxTree.value.findNodeOnFirstLevel((node) => node.item.name?.name.toLowerCase() == name);
|
||||
return mailboxNode;
|
||||
}
|
||||
|
||||
void updateMailboxNameById(MailboxId mailboxId, MailboxName mailboxName) {
|
||||
final mailboxTrees = [
|
||||
defaultMailboxTree,
|
||||
personalMailboxTree,
|
||||
teamMailboxesTree,
|
||||
];
|
||||
|
||||
for (var mailboxTree in mailboxTrees) {
|
||||
if (mailboxTree.value.updateMailboxNameById(mailboxId, mailboxName)) {
|
||||
mailboxTree.refresh();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,17 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/model/rename_mailbox_request.dart';
|
||||
|
||||
class LoadingRenameMailbox extends UIState {}
|
||||
|
||||
class RenameMailboxSuccess extends UIState {}
|
||||
class RenameMailboxSuccess extends UIState {
|
||||
RenameMailboxSuccess({required this.request});
|
||||
|
||||
final RenameMailboxRequest request;
|
||||
|
||||
@override
|
||||
List<Object> get props => [request];
|
||||
}
|
||||
|
||||
class RenameMailboxFailure extends FeatureFailure {
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ class RenameMailboxInteractor {
|
||||
yield Right<Failure, Success>(LoadingRenameMailbox());
|
||||
final result = await _mailboxRepository.renameMailbox(session, accountId, request);
|
||||
if (result) {
|
||||
yield Right<Failure, Success>(RenameMailboxSuccess());
|
||||
yield Right<Failure, Success>(RenameMailboxSuccess(request: request));
|
||||
} else {
|
||||
yield Left<Failure, Success>(RenameMailboxFailure(null));
|
||||
}
|
||||
|
||||
@@ -167,6 +167,8 @@ class MailboxController extends BaseMailboxController
|
||||
_deleteMultipleMailboxSuccess(success.listMailboxIdDeleted, success.currentMailboxState);
|
||||
} else if (success is DeleteMultipleMailboxHasSomeSuccess) {
|
||||
_deleteMultipleMailboxSuccess(success.listMailboxIdDeleted, success.currentMailboxState);
|
||||
} else if (success is RenameMailboxSuccess) {
|
||||
_renameMailboxSuccess(success);
|
||||
} else if (success is MoveMailboxSuccess) {
|
||||
_moveMailboxSuccess(success);
|
||||
} else if (success is SubscribeMailboxSuccess) {
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'dart:collection';
|
||||
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/mailbox/expand_mode.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
@@ -83,6 +84,27 @@ class MailboxTree with EquatableMixin {
|
||||
}
|
||||
}
|
||||
|
||||
bool updateMailboxNameById(MailboxId mailboxId, MailboxName mailboxName) {
|
||||
final matchedNode = findNode((node) => node.item.id == mailboxId);
|
||||
if (matchedNode != null) {
|
||||
matchedNode.item = matchedNode.item.copyWith(name: mailboxName);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void updateMailboxUnreadCountById(MailboxId mailboxId, int unreadCount) {
|
||||
final matchedNode = findNode((node) => node.item.id == mailboxId);
|
||||
if (matchedNode != null) {
|
||||
final currentUnreadCount = matchedNode.item.unreadEmails?.value.value ?? 0;
|
||||
final updatedUnreadCount = currentUnreadCount + unreadCount;
|
||||
if (updatedUnreadCount < 0) return;
|
||||
matchedNode.item = matchedNode.item.copyWith(
|
||||
unreadEmails: UnreadEmails(UnsignedInt(updatedUnreadCount)),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
String? getNodePath(MailboxId mailboxId) {
|
||||
final matchedNode = findNode((node) => node.item.id == mailboxId);
|
||||
if (matchedNode == null) {
|
||||
|
||||
@@ -147,6 +147,8 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
|
||||
searchMailboxAction();
|
||||
} else if (success is SearchMailboxSuccess) {
|
||||
_handleSearchMailboxSuccess(success);
|
||||
} else if (success is RenameMailboxSuccess) {
|
||||
updateMailboxNameById(success.request.mailboxId, success.request.newName);
|
||||
} else if (success is MoveMailboxSuccess) {
|
||||
_moveMailboxSuccess(success);
|
||||
} else if (success is DeleteMultipleMailboxAllSuccess) {
|
||||
|
||||
@@ -89,4 +89,42 @@ class PresentationMailbox with EquatableMixin {
|
||||
namespace,
|
||||
displayName,
|
||||
];
|
||||
|
||||
PresentationMailbox copyWith({
|
||||
MailboxId? id,
|
||||
MailboxName? name,
|
||||
MailboxId? parentId,
|
||||
Role? role,
|
||||
SortOrder? sortOrder,
|
||||
TotalEmails? totalEmails,
|
||||
UnreadEmails? unreadEmails,
|
||||
TotalThreads? totalThreads,
|
||||
UnreadThreads? unreadThreads,
|
||||
MailboxRights? myRights,
|
||||
IsSubscribed? isSubscribed,
|
||||
SelectMode? selectMode,
|
||||
String? mailboxPath,
|
||||
MailboxState? state,
|
||||
Namespace? namespace,
|
||||
String? displayName,
|
||||
}) {
|
||||
return PresentationMailbox(
|
||||
id ?? this.id,
|
||||
name: name ?? this.name,
|
||||
parentId: parentId ?? this.parentId,
|
||||
role: role ?? this.role,
|
||||
sortOrder: sortOrder ?? this.sortOrder,
|
||||
totalEmails: totalEmails ?? this.totalEmails,
|
||||
unreadEmails: unreadEmails ?? this.unreadEmails,
|
||||
totalThreads: totalThreads ?? this.totalThreads,
|
||||
unreadThreads: unreadThreads ?? this.unreadThreads,
|
||||
myRights: myRights ?? this.myRights,
|
||||
isSubscribed: isSubscribed ?? this.isSubscribed,
|
||||
selectMode: selectMode ?? this.selectMode,
|
||||
mailboxPath: mailboxPath ?? this.mailboxPath,
|
||||
state: state ?? this.state,
|
||||
namespace: namespace ?? this.namespace,
|
||||
displayName: displayName ?? this.displayName,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user