Skip to content

Commit c69700e

Browse files
committed
fix: feed fetching logic and add support for different feed types
1 parent 8e23d46 commit c69700e

File tree

1 file changed

+17
-21
lines changed

1 file changed

+17
-21
lines changed

client/src/page/feeds.tsx

+17-21
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,15 @@ type FeedsMap = {
3232
export function FeedsPage() {
3333
const query = new URLSearchParams(useSearch());
3434
const profile = useContext(ProfileContext);
35-
const [listState, _setListState] = useState<FeedType>('normal')
36-
function setListState(type: FeedType) {
37-
if (feeds[type].size === 0) fetchFeeds(type)
38-
_setListState(type)
39-
}
35+
const [listState, _setListState] = useState<FeedType>(query.get("type") as FeedType || 'normal')
4036
const [feeds, setFeeds] = useState<FeedsMap>({
4137
draft: { size: 0, data: [], hasNext: false },
4238
unlisted: { size: 0, data: [], hasNext: false },
4339
normal: { size: 0, data: [], hasNext: false }
4440
})
4541
const page = tryInt(1, query.get("page"))
4642
const limit = tryInt(10, query.get("limit"), process.env.PAGE_SIZE)
47-
const ref = useRef(false)
43+
const ref = useRef("")
4844
function fetchFeeds(type: FeedType) {
4945
client.feed.index.get({
5046
query: {
@@ -63,16 +59,16 @@ export function FeedsPage() {
6359
})
6460
}
6561
useEffect(() => {
66-
if (ref.current) return
67-
fetchFeeds(listState)
68-
ref.current = true
69-
}, [])
70-
71-
useEffect(() => {
72-
if (feeds) {
73-
fetchFeeds(listState)
62+
const key = `${query.get("page")} ${query.get("type")}`
63+
console.log(key)
64+
if (ref.current == key) return
65+
const type = query.get("type") as FeedType || 'normal'
66+
if (type !== listState) {
67+
_setListState(type)
7468
}
75-
}, [query.get("page")])
69+
fetchFeeds(type)
70+
ref.current = key
71+
}, [query.get("page"), query.get("type")])
7672
return (
7773
<>
7874
<Waiting wait={feeds}>
@@ -87,12 +83,12 @@ export function FeedsPage() {
8783
</p>
8884
{profile?.permission &&
8985
<div className="flex flex-row space-x-4">
90-
<button onClick={() => listState === 'draft' ? setListState('normal') : setListState('draft')} className={`text-sm mt-4 text-neutral-500 font-normal ${listState === 'draft' ? "text-theme" : ""}`}>
86+
<Link href={listState === 'draft' ? '/?type=normal' : '/?type=draft'} className={`text-sm mt-4 text-neutral-500 font-normal ${listState === 'draft' ? "text-theme" : ""}`}>
9187
草稿箱
92-
</button>
93-
<button onClick={() => listState === 'unlisted' ? setListState('normal') : setListState('unlisted')} className={`text-sm mt-4 text-neutral-500 font-normal ${listState === 'unlisted' ? "text-theme" : ""}`}>
88+
</Link>
89+
<Link href={listState === 'unlisted' ? '/?type=normal' : '/?type=unlisted'} className={`text-sm mt-4 text-neutral-500 font-normal ${listState === 'unlisted' ? "text-theme" : ""}`}>
9490
未列出
95-
</button>
91+
</Link>
9692
</div>
9793
}
9894
</div>
@@ -101,11 +97,11 @@ export function FeedsPage() {
10197
<FeedCard key={id} id={id} {...feed} />
10298
))}
10399
<div className="wauto flex justify-between items-center">
104-
<Link href={"/?page=" + (page - 1)}
100+
<Link href={`/?type=${listState}&page=${(page - 1)}`}
105101
className={`text-sm mt-4 font-normal rounded-full px-4 py-2 text-white bg-theme ${page > 1 ? '' : 'invisible'}`}>
106102
上一页
107103
</Link>
108-
<Link href={"/?page=" + (page + 1)}
104+
<Link href={`/?type=${listState}&page=${(page + 1)}`}
109105
className={`text-sm mt-4 font-normal rounded-full px-4 py-2 text-white bg-theme ${feeds[listState]?.hasNext ? '' : 'invisible'}`}>
110106
下一页
111107
</Link>

0 commit comments

Comments
 (0)