/* eslint-disable import/no-unresolved */ import { useEffect, useRef, useState } from "@wordpress/element"; import { Swiper, SwiperSlide } from "swiper/react"; import { buildFontClasses, useDeviceType } from "../../controls/controls"; import { Autoplay, EffectCoverflow, EffectCube, EffectFade, EffectFlip, FreeMode, Grid, Keyboard, Mousewheel, Navigation, Pagination, Scrollbar, Thumbs, Controller, } from "swiper/modules"; import TemplateOne from "../shared/templates/templateCards/templateOne"; import { SwiperNavButton } 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 "swiper/css/controller"; import classNames from "classnames"; import ThumbsTemplate from "../shared/templates/templateCards/thumbsTemplate"; import { ProTopBar } from "../shared/helpFn"; const Render = ({ posts, attributes, pageType = "frontend" }) => { const { dynamicClassNames, carouselPauseOnHover, carouselArrowStyle, // thumbnailTwoNavArrow, carouselAutoPlay, carouselAutoPlayDelay, carouselDirection, carouselSpeed, thumbnailTwoSlideToScroll, thumbnailTwoAnimationEffect, thumbnailTwoTabKeyNavigation, thumbnailTwoMouseWheelControl, thumbnailTwoAdaptiveHeight, thumbnailTwoFreeScrollMode, thumbnailSliderTwoLayout, contentVerticalPosition, thumbnailTwoPosition, currentScreen, infiniteLoop, navArrowVisibilityOnHover, thumbnailItemsToShow, thumbnailSliderTwoHeight, thumbnailTwoItemsHeight, thumbnailProgressPosition, blockLayoutName, thumbnailTwoAlignment, catTabCategoryPosition, carouselNavArrow, blockName, } = attributes; const [thumbsSwiper, setThumbsSwiper] = useState(null); const [mainSwiper, setMainSwiper] = useState(null); const isInitialize = useRef(false); const swiperNevNextRef = useRef(null); const swiperNevPrevRef = useRef(null); const containerRef = useRef(null); const [selectedPostId, setSelectedPostId] = useState(null); const deviceType = useDeviceType(); const thumbnailsSlidePerGroups = thumbnailTwoSlideToScroll?.device?.[deviceType]; const bgPosition = "center"; const backgroundSize = "cover"; // const { Desktop: desktopScroll, Tablet: tabletScroll, Mobile: mobileScroll } = thumbnailTwoSlideToScroll.device; const cardHeightClass = classNames(buildFontClasses("height", thumbnailSliderTwoHeight)); // const thumbsHeight = ["thumbnail-slider-two-layout-four", "thumbnail-slider-two-layout-five"].includes( // blockLayoutName // ) // ? "auto" // : thumbnailTwoItemsHeight.device[currentScreen] + thumbnailTwoItemsHeight.unit[currentScreen]; const thumbnailItemsPerSlide = thumbnailItemsToShow.device?.[deviceType]; const thumbPosts = [...posts, ...posts.slice(0, thumbnailItemsPerSlide)]; const thumbsGap = (layout) => { const thumbsConfig = { "thumbnail-slider-two-layout-one": 0, "thumbnail-slider-two-layout-two": 48, "thumbnail-slider-two-layout-three": 20, "thumbnail-slider-two-layout-four": 12, "thumbnail-slider-two-layout-five": 24, }; return thumbsConfig[layout]; }; const handleMainSlideChange = (swiper) => { if (thumbnailSliderTwoLayout !== "thumbnail-slider-two-layout-three") { return; } if (!thumbsSwiper || thumbsSwiper.destroyed) { return; } const realIndex = swiper.realIndex; let thumbIndex; // if ( realIndex > posts?.length - (thumbnailItemsPerSlide + 1) ) { if (realIndex > posts?.length - 1) { thumbIndex = 1; } else { thumbIndex = realIndex + 1; } if (thumbsSwiper.activeIndex !== thumbIndex) { thumbsSwiper.slideTo(thumbIndex); } }; const thumbnailsContentItem = ["thumbnail-slider-two-layout-one", "thumbnail-slider-two-layout-two"].includes( thumbnailSliderTwoLayout ) ? ["title"] : ["image", "taxonomy", "title"]; useEffect(() => { if (thumbnailSliderTwoLayout === "thumbnail-slider-two-layout-three") { if (thumbsSwiper && !isInitialize.current) { thumbsSwiper.slideTo(1, 0); isInitialize.current = true; } } }, [thumbsSwiper, thumbnailSliderTwoLayout, deviceType]); useEffect(() => { if (thumbnailSliderTwoLayout === "thumbnail-slider-two-layout-three") { if (mainSwiper?.controller && thumbsSwiper) { mainSwiper.controller.control = thumbsSwiper; } } }, [mainSwiper?.controller, thumbsSwiper, thumbnailSliderTwoLayout, deviceType]); useEffect(() => { if (mainSwiper && !mainSwiper.destroyed) { handleMainSlideChange(mainSwiper); } }, [mainSwiper]); 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 && ( {posts?.map((post, i) => { return ( setSelectedPostId(post?.post_id)} /> ); })} )} {carouselNavArrow && ( )}
1} // loop={ false } spaceBetween={thumbsGap(thumbnailSliderTwoLayout)} slidesPerView={thumbnailItemsPerSlide} freeMode={true} watchSlidesProgress={true} touchStartPreventDefault={false} modules={[FreeMode, Navigation, Pagination, Thumbs, Grid, Controller]} className="sp-smart-post-swiper2 sp-smart-post-background-layout" direction={ !["thumbnail-slider-two-layout-one", "thumbnail-slider-two-layout-three"].includes( thumbnailSliderTwoLayout ) && ["left", "right"].includes(thumbnailTwoPosition) ? "vertical" : "horizontal" } slideToClickedSlide={true} > {/* Thumbnails Thumbs */} {thumbPosts?.map((post, index) => { return ( ); })}
); }; export default Render;