From f8d6c495fccc12cdd3e9520277054b6da17653a7 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Fri, 24 Apr 2026 21:22:55 +0700 Subject: [PATCH] feat: integrate GeneralSettings into homepage for dynamic display of logo, description, address, and contact information --- app/Http/Controllers/HomepageController.php | 2 ++ resources/js/pages/homepage.tsx | 25 ++++++++++----------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/app/Http/Controllers/HomepageController.php b/app/Http/Controllers/HomepageController.php index e911083..4660532 100644 --- a/app/Http/Controllers/HomepageController.php +++ b/app/Http/Controllers/HomepageController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Models\Category; +use App\Models\GeneralSetting; use App\Models\Product; class HomepageController extends Controller @@ -13,6 +14,7 @@ public function __invoke() $categorySlug = request('category'); return inertia('homepage', [ + 'setting' => GeneralSetting::first(), 'categories' => Category::active()->get(), 'bestSellers' => Product::with(['categories' => fn ($q) => $q->active(), 'prices']) ->when($search, function ($query, $search) { diff --git a/resources/js/pages/homepage.tsx b/resources/js/pages/homepage.tsx index 684cd65..d45f4cf 100644 --- a/resources/js/pages/homepage.tsx +++ b/resources/js/pages/homepage.tsx @@ -2,8 +2,9 @@ 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 = [] }: { categories: any[], bestSellers: any, topSellingProducts: any[] }) { +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); @@ -401,12 +402,12 @@ export default function Homepage({ categories = [], bestSellers, topSellingProdu
{/* Brand Info */} -
+
- VN Grup + {setting?.logo_url ? {setting.name} : (setting?.name || 'VN Grup')}
-

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

+ {setting?.description || 'Menghadirkan produk esensial yang tak lekang oleh waktu dengan fokus pada kualitas, keberlanjutan, dan gaya yang abadi.'}

@@ -426,23 +427,21 @@ export default function Homepage({ categories = [], bestSellers, topSellingProdu
{/* Contact Info */} -
+

Kontak

-

- Jl. Raya Utama No. 123,
- Kec. Lengkong, Kota Bandung,
- Jawa Barat 40262 +

+ {setting?.address || 'Jl. Raya Utama No. 123, \n Kec. Lengkong, Kota Bandung, \n Jawa Barat 40262'}

@@ -451,7 +450,7 @@ export default function Homepage({ categories = [], bestSellers, topSellingProdu {/* Bottom Bar */}
-

© 2026 VN Grup.

+

© {new Date().getFullYear()} {setting?.name || 'VN Grup'}.