🐛 bug: fix dot logic

:%s
This commit is contained in:
unknown 2021-08-27 16:34:59 +07:00
parent 93927da5ee
commit 490b56a2d9
3 changed files with 43 additions and 27 deletions

View File

@ -1,5 +1,10 @@
import { useState } from 'react' import { useState } from 'react'
import { ButtonCommon, Layout, ModalCommon, ProductCarousel } from 'src/components/common' import {
ButtonCommon,
Layout,
ModalCommon,
ProductCarousel,
} from 'src/components/common'
import { CollectionCarcousel } from 'src/components/modules/home' import { CollectionCarcousel } from 'src/components/modules/home'
import image5 from '../public/assets/images/image5.png' import image5 from '../public/assets/images/image5.png'
import image6 from '../public/assets/images/image6.png' import image6 from '../public/assets/images/image6.png'
@ -102,15 +107,37 @@ export default function Test() {
return ( return (
<> <>
<ButtonCommon onClick={onOpen}>open</ButtonCommon> <ButtonCommon onClick={onOpen}>open</ButtonCommon>
<ModalCommon visible={visible} onClose={onClose} > <ModalCommon visible={visible} onClose={onClose}>
<div className=""> <div className="">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Consectetur officiis dolorum ea incidunt. Sint, cum ullam. Labore vero quod itaque, officia magni molestias! Architecto deserunt soluta laborum commodi nesciunt delectus similique temporibus distinctio? Facere eaque minima enim modi magni, laudantium, animi mollitia beatae repudiandae maxime labore error nesciunt, nisi est? Lorem ipsum dolor sit amet consectetur adipisicing elit. Consectetur
</div> officiis dolorum ea incidunt. Sint, cum ullam. Labore vero quod
</ModalCommon> itaque, officia magni molestias! Architecto deserunt soluta laborum
commodi nesciunt delectus similique temporibus distinctio? Facere
eaque minima enim modi magni, laudantium, animi mollitia beatae
repudiandae maxime labore error nesciunt, nisi est?
</div>
</ModalCommon>
<ProductCarousel <ProductCarousel
data={dataTest} data={dataTest}
itemKey="product-2" itemKey="product-2"
isDot isDot
option={{
slidesPerView: 1,
breakpoints: {
'(min-width: 640px)': {
slidesPerView: 3,
},
'(min-width: 768px)': {
slidesPerView: 4,
},
'(min-width: 1024px)': {
slidesPerView: 4.5,
},
'(min-width: 1280px)': {
slidesPerView: 5.5,
},
},
}}
/> />
</> </>
) )

View File

@ -28,37 +28,27 @@ const CarouselCommon = <T,>({
option: { slideChanged,slidesPerView, ...sliderOption }, option: { slideChanged,slidesPerView, ...sliderOption },
}: CarouselCommonProps<T>) => { }: CarouselCommonProps<T>) => {
const [currentSlide, setCurrentSlide] = React.useState(0) const [currentSlide, setCurrentSlide] = React.useState(0)
const [dotActive, setDotActive] = React.useState<number>(0) // const [dotActive, setDotActive] = React.useState<number>(0)
const [dotArr, setDotArr] = React.useState<number[]>([]) const [dotArr, setDotArr] = React.useState<number[]>([])
const [sliderRef, slider] = useKeenSlider<HTMLDivElement>({ const [sliderRef, slider] = useKeenSlider<HTMLDivElement>({
...sliderOption, ...sliderOption,
slidesPerView, slidesPerView,
slideChanged(s) { slideChanged(s) {
setCurrentSlide(s.details().relativeSlide) setCurrentSlide(s.details().relativeSlide)
}, },
afterChange(s) {
let dot = 0
dotArr.forEach((index)=>{
if(s.details().relativeSlide >= index){
dot = index
}
})
console.log(dot)
setDotActive(dot)
}
}) })
useEffect(() => { useEffect(() => {
if(isDot && slider){ if(isDot && slider && data){
let array:number[] let array:number[]
array = [...Array(Math.ceil(data.length/(Number(slider.details().slidesPerView)||1))).keys()].map((i)=>{ let number = data.length - Math.floor(slider.details().slidesPerView - 1)
return (Number(slider.details().slidesPerView)||1)*i if(number<1){
}) number = 1
console.log(array) }
array = [...Array(number).keys()]
setDotArr(array) setDotArr(array)
} }
}, [isDot,slider]) }, [isDot,slider,data])
const handleRightArrowClick = () => { const handleRightArrowClick = () => {
slider.next() slider.next()
@ -70,7 +60,6 @@ const CarouselCommon = <T,>({
const onDotClick = (index:number) => { const onDotClick = (index:number) => {
slider.moveToSlideRelative(index) slider.moveToSlideRelative(index)
setDotActive(index)
} }
return ( return (
<div className={s.navigationWrapper}> <div className={s.navigationWrapper}>
@ -102,7 +91,7 @@ const CarouselCommon = <T,>({
<div className="dots"> <div className="dots">
{dotArr.map((index) => { {dotArr.map((index) => {
return ( return (
<CustomDot key={`dot-${index}`} index={index} dotActive={dotActive} onClick={onDotClick}/> <CustomDot key={`dot-${index}`} index={index} dotActive={currentSlide} onClick={onDotClick}/>
) )
})} })}
</div> </div>

View File

@ -1,4 +1,4 @@
@import '../../../../../../styles/utilities'; @import "../../../../styles/utilities";
.homeFeature { .homeFeature {
@apply spacing-horizontal-left grid grid-cols-1; @apply spacing-horizontal-left grid grid-cols-1;