import { formatCurrency } from '@/lib/formatters'; import { Link, router } from '@inertiajs/react'; import { ArrowRight, Facebook, Instagram, Phone, Search, X } from 'lucide-react'; import { useEffect, useState } from 'react'; import { GeneralSetting } from '@/types/general-setting'; export default function Homepage({ categories = [], bestSellers, topSellingProducts = [], setting }: { categories: any[], bestSellers: any, topSellingProducts: any[], setting: GeneralSetting }) { const [isMenuOpen, setIsMenuOpen] = useState(false); const [isScrolled, setIsScrolled] = useState(false); const [selectedProduct, setSelectedProduct] = useState(null); const [allProducts, setAllProducts] = useState(bestSellers.data); const [search, setSearch] = useState(''); const [selectedCategorySlug, setSelectedCategorySlug] = useState(''); const [activeModalImage, setActiveModalImage] = useState(null); useEffect(() => { if (selectedProduct) { setActiveModalImage(selectedProduct?.thumbnail_url); } }, [selectedProduct]); useEffect(() => { const timer = setTimeout(() => { const params: any = {}; if (search) params.search = search; if (selectedCategorySlug) params.category = selectedCategorySlug; router.get(window.location.pathname, params, { preserveState: true, preserveScroll: true, only: ['bestSellers'], onSuccess: (page: any) => { setAllProducts(page.props.bestSellers.data); } }); }, 500); return () => clearTimeout(timer); }, [search]); useEffect(() => { const params: any = {}; if (search) params.search = search; if (selectedCategorySlug) params.category = selectedCategorySlug; router.get(window.location.pathname, params, { preserveState: true, preserveScroll: true, only: ['bestSellers'], onSuccess: (page: any) => { setAllProducts(page.props.bestSellers.data); } }); }, [selectedCategorySlug]); useEffect(() => { if (bestSellers.current_page > 1) { setAllProducts(prev => { // Prevent duplicates if data already exists const existingIds = new Set(prev.map(p => p.id)); const newProducts = bestSellers.data.filter((p: any) => !existingIds.has(p.id)); return [...prev, ...newProducts]; }); } }, [bestSellers]); const loadMore = () => { if (bestSellers.next_page_url) { router.get(bestSellers.next_page_url, {}, { preserveState: true, preserveScroll: true, only: ['bestSellers'], }); } }; useEffect(() => { const handleScroll = () => { setIsScrolled(window.scrollY > 20); }; window.addEventListener('scroll', handleScroll); // Smooth scroll for anchor links const observerOptions = { threshold: 0.1 }; const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('opacity-100', 'translate-y-0'); entry.target.classList.remove('opacity-0', 'translate-y-10'); } }); }, observerOptions); document.querySelectorAll('section').forEach(section => { section.classList.add('transition-all', 'duration-1000', 'opacity-0', 'translate-y-10'); observer.observe(section); }); return () => { window.removeEventListener('scroll', handleScroll); observer.disconnect(); }; }, []); const scrollToSection = (e: React.MouseEvent, id: string) => { e.preventDefault(); const element = document.querySelector(id); if (element) { element.scrollIntoView({ behavior: 'smooth' }); setIsMenuOpen(false); } }; return ( <>
{/* Navbar */}
{/* Hero Section */}
{/* Categories List */}
{categories.map((cat: any) => ( ))} {categories.length === 0 && (

Belum ada kategori

)}
{/* Diagonal decorative lines like in the image */}

Ikuti Kami

{/* Hero Image */}
Model
{/* Hero Text */}

Keahlian
Yang Abadi

Tingkatkan gaya harian Anda dengan koleksi esensial yang dibuat dengan ketelitian dan kualitas tinggi. Mulai dari bahan berkelanjutan hingga desain yang tak lekang oleh waktu.

scrollToSection(e, '#product')} className="inline-block bg-[#1e4a6d] px-8 py-3 text-[10px] font-bold uppercase tracking-[0.2em] text-white transition-all hover:bg-[#15344e]"> Jelajahi Sekarang
{topSellingProducts.map((product, i) => (
setSelectedProduct(product)} > {product.name}
))} {topSellingProducts.length === 0 && (
{[1, 2, 3].map(i => (
))}
)}
{/* Best Sellers Section */}

Produk Terlaris

{/* Category Filter */}
{/* Search Input */}
setSearch(e.target.value)} className="border border-[#1e4a6d]/20 bg-transparent py-2 pl-10 pr-4 text-[10px] font-bold uppercase tracking-widest outline-none transition-all focus:border-[#1e4a6d] w-full sm:w-[200px]" />
{/* Full-width borders wrapper */}
{allProducts.map((item, idx) => (
setSelectedProduct(item)} > {item.name}
{item.categories?.map((c: any) => ( {c.name} ))}

{item.name}

{formatCurrency(item.retail_price)}

Pesan Sekarang
))} {allProducts.length === 0 && (

Produk tidak ditemukan

Coba gunakan kata kunci lain atau periksa ejaan Anda.

)}
{bestSellers.next_page_url && (
)}
{/* Brand Section */}

Tentang Kami

Menghadirkan produk esensial untuk setiap momen berharga Anda. Dibuat dengan penuh perhatian, dirancang untuk bertahan lama. Menghargai kesederhanaan, mendefinisikan ulang gaya hidup.

Keahlian tangan terbaik dalam setiap jahitan. Kain berkualitas yang memanjakan, daya tarik abadi sepanjang masa. Bagi mereka yang menghargai seni berpakaian yang sesungguhnya.

Brand
{/* Decorative shirt at bottom right like in image */}
Shirt detail
{/* Footer */} {/* Mobile Menu Overlay */} {isMenuOpen && ( )} {/* Product Detail Modal */}
setSelectedProduct(null)}>
{/* Product Images */}
{selectedProduct?.name} {/* Blueprint overlay decoration */}
DET_V.1.0
{/* Refined Image Gallery List */}

Galeri Foto

{/* Thumbnail (Main Image) */}
setActiveModalImage(selectedProduct?.thumbnail_url)} className={`relative aspect-square w-14 cursor-pointer overflow-hidden transition-all duration-300 ${activeModalImage === selectedProduct?.thumbnail_url ? 'ring-1 ring-[#1e4a6d] ring-offset-2' : 'opacity-40 hover:opacity-100' }`} > main
{/* Additional Images */} {selectedProduct?.images_data?.map((img: any, i: number) => (
setActiveModalImage(img.url)} className={`relative aspect-square w-14 cursor-pointer overflow-hidden transition-all duration-300 ${activeModalImage === img.url ? 'ring-1 ring-[#1e4a6d] ring-offset-2' : 'opacity-40 hover:opacity-100' }`} > {`view
))}
{/* Product Info */}
{selectedProduct?.categories?.map((c: any) => ( {c.name} ))}

{selectedProduct?.name}

{formatCurrency(selectedProduct?.retail_price || 0)}

Deskripsi

{selectedProduct?.description || 'Tidak ada deskripsi untuk produk ini.'}

); }