mirror of
https://github.com/Athou/commafeed.git
synced 2026-03-21 21:37:29 +00:00
remove the need for selectPreviousUnreadTreeItem by reversing the array if we're going backwards
This commit is contained in:
@@ -12,71 +12,49 @@ export const collapseTreeCategory = createAppAsyncThunk(
|
|||||||
async (req: CollapseRequest) => await client.category.collapse(req)
|
async (req: CollapseRequest) => await client.category.collapse(req)
|
||||||
)
|
)
|
||||||
|
|
||||||
export const selectNextUnreadTreeItem = createAppAsyncThunk("tree/selectNextUnreadItem", (_, thunkApi) => {
|
export const selectNextUnreadTreeItem = createAppAsyncThunk(
|
||||||
const state = thunkApi.getState()
|
"tree/selectNextUnreadItem",
|
||||||
const root = state.tree.rootCategory
|
(
|
||||||
if (!root) return
|
arg: {
|
||||||
|
direction: "forward" | "backward"
|
||||||
|
},
|
||||||
|
thunkApi
|
||||||
|
) => {
|
||||||
|
const state = thunkApi.getState()
|
||||||
|
const root = state.tree.rootCategory
|
||||||
|
if (!root) return
|
||||||
|
|
||||||
const { source } = state.entries
|
const { source } = state.entries
|
||||||
if (source.type === "category") {
|
if (source.type === "category") {
|
||||||
const categories = flattenCategoryTree(root)
|
const categories = flattenCategoryTree(root)
|
||||||
const index = categories.findIndex(c => c.id === source.id)
|
if (arg.direction === "backward") categories.reverse()
|
||||||
if (index === -1) return
|
|
||||||
|
|
||||||
for (let i = index + 1; i < categories.length; i++) {
|
const index = categories.findIndex(c => c.id === source.id)
|
||||||
const c = categories[i]
|
if (index === -1) return
|
||||||
if (c.feeds.some(f => f.unread > 0)) {
|
|
||||||
return thunkApi.dispatch(redirectToCategory(String(c.id)))
|
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") {
|
||||||
} else if (source.type === "feed") {
|
const feeds: Subscription[] = []
|
||||||
const feeds: Subscription[] = []
|
visitCategoryTree(root, c => feeds.push(...c.feeds), { childrenFirst: true })
|
||||||
visitCategoryTree(root, c => feeds.push(...c.feeds), { childrenFirst: true })
|
if (arg.direction === "backward") feeds.reverse()
|
||||||
|
|
||||||
const index = feeds.findIndex(f => f.id === +source.id)
|
const index = feeds.findIndex(f => f.id === +source.id)
|
||||||
if (index === -1) return
|
if (index === -1) return
|
||||||
|
|
||||||
for (let i = index + 1; i < feeds.length; i++) {
|
for (let i = index + 1; i < feeds.length; i++) {
|
||||||
const f = feeds[i]
|
const f = feeds[i]
|
||||||
if (f.unread > 0) {
|
if (f.unread > 0) {
|
||||||
return thunkApi.dispatch(redirectToFeed(String(f.id)))
|
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(
|
export const newFeedEntriesDiscovered = createAppAsyncThunk(
|
||||||
"tree/new-feed-entries-discovered",
|
"tree/new-feed-entries-discovered",
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import {
|
|||||||
import { redirectToRootCategory } from "app/redirect/thunks"
|
import { redirectToRootCategory } from "app/redirect/thunks"
|
||||||
import { useAppDispatch, useAppSelector } from "app/store"
|
import { useAppDispatch, useAppSelector } from "app/store"
|
||||||
import { toggleSidebar } from "app/tree/slice"
|
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 { KeyboardShortcutsHelp } from "components/KeyboardShortcutsHelp"
|
||||||
import { Loader } from "components/Loader"
|
import { Loader } from "components/Loader"
|
||||||
import { useBrowserExtension } from "hooks/useBrowserExtension"
|
import { useBrowserExtension } from "hooks/useBrowserExtension"
|
||||||
@@ -173,8 +173,8 @@ export function FeedEntries() {
|
|||||||
})
|
})
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
useMousetrap("shift+j", async () => await dispatch(selectNextUnreadTreeItem()))
|
useMousetrap("shift+j", async () => await dispatch(selectNextUnreadTreeItem({ direction: "forward" })))
|
||||||
useMousetrap("shift+k", async () => await dispatch(selectPreviousUnreadTreeItem()))
|
useMousetrap("shift+k", async () => await dispatch(selectNextUnreadTreeItem({ direction: "backward" })))
|
||||||
useMousetrap("space", () => {
|
useMousetrap("space", () => {
|
||||||
if (selectedEntry) {
|
if (selectedEntry) {
|
||||||
if (selectedEntry.expanded) {
|
if (selectedEntry.expanded) {
|
||||||
|
|||||||
Reference in New Issue
Block a user