Blame view

components/listing/LetDiscover.js 8.96 KB
Ravindra Kanojiya committed
1
import Image from "next/image";
jaymehta committed
2
import React, { useEffect, useState } from "react";
3
import { zoomIn, slideFromRight } from "../animationvariants.js";
Ravindra Kanojiya committed
4 5 6 7 8 9 10
import { Swiper, SwiperSlide } from "swiper/react";
import { Navigation, Autoplay } from "swiper/modules";
import { motion } from "framer-motion";
// Import Swiper styles
import "swiper/css";
import "swiper/css/pagination";
import "swiper/css/navigation";
jaymehta committed
11 12 13 14 15
import { cleanImage } from "../../services/imageHandling.js";
import { useRouter } from "next/router.js";
import { Loader } from "react-bootstrap-typeahead";
import { useDispatch, useSelector } from "react-redux";
import { getSubCategoriesByCategoryId } from "../../redux/actions/categoriesAction.js";
16
import { getActivitiesByFilters, setActivityFilters } from "../../redux/actions/activityAction.js";
jaymehta committed
17 18 19 20 21 22
import SubCategoryChips from "./SubCategoryChips.js";
const LetDiscover = ({ categories }) => {
  const { subCategories, loading } = useSelector(sate => sate.subCategories);
  const { activityFilters } = useSelector(sate => sate.activityFilters);
  const router = useRouter();
  const dispatch = useDispatch();
23
  const [activeIndex, setActiveIndex] = useState(null);
jaymehta committed
24 25 26 27 28 29
  // const [loading, setloading] = useState(null);
  console.log("categories", categories);
  console.log("subCategories", subCategories);
  console.log("activityFilters", activityFilters);
  const handleTitleClick = ({ index, data }) => {
    // setloading(true);
30 31 32 33 34
    // Check if the clicked index is already active
    if (activeIndex === index) {
      return; // Do nothing if it's already active
    }
    // Toggle the active index if it's different from the clicked index
35
    // console.log("activeIndex",activeIndex, index);
36
    setActiveIndex(index);
jaymehta committed
37
    // setloading(false);
38
  };
jaymehta committed
39

jaymehta committed
40 41 42
  // useEffect(() => {
  //   dispatch(getSubCategoriesByCategoryId(router.query.category));
  // }, [router]);
.  
jaymehta committed
43 44
  useEffect(() => {
    console.log("router.query.category", router.query.category);
.  
jaymehta committed
45
    // console.log("getting id to filtered categoryiiiiiiiiiiifsdkhdjkskiiiiiiiiiiiiiiiiiiiiiiiii", parseInt(router.query.category))
46

.  
jaymehta committed
47
    if (router.query.category) {
48 49 50 51 52 53
      dispatch(setActivityFilters({ filters: { category: Number(router.query.category), subCategories: [] } }));
      setActiveIndex((parseInt(router.query.category)));
      dispatch(getSubCategoriesByCategoryId(parseInt(router.query.category)));
      dispatch(getActivitiesByFilters({ category: { id: { $eq: Number(router.query.category) } } }));
      console.log("router >>",router.query.category);
      setActiveIndex(Number(router.query.category))
.  
jaymehta committed
54 55
    }
  }, []);
56

57 58 59 60 61 62 63
  const [showCloseIcon, setShowCloseIcon] = useState({});
  const handleToggleCloseIcon = index => {
    setShowCloseIcon(prevShowCloseIcon => ({
      ...prevShowCloseIcon,
      [index]: !prevShowCloseIcon[index]
    }));
  };
jaymehta committed
64
  console.log("showCloseIcon", showCloseIcon);
Ravindra Kanojiya committed
65 66 67
  return (
    <>
      <section className="let-discover-session let-discover-listing-session">
68
        <div className="container-fluid">
Ravindra Kanojiya committed
69 70 71 72 73 74
          <div className="row">
            <div className="col-12">
              {/* <motion.div variants={slideFromRight(0.4)} initial={"hidden"} whileInView={"show"} viewport={{ once: false, amount: 0.2 }}>
                your text or div will come here
              </motion.div> */}
              <div className="head-btn">
75 76 77 78 79
                <motion.div variants={slideFromRight(0.4)} initial={"hidden"} whileInView={"show"} viewport={{ once: false, amount: 0.2 }}>
                  <div className="head01">
                    <div className="title">Lets </div>
                    <h2>Discover</h2>
                  </div>
Ravindra Kanojiya committed
80 81 82 83 84 85 86 87 88
                </motion.div>
              </div>
            </div>
          </div>
          <div className="row">
            <div className="col-12">
              <div className="let-discover-carousal position-relative">
                <Swiper
                  slidesPerView={3}
Ravindra Kanojiya committed
89 90 91 92 93
                  autoplay={false}
                  // autoplay={{
                  //   delay: 9000,
                  //   disableOnInteraction: false
                  // }}
Ravindra Kanojiya committed
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
                  spaceBetween={10}
                  navigation={{ nextEl: ".letdiscover-arrow-left", prevEl: ".letdiscover-arrow-right" }}
                  breakpoints={{
                    640: {
                      slidesPerView: 3,
                      spaceBetween: 20
                    },
                    768: {
                      slidesPerView: 4,
                      spaceBetween: 20
                    },
                    1024: {
                      slidesPerView: 10,
                      spaceBetween: 20
                    }
                  }}
                  modules={[Navigation, Autoplay]}
                  className="mySwiper01 mySwiper02"
                >
jaymehta committed
113 114 115
                  <SwiperSlide>
                    <motion.div variants={zoomIn("left", 0.3)} initial={"hidden"} whileInView={"show"} viewport={{ once: false, amount: 0.2 }}>
                      <a
.  
jaymehta committed
116
                        className={activeIndex == "All" ? "active" : ""}
jaymehta committed
117 118 119 120 121 122
                        onClick={() => {
                          dispatch(setActivityFilters({ filters: {} }));
                          handleTitleClick({ index: "All" });
                        }}
                      >
                        <span className="image-container">
Chetan committed
123
                          <Image layout="fill" alt="" className="image img-fluid" src={"/images/discover/01.webp"} />
jaymehta committed
124 125 126 127 128 129 130
                        </span>
                        <div className="title">{"All"}</div>
                      </a>
                    </motion.div>
                  </SwiperSlide>
                  {categories &&
                    categories.data.map((data, index) => {
131
                      const isActive = activeIndex === data.id;
Ravindra Kanojiya committed
132
                      return (
jaymehta committed
133 134 135 136 137 138 139 140 141
                        <>
                          <SwiperSlide>
                            <motion.div variants={zoomIn("left", 0.3)} initial={"hidden"} whileInView={"show"} viewport={{ once: false, amount: 0.2 }}>
                              <a
                                className={isActive ? "active" : ""}
                                onClick={async () => {
                                  // router.push(`?category=${data.id}`);
                                  dispatch(setActivityFilters({ filters: { ...activityFilters, category: data.id, subCategories: [] } }));
                                  dispatch(getSubCategoriesByCategoryId(data.id));
142
                                  handleTitleClick({ index: data.id, data });
jaymehta committed
143 144 145
                                }}
                              >
                                <span className="image-container">
.  
jaymehta committed
146
                                  <img layout="fill" alt="" className="image img-fluid" src={cleanImage(data?.attributes?.image?.data?.attributes)} />
jaymehta committed
147 148 149 150 151 152
                                </span>
                                <div className="title">{data.attributes.name}</div>
                              </a>
                            </motion.div>
                          </SwiperSlide>
                        </>
Ravindra Kanojiya committed
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
                      );
                    })}
                </Swiper>
                <div className="swiper-nav">
                  <div className="navbutton d-flex justify-content-between ">
                    <button className="letdiscover-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="letdiscover-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>
173
          <div className="row">
jaymehta committed
174 175 176
            <div className="col-12 text-center">
              {!loading ? (
                <div className="sub-categories">
.  
jaymehta committed
177 178
                  {activityFilters.category &&
                    subCategories &&
jaymehta committed
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
                    subCategories.data.map((data, index) => (
                      <SubCategoryChips key={index} data={data} />
                      // <a key={index} onClick={() => handleToggleCloseIcon(index)}>
                      //   <span>{data.attributes.name}</span>
                      //   {showCloseIcon[index] && (
                      //     <span className="image-container">
                      //       <Image layout="fill" alt="image" className="image" src="/images/icons/close-button.svg" />
                      //     </span>
                      //   )}
                      // </a>
                    ))}
                </div>
              ) : (
                <Loader />
              )}
194 195
            </div>
          </div>
Ravindra Kanojiya committed
196 197 198 199 200 201 202
        </div>
      </section>
    </>
  );
};

export default LetDiscover;