1
- import React , { useState , useEffect } from "react" ;
1
+ import React , { useEffect , useState } from "react" ;
2
2
import { Container , Row } from "../../../reusecore/Layout" ;
3
3
import SectionTitle from "../../../reusecore/SectionTitle" ;
4
4
import PartnerItemWrapper from "./partnerSection.style" ;
@@ -8,7 +8,7 @@ import Slider from "react-slick";
8
8
9
9
const settings = {
10
10
initialSlide : 1 ,
11
- lazyLoad : false , // disable slick's lazyLoad
11
+ lazyLoad : false , // disabled to avoid visual glitches
12
12
arrows : false ,
13
13
dots : false ,
14
14
infinite : true ,
@@ -30,18 +30,21 @@ const Projects = () => {
30
30
const [ allImagesLoaded , setAllImagesLoaded ] = useState ( false ) ;
31
31
32
32
useEffect ( ( ) => {
33
- const imagePromises = partners . map ( partner => {
34
- return new Promise ( ( resolve , reject ) => {
35
- const img = new Image ( ) ;
36
- img . src = partner . imageLink ;
37
- img . onload = resolve ;
38
- img . onerror = reject ;
39
- } ) ;
40
- } ) ;
33
+ let loadedCount = 0 ;
34
+
35
+ const handleImageLoad = ( ) => {
36
+ loadedCount += 1 ;
37
+ if ( loadedCount === partners . length ) {
38
+ setAllImagesLoaded ( true ) ;
39
+ }
40
+ } ;
41
41
42
- Promise . all ( imagePromises )
43
- . then ( ( ) => setAllImagesLoaded ( true ) )
44
- . catch ( ( ) => setAllImagesLoaded ( true ) ) ; // still render even if some fail
42
+ partners . forEach ( ( partner ) => {
43
+ const img = new Image ( ) ;
44
+ img . src = partner . imageLink ;
45
+ img . onload = handleImageLoad ;
46
+ img . onerror = handleImageLoad ; // count failed as loaded
47
+ } ) ;
45
48
} , [ ] ) ;
46
49
47
50
return (
@@ -58,7 +61,11 @@ const Projects = () => {
58
61
</ Row >
59
62
</ Container >
60
63
61
- { allImagesLoaded ? (
64
+ { ! allImagesLoaded ? (
65
+ < div className = "loading-indicator" >
66
+ < span className = "loader" />
67
+ </ div >
68
+ ) : (
62
69
< Slider { ...settings } >
63
70
{ partners . map ( ( partner , index ) => (
64
71
< Link className = "partner-card" to = { partner . imageRoute } key = { index } >
@@ -75,8 +82,6 @@ const Projects = () => {
75
82
</ Link >
76
83
) ) }
77
84
</ Slider >
78
- ) : (
79
- < div style = { { height : "100px" , textAlign : "center" } } > Loading...</ div >
80
85
) }
81
86
</ PartnerItemWrapper >
82
87
) ;
0 commit comments