Cleanup and simplify messageList UpOrDown handling

This commit is contained in:
the-djmaze 2023-10-08 13:57:46 +02:00
parent 8841464f84
commit 231ccb1e43
2 changed files with 36 additions and 75 deletions

View file

@ -118,7 +118,8 @@ export class Selector {
if (isArray(aItems)) { if (isArray(aItems)) {
let temp, let temp,
isChecked; isChecked,
next = this.iFocusedNextHelper || this.iSelectNextHelper;
aItems.forEach(item => { aItems.forEach(item => {
const uid = this.getItemUid(item); const uid = this.getItemUid(item);
@ -143,24 +144,10 @@ export class Selector {
selectedItemUseCallback = true; selectedItemUseCallback = true;
if ( if (next && aItems.length && !koFocusedItem()) {
(this.iSelectNextHelper || this.iFocusedNextHelper) && temp = aItems[-1 === next ? aItems.length - 1 : 0];
aItems.length &&
!koFocusedItem()
) {
temp = null;
if (this.iFocusedNextHelper) {
temp = aItems[-1 === this.iFocusedNextHelper ? aItems.length - 1 : 0];
}
if (!temp && this.iSelectNextHelper) {
temp = aItems[-1 === this.iSelectNextHelper ? aItems.length - 1 : 0];
}
if (temp) { if (temp) {
if (this.iSelectNextHelper) { this.iSelectNextHelper && koSelectedItem(temp);
koSelectedItem(temp);
}
koFocusedItem(temp); koFocusedItem(temp);
@ -267,10 +254,11 @@ export class Selector {
* @param {boolean=} bForceSelect = false * @param {boolean=} bForceSelect = false
*/ */
newSelectPosition(sEventKey, bShiftKey, bForceSelect) { newSelectPosition(sEventKey, bShiftKey, bForceSelect) {
let isArrow = 'ArrowUp' === sEventKey || 'ArrowDown' === sEventKey, let result;
result;
const pageStep = 10, const up = 'ArrowUp' === sEventKey,
isArrow = up || 'ArrowDown' === sEventKey,
pageStep = 10,
list = this.list(), list = this.list(),
listLen = list.length, listLen = list.length,
focused = this.focusedItem(); focused = this.focusedItem();
@ -282,8 +270,7 @@ export class Selector {
} else if (listLen) { } else if (listLen) {
if (focused) { if (focused) {
if (isArrow) { if (isArrow) {
let i = list.indexOf(focused), let i = list.indexOf(focused);
up = 'ArrowUp' == sEventKey;
if (bShiftKey) { if (bShiftKey) {
shiftStart = -1 < shiftStart ? shiftStart : i; shiftStart = -1 < shiftStart ? shiftStart : i;
shiftStart == i shiftStart == i

View file

@ -120,8 +120,7 @@ export class MailMessageList extends AbstractViewRight {
return value ? i18n('MESSAGE_LIST/SEARCH_RESULT_FOR', { SEARCH: value }) : '' return value ? i18n('MESSAGE_LIST/SEARCH_RESULT_FOR', { SEARCH: value }) : ''
}, },
messageListPaginator: computedPaginatorHelper(MessagelistUserStore.page, messageListPaginator: computedPaginatorHelper(MessagelistUserStore.page, MessagelistUserStore.pageCount),
MessagelistUserStore.pageCount),
checkAll: { checkAll: {
read: () => MessagelistUserStore.hasChecked(), read: () => MessagelistUserStore.hasChecked(),
@ -257,47 +256,22 @@ export class MailMessageList extends AbstractViewRight {
}); });
this.selector.on('UpOrDown', up => { this.selector.on('UpOrDown', up => {
if (MessagelistUserStore.hasChecked()) { if (!MessagelistUserStore.hasChecked()) {
return false; clearTimeout(iGoToUpOrDownTimeout);
iGoToUpOrDownTimeout = setTimeout(() => {
let page = MessagelistUserStore.page();
up ? --page : ++page;
if (page > 0 && page <= MessagelistUserStore.pageCount()) {
if (SettingsUserStore.usePreviewPane() || MessageUserStore.message()) {
this.selector.iSelectNextHelper = up ? -1 : 1;
} else {
this.selector.iFocusedNextHelper = up ? -1 : 1;
}
this.selector.unselect();
this.gotoPage(page);
}
}, 350);
} }
clearTimeout(iGoToUpOrDownTimeout);
iGoToUpOrDownTimeout = setTimeout(() => {
let prev, next, temp, current;
this.messageListPaginator().find(item => {
if (item) {
if (current) {
next = item;
}
if (item.current) {
current = item;
prev = temp;
}
if (next) {
return true;
}
temp = item;
}
return false;
});
if (up ? prev : next) {
if (SettingsUserStore.usePreviewPane() || MessageUserStore.message()) {
this.selector.iSelectNextHelper = up ? -1 : 1;
} else {
this.selector.iFocusedNextHelper = up ? -1 : 1;
}
this.selector.unselect();
this.gotoPage(up ? prev : next);
}
}, 350);
return true;
}); });
addEventListener('mailbox.message-list.selector.go-down', addEventListener('mailbox.message-list.selector.go-down',
@ -547,7 +521,7 @@ export class MailMessageList extends AbstractViewRight {
page && hasher.setHash( page && hasher.setHash(
mailBox( mailBox(
FolderUserStore.currentFolderFullNameHash(), FolderUserStore.currentFolderFullNameHash(),
page.value, page,
MessagelistUserStore.listSearch(), MessagelistUserStore.listSearch(),
MessagelistUserStore.threadUid() MessagelistUserStore.threadUid()
) )
@ -601,16 +575,16 @@ export class MailMessageList extends AbstractViewRight {
toggleLeftPanel(); toggleLeftPanel();
} else { } else {
ThemeStore.isMobile() && leftPanelDisabled(true); ThemeStore.isMobile() && leftPanelDisabled(true);
if (eqs(event, '.messageList') && ScopeMessageView === AppUserStore.focusedState()) {
AppUserStore.focusedState(ScopeMessageList);
}
let el = eqs(event, '.e-paginator a');
el && this.gotoPage(ko.dataFor(el)?.value);
eqs(event, '.checkboxCheckAll') && this.checkAll(!this.checkAll());
} }
if (eqs(event, '.messageList') && ScopeMessageView === AppUserStore.focusedState()) {
AppUserStore.focusedState(ScopeMessageList);
}
let el = eqs(event, '.e-paginator a');
el && this.gotoPage(ko.dataFor(el));
eqs(event, '.checkboxCheckAll') && this.checkAll(!this.checkAll());
}, },
dblclick: event => { dblclick: event => {
let el = eqs(event, '.messageListItem'); let el = eqs(event, '.messageListItem');