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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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