import { formatCurrency } from '@/lib/formatters'; import { Link, router } from '@inertiajs/react'; import { ArrowRight, Facebook, Instagram, Search, X } from 'lucide-react'; import { useEffect, useState } from 'react'; export default function Homepage({ categories = [], bestSellers, topSellingProducts = [] }: { categories: any[], bestSellers: any, topSellingProducts: any[] }) { 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(''); useEffect(() => { const timer = setTimeout(() => { router.get(window.location.pathname, { search, category: selectedCategorySlug }, { preserveState: true, preserveScroll: true, only: ['bestSellers'], onSuccess: (page: any) => { setAllProducts(page.props.bestSellers.data); } }); }, 500); return () => clearTimeout(timer); }, [search]); useEffect(() => { router.get(window.location.pathname, { search, category: selectedCategorySlug }, { 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)}

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

Produk tidak ditemukan

Coba gunakan kata kunci lain atau periksa ejaan Anda.

)}
{bestSellers.next_page_url && (
)}
{/* How To Order Section */}
{[ { step: "01", title: "Pilih Product", desc: "Temukan koleksi kemeja terbaik kami yang sesuai dengan gaya Anda." }, { step: "02", title: "Hubungi Kami", desc: "Konfirmasi pesanan melalui WhatsApp dengan detail ukuran dan warna." }, { step: "03", title: "Pengiriman", desc: "Pesanan akan dikemas eksklusif dan dikirim langsung ke alamat Anda." } ].map((item, idx) => (
{item.step}

{item.title}

{item.desc}

))}
{/* 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.

scrollToSection(e, '#aboutUs')} className="text-[10px] font-bold uppercase tracking-widest underline underline-offset-8 hover:opacity-70 transition-all"> Baca Selengkapnya...
Brand
{/* Decorative shirt at bottom right like in image */}
Shirt detail
{/* Footer */}
{/* Brand Info */}
VN Grup

Menghadirkan produk esensial yang tak lekang oleh waktu dengan fokus pada kualitas, keberlanjutan, dan gaya yang abadi sejak 2026.

{/* Quick Links */}

Navigation

  • Beranda
  • Produk
  • Cara Pesan
  • Tentang Kami
{/* Collections */}

Koleksi

  • Kemeja Casual
  • Kemeja Flanel
  • Kemeja Oxford
  • Kemeja Polos
{/* Newsletter */}

Buletin

Dapatkan penawaran eksklusif dan berita terbaru.

{/* Bottom Bar */}

© 2026 VN Grup.

{/* Mobile Menu Overlay */} {isMenuOpen && (
)} {/* Product Detail Modal */}
setSelectedProduct(null)}>
{/* Product Images */}
{selectedProduct?.name}
{/* Image Gallery if exists */} {selectedProduct?.images_data?.length > 0 && (
{selectedProduct.images_data.map((img: any, i: number) => (
detail
))}
)}
{/* 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.'}

); }