remove the need for selectPreviousUnreadTreeItem by reversing the array if we're going backwards

This commit is contained in:
Athou
2025-03-05 07:33:36 +01:00
parent d46b571444
commit b733129043
2 changed files with 38 additions and 60 deletions

View File

@@ -12,71 +12,49 @@ export const collapseTreeCategory = createAppAsyncThunk(
async (req: CollapseRequest) => await client.category.collapse(req)
)
export const selectNextUnreadTreeItem = createAppAsyncThunk("tree/selectNextUnreadItem", (_, thunkApi) => {
const state = thunkApi.getState()
const root = state.tree.rootCategory
if (!root) return
export const selectNextUnreadTreeItem = createAppAsyncThunk(
"tree/selectNextUnreadItem",
(
arg: {
direction: "forward" | "backward"
},
thunkApi
) => {
const state = thunkApi.getState()
const root = state.tree.rootCategory
if (!root) return
const { source } = state.entries
if (source.type === "category") {
const categories = flattenCategoryTree(root)
const index = categories.findIndex(c => c.id === source.id)
if (index === -1) return
const { source } = state.entries
if (source.type === "category") {
const categories = flattenCategoryTree(root)
if (arg.direction === "backward") categories.reverse()
for (let i = index + 1; i < categories.length; i++) {
const c = categories[i]
if (c.feeds.some(f => f.unread > 0)) {
return thunkApi.dispatch(redirectToCategory(String(c.id)))
const index = categories.findIndex(c => c.id === source.id)
if (index === -1) return
for (let i = index + 1; i < categories.length; i++) {
const c = categories[i]
if (c.feeds.some(f => f.unread > 0)) {
return thunkApi.dispatch(redirectToCategory(String(c.id)))
}
}
}
} else if (source.type === "feed") {
const feeds: Subscription[] = []
visitCategoryTree(root, c => feeds.push(...c.feeds), { childrenFirst: true })
} else if (source.type === "feed") {
const feeds: Subscription[] = []
visitCategoryTree(root, c => feeds.push(...c.feeds), { childrenFirst: true })
if (arg.direction === "backward") feeds.reverse()
const index = feeds.findIndex(f => f.id === +source.id)
if (index === -1) return
const index = feeds.findIndex(f => f.id === +source.id)
if (index === -1) return
for (let i = index + 1; i < feeds.length; i++) {
const f = feeds[i]
if (f.unread > 0) {
return thunkApi.dispatch(redirectToFeed(String(f.id)))
for (let i = index + 1; i < feeds.length; i++) {
const f = feeds[i]
if (f.unread > 0) {
return thunkApi.dispatch(redirectToFeed(String(f.id)))
}
}
}
}
})
export const selectPreviousUnreadTreeItem = createAppAsyncThunk("tree/selectPreviousUnreadItem", (_, thunkApi) => {
const state = thunkApi.getState()
const root = state.tree.rootCategory
if (!root) return
const { source } = state.entries
if (source.type === "category") {
const categories = flattenCategoryTree(root)
const index = categories.findIndex(c => c.id === source.id)
if (index === -1) return
for (let i = index - 1; i >= 0; i--) {
const c = categories[i]
if (c.feeds.some(f => f.unread > 0)) {
return thunkApi.dispatch(redirectToCategory(String(c.id)))
}
}
} else if (source.type === "feed") {
const feeds: Subscription[] = []
visitCategoryTree(root, c => feeds.push(...c.feeds), { childrenFirst: true })
const index = feeds.findIndex(f => f.id === +source.id)
if (index === -1) return
for (let i = index - 1; i >= 0; i--) {
const f = feeds[i]
if (f.unread > 0) {
return thunkApi.dispatch(redirectToFeed(String(f.id)))
}
}
}
})
)
export const newFeedEntriesDiscovered = createAppAsyncThunk(
"tree/new-feed-entries-discovered",

View File

@@ -16,7 +16,7 @@ import {
import { redirectToRootCategory } from "app/redirect/thunks"
import { useAppDispatch, useAppSelector } from "app/store"
import { toggleSidebar } from "app/tree/slice"
import { selectNextUnreadTreeItem, selectPreviousUnreadTreeItem } from "app/tree/thunks"
import { selectNextUnreadTreeItem } from "app/tree/thunks"
import { KeyboardShortcutsHelp } from "components/KeyboardShortcutsHelp"
import { Loader } from "components/Loader"
import { useBrowserExtension } from "hooks/useBrowserExtension"
@@ -173,8 +173,8 @@ export function FeedEntries() {
})
)
)
useMousetrap("shift+j", async () => await dispatch(selectNextUnreadTreeItem()))
useMousetrap("shift+k", async () => await dispatch(selectPreviousUnreadTreeItem()))
useMousetrap("shift+j", async () => await dispatch(selectNextUnreadTreeItem({ direction: "forward" })))
useMousetrap("shift+k", async () => await dispatch(selectNextUnreadTreeItem({ direction: "backward" })))
useMousetrap("space", () => {
if (selectedEntry) {
if (selectedEntry.expanded) {