mirror of
https://github.com/Athou/commafeed.git
synced 2026-03-21 21:37:29 +00:00
Readjusted code to not use localstorage, and just used redux for indicator
This commit is contained in:
@@ -3,6 +3,7 @@ import { client } from "app/client"
|
|||||||
import { Constants } from "app/constants"
|
import { Constants } from "app/constants"
|
||||||
import { type EntrySource, type EntrySourceType, entriesSlice, setMarkAllAsReadConfirmationDialogOpen, setSearch } from "app/entries/slice"
|
import { type EntrySource, type EntrySourceType, entriesSlice, setMarkAllAsReadConfirmationDialogOpen, setSearch } from "app/entries/slice"
|
||||||
import type { RootState } from "app/store"
|
import type { RootState } from "app/store"
|
||||||
|
import { setHasNewEntries } from "app/tree/slice"
|
||||||
import { reloadTree } from "app/tree/thunks"
|
import { reloadTree } from "app/tree/thunks"
|
||||||
import type { Entry, MarkRequest, TagRequest } from "app/types"
|
import type { Entry, MarkRequest, TagRequest } from "app/types"
|
||||||
import { reloadTags } from "app/user/thunks"
|
import { reloadTags } from "app/user/thunks"
|
||||||
@@ -26,6 +27,11 @@ export const loadEntries = createAppAsyncThunk(
|
|||||||
const state = thunkApi.getState()
|
const state = thunkApi.getState()
|
||||||
const endpoint = getEndpoint(arg.source.type)
|
const endpoint = getEndpoint(arg.source.type)
|
||||||
const result = await endpoint(buildGetEntriesPaginatedRequest(state, arg.source, 0))
|
const result = await endpoint(buildGetEntriesPaginatedRequest(state, arg.source, 0))
|
||||||
|
console.log(arg.source.id)
|
||||||
|
|
||||||
|
if (arg.source.type === "feed") {
|
||||||
|
thunkApi.dispatch(setHasNewEntries({ feedId: +arg.source.id, value: false }))
|
||||||
|
}
|
||||||
return result.data
|
return result.data
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -40,29 +40,18 @@ export const treeSlice = createSlice({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
setHasNewEntries: (state, action: PayloadAction<{ feedId: number; value: boolean }>) => {
|
||||||
|
if (!state.rootCategory) return
|
||||||
|
|
||||||
|
visitCategoryTree(state.rootCategory, category => {
|
||||||
|
category.feeds = category.feeds.map(feed =>
|
||||||
|
feed.id === action.payload.feedId ? { ...feed, hasNewEntries: action.payload.value } : feed
|
||||||
|
)
|
||||||
|
})
|
||||||
|
},
|
||||||
},
|
},
|
||||||
extraReducers: builder => {
|
extraReducers: builder => {
|
||||||
builder.addCase(reloadTree.fulfilled, (state, action) => {
|
builder.addCase(reloadTree.fulfilled, (state, action) => {
|
||||||
visitCategoryTree(action.payload, category => {
|
|
||||||
category.feeds = category.feeds.map(feed => {
|
|
||||||
const storageKey = `feed-${feed.id}-unread`
|
|
||||||
const existing = localStorage.getItem(storageKey)
|
|
||||||
const prevUnread = Number.parseInt(existing || "0", 10)
|
|
||||||
const isNewFeed = existing === null
|
|
||||||
|
|
||||||
const hasNewEntries = isNewFeed ? true : feed.unread > prevUnread
|
|
||||||
|
|
||||||
if (!isNewFeed) {
|
|
||||||
localStorage.setItem(storageKey, feed.unread.toString())
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
...feed,
|
|
||||||
hasNewEntries,
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
state.rootCategory = action.payload
|
state.rootCategory = action.payload
|
||||||
})
|
})
|
||||||
builder.addCase(collapseTreeCategory.pending, (state, action) => {
|
builder.addCase(collapseTreeCategory.pending, (state, action) => {
|
||||||
@@ -85,4 +74,4 @@ export const treeSlice = createSlice({
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
export const { setMobileMenuOpen, toggleSidebar, incrementUnreadCount } = treeSlice.actions
|
export const { setMobileMenuOpen, toggleSidebar, incrementUnreadCount, setHasNewEntries } = treeSlice.actions
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { createAppAsyncThunk } from "app/async-thunk"
|
import { createAppAsyncThunk } from "app/async-thunk"
|
||||||
import { client } from "app/client"
|
import { client } from "app/client"
|
||||||
import { redirectToCategory, redirectToFeed } from "app/redirect/thunks"
|
import { redirectToCategory, redirectToFeed } from "app/redirect/thunks"
|
||||||
import { incrementUnreadCount } from "app/tree/slice"
|
import { incrementUnreadCount, setHasNewEntries } from "app/tree/slice"
|
||||||
import type { CollapseRequest, Subscription } from "app/types"
|
import type { CollapseRequest, Subscription } from "app/types"
|
||||||
import { flattenCategoryTree, visitCategoryTree } from "app/utils"
|
import { flattenCategoryTree, visitCategoryTree } from "app/utils"
|
||||||
|
|
||||||
@@ -11,7 +11,6 @@ export const collapseTreeCategory = createAppAsyncThunk(
|
|||||||
"tree/category/collapse",
|
"tree/category/collapse",
|
||||||
async (req: CollapseRequest) => await client.category.collapse(req).then(r => r.data)
|
async (req: CollapseRequest) => await client.category.collapse(req).then(r => r.data)
|
||||||
)
|
)
|
||||||
|
|
||||||
export const selectNextUnreadTreeItem = createAppAsyncThunk(
|
export const selectNextUnreadTreeItem = createAppAsyncThunk(
|
||||||
"tree/selectNextUnreadItem",
|
"tree/selectNextUnreadItem",
|
||||||
(
|
(
|
||||||
@@ -75,6 +74,7 @@ export const newFeedEntriesDiscovered = createAppAsyncThunk(
|
|||||||
amount,
|
amount,
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
thunkApi.dispatch(setHasNewEntries({ feedId, value: true }))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -71,10 +71,6 @@ export function TreeNode(props: TreeNodeProps) {
|
|||||||
py={1}
|
py={1}
|
||||||
pl={props.level * 20}
|
pl={props.level * 20}
|
||||||
className={`${classes.node} cf-treenode cf-treenode-${props.type}`}
|
className={`${classes.node} cf-treenode cf-treenode-${props.type}`}
|
||||||
onClick={e => {
|
|
||||||
props.onClick(e, props.id)
|
|
||||||
props.type === "feed" && localStorage.setItem(`feed-${props.id}-unread`, props.unread.toString())
|
|
||||||
}}
|
|
||||||
data-id={props.id}
|
data-id={props.id}
|
||||||
data-type={props.type}
|
data-type={props.type}
|
||||||
data-unread-count={props.unread}
|
data-unread-count={props.unread}
|
||||||
|
|||||||
Reference in New Issue
Block a user