More perf changes

This commit is contained in:
Bel Curcio 2021-06-08 11:48:55 -03:00
parent 7ef0e2273e
commit dfbca746b2
5 changed files with 66 additions and 49 deletions

View File

@ -12,36 +12,6 @@
opacity: 1; opacity: 1;
} }
.control {
@apply bg-violet absolute bottom-10 right-10 flex flex-row
border-accent-0 border text-accent-0 z-30 shadow-xl select-none;
height: 48px;
}
.leftControl,
.rightControl {
@apply px-9 cursor-pointer;
transition: background-color 0.2s ease;
}
.leftControl:hover,
.rightControl:hover {
background-color: var(--violet-dark);
}
.leftControl:focus,
.rightControl:focus {
@apply outline-none;
}
.rightControl {
@apply border-l border-accent-0;
}
.leftControl {
margin-right: -1px;
}
.thumb { .thumb {
@apply transition-transform transition-colors @apply transition-transform transition-colors
ease-linear duration-75 overflow-hidden inline-block ease-linear duration-75 overflow-hidden inline-block

View File

@ -10,7 +10,7 @@ import React, {
import cn from 'classnames' import cn from 'classnames'
import { a } from '@react-spring/web' import { a } from '@react-spring/web'
import s from './ProductSlider.module.css' import s from './ProductSlider.module.css'
import { ArrowLeft, ArrowRight } from '@components/icons' import ProductSliderControl from '../ProductSliderControl'
const ProductSlider: FC = ({ children }) => { const ProductSlider: FC = ({ children }) => {
const [currentSlide, setCurrentSlide] = useState(0) const [currentSlide, setCurrentSlide] = useState(0)
@ -73,30 +73,16 @@ const ProductSlider: FC = ({ children }) => {
} }
}, []) }, [])
const onPrev = React.useCallback(() => slider.prev(), [slider])
const onNext = React.useCallback(() => slider.next(), [slider])
return ( return (
<div className={s.root} ref={sliderContainerRef}> <div className={s.root} ref={sliderContainerRef}>
<div <div
ref={ref} ref={ref}
className={cn(s.slider, { [s.show]: isMounted }, 'keen-slider')} className={cn(s.slider, { [s.show]: isMounted }, 'keen-slider')}
> >
{slider && ( {slider && <ProductSliderControl onPrev={onPrev} onNext={onNext} />}
<div className={s.control}>
<button
className={cn(s.leftControl)}
onClick={slider.prev}
aria-label="Previous Product Image"
>
<ArrowLeft />
</button>
<button
className={cn(s.rightControl)}
onClick={slider.next}
aria-label="Next Product Image"
>
<ArrowRight />
</button>
</div>
)}
{Children.map(children, (child) => { {Children.map(children, (child) => {
// Add the keen-slider__slide className to children // Add the keen-slider__slide className to children
if (isValidElement(child)) { if (isValidElement(child)) {

View File

@ -0,0 +1,29 @@
.control {
@apply bg-violet absolute bottom-10 right-10 flex flex-row
border-accent-0 border text-accent-0 z-30 shadow-xl select-none;
height: 48px;
}
.leftControl,
.rightControl {
@apply px-9 cursor-pointer;
transition: background-color 0.2s ease;
}
.leftControl:hover,
.rightControl:hover {
background-color: var(--violet-dark);
}
.leftControl:focus,
.rightControl:focus {
@apply outline-none;
}
.rightControl {
@apply border-l border-accent-0;
}
.leftControl {
margin-right: -1px;
}

View File

@ -0,0 +1,31 @@
import cn from 'classnames'
import React from 'react'
import s from './ProductSliderControl.module.css'
import { ArrowLeft, ArrowRight } from '@components/icons'
interface ProductSliderControl {
onPrev: React.MouseEventHandler<HTMLButtonElement>
onNext: React.MouseEventHandler<HTMLButtonElement>
}
const ProductSliderControl: React.FC<ProductSliderControl> = React.memo(
({ onPrev, onNext }) => (
<div className={s.control}>
<button
className={cn(s.leftControl)}
onClick={onPrev}
aria-label="Previous Product Image"
>
<ArrowLeft />
</button>
<button
className={cn(s.rightControl)}
onClick={onNext}
aria-label="Next Product Image"
>
<ArrowRight />
</button>
</div>
)
)
export default ProductSliderControl

View File

@ -0,0 +1 @@
export { default } from './ProductSliderControl'