@@ -32,19 +32,15 @@ type FeedsMap = {
32
32
export function FeedsPage ( ) {
33
33
const query = new URLSearchParams ( useSearch ( ) ) ;
34
34
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' )
40
36
const [ feeds , setFeeds ] = useState < FeedsMap > ( {
41
37
draft : { size : 0 , data : [ ] , hasNext : false } ,
42
38
unlisted : { size : 0 , data : [ ] , hasNext : false } ,
43
39
normal : { size : 0 , data : [ ] , hasNext : false }
44
40
} )
45
41
const page = tryInt ( 1 , query . get ( "page" ) )
46
42
const limit = tryInt ( 10 , query . get ( "limit" ) , process . env . PAGE_SIZE )
47
- const ref = useRef ( false )
43
+ const ref = useRef ( "" )
48
44
function fetchFeeds ( type : FeedType ) {
49
45
client . feed . index . get ( {
50
46
query : {
@@ -63,16 +59,16 @@ export function FeedsPage() {
63
59
} )
64
60
}
65
61
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 )
74
68
}
75
- } , [ query . get ( "page" ) ] )
69
+ fetchFeeds ( type )
70
+ ref . current = key
71
+ } , [ query . get ( "page" ) , query . get ( "type" ) ] )
76
72
return (
77
73
< >
78
74
< Waiting wait = { feeds } >
@@ -87,12 +83,12 @@ export function FeedsPage() {
87
83
</ p >
88
84
{ profile ?. permission &&
89
85
< 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" : "" } ` } >
91
87
草稿箱
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" : "" } ` } >
94
90
未列出
95
- </ button >
91
+ </ Link >
96
92
</ div >
97
93
}
98
94
</ div >
@@ -101,11 +97,11 @@ export function FeedsPage() {
101
97
< FeedCard key = { id } id = { id } { ...feed } />
102
98
) ) }
103
99
< div className = "wauto flex justify-between items-center" >
104
- < Link href = { "/? page=" + ( page - 1 ) }
100
+ < Link href = { `/?type= ${ listState } & page=${ ( page - 1 ) } ` }
105
101
className = { `text-sm mt-4 font-normal rounded-full px-4 py-2 text-white bg-theme ${ page > 1 ? '' : 'invisible' } ` } >
106
102
上一页
107
103
</ Link >
108
- < Link href = { "/? page=" + ( page + 1 ) }
104
+ < Link href = { `/?type= ${ listState } & page=${ ( page + 1 ) } ` }
109
105
className = { `text-sm mt-4 font-normal rounded-full px-4 py-2 text-white bg-theme ${ feeds [ listState ] ?. hasNext ? '' : 'invisible' } ` } >
110
106
下一页
111
107
</ Link >
0 commit comments