TF-3385 Fix loading forever when empty <20 items mailbox

This commit is contained in:
DatDang
2025-01-06 16:32:51 +07:00
committed by Dat H. Pham
parent e9a8f498d3
commit 047df54627
2 changed files with 48 additions and 16 deletions
@@ -356,32 +356,38 @@ class ThreadController extends BaseController with EmailActionController {
mailboxDashBoardController.handleMoveEmailsToMailbox(
originalMailboxIdsWithEmailIds: reactionState.originalMailboxIdsWithEmailIds,
destinationMailboxId: reactionState.destinationMailboxId,
moveAction: reactionState.moveAction,
);
_checkIfCurrentMailboxCanLoadMore();
} else if (reactionState is MoveMultipleEmailToMailboxAllSuccess) {
mailboxDashBoardController.handleMoveEmailsToMailbox(
originalMailboxIdsWithEmailIds: reactionState.originalMailboxIdsWithEmailIds,
destinationMailboxId: reactionState.destinationMailboxId,
moveAction: reactionState.moveAction,
);
_checkIfCurrentMailboxCanLoadMore();
} else if (reactionState is MoveMultipleEmailToMailboxHasSomeEmailFailure) {
mailboxDashBoardController.handleMoveEmailsToMailbox(
originalMailboxIdsWithEmailIds: reactionState.originalMailboxIdsWithMoveSucceededEmailIds,
destinationMailboxId: reactionState.destinationMailboxId,
moveAction: reactionState.moveAction,
);
WidgetsBinding.instance.addPostFrameCallback((_) {
_checkIfCurrentMailboxCanLoadMore();
});
} else if (reactionState is DeleteEmailPermanentlySuccess
|| reactionState is DeleteMultipleEmailsPermanentlyAllSuccess
|| reactionState is DeleteMultipleEmailsPermanentlyHasSomeEmailFailure
) {
WidgetsBinding.instance.addPostFrameCallback((_) {
_checkIfCurrentMailboxCanLoadMore();
});
_checkIfCurrentMailboxCanLoadMore();
} else if (reactionState is DeleteEmailPermanentlySuccess) {
_handleDeleteEmailsPermanentlyFromMailboxId(
reactionState.mailboxId,
deletedEmailsCount: 1,
);
_checkIfCurrentMailboxCanLoadMore();
} else if (reactionState is DeleteMultipleEmailsPermanentlyAllSuccess) {
_handleDeleteEmailsPermanentlyFromMailboxId(
reactionState.mailboxId,
deletedEmailsCount: reactionState.emailIds.length,
);
_checkIfCurrentMailboxCanLoadMore();
} else if (reactionState is DeleteMultipleEmailsPermanentlyHasSomeEmailFailure) {
_handleDeleteEmailsPermanentlyFromMailboxId(
reactionState.mailboxId,
deletedEmailsCount: reactionState.emailIds.length,
);
_checkIfCurrentMailboxCanLoadMore();
}
});
}
@@ -397,6 +403,22 @@ class ThreadController extends BaseController with EmailActionController {
mailboxDashBoardController.emailsInCurrentMailbox.refresh();
}
void _handleDeleteEmailsPermanentlyFromMailboxId(
MailboxId? mailboxId, {
required int deletedEmailsCount,
}) {
if (mailboxDashBoardController.selectedMailbox.value?.id != mailboxId) return;
final currentMailbox = mailboxDashBoardController.selectedMailbox.value;
final currentTotalEmails = currentMailbox?.totalEmails;
if (currentMailbox != null && currentTotalEmails != null) {
int newTotalEmails = currentTotalEmails.value.value.toInt() - deletedEmailsCount;
if (newTotalEmails < 0) newTotalEmails = 0;
mailboxDashBoardController.selectedMailbox.value = currentMailbox.copyWith(
totalEmails: TotalEmails(UnsignedInt(newTotalEmails)),
);
}
}
void _checkIfCurrentMailboxCanLoadMore() {
final currentMailbox = mailboxDashBoardController.selectedMailbox.value;
if (currentMailbox == null) return;