@@ -14,7 +14,7 @@ interface Props {
14
14
}
15
15
16
16
// step
17
- const PAGE_SIZE = 6 as const ; // Todo: make it responsive
17
+ const PAGE_SIZE = 3 as const ; // Todo: make it responsive
18
18
// page dependency in useEffect is more important
19
19
const INITIAL_PAGE = 1 as const ;
20
20
@@ -28,6 +28,8 @@ const NewGallery: FC<Props> = ({ images }) => {
28
28
const [ page , setPage ] = useState < number > ( INITIAL_PAGE ) ;
29
29
const observerTarget = useRef ( null ) ;
30
30
31
+ const isEnd = loadedImages . length === images . length ;
32
+
31
33
// converts page to loaded images
32
34
useEffect ( ( ) => {
33
35
const upToPageImages = fetchImagesUpToPage ( images , page ) ;
@@ -37,7 +39,8 @@ const NewGallery: FC<Props> = ({ images }) => {
37
39
// sets only page
38
40
useEffect ( ( ) => {
39
41
const callback : IntersectionObserverCallback = ( entries ) => {
40
- if ( entries [ 0 ] . isIntersecting ) {
42
+ // Todo: must wait here for images to load
43
+ if ( ! isEnd && entries [ 0 ] . isIntersecting ) {
41
44
setPage ( ( prevPage ) => prevPage + 1 ) ;
42
45
}
43
46
} ;
@@ -52,7 +55,7 @@ const NewGallery: FC<Props> = ({ images }) => {
52
55
if ( observerRef ) observer . unobserve ( observerRef ) ;
53
56
} ;
54
57
// page dependency is important for initial load to work for all resolutions
55
- } , [ observerTarget , page ] ) ;
58
+ } , [ observerTarget , page , isEnd ] ) ;
56
59
57
60
// lightbox
58
61
useEffect ( ( ) => {
0 commit comments