From 72db5745ab3d090c92ee8f18beca6eeeadb0eef2 Mon Sep 17 00:00:00 2001 From: Alexander Onnikov Date: Fri, 13 Oct 2023 23:53:57 +0700 Subject: [PATCH] UBER-1060 Inbox selection fixes (#3839) Signed-off-by: Alexander Onnikov --- .../src/components/Activity.svelte | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/plugins/notification-resources/src/components/Activity.svelte b/plugins/notification-resources/src/components/Activity.svelte index 7ce49aa508..cfef3e64c9 100644 --- a/plugins/notification-resources/src/components/Activity.svelte +++ b/plugins/notification-resources/src/components/Activity.svelte @@ -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)