import useEmblaCarousel from 'embla-carousel-react' import { Suspense, useCallback, useEffect, useState } from 'react' import { Await, useRouteLoaderData } from 'react-router' import { stripHtml } from 'string-strip-html' import { ErrorAwait } from '~/components/error/await' import { ImageSkeletonIcon } from '~/components/icons/image-skeleton' import { CarouselButton } from '~/components/ui/button-slide' import { useNewsContext } from '~/contexts/news' import type { loader } from '~/routes/_news' import type { TNews } from '~/types/news' import { getPremiumAttribute } from '~/utils/render' import { Button } from './button' import { Tags } from './tags' export const CarouselSection = (properties: TNews) => { const { setIsSuccessOpen } = useNewsContext() const loaderData = useRouteLoaderData('routes/_news') const { userData } = loaderData || {} const { title, description, items } = properties const [emblaReference, emblaApi] = useEmblaCarousel({ loop: false, slidesToScroll: 1, align: 'start', }) const [canScrollNext, setCanScrollNext] = useState(false) const [canScrollPrevious, setCanScrollPrevious] = useState(false) const updateButtons = useCallback(() => { if (emblaApi) { setCanScrollPrevious(emblaApi.canScrollPrev()) setCanScrollNext(emblaApi.canScrollNext()) } }, [emblaApi]) useEffect(() => { if (emblaApi) { updateButtons() emblaApi.on('select', updateButtons) } }, [emblaApi, updateButtons]) const previousSlide = useCallback(() => { if (canScrollPrevious && emblaApi) emblaApi.scrollPrev() }, [emblaApi, canScrollPrevious]) const nextSlide = useCallback(() => { if (canScrollNext && emblaApi) emblaApi.scrollNext() }, [emblaApi, canScrollNext]) return (

{title}

{description}

(
Loading...
))} > } > {(value) => value.data.map( ( { featured_image, title, content, tags, slug, is_premium }, index, ) => (
{title}

{title}

{stripHtml(content).result}

), ) }
) }