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);
|
mailboxNode = personalMailboxTree.value.findNodeOnFirstLevel((node) => node.item.name?.name.toLowerCase() == name);
|
||||||
return mailboxNode;
|
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/failure.dart';
|
||||||
import 'package:core/presentation/state/success.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 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 {
|
class RenameMailboxFailure extends FeatureFailure {
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class RenameMailboxInteractor {
|
|||||||
yield Right<Failure, Success>(LoadingRenameMailbox());
|
yield Right<Failure, Success>(LoadingRenameMailbox());
|
||||||
final result = await _mailboxRepository.renameMailbox(session, accountId, request);
|
final result = await _mailboxRepository.renameMailbox(session, accountId, request);
|
||||||
if (result) {
|
if (result) {
|
||||||
yield Right<Failure, Success>(RenameMailboxSuccess());
|
yield Right<Failure, Success>(RenameMailboxSuccess(request: request));
|
||||||
} else {
|
} else {
|
||||||
yield Left<Failure, Success>(RenameMailboxFailure(null));
|
yield Left<Failure, Success>(RenameMailboxFailure(null));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,6 +167,8 @@ class MailboxController extends BaseMailboxController
|
|||||||
_deleteMultipleMailboxSuccess(success.listMailboxIdDeleted, success.currentMailboxState);
|
_deleteMultipleMailboxSuccess(success.listMailboxIdDeleted, success.currentMailboxState);
|
||||||
} else if (success is DeleteMultipleMailboxHasSomeSuccess) {
|
} else if (success is DeleteMultipleMailboxHasSomeSuccess) {
|
||||||
_deleteMultipleMailboxSuccess(success.listMailboxIdDeleted, success.currentMailboxState);
|
_deleteMultipleMailboxSuccess(success.listMailboxIdDeleted, success.currentMailboxState);
|
||||||
|
} else if (success is RenameMailboxSuccess) {
|
||||||
|
_renameMailboxSuccess(success);
|
||||||
} else if (success is MoveMailboxSuccess) {
|
} else if (success is MoveMailboxSuccess) {
|
||||||
_moveMailboxSuccess(success);
|
_moveMailboxSuccess(success);
|
||||||
} else if (success is SubscribeMailboxSuccess) {
|
} else if (success is SubscribeMailboxSuccess) {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import 'dart:collection';
|
|||||||
|
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
import 'package:equatable/equatable.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:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
import 'package:model/mailbox/expand_mode.dart';
|
import 'package:model/mailbox/expand_mode.dart';
|
||||||
import 'package:model/mailbox/presentation_mailbox.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) {
|
String? getNodePath(MailboxId mailboxId) {
|
||||||
final matchedNode = findNode((node) => node.item.id == mailboxId);
|
final matchedNode = findNode((node) => node.item.id == mailboxId);
|
||||||
if (matchedNode == null) {
|
if (matchedNode == null) {
|
||||||
|
|||||||
@@ -147,6 +147,8 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
|
|||||||
searchMailboxAction();
|
searchMailboxAction();
|
||||||
} else if (success is SearchMailboxSuccess) {
|
} else if (success is SearchMailboxSuccess) {
|
||||||
_handleSearchMailboxSuccess(success);
|
_handleSearchMailboxSuccess(success);
|
||||||
|
} else if (success is RenameMailboxSuccess) {
|
||||||
|
updateMailboxNameById(success.request.mailboxId, success.request.newName);
|
||||||
} else if (success is MoveMailboxSuccess) {
|
} else if (success is MoveMailboxSuccess) {
|
||||||
_moveMailboxSuccess(success);
|
_moveMailboxSuccess(success);
|
||||||
} else if (success is DeleteMultipleMailboxAllSuccess) {
|
} else if (success is DeleteMultipleMailboxAllSuccess) {
|
||||||
|
|||||||
@@ -89,4 +89,42 @@ class PresentationMailbox with EquatableMixin {
|
|||||||
namespace,
|
namespace,
|
||||||
displayName,
|
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