// src/pages/Gallery.jsx import React, { useState, useEffect, useRef } from "react"; import axios from "axios"; import heroBg from "../assets/awards-hero.jpg"; import { FiChevronLeft, FiChevronRight, FiX } from "react-icons/fi"; import "../styles/Gallery.css"; const Gallery = () => { const [activeCategory, setActiveCategory] = useState("Awards & Achievements"); const [galleryItems, setGalleryItems] = useState([]); const [loading, setLoading] = useState(true); const [selectedItem, setSelectedItem] = useState(null); const [currentIndex, setCurrentIndex] = useState(0); const categoryRef = useRef(null); const categories = [ { label: "Awards & Achievements", value: "Awards & Achievements" }, { label: "Client Testimonials", value: "Client Testimonials" }, ]; // Disable right-click useEffect(() => { const handleContextMenu = (e) => e.preventDefault(); document.addEventListener("contextmenu", handleContextMenu); return () => document.removeEventListener("contextmenu", handleContextMenu); }, []); // Fetch gallery items useEffect(() => { const fetchGalleryItems = async () => { try { const response = await axios.get(`${process.env.REACT_APP_API_BASE_URL}/api/gallery`); setGalleryItems(Array.isArray(response.data) ? response.data : []); } catch (error) { console.error("Error fetching gallery items:", error); } finally { setLoading(false); } }; fetchGalleryItems(); }, []); // Scroll to categories if hash exists useEffect(() => { if (window.location.hash === "#categories" && categoryRef.current) { setTimeout(() => { categoryRef.current.scrollIntoView({ behavior: "smooth", block: "start" }); }, 200); } }, []); const filteredItems = galleryItems.filter( (item) => item.category === activeCategory ); const openLightbox = (item, index) => { setSelectedItem(item); setCurrentIndex(index); }; const navigateLightbox = (direction) => { const items = filteredItems; let newIndex; if (direction === "prev") { newIndex = (currentIndex - 1 + items.length) % items.length; } else { newIndex = (currentIndex + 1) % items.length; } setSelectedItem(items[newIndex]); setCurrentIndex(newIndex); }; return (
{/* Hero Section */}

Our Awards

Celebrating Excellence & Achievements

{/* Category Buttons */}
{categories.map((category) => { const isSelected = activeCategory === category.value; return ( ); })}
{/* Gallery Grid */}
{loading ? (

Loading gallery items...

) : filteredItems.length === 0 ? (

No items available in this category.

) : (
{filteredItems.map((item, index) => (
{item.type === "image" ? ( {item.caption openLightbox(item, index)} draggable="false" onDragStart={(e) => e.preventDefault()} /> ) : ( )}

{item.caption || "No caption available"}

{item.date && (

{new Date(item.date).toLocaleDateString()}

)}
))}
)}
{/* Lightbox Overlay */} {selectedItem && (
setSelectedItem(null)} > {/* Close */} {/* Previous */} {/* Content */}
e.stopPropagation()}> {selectedItem.type === "image" ? (
{selectedItem.caption e.preventDefault()} /> {/* Watermark */}
SAMPLE WATERMARK
) : ( )}

{selectedItem.caption}

{selectedItem.date && (

{new Date(selectedItem.date).toLocaleDateString()}

)}
{/* Next */}
)}
); }; export default Gallery;