/* eslint-disable import/no-unresolved */ import { useEffect, useRef, useState } from "@wordpress/element"; import { Swiper, SwiperSlide } from "swiper/react"; import { breakpoint, buildFontClasses, inArray, paginationDotType, useDeviceType } from "../../controls/controls"; import { Autoplay, EffectCoverflow, EffectCube, EffectFade, EffectFlip, FreeMode, Grid, Keyboard, Mousewheel, Navigation, Pagination, Scrollbar, Thumbs, } from "swiper/modules"; import TemplateOne from "../shared/templates/templateCards/templateOne"; import { SwiperNavButton, SwiperPagination } from "../shared/templates/templates-parts/templates-parts"; import "swiper/css"; import "swiper/css/navigation"; import "swiper/css/pagination"; import "swiper/css/free-mode"; import "swiper/css/autoplay"; import "swiper/css/effect-flip"; import "swiper/css/thumbs"; import classNames from "classnames"; import ThumbsTemplate from "../shared/templates/templateCards/thumbsTemplate"; const Render = ({ attributes, posts, pageType = "frontend" }) => { const { dynamicClassNames, carouselPauseOnHover, carouselArrowStyle, // postThumbnailNavigationArrow, carouselPaginationStyle, carouselAutoPlay, carouselAutoPlayDelay, carouselDirection, carouselSpeed, postThumbnailAnimationEffect, postThumbnailTabKeyNavigation, postThumbnailMouseWheelControl, postThumbnailAdaptiveHeight, postThumbnailFreeScrollMode, postThumbnailHeight, // postThumbnailPaginationDot, thumbnailSliderLayout, postThumbnailSlideToScroll, contentVerticalPosition, postThumbnailGap, postThumbnailItemsPerSlide, postThumbnailPosition, currentScreen, postThumbnailLoop, navArrowVisibilityOnHover, catTabCategoryPosition, uniqueId, carouselNavArrow, carouselPaginationDot, } = attributes; const [thumbsSwiper, setThumbsSwiper] = useState(null); const swiperDotsRef = useRef(null); const swiperNevNextRef = useRef(null); const swiperNevPrevRef = useRef(null); const containerRef = useRef(null); const deviceType = useDeviceType(); const thumbnailsSlidePerGroups = postThumbnailSlideToScroll?.device?.[deviceType]; const paginationDotStyle = paginationDotType(swiperDotsRef, carouselPaginationStyle, uniqueId); const bgPosition = "center"; const backgroundSize = "cover"; const { Desktop: desktopGap } = postThumbnailGap.device; // const { Desktop: desktopScroll, Tablet: tabletScroll, Mobile: mobileScroll } = postThumbnailSlideToScroll.device; const cardHeightClass = classNames(buildFontClasses("height", postThumbnailHeight)); const thumbnailItemsPerSlide = postThumbnailItemsPerSlide.device[breakpoint()]; const thumbnailsContentItem = ["thumbnail-slider-layout-three", "thumbnail-slider-layout-four"].includes( thumbnailSliderLayout ) ? ["image", "taxonomy", "title"] : ["image"]; const [selectedPostId, setSelectedPostId] = useState(null); useEffect(() => { const handleClickOutside = (event) => { if (containerRef.current && !containerRef.current.contains(event.target)) { setSelectedPostId(null); } }; document.addEventListener("mousedown", handleClickOutside); return () => document.removeEventListener("mousedown", handleClickOutside); }, []); return (
{posts?.length > 0 && ( 1 } slidesPerGroup={Math.min(thumbnailsSlidePerGroups, 10)} autoplay={ carouselAutoPlay ? { delay: carouselAutoPlayDelay?.value, disableOnInteraction: false, pauseOnMouseEnter: carouselPauseOnHover, reverseDirection: carouselDirection === "left_to_right" ? true : false, } : false } speed={carouselSpeed?.value} // touchStartPreventDefault={ false } modules={[ Navigation, Pagination, Scrollbar, Autoplay, Keyboard, Mousewheel, EffectFade, EffectCoverflow, EffectFlip, EffectCube, FreeMode, Thumbs, ]} className={`sp-smart-post-background-layout sp-swiper-${postThumbnailAnimationEffect} sp-smart-post-swiper ${thumbnailSliderLayout}`} effect={postThumbnailAnimationEffect} cubeEffect={ postThumbnailAnimationEffect === "cube" ? { shadow: true, slideShadows: true, shadowOffset: 20, shadowScale: 0.94, } : false } coverflowEffect={ postThumbnailAnimationEffect === "coverflow" ? { rotate: 50, stretch: 0, depth: 100, modifier: 1, slideShadows: true, } : false } keyboard={ postThumbnailTabKeyNavigation ? { enabled: true, onlyInViewport: true, } : false } mousewheel={postThumbnailMouseWheelControl} autoHeight={postThumbnailAdaptiveHeight ? true : false} freeMode={postThumbnailFreeScrollMode || false} > {posts?.map((post, i) => { return ( setSelectedPostId(post?.post_id)} /> ); })} {carouselNavArrow && inArray( [ "thumbnail-slider-layout-one", "thumbnail-slider-layout-four", "thumbnail-slider-layout-six", ], thumbnailSliderLayout ) && ( )} )} {carouselNavArrow && inArray( [ "thumbnail-slider-layout-two", "thumbnail-slider-layout-three", "thumbnail-slider-layout-five", ], thumbnailSliderLayout ) && ( )}
{posts?.length > 0 && ( 1 } spaceBetween={postThumbnailGap?.device?.[currentScreen] || desktopGap} slidesPerView={thumbnailItemsPerSlide} grid={ thumbnailSliderLayout === "thumbnail-slider-layout-five" ? { rows: 2, fill: "row" } : false } freeMode={true} watchSlidesProgress={true} touchStartPreventDefault={false} modules={[FreeMode, Navigation, Pagination, Thumbs, Grid]} className={`sp-smart-post-swiper2 ${ !["thumbnail-slider-layout-three", "thumbnail-slider-layout-four"].includes( thumbnailSliderLayout ) ? "sp-smart-post-background-layout" : "" }`} direction={ deviceType === "Desktop" && ["left", "right"].includes(postThumbnailPosition) ? "vertical" : "horizontal" } slideToClickedSlide={true} > {posts?.map((post, index) => { return ( ); })} )}
{carouselPaginationDot && carouselPaginationStyle !== "scrollbar" && ( )}
); }; export default Render;