hiento09 86f0ffc7d1
Chore/disable submodule (#56)
* Chore disable git submodule for web-client and app-backend

* Chore add newest source code of app-backend and web-client

---------

Co-authored-by: Hien To <tominhhien97@gmail.com>
2023-09-05 16:29:07 +07:00

55 lines
1.6 KiB
TypeScript

import { FC, useCallback, useEffect, useState } from "react";
import Slide from "../Slide";
import useEmblaCarousel, { EmblaCarouselType } from "embla-carousel-react";
import { NextButton, PrevButton } from "../ButtonSlider";
import { ProductDetailFragment } from "@/graphql";
type Props = {
products: ProductDetailFragment[];
};
const Slider: FC<Props> = ({ products }) => {
const [emblaRef, emblaApi] = useEmblaCarousel();
const [prevBtnDisabled, setPrevBtnDisabled] = useState(true);
const [nextBtnDisabled, setNextBtnDisabled] = useState(true);
const scrollPrev = useCallback(
() => emblaApi && emblaApi.scrollPrev(),
[emblaApi]
);
const scrollNext = useCallback(
() => emblaApi && emblaApi.scrollNext(),
[emblaApi]
);
const onSelect = useCallback((emblaApi: EmblaCarouselType) => {
setPrevBtnDisabled(!emblaApi.canScrollPrev());
setNextBtnDisabled(!emblaApi.canScrollNext());
}, []);
useEffect(() => {
if (!emblaApi) return;
onSelect(emblaApi);
emblaApi.on("reInit", onSelect);
emblaApi.on("select", onSelect);
}, [emblaApi, onSelect]);
return (
<div className="embla rounded-lg overflow-hidden relative">
<div className="embla__viewport" ref={emblaRef}>
<div className="embla__container">
{products.map((product) => {
return <Slide key={product.slug} product={product} />;
})}
</div>
</div>
<div className="embla__buttons">
<PrevButton onClick={scrollPrev} disabled={prevBtnDisabled} />
<NextButton onClick={scrollNext} disabled={nextBtnDisabled} />
</div>
</div>
);
};
export default Slider;