Skip to content

Commit 59f55e1

Browse files
Merge pull request #7293 from Katotodan/feature/diplay-fix
fix: fixing the columns order on small devices
2 parents 23b458e + 0cb6b4c commit 59f55e1

File tree

1 file changed

+70
-11
lines changed

1 file changed

+70
-11
lines changed

src/sections/Pricing/review-slider.js

Lines changed: 70 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
import React from "react";
2+
import React, { useRef, useState, useLayoutEffect } from "react";
33
import styled from "styled-components";
44
import Customers from "../../reusecore/Blockquote/Blockquote-image";
55
import Slider from "react-slick";
@@ -33,28 +33,22 @@ const settings = {
3333
{
3434
breakpoint: 1300,
3535
settings: {
36-
slidesToShow: 2.5,
36+
slidesToShow: 2,
37+
slidesToScroll: 1,
3738
}
3839
},
3940
{
4041
breakpoint: 1024,
4142
settings: {
4243
slidesToShow: 2,
44+
slidesToScroll: 1,
4345
}
4446
},
4547
{
4648
breakpoint: 800,
47-
settings: {
48-
slidesToShow: 1.5,
49-
slidesToScroll: 0.5,
50-
}
51-
},
52-
{
53-
breakpoint: 600,
5449
settings: {
5550
slidesToShow: 1,
5651
slidesToScroll: 1,
57-
autoplaySpeed: 2000,
5852
}
5953
}
6054
]
@@ -81,15 +75,80 @@ max-width: 100%;
8175
opacity: 1;
8276
}
8377
78+
/* Prevent extreme shrinking on mobile */
79+
.slick-slide > div { min-width: 0; }
80+
.slider .type-one-wrapper { width: 100%; max-width: none; margin: 0 0.5rem; }
81+
82+
@media (max-width: 768px) {
83+
.type-one-wrapper.type-one-wrapper-boxed { max-width: none; padding: 0; }
84+
.type-one-quote .type-one-quote-base,
85+
.type-two-quote .type-two-quote-base { padding-left: 30px; padding-right: 30px; }
86+
}
87+
8488
`;
8589

8690

8791
const Reviews = () => {
92+
const [isClient, setIsClient] = useState(false);
93+
const [slidesToShowState, setSlidesToShowState] = useState(null);
94+
const sliderRef = useRef(null);
95+
96+
const mergedSettings = {
97+
...settings,
98+
slidesToShow: slidesToShowState || 1,
99+
slidesToScroll: 1,
100+
responsive: []
101+
};
102+
103+
const computeSlides = () => {
104+
const w = typeof window !== "undefined" ? (window.innerWidth || document.documentElement.clientWidth) : 1200;
105+
if (w <= 800) return 1;
106+
if (w <= 1024) return 2;
107+
return 3;
108+
};
109+
110+
useLayoutEffect(() => {
111+
112+
setIsClient(true);
113+
setSlidesToShowState(computeSlides());
114+
115+
let resizeTimeout = null;
116+
const onResizeDebounced = () => {
117+
clearTimeout(resizeTimeout);
118+
resizeTimeout = setTimeout(() => {
119+
const slides = computeSlides();
120+
setSlidesToShowState((prev) => {
121+
if (prev !== slides) return slides;
122+
return prev;
123+
});
124+
if (sliderRef.current && sliderRef.current.innerSlider && typeof sliderRef.current.innerSlider.onWindowResized === "function") {
125+
sliderRef.current.innerSlider.onWindowResized();
126+
}
127+
}, 100);
128+
};
129+
130+
const onLoad = () => onResizeDebounced();
131+
132+
window.addEventListener("resize", onResizeDebounced);
133+
window.addEventListener("load", onLoad);
134+
const imgs = document.querySelectorAll(".slider img");
135+
imgs.forEach((img) => img.addEventListener("load", onLoad));
136+
137+
return () => {
138+
window.removeEventListener("resize", onResizeDebounced);
139+
window.removeEventListener("load", onLoad);
140+
imgs.forEach((img) => img.removeEventListener("load", onLoad));
141+
clearTimeout(resizeTimeout);
142+
};
143+
}, []);
144+
145+
if (!isClient || slidesToShowState === null) return null;
146+
88147
return (
89148
<ReviewsWrapper>
90149
<div className="slider">
91150
<h2>Hear what other users have to say...</h2>
92-
<Slider {...settings}>
151+
<Slider key={`review-slider-${slidesToShowState}`} ref={sliderRef} {...mergedSettings}>
93152
{/* <Customers
94153
type="1"
95154
quote="The Meshery Extension transforms Docker Desktop into a powerful load generation utility, conveniently enabling me to deploy and configure any service mesh with a click of the button and invoke and control load-based performance tests from my desktop."

0 commit comments

Comments
 (0)