'Beranda', ])] class Index extends Component { use WithPagination; public array $testimonials = []; public array $bestSellingPerfumes = []; public array $brands = []; public array $perfumeFeatures = []; public array $faqs = []; public array $whyChooseUs = []; public int $totalMembersCount = 0; public string $formattedTotalMembersCount = ''; public array $latestMembers = []; public function mount(): void { $this->testimonials = Testimonial::with(['user', 'user.customer']) ->show() ->latest() ->take(5) ->get() ->map(function (Testimonial $testimonial) { $name = $testimonial->user->customer->name ?? 'User'; $testimonial->customer_name = $name; $testimonial->avatar_url = 'https://ui-avatars.com/api/?name='.urlencode($name).'&background=random&color=fff'; return $testimonial; }) ->toArray(); $this->bestSellingPerfumes = Perfume::withSum(['items' => function ($query) { $query->whereHas('order', function ($q) { $q->paid(); }); }], 'quantity') ->orderByDesc('items_sum_quantity') ->take(5) ->get() ->map(function (Perfume $perfume) { $perfume->image = $perfume->getFirstMediaUrl('image') ?: asset('assets/images/logo.png'); $perfume->concentration_label = $perfume->concentration->label(); $perfume->formatted_price = formatCurrencyNumber($perfume->sale_price, 'Rp'); $perfume->formatted_sold_count = formatCurrencyNumber($perfume->items_sum_quantity); return $perfume; }) ->filter(fn (Perfume $perfume) => $perfume->items_sum_quantity > 0) ->toArray(); $this->brands = Brand::orderBy('sort_order') ->get() ->map(function (Brand $brand) { $brand->image = $brand->getFirstMediaUrl('image') ?: asset('assets/images/dark-logo.png'); return $brand; }) ->toArray(); $this->whyChooseUs = ChooseUs::orderBy('sort_order')->get()->toArray(); $this->perfumeFeatures = PerfumeFeature::orderBy('sort_order')->get()->toArray(); $this->faqs = Faq::orderBy('sort_order')->get()->toArray(); $this->totalMembersCount = Customer::count(); $this->formattedTotalMembersCount = number_format($this->totalMembersCount); $this->latestMembers = Customer::whereNotNull('user_id') ->inRandomOrder() ->take(3) ->get() ->map(function (Customer $member) { $member->avatar_url = 'https://ui-avatars.com/api/?name='.urlencode($member->name).'&background=random&color=fff'; return $member; }) ->toArray(); } public function render(): View { return view('livewire.home.index', [ 'pageTitle' => 'Selamat Datang! ✨', 'categories' => Category::perfume() ->orderBy('sort_order') ->paginate(12) ->through(function (Category $category) { $category->image = $category->getFirstMediaUrl('image') ?: asset('assets/images/logo.png'); return $category; }), ]); } }