listCheckedOrSelectedUidsWithSubMails() now returns Set instead of Array

This commit is contained in:
the-djmaze 2022-09-27 23:46:13 +02:00
parent 55faeaa1d1
commit 0fce269a82
7 changed files with 33 additions and 39 deletions

View file

@ -105,10 +105,10 @@ export class AppUser extends AbstractApp {
/**
* @param {number} iFolderType
* @param {string} sFromFolderFullName
* @param {Array} aUidForRemove
* @param {Set} oUids
* @param {boolean=} bDelete = false
*/
moveMessagesToFolderType(iFolderType, sFromFolderFullName, aUidForRemove, bDelete) {
moveMessagesToFolderType(iFolderType, sFromFolderFullName, oUids, bDelete) {
let oMoveFolder = null,
nSetSystemFoldersNotification = null;
@ -150,13 +150,13 @@ export class AppUser extends AbstractApp {
showScreenPopup(AskPopupView, [
i18n('POPUPS_ASK/DESC_WANT_DELETE_MESSAGES'),
() => {
messagesDeleteHelper(sFromFolderFullName, aUidForRemove);
MessagelistUserStore.removeMessagesFromList(sFromFolderFullName, aUidForRemove);
messagesDeleteHelper(sFromFolderFullName, oUids);
MessagelistUserStore.removeMessagesFromList(sFromFolderFullName, oUids);
}
]);
} else if (oMoveFolder) {
messagesMoveHelper(sFromFolderFullName, oMoveFolder.fullName, aUidForRemove);
MessagelistUserStore.removeMessagesFromList(sFromFolderFullName, aUidForRemove, oMoveFolder.fullName);
messagesMoveHelper(sFromFolderFullName, oMoveFolder.fullName, oUids);
MessagelistUserStore.removeMessagesFromList(sFromFolderFullName, oUids, oMoveFolder.fullName);
}
}

View file

@ -254,7 +254,7 @@ messagesMoveHelper = (fromFolderFullName, toFolderFullName, uidsForMove) => {
{
FromFolder: fromFolderFullName,
ToFolder: toFolderFullName,
Uids: uidsForMove.join(','),
Uids: [...uidsForMove].join(','),
MarkAsRead: (isSpam || FolderUserStore.trashFolder() === toFolderFullName) ? 1 : 0,
Learning: isSpam ? 'SPAM' : isHam ? 'HAM' : ''
}
@ -266,19 +266,19 @@ messagesDeleteHelper = (sFromFolderFullName, aUidForRemove) => {
moveOrDeleteResponseHelper,
{
Folder: sFromFolderFullName,
Uids: aUidForRemove.join(',')
Uids: [...aUidForRemove].join(',')
}
);
},
/**
* @param {string} sFromFolderFullName
* @param {Array} aUidForMove
* @param {Set} oUids
* @param {string} sToFolderFullName
* @param {boolean=} bCopy = false
*/
moveMessagesToFolder = (sFromFolderFullName, aUidForMove, sToFolderFullName, bCopy) => {
if (sFromFolderFullName !== sToFolderFullName && arrayLength(aUidForMove)) {
moveMessagesToFolder = (sFromFolderFullName, oUids, sToFolderFullName, bCopy) => {
if (sFromFolderFullName !== sToFolderFullName && oUids?.size) {
const oFromFolder = getFolderFromCacheList(sFromFolderFullName),
oToFolder = getFolderFromCacheList(sToFolderFullName);
@ -287,13 +287,13 @@ moveMessagesToFolder = (sFromFolderFullName, aUidForMove, sToFolderFullName, bCo
Remote.request('MessageCopy', null, {
FromFolder: oFromFolder.fullName,
ToFolder: oToFolder.fullName,
Uids: aUidForMove.join(',')
Uids: [...oUids].join(',')
});
} else {
messagesMoveHelper(oFromFolder.fullName, oToFolder.fullName, aUidForMove);
messagesMoveHelper(oFromFolder.fullName, oToFolder.fullName, oUids);
}
MessagelistUserStore.removeMessagesFromList(oFromFolder.fullName, aUidForMove, oToFolder.fullName, bCopy);
MessagelistUserStore.removeMessagesFromList(oFromFolder.fullName, oUids, oToFolder.fullName, bCopy);
return true;
}
}

View file

@ -3,7 +3,6 @@ import ko from 'ko';
import { HtmlEditor } from 'Common/Html';
import { timeToNode } from 'Common/Translator';
import { elementById, addEventsListeners, dropdowns } from 'Common/Globals';
import { isArray } from 'Common/Utils';
import { dropdownsDetectVisibility } from 'Common/UtilsUser';
import { EmailAddressesComponent } from 'Component/EmailAddresses';
import { ThemeStore } from 'Stores/Theme';
@ -97,7 +96,7 @@ Object.assign(ko.bindingHandlers, {
let data = fValueAccessor()(e);
dragImage || (dragImage = elementById('messagesDragImage'));
if (data && dragImage && !ThemeStore.isMobile()) {
dragImage.querySelector('.text').textContent = data.uids.length;
dragImage.querySelector('.text').textContent = data.size;
let img = dragImage.querySelector('i');
img.classList.toggle('icon-copy', e.ctrlKey);
img.classList.toggle('icon-mail', !e.ctrlKey);
@ -107,7 +106,7 @@ Object.assign(ko.bindingHandlers, {
dragImage.style.top = e.clientY + 'px';
dragImage.style.right = 'auto';
setDragAction(e, 'messages', e.ctrlKey ? 'copy' : 'move', data, dragImage);
setDragAction(e, 'messages', data.copy ? 'copy' : 'move', data, dragImage);
// Remove the Chrome visibility
dragImage.style.cssText = '';
@ -150,8 +149,8 @@ Object.assign(ko.bindingHandlers, {
fnStop(e);
if (dragMessages() && ['move','copy'].includes(e.dataTransfer.effectAllowed)) {
let data = dragData.data;
if (folder && data?.folder && isArray(data.uids)) {
moveMessagesToFolder(data.folder, data.uids, folder.fullName, data.copy && e.ctrlKey);
if (folder && data?.folder && data.size) {
moveMessagesToFolder(data.folder, data, folder.fullName, data.copy && e.ctrlKey);
}
}
}

View file

@ -107,11 +107,11 @@ addComputablesTo(MessagelistUserStore, {
},
listCheckedOrSelectedUidsWithSubMails: () => {
let result = [];
let result = new Set;
MessagelistUserStore.listCheckedOrSelected().forEach(message => {
result.push(message.uid);
result.add(message.uid);
if (1 < message.threadsLen()) {
result = result.concat(message.threads()).unique();
message.threads().forEach(result.add, result);
}
});
return result;
@ -340,15 +340,13 @@ MessagelistUserStore.setAction = (sFolderFullName, iSetAction, messages) => {
/**
* @param {string} fromFolderFullName
* @param {Array} uidForRemove
* @param {Set} oUids
* @param {string=} toFolderFullName = ''
* @param {boolean=} copy = false
*/
MessagelistUserStore.removeMessagesFromList = (
fromFolderFullName, uidForRemove, toFolderFullName = '', copy = false
fromFolderFullName, oUids, toFolderFullName = '', copy = false
) => {
uidForRemove = uidForRemove.map(mValue => pInt(mValue));
let unseenCount = 0,
messageList = MessagelistUserStore,
currentMessage = MessageUserStore.message();
@ -359,7 +357,7 @@ MessagelistUserStore.removeMessagesFromList = (
toFolder = toFolderFullName ? getFolderFromCacheList(toFolderFullName) : null,
messages =
FolderUserStore.currentFolderFullName() === fromFolderFullName
? messageList.filter(item => item && uidForRemove.includes(pInt(item.uid)))
? messageList.filter(item => item && oUids.has(item.uid))
: [];
messages.forEach(item => item?.isUnseen() && ++unseenCount);
@ -368,7 +366,7 @@ MessagelistUserStore.removeMessagesFromList = (
fromFolder.hash = '';
if (!copy) {
fromFolder.totalEmails(
0 <= fromFolder.totalEmails() - uidForRemove.length ? fromFolder.totalEmails() - uidForRemove.length : 0
0 <= fromFolder.totalEmails() - oUids.size ? fromFolder.totalEmails() - oUids.size : 0
);
if (0 < unseenCount) {
@ -386,7 +384,7 @@ MessagelistUserStore.removeMessagesFromList = (
unseenCount = 0;
}
toFolder.totalEmails(toFolder.totalEmails() + uidForRemove.length);
toFolder.totalEmails(toFolder.totalEmails() + oUids.size);
if (0 < unseenCount) {
toFolder.unreadEmails(toFolder.unreadEmails() + unseenCount);
}

View file

@ -564,9 +564,9 @@ export class ComposePopupView extends AbstractViewPopup {
() => {
const
sFromFolderFullName = this.draftsFolder(),
aUidForRemove = [this.draftUid()];
messagesDeleteHelper(sFromFolderFullName, aUidForRemove);
MessagelistUserStore.removeMessagesFromList(sFromFolderFullName, aUidForRemove);
oUids = new Set([this.draftUid()]);
messagesDeleteHelper(sFromFolderFullName, oUids);
MessagelistUserStore.removeMessagesFromList(sFromFolderFullName, oUids);
this.close();
}
]);

View file

@ -384,12 +384,9 @@ export class MailMessageList extends AbstractViewRight {
const item = ko.dataFor(doc.elementFromPoint(event.clientX, event.clientY));
item?.checked?.(true);
const uids = MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails();
item && !uids.includes(item.uid) && uids.push(item.uid);
return uids.length ? {
copy: event.ctrlKey,
folder: FolderUserStore.currentFolderFullName(),
uids: uids
} : null;
uids.copy = event.ctrlKey; // dropEffect
uids.folder = FolderUserStore.currentFolderFullName();
return uids;
}
listSetSeen() {

View file

@ -499,7 +499,7 @@ export class MailMessageView extends AbstractViewRight {
* @returns {string}
*/
printableCheckedMessageCount() {
const cnt = MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails().length;
const cnt = MessagelistUserStore.listCheckedOrSelectedUidsWithSubMails().size;
return 0 < cnt ? (100 > cnt ? cnt : '99+') : '';
}