SimilarExperiences.js 8.38 KB
import dynamic from "next/dynamic";
import Image from "next/image";
import React, { useEffect, useState } from "react";
import { Button } from "react-bootstrap";
import { Swiper, SwiperSlide } from "swiper/react";

import { Navigation, Autoplay } from "swiper/modules";
// Import Swiper styles
import "swiper/css";
import "swiper/css/pagination";
import "swiper/css/navigation";
import { fadeIn, zoomIn, slideFromLeft, slideFromRight } from "../animationvariants.js";
import { motion } from "framer-motion";
import { cleanImage } from "../../services/imageHandling.js";
import { useRouter } from "next/router.js";
import WishlistComponent from "./WIshlistComponent.js";
import { useSelector } from "react-redux";
import ActiveLink from "../common/ActiveLink.js";
const SimilarExperiences = ({ allActivitiesData, activityById }) => {
  const router = useRouter();
  const [listingData, setListingData] = useState([]);
  const { endUser } = useSelector(state => state.endUser);

  let ListingData = [];
  useEffect(() => {
    console.log("allActivitiesData", allActivitiesData);
    ListingData =
      allActivitiesData &&
      allActivitiesData.data.map(item => {
        return {
          id: item.id,
          image: cleanImage(item.attributes.image.data?.attributes),
          topRated: "Top Rated",
          title: item.attributes.name,
          discription: `${item.attributes.description.slice(0, 80)}...`,
          price: item.attributes.pricePerPerson,
          offPrice: `${item.attributes.offers}%`,
          days: "For 1 Night",
          taxes: "Includes taxes & Fees"
        };
      });
    setListingData(ListingData);
  }, [allActivitiesData]);

  const projects = {
    responsive: {
      0: {
        items: 1
      },
      450: {
        items: 1
      },
      600: {
        items: 3
      },
      1000: {
        items: 4
      }
    }
  };
  return (
    <>
      <section className="similar-experiences-session">
        <div className="container">
          <div className="row">
            <div className="col-12">
              <div className="head-btn">
                <motion.div variants={slideFromRight(0.4)} initial={"hidden"} whileInView={"show"} viewport={{ once: false, amount: 0.2 }}>
                  <div className="head01">
                    <div className="title">Similar Experiences</div>
                    <h2>Experiences</h2>
                  </div>
                </motion.div>
                <div className="view-all-btn">
                  <ActiveLink prefetch href={`/listing?category=${activityById?.data.attributes.category?.data?.id}`}>
                    <Button variant="primary">View All</Button>
                  </ActiveLink>

                </div>
              </div>
            </div>
          </div>
          {allActivitiesData && (
            <div className="row">
              <div className="col-12">
                <div className="browse-experiences-carousal position-relative">
                  <Swiper
                    slidesPerView={1}
                    navigation={{ nextEl: ".similar-experiences-arrow-left", prevEl: ".similar-experiences-arrow-right" }}
                    breakpoints={{
                      640: {
                        slidesPerView: 1,
                        spaceBetween: 20
                      },
                      768: {
                        slidesPerView: 2,
                        spaceBetween: 40
                      },
                      1024: {
                        slidesPerView: 4,
                        spaceBetween: 20
                      }
                    }}
                    modules={[Navigation, Autoplay]}
                    className="mySwiper01 mySwiper02"
                  >
                    {listingData &&
                      listingData.map(data => {
                        return (
                          <SwiperSlide>
                            <motion.div variants={zoomIn("left", 0.3)} initial={"hidden"} whileInView={"show"} viewport={{ once: false, amount: 0.2 }}>
                              <div className="browse-experiences-item">
                                <div className="img-wrapper">
                                  <span className="image-container">
                                    <Image layout="fill" alt="" className="image img-fluid" src={data.image} priority />
                                  </span>
                                  {/* <div className="top-rated">{data.topRated}</div> */}
                                </div>
                                <div className="info">
                                  <div className="top-name">
                                    <div className="title">{data.title}</div>
                                    <div className="rating-wishlist">
                                      {/* <div className="rating">
                                      <span className="number">8.8</span>
                                        <span className="image-container">
                                          <Image layout="fill" alt="" className="image img-fluid" src="/images/icons/star.svg" />
                                        </span>
                                      </div> */}
                                      {endUser && <WishlistComponent userId={endUser.id} activityId={data.id} />}
                                      {/* <div className="wishlist">
                                        <span className="image-container">
                                          <Image layout="fill" alt="" className="image img-fluid" src="/images/icons/wishlist.svg" />
                                        </span>
                                      </div> */}
                                    </div>
                                  </div>
                                  <div className="discription">
                                    {data.discription}{" "}
                                    {/* <a
                                      onClick={() => {
                                        router.push(`/activities/${data.id}`);
                                      }}
                                    >
                                      Read More
                                    </a> */}
                                  </div>
                                  <div className="price">
                                    ${data.price}
                                    {/* <span className="off">{data.offPrice} OFF</span> */}
                                  </div>
                                  <div className="detail">
                                    <div className="">{data.days}</div>
                                    <div className="">{data.taxes}</div>
                                  </div>
                                  <div className="explore-now">
                                    <Button
                                      onClick={() => {
                                        router.push(`/activities/${data.id}`);
                                      }}
                                      variant="primary"
                                    >
                                      Explore Now
                                    </Button>
                                  </div>
                                </div>
                              </div>
                            </motion.div>
                          </SwiperSlide>
                        );
                      })}
                  </Swiper>
                  <div className="swiper-nav">
                    <div className="navbutton d-flex justify-content-between ">
                      <button className="similar-experiences-arrow-right arrow">
                        <span className="image-container">
                          <Image layout="fill" alt="" className="image img-fluid" src="/images/icons/arrow-left.svg" />
                        </span>
                      </button>
                      <button className="similar-experiences-arrow-left arrow">
                        <span className="image-container">
                          <Image layout="fill" alt="" className="image img-fluid" src="/images/icons/arrow-right.svg" />
                        </span>
                      </button>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          )}
        </div>
      </section>
    </>
  );
};

export default SimilarExperiences;