// 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 (
Celebrating Excellence & Achievements
Loading gallery items...
) : filteredItems.length === 0 ? (No items available in this category.
) : ({item.caption || "No caption available"}
{item.date && ({new Date(item.date).toLocaleDateString()}
)}{selectedItem.caption}
{selectedItem.date && ({new Date(selectedItem.date).toLocaleDateString()}
)}