UBER-1060 Inbox selection fixes (#3839)

Signed-off-by: Alexander Onnikov <alexander.onnikov@xored.com>
This commit is contained in:
Alexander Onnikov 2023-10-13 23:53:57 +07:00 committed by GitHub
parent 1d50d7020c
commit 72db5745ab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -56,7 +56,8 @@
if (filter === 'read') {
filtered = docs.filter((p) => !p.txes.some((p) => p.isNew) && p.txes.length > 0)
} else if (filter === 'unread') {
if (previousFilter !== 'unread') filtered = docs.filter((p) => p.txes.some((p) => p.isNew) && p.txes.length > 0)
const current = previousFilter === 'unread' ? new Set(filtered.map((p) => p._id)) : new Set()
filtered = docs.filter((p) => (current.has(p._id) || p.txes.some((p) => p.isNew)) && p.txes.length > 0)
} else {
filtered = docs.filter((p) => p.txes.length > 0)
}
@ -110,8 +111,21 @@
const listProvider = new ListSelectionProvider((offset: 1 | -1 | 0, of?: Doc, dir?: SelectDirection) => {
if (dir === 'vertical') {
let value = offset + docs.findIndex((p) => p._id === of?._id)
if (value < 0) value = 0
let value = (of != null ? filtered.findIndex((p) => p._id === of._id) : selected) ?? -1
if (value === -1) {
// keep the current index if the document does not exist anymore
value = selected
} else {
value += offset
}
if (value < 0) {
value = 0
}
if (value >= filtered.length) {
value = filtered.length - 1
}
if (filtered[value] !== undefined) {
selected = value
changeSelected(selected)