portfolio loading updated
This commit is contained in:
parent
4a8a46f3d9
commit
f0d1cf08ac
@ -1,6 +1,6 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { useState } from "react";
|
import { useState, useEffect, useRef } from "react";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { PortfolioData } from "@/utils/constant.utils";
|
import { PortfolioData } from "@/utils/constant.utils";
|
||||||
@ -18,12 +18,39 @@ const tabs = [
|
|||||||
|
|
||||||
const CaseStudies = () => {
|
const CaseStudies = () => {
|
||||||
const [activeTab, setActiveTab] = useState("*");
|
const [activeTab, setActiveTab] = useState("*");
|
||||||
|
const [visibleCount, setVisibleCount] = useState(6);
|
||||||
|
const observerRef = useRef(null);
|
||||||
|
|
||||||
const filteredItems =
|
const filteredItems =
|
||||||
activeTab === "*"
|
activeTab === "*"
|
||||||
? PortfolioData
|
? PortfolioData
|
||||||
: PortfolioData.filter((item) => item.category === activeTab);
|
: PortfolioData.filter((item) => item.category === activeTab);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setVisibleCount(6);
|
||||||
|
}, [activeTab]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const observer = new IntersectionObserver(
|
||||||
|
(entries) => {
|
||||||
|
if (entries[0].isIntersecting) {
|
||||||
|
setVisibleCount((prev) => prev + 6);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ threshold: 0.1 }
|
||||||
|
);
|
||||||
|
|
||||||
|
if (observerRef.current) {
|
||||||
|
observer.observe(observerRef.current);
|
||||||
|
}
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
if (observerRef.current) {
|
||||||
|
observer.unobserve(observerRef.current);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}, [filteredItems]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{/* Title Section */}
|
{/* Title Section */}
|
||||||
@ -82,7 +109,7 @@ const CaseStudies = () => {
|
|||||||
|
|
||||||
{/* Portfolio Grid */}
|
{/* Portfolio Grid */}
|
||||||
<div className="row image_load">
|
<div className="row image_load">
|
||||||
{filteredItems.map((item) => (
|
{filteredItems.slice(0, visibleCount).map((item) => (
|
||||||
<div
|
<div
|
||||||
key={item.id}
|
key={item.id}
|
||||||
className={`${item.colClass} grid-item ${item.category} ${item.itemClass || ""}`}
|
className={`${item.colClass} grid-item ${item.category} ${item.itemClass || ""}`}
|
||||||
@ -188,6 +215,12 @@ const CaseStudies = () => {
|
|||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* Sentinel Element for Infinite Scroll */}
|
||||||
|
<div
|
||||||
|
ref={observerRef}
|
||||||
|
style={{ height: "20px", marginBottom: "20px" }}
|
||||||
|
></div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user