From f874c364866449e66a688b611e407973371943dc Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Fri, 5 Dec 2025 19:07:26 +0700 Subject: [PATCH] refactor(voucher): menyesuaikanroute dan penempatan file di dalam folder, serta membuat fungsi untuk voucher --- app/Livewire/Home/Voucher.php | 79 +++++++++++++ app/Livewire/Home/Voucher/Index.php | 17 --- app/Providers/ViewServiceProvider.php | 4 +- .../index.blade.php => vouchers.blade.php} | 104 ++++-------------- routes/pages/home.php | 8 +- 5 files changed, 104 insertions(+), 108 deletions(-) create mode 100644 app/Livewire/Home/Voucher.php delete mode 100644 app/Livewire/Home/Voucher/Index.php rename resources/views/livewire/home/{voucher/index.blade.php => vouchers.blade.php} (54%) diff --git a/app/Livewire/Home/Voucher.php b/app/Livewire/Home/Voucher.php new file mode 100644 index 0000000..215583f --- /dev/null +++ b/app/Livewire/Home/Voucher.php @@ -0,0 +1,79 @@ + 'Voucher', +])] +class Voucher extends Component +{ + use WithPagination; + + public $outlets; + + public string $search = ''; + + public ?string $outlet_id = null; + + public ?string $sort = null; + + public function mount() + { + $this->outlets = Outlet::query()->operational()->pluck('name', 'id'); + } + + public function updatedSearch() + { + $this->resetPage(); + } + + public function updatedOutletId() + { + $this->resetPage(); + } + + public function updatedSort() + { + $this->resetPage(); + } + + public function render() + { + $vouchers = VoucherModel::where(function ($query) { + $query->where('name', 'like', '%'.$this->search.'%') + ->orWhere('code', 'like', '%'.$this->search.'%'); + }) + ->when($this->outlet_id, function ($query) { + $query->whereHas('outlets', function ($q) { + $q->where('outlets.id', $this->outlet_id); + }); + }) + ->when($this->sort, function ($query) { + match ($this->sort) { + 'latest' => $query->orderBy('created_at', 'desc'), + 'biggest' => $query->orderBy('discount_amount', 'desc'), + 'ending-soon' => $query->orderByRaw('end_date IS NULL') + ->orderBy('end_date', 'asc'), + }; + }) + ->active() + ->latest() + ->paginate(3) + ->through(function (VoucherModel $voucher) { + $voucher->min_purchase_formatted = currency($voucher->min_purchase, 'Rp'); + $voucher->end_date = formatDate($voucher->end_date); + + return $voucher; + }); + + return view('livewire.home.vouchers', [ + 'vouchers' => $vouchers, + ]); + } +} diff --git a/app/Livewire/Home/Voucher/Index.php b/app/Livewire/Home/Voucher/Index.php deleted file mode 100644 index 8aca4e9..0000000 --- a/app/Livewire/Home/Voucher/Index.php +++ /dev/null @@ -1,17 +0,0 @@ - 'Voucher', -])] -class Index extends Component -{ - public function render() - { - return view('livewire.home.voucher.index'); - } -} diff --git a/app/Providers/ViewServiceProvider.php b/app/Providers/ViewServiceProvider.php index 8a84d39..028a2f5 100644 --- a/app/Providers/ViewServiceProvider.php +++ b/app/Providers/ViewServiceProvider.php @@ -300,8 +300,8 @@ public function boot(): void [ 'title' => 'Voucher', 'type' => 'link', - 'route' => 'voucher.index', - 'match' => 'voucher.*', + 'route' => 'voucher', + 'match' => 'voucher', ], [ 'title' => 'Artikel', diff --git a/resources/views/livewire/home/voucher/index.blade.php b/resources/views/livewire/home/vouchers.blade.php similarity index 54% rename from resources/views/livewire/home/voucher/index.blade.php rename to resources/views/livewire/home/vouchers.blade.php index 63376e7..3b6db2b 100644 --- a/resources/views/livewire/home/voucher/index.blade.php +++ b/resources/views/livewire/home/vouchers.blade.php @@ -13,21 +13,21 @@ - - -