1
-
2
- import React from "react" ;
1
+ import React , { useState , useEffect } from "react" ;
3
2
import { Container , Row } from "../../../reusecore/Layout" ;
4
3
import SectionTitle from "../../../reusecore/SectionTitle" ;
5
4
import PartnerItemWrapper from "./partnerSection.style" ;
@@ -9,7 +8,7 @@ import Slider from "react-slick";
9
8
10
9
const settings = {
11
10
initialSlide : 1 ,
12
- lazyLoad : true ,
11
+ lazyLoad : false , // disable slick's lazyLoad
13
12
arrows : false ,
14
13
dots : false ,
15
14
infinite : true ,
@@ -28,6 +27,23 @@ const settings = {
28
27
} ;
29
28
30
29
const Projects = ( ) => {
30
+ const [ allImagesLoaded , setAllImagesLoaded ] = useState ( false ) ;
31
+
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
+ } ) ;
41
+
42
+ Promise . all ( imagePromises )
43
+ . then ( ( ) => setAllImagesLoaded ( true ) )
44
+ . catch ( ( ) => setAllImagesLoaded ( true ) ) ; // still render even if some fail
45
+ } , [ ] ) ;
46
+
31
47
return (
32
48
< PartnerItemWrapper >
33
49
< Container >
@@ -41,15 +57,27 @@ const Projects = () => {
41
57
</ SectionTitle >
42
58
</ Row >
43
59
</ Container >
44
- < Slider { ...settings } >
45
- { partners . map ( ( partner , index ) => (
46
- < Link className = "partner-card" to = { partner . imageRoute } key = { index } >
47
- < div className = { partner . innerDivStyle } >
48
- < img className = "partner-image" id = { partner . name } loading = "lazy" src = { partner . imageLink } alt = { partner . name } width = { partner . imageWidth } height = { partner . imageHeight } />
49
- </ div >
50
- </ Link >
51
- ) ) }
52
- </ Slider >
60
+
61
+ { allImagesLoaded ? (
62
+ < Slider { ...settings } >
63
+ { partners . map ( ( partner , index ) => (
64
+ < Link className = "partner-card" to = { partner . imageRoute } key = { index } >
65
+ < div className = { partner . innerDivStyle } >
66
+ < img
67
+ className = "partner-image"
68
+ id = { partner . name }
69
+ src = { partner . imageLink }
70
+ alt = { partner . name }
71
+ width = { partner . imageWidth }
72
+ height = { partner . imageHeight }
73
+ />
74
+ </ div >
75
+ </ Link >
76
+ ) ) }
77
+ </ Slider >
78
+ ) : (
79
+ < div style = { { height : "100px" , textAlign : "center" } } > Loading...</ div >
80
+ ) }
53
81
</ PartnerItemWrapper >
54
82
) ;
55
83
} ;
0 commit comments