@@ -16,7 +16,32 @@ const Posts = () => {
16
16
const location = useLocation ( ) ;
17
17
const searchParams = new URLSearchParams ( location . search ) ;
18
18
const pageParam = searchParams . get ( "pageNum" ) ;
19
+ const postIdParam = searchParams . get ( "postId" ) ;
19
20
21
+ const handlePagerClick = ( page : number ) => {
22
+ window . history . replaceState ( null , '' , '/posts' ) ;
23
+ setPageNum ( page ) ;
24
+ }
25
+
26
+ const Pager = ( ) => {
27
+ return < div className = "pager" >
28
+ { pageNum > 1 ? (
29
+ < MdChevronLeft className = "arrow-visible" onClick = { ( ) => pageNum > 0 && handlePagerClick ( pageNum - 1 ) } />
30
+ ) : (
31
+ < MdChevronLeft className = "arrow-hidden" />
32
+ ) }
33
+
34
+ < span > { pageNum } </ span >
35
+
36
+ { pageNum < totalPages ? (
37
+ < MdChevronRight className = "arrow-visible" onClick = { ( ) => handlePagerClick ( pageNum + 1 ) } />
38
+ ) : (
39
+ < MdChevronRight className = "arrow-hidden" />
40
+ ) }
41
+ </ div >
42
+ }
43
+
44
+ // get all posts for a specific page
20
45
useEffect ( ( ) => {
21
46
fetch ( `api/posts/page/${ pageNum } ` )
22
47
. then ( ( res ) => { return res . json ( ) ; } )
@@ -25,15 +50,19 @@ const Posts = () => {
25
50
26
51
} , [ pageNum ] ) ;
27
52
53
+ // scroll to the selected post
28
54
useEffect ( ( ) => {
29
55
if ( pageParam ) {
30
56
setPageNum ( parseInt ( pageParam ) ) ;
31
57
32
58
setTimeout ( ( ) => {
33
- scrollToHash ( ) ;
59
+ const target = document . querySelector ( "#post" + postIdParam ) ;
60
+ if ( target ) {
61
+ target . scrollIntoView ( { behavior : "smooth" } ) ;
62
+ }
34
63
} , 1700 ) ;
35
64
}
36
- } , [ ] ) ;
65
+ } , [ pageParam ] ) ;
37
66
38
67
useEffect ( ( ) => {
39
68
setIsAdmin ( GetIsAdmin ) ;
@@ -50,37 +79,6 @@ const Posts = () => {
50
79
} ) . catch ( ( e ) => console . log ( "Error retrieving post count: " + e ) ) ;
51
80
} , [ ] ) ;
52
81
53
- const scrollToHash = ( ) => {
54
- const postIdParam = searchParams . get ( "postId" ) ;
55
- const target = document . querySelector ( "#post" + postIdParam ) ;
56
- if ( target ) {
57
- target . scrollIntoView ( { behavior : "smooth" } ) ;
58
- }
59
- } ;
60
-
61
- const handlePagerClick = ( page : number ) => {
62
- window . history . replaceState ( null , '' , '/posts' ) ;
63
- setPageNum ( page ) ;
64
- }
65
-
66
- const Pager = ( ) => {
67
- return < div className = "pager" >
68
- { pageNum > 1 ? (
69
- < MdChevronLeft className = "arrow-visible" onClick = { ( ) => pageNum > 0 && handlePagerClick ( pageNum - 1 ) } />
70
- ) : (
71
- < MdChevronLeft className = "arrow-hidden" />
72
- ) }
73
-
74
- < span > { pageNum } </ span >
75
-
76
- { pageNum < totalPages ? (
77
- < MdChevronRight className = "arrow-visible" onClick = { ( ) => handlePagerClick ( pageNum + 1 ) } />
78
- ) : (
79
- < MdChevronRight className = "arrow-hidden" />
80
- ) }
81
- </ div >
82
- }
83
-
84
82
return (
85
83
< section className = "posts" >
86
84
< Pager />
0 commit comments