From 276ef09884a8fd4ede1d702dc43cfbfbad7ecf7f Mon Sep 17 00:00:00 2001 From: Muhammad Hamza <120543468+hamza-deriv@users.noreply.github.com> Date: Fri, 5 Jan 2024 11:36:52 +0800 Subject: [PATCH] [TRAH] Hamza / TRAH-2615 /Added Carousel component (#12738) * chore: added carousel component * chore: removed the types * chore: removed the code smells * chore: added default value * chore: added default value v2 --- .../CompareAccountsCarousel.tsx | 43 +++++++++++++++++++ .../CompareAccountsCarouselButton.tsx | 27 ++++++++++++ .../CompareAccountsCarousel/index.ts | 1 + 3 files changed, 71 insertions(+) create mode 100644 packages/tradershub/src/features/cfd/components/CompareAccountsCarousel/CompareAccountsCarousel.tsx create mode 100644 packages/tradershub/src/features/cfd/components/CompareAccountsCarousel/CompareAccountsCarouselButton.tsx create mode 100644 packages/tradershub/src/features/cfd/components/CompareAccountsCarousel/index.ts diff --git a/packages/tradershub/src/features/cfd/components/CompareAccountsCarousel/CompareAccountsCarousel.tsx b/packages/tradershub/src/features/cfd/components/CompareAccountsCarousel/CompareAccountsCarousel.tsx new file mode 100644 index 000000000000..9b85b4ec4646 --- /dev/null +++ b/packages/tradershub/src/features/cfd/components/CompareAccountsCarousel/CompareAccountsCarousel.tsx @@ -0,0 +1,43 @@ +import React, { PropsWithChildren, useCallback, useEffect, useState } from 'react'; +import useEmblaCarousel, { EmblaCarouselType, EmblaOptionsType } from 'embla-carousel-react'; +import CFDCompareAccountsCarouselButton from './CompareAccountsCarouselButton'; + +const CompareAccountsCarousel = ({ children }: PropsWithChildren) => { + const options: EmblaOptionsType = { + align: 0, + containScroll: 'trimSnaps', + }; + const [emblaRef, emblaApi] = useEmblaCarousel(options); + const [prevBtnEnabled, setPrevBtnEnabled] = useState(false); + const [nextBtnEnabled, setNextBtnEnabled] = useState(false); + + const scrollPrev = useCallback(() => emblaApi?.scrollPrev(), [emblaApi]); + const scrollNext = useCallback(() => emblaApi?.scrollNext(), [emblaApi]); + + const onSelect = useCallback((emblaApi: EmblaCarouselType) => { + setPrevBtnEnabled(emblaApi.canScrollPrev()); + setNextBtnEnabled(emblaApi.canScrollNext()); + }, []); + + useEffect(() => { + if (!emblaApi) return; + + onSelect(emblaApi); + emblaApi.on('reInit', onSelect); + emblaApi.on('select', onSelect); + }, [emblaApi, onSelect]); + + return ( +