Setelah data provinsi berhasil ditampilkan maka sekarang kita akan belajar menampilkan data kota / kabupaten yang terkait dengan data provinsi yang dipilih atau bisa disebut dengan dependent select dropdown.
Langkah 1 - Menambahkan Public Properti
Pertama, kita akan menambahkan public properti di dalam class component, dimana nanti akan berfungsi untuk menyimpan ID kota yang dipilih pada select option.
Silahkan buka file app/Livewire/Web/Checkout/Index.blade.php, kemudian ubah semua kode-nya menjadi seperti berikut ini.
php
<?php
namespace App\Livewire\Web\Checkout;
use Livewire\Component;
use App\Models\Province;
class Index extends Component
{
public $address;
public $province_id;
public $city_id;
public function render()
{
//get provinces
$provinces = Province::query()->get();
return view('livewire.web.checkout.index', compact('provinces'));
}
}
Di atas, kita menambahkan public properti baru.
php
public $city_id;
Langkah 2 - Menampilkan Data Kota / Kabupaten By Provinsi
Sekarang kita akan menampilkan data kota / kabupaten berdasarkan provinsi yang dipilih. Silahkan teman-teman buka file resources/views/livewire/web/checkout/index.blade.php, kemudian ubah semua kode-nya menjadi seperti berikut ini.
typescript
@section('title')
Checkout - Eat Your Favorite Foods
@stop
@section('keywords')
Food Store, Eat Your Favorite Foods
@stop
@section('description')
Checkout - Food Store - Eat Your Favorite Foods
@stop
@section('image')
{{ asset('images/logo.png') }}
@stop
<div>
<div class="container">
<div class="row justify-content-center mt-0" style="margin-bottom: 320px;">
<div class="col-md-6">
<div class="bg-white rounded-bottom-custom shadow-sm p-3 sticky-top mb-3">
<div class="d-flex justify-content-start">
<div>
<x-buttons.back />
</div>
</div>
</div>
<div class="card rounded shadow-sm border-0 mb-4">
<div class="card-body">
<h6>
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" class="bi bi-geo-alt mb-1" viewBox="0 0 16 16">
<path d="M12.166 8.94c-.524 1.062-1.234 2.12-1.96 3.07A32 32 0 0 1 8 14.58a32 32 0 0 1-2.206-2.57c-.726-.95-1.436-2.008-1.96-3.07C3.304 7.867 3 6.862 3 6a5 5 0 0 1 10 0c0 .862-.305 1.867-.834 2.94M8 16s6-5.686 6-10A6 6 0 0 0 2 6c0 4.314 6 10 6 10" />
<path d="M8 8a2 2 0 1 1 0-4 2 2 0 0 1 0 4m0 1a3 3 0 1 0 0-6 3 3 0 0 0 0 6" />
</svg>
Shipping Information
</h6>
<hr />
<select class="form-select rounded mb-3" wire:model.live="province_id">
<option value="">-- Select Province --</option>
@foreach ($provinces as $province)
<option value="{{ $province->id }}">
{{ $province->name }}
</option>
@endforeach
</select>
<select class="form-select rounded mb-3" wire:model.live="city_id" wire:key="{{ $province_id }}">
<option value="">-- Select City --</option>
@foreach (\App\Models\City::where('province_id', $province_id)->get() as $city)
<option value="{{ $city->id }}">{{ $city->name }}</option>
@endforeach
</select>
<div class="mb-3">
<textarea class="form-control rounded" wire:model.live="address" rows="3" placeholder="Address: Jl. Kebon Jeruk No. 1, Jakarta Barat"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
Di atas kita menambahkan select option baru untuk menampilkan data kota / kabupaten.
csharp
<select class="form-select rounded mb-3" wire:model.live="city_id" wire:key="{{ $province_id }}">
//...
</select>
Di atas, teman-teman perhatikan kita menambahkan event wire:key yang berisi properti $province_id, artinya jika ada perubahan pada properti tersebut maka akan dilakukan reset pada select option kota / kabupaten.
Kemudian di dalam select option di atas, kita menampilkan data kota / kabupaten berdasarkan province id / $province_id.
php
@foreach (\App\Models\City::where('province_id', $province_id)->get() as $city)
<option value="{{ $city->id }}">{{ $city->name }}</option>
@endforeach
Langkah 3 - Uji Coba Menampilkan Data Kota / Kabupaten
Silahkan reload halaman checkout, kemudian pilih salah satu data provinsi, maka nanti akan menampilkan list data kota / kabupaten yang terkait dengan provinsi yang dipilih.
