63 lines
2.0 KiB
PHP
63 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Home;
|
|
|
|
use App\Models\Outlet as OutletModel;
|
|
use Illuminate\Contracts\View\View;
|
|
use Livewire\Attributes\Layout;
|
|
use Livewire\Component;
|
|
|
|
#[Layout('components.layouts.home', [
|
|
'title' => 'Outlet',
|
|
])]
|
|
class Outlet extends Component
|
|
{
|
|
public string $search = '';
|
|
|
|
public ?OutletModel $selectedOutlet = null;
|
|
|
|
public function showDetail(OutletModel $outletModel): void
|
|
{
|
|
$this->selectedOutlet = $outletModel;
|
|
$this->selectedOutlet->load(['openingHours' => function ($query) {
|
|
$query->orderBy('day');
|
|
}]);
|
|
$this->selectedOutlet->openingHours->each(function ($hour) {
|
|
$hour->formatted_open_time = \Carbon\Carbon::parse($hour->open_time)->format('H:i');
|
|
$hour->formatted_close_time = \Carbon\Carbon::parse($hour->close_time)->format('H:i');
|
|
});
|
|
}
|
|
|
|
public function closeModal(): void
|
|
{
|
|
$this->selectedOutlet = null;
|
|
}
|
|
|
|
public function render(): View
|
|
{
|
|
$outlets = OutletModel::with(['facilities', 'openingHours'])
|
|
->operational()
|
|
->when($this->search, function ($query) {
|
|
$query->where(function ($query) {
|
|
$query->where('name', 'like', '%'.$this->search.'%')
|
|
->orWhere('address', 'like', '%'.$this->search.'%');
|
|
});
|
|
})
|
|
->latest()
|
|
->get()
|
|
->map(function ($outlet) {
|
|
$outlet->image = $outlet->getFirstMediaUrl('featured_image') ?: asset('assets/images/dark-logo.png');
|
|
$outlet->status_label = $outlet->status->label();
|
|
$outlet->status_color = $outlet->status->color();
|
|
|
|
return $outlet;
|
|
});
|
|
|
|
return view('livewire.home.outlets', [
|
|
'pageTitle' => 'Outlet Terdekat ✨',
|
|
'pageDesc' => 'Temukan outlet kami di sekitarmu dan rasakan langsung kemewahan aromanya! 🚗🏢',
|
|
'outlets' => $outlets,
|
|
]);
|
|
}
|
|
}
|