tampilan ui ux

This commit is contained in:
hildaaaevs 2025-06-04 04:03:23 +07:00
parent bbec273eea
commit 4cd4abccd7
5 changed files with 465 additions and 241 deletions

View File

@ -0,0 +1,39 @@
<?php
namespace App\Livewire;
use App\Models\PaketFoto;
use Livewire\Component;
class AddPaketModal extends Component
{
public $search = '';
public $pakets;
public function mount()
{
$this->loadPakets();
}
public function loadPakets()
{
$this->pakets = PaketFoto::where('nama_paket_foto', 'like', '%' . $this->search . '%')
->get();
}
public function updatedSearch()
{
$this->loadPakets();
}
public function addPaket($paketId)
{
$this->dispatch('paket-added', paketId: $paketId);
$this->dispatch('close-modal');
}
public function render()
{
return view('livewire.add-paket-modal');
}
}

View File

@ -6,11 +6,16 @@
use App\Models\Reservasii; use App\Models\Reservasii;
use Livewire\Attributes\Title; use Livewire\Attributes\Title;
use Livewire\Component; use Livewire\Component;
use Livewire\Attributes\On;
#[Title('Booking - SiKolaself')] #[Title('Booking - SiKolaself')]
class BookingPage extends Component class BookingPage extends Component
{ {
public $paketfoto; public $paketfoto;
public $selectedPakets = [];
public $showModal = false;
public $search = '';
public $pakets;
public $nama = ''; public $nama = '';
public $tanggal = ''; public $tanggal = '';
public $waktu = ''; public $waktu = '';
@ -27,13 +32,80 @@ public function mount($id = null)
{ {
if ($id) { if ($id) {
$this->paketfoto = PaketFoto::findOrFail($id); $this->paketfoto = PaketFoto::findOrFail($id);
$this->selectedPakets[] = [
'id' => $this->paketfoto->id,
'nama' => $this->paketfoto->nama_paket_foto,
'harga' => $this->paketfoto->harga_paket_foto,
'gambar' => $this->paketfoto->gambar,
'warna' => ''
];
} else { } else {
$this->paketfoto = PaketFoto::first(); $this->paketfoto = PaketFoto::first();
} }
// Set tanggal default ke hari ini
$this->tanggal = now()->format('Y-m-d'); $this->tanggal = now()->format('Y-m-d');
$this->updateUnavailableTimes(); $this->updateUnavailableTimes();
$this->loadPakets();
}
public function loadPakets()
{
$this->pakets = PaketFoto::where('nama_paket_foto', 'like', '%' . $this->search . '%')
->get();
}
public function updatedSearch()
{
$this->loadPakets();
}
#[On('paket-added')]
public function handlePaketAdded($paketId)
{
$paket = PaketFoto::find($paketId);
if ($paket) {
// Cek apakah paket sudah ada di selectedPakets
$exists = collect($this->selectedPakets)->contains('id', $paket->id);
if (!$exists) {
$this->selectedPakets[] = [
'id' => $paket->id,
'nama' => $paket->nama_paket_foto,
'harga' => $paket->harga_paket_foto,
'gambar' => $paket->gambar,
'warna' => ''
];
}
}
}
public function addPaket($paketId)
{
$paket = PaketFoto::find($paketId);
if ($paket) {
// Cek apakah paket sudah ada di selectedPakets
$exists = collect($this->selectedPakets)->contains('id', $paket->id);
if (!$exists) {
$this->selectedPakets[] = [
'id' => $paket->id,
'nama' => $paket->nama_paket_foto,
'harga' => $paket->harga_paket_foto,
'gambar' => $paket->gambar,
'warna' => ''
];
}
}
$this->showModal = false;
}
public function removePaket($index)
{
unset($this->selectedPakets[$index]);
$this->selectedPakets = array_values($this->selectedPakets);
}
public function updatePaketWarna($index, $warna)
{
$this->selectedPakets[$index]['warna'] = $warna;
} }
public function updatedTanggal() public function updatedTanggal()
@ -117,11 +189,11 @@ public function applyPromo()
public function getTotalPriceProperty() public function getTotalPriceProperty()
{ {
$total = $this->paketfoto->harga_paket_foto; $total = collect($this->selectedPakets)->sum('harga');
if ($this->promoApplied) { if ($this->promoApplied) {
$total -= $this->promoDiscount; $total -= $this->promoDiscount;
} }
return max(0, $total); // Pastikan total tidak negatif return max(0, $total);
} }
public function placeOrder() public function placeOrder()
@ -133,6 +205,7 @@ public function placeOrder()
'warna' => 'required', 'warna' => 'required',
'promo' => '', 'promo' => '',
'tipe_pembayaran' => 'required', 'tipe_pembayaran' => 'required',
'selectedPakets' => 'required|array|min:1',
], [ ], [
'nama.required' => 'Nama lengkap harus diisi', 'nama.required' => 'Nama lengkap harus diisi',
'nama.min' => 'Nama lengkap minimal 3 karakter', 'nama.min' => 'Nama lengkap minimal 3 karakter',
@ -141,15 +214,15 @@ public function placeOrder()
'waktu.required' => 'Waktu booking harus dipilih', 'waktu.required' => 'Waktu booking harus dipilih',
'warna.required' => 'Background harus dipilih', 'warna.required' => 'Background harus dipilih',
'tipe_pembayaran.required' => 'Tipe pembayaran harus dipilih', 'tipe_pembayaran.required' => 'Tipe pembayaran harus dipilih',
'selectedPakets.required' => 'Pilih minimal satu paket foto',
'selectedPakets.min' => 'Pilih minimal satu paket foto',
]); ]);
// Validasi waktu yang dipilih
if (in_array($this->waktu, $this->unavailableTimes)) { if (in_array($this->waktu, $this->unavailableTimes)) {
$this->addError('waktu', 'Waktu yang dipilih tidak tersedia'); $this->addError('waktu', 'Waktu yang dipilih tidak tersedia');
return; return;
} }
// Membuat reservasi baru
$reservasi = Reservasii::create([ $reservasi = Reservasii::create([
'user_id' => auth()->id(), 'user_id' => auth()->id(),
'nama' => $this->nama, 'nama' => $this->nama,
@ -158,20 +231,20 @@ public function placeOrder()
'promo_id' => $this->promoData ? $this->promoData->id : null, 'promo_id' => $this->promoData ? $this->promoData->id : null,
'total' => $this->totalPrice, 'total' => $this->totalPrice,
'tipe_pembayaran' => $this->tipe_pembayaran, 'tipe_pembayaran' => $this->tipe_pembayaran,
'metode_pembayaran' => 'transfer', // Default transfer, bisa diubah sesuai pilihan 'metode_pembayaran' => 'transfer',
'status_pembayaran' => 'pending' 'status_pembayaran' => 'pending'
]); ]);
// Membuat detail reservasi foreach ($this->selectedPakets as $paket) {
$reservasi->detail()->create([ $reservasi->detail()->create([
'paket_foto_id' => $this->paketfoto->id, 'paket_foto_id' => $paket['id'],
'warna' => $this->warna, 'warna' => $this->warna,
'jumlah' => 1, 'jumlah' => 1,
'harga' => $this->paketfoto->harga_paket_foto, 'harga' => $paket['harga'],
'total_harga' => $this->totalPrice, 'total_harga' => $paket['harga'],
]); ]);
}
// Tampilkan pesan sukses dan redirect ke halaman upload bukti pembayaran
session()->flash('message', 'Booking berhasil dibuat! Silahkan upload bukti pembayaran.'); session()->flash('message', 'Booking berhasil dibuat! Silahkan upload bukti pembayaran.');
return redirect()->route('upload.bukti.pembayaran', $reservasi->id); return redirect()->route('upload.bukti.pembayaran', $reservasi->id);
} }

View File

@ -12,7 +12,7 @@ class HomePage extends Component
{ {
public function render() public function render()
{ {
$paketfoto = PaketFoto::where('status', 1)->get(); $paketfoto = PaketFoto::where('status', 1)->take(4)->get();
return view('livewire.home-page', [ return view('livewire.home-page', [
'paketfoto' => $paketfoto 'paketfoto' => $paketfoto
]); ]);

View File

@ -0,0 +1,51 @@
@if($showModal)
<div class="fixed inset-0 z-50 overflow-y-auto" aria-labelledby="modal-title" role="dialog" aria-modal="true">
<div class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
<div class="fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity" aria-hidden="true"></div>
<span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">&#8203;</span>
<div class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full">
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
<div class="sm:flex sm:items-start">
<div class="mt-3 text-center sm:mt-0 sm:text-left w-full">
<h3 class="text-lg leading-6 font-medium text-gray-900" id="modal-title">
Tambah
</h3>
<div class="mt-4">
<input type="text" wire:model.live="search" placeholder="Cari paket foto..." class="w-full rounded-lg border py-2 px-3 dark:bg-gray-700 dark:text-white dark:border-none">
</div>
<div class="mt-4 max-h-96 overflow-y-auto">
<ul class="divide-y divide-gray-200">
@forelse($pakets as $paket)
<li class="py-3">
<div class="flex items-center justify-between">
<div class="flex items-center">
<img src="{{ url('storage', $paket->gambar) }}" alt="{{ $paket->nama_paket_foto }}" class="w-12 h-12 rounded-full">
<div class="ml-4">
<p class="text-sm font-medium text-gray-900">{{ $paket->nama_paket_foto }}</p>
<p class="text-sm text-gray-500">{{ Number::currency($paket->harga_paket_foto, 'IDR') }}</p>
</div>
</div>
<button wire:click="addPaket({{ $paket->id }})" class="bg-gray-500 text-white px-4 py-2 rounded-lg hover:bg-gray-600">
Pilih
</button>
</div>
</li>
@empty
<li class="py-3 text-center text-gray-500">
Tidak ada paket ditemukan
</li>
@endforelse
</ul>
</div>
</div>
</div>
</div>
<div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse">
<button type="button" wire:click="$set('showModal', false)" class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm">
Tutup
</button>
</div>
</div>
</div>
</div>
@endif

View File

@ -1,228 +1,289 @@
<div class="w-full max-w-[85rem] py-10 px-4 sm:px-6 lg:px-8 mx-auto"> <div>
<h1 class="text-2xl font-bold text-gray-800 dark:text-white mb-4"> <div class="w-full max-w-[85rem] py-10 px-4 sm:px-6 lg:px-8 mx-auto">
Reservasi <h1 class="text-2xl font-bold text-gray-800 dark:text-white mb-4">
</h1> Reservasi
<form wire:submit.prevent="placeOrder"> </h1>
<div class="grid grid-cols-12 gap-4"> <form wire:submit.prevent="placeOrder">
<div class="md:col-span-12 lg:col-span-8 col-span-12"> <div class="grid grid-cols-12 gap-4">
<!-- Card --> <div class="md:col-span-12 lg:col-span-8 col-span-12">
<div class="bg-white rounded-xl shadow p-4 sm:p-7 dark:bg-slate-900"> <!-- Card -->
<!-- Shipping Address --> <div class="bg-white rounded-xl shadow p-4 sm:p-7 dark:bg-slate-900">
<div class="mb-6"> <!-- Shipping Address -->
<h2 class="text-xl font-bold underline text-gray-700 dark:text-white mb-2"> <div class="mb-6">
Formulir Reservasi <h2 class="text-xl font-bold underline text-gray-700 dark:text-white mb-2">
</h2> Formulir Reservasi
<div class="mt-4"> </h2>
<label class="block text-gray-700 dark:text-white mb-1" for="nama"> <div class="mt-4">
Nama <label class="block text-gray-700 dark:text-white mb-1" for="nama">
</label> Nama
<input wire:model="nama" class="w-full rounded-lg border py-2 px-3 </label>
dark:bg-gray-700 dark:text-white dark:border-none @error('nama') border-red-500 @enderror " id="nama" type="text"> <input wire:model="nama" class="w-full rounded-lg border py-2 px-3
@error('nama') dark:bg-gray-700 dark:text-white dark:border-none @error('nama') border-red-500 @enderror " id="nama" type="text">
<div class="text-red-500 text-sm">{{ $message }}</div> @error('nama')
@enderror <div class="text-red-500 text-sm">{{ $message }}</div>
</div> @enderror
</div>
<div class="mt-4">
<label class="block text-gray-700 dark:text-white mb-1" for="tanggal"> <div class="mt-4">
Tanggal <label class="block text-gray-700 dark:text-white mb-1" for="tanggal">
</label> Tanggal
<input wire:model="tanggal" class="w-full rounded-lg border py-2 px-3 dark:bg-gray-700 dark:text-white dark:border-none @error('tanggal') border-red-500 @enderror" id="tanggal" type="date" min="{{ date('Y-m-d') }}"> </label>
@error('tanggal') <input wire:model="tanggal" class="w-full rounded-lg border py-2 px-3 dark:bg-gray-700 dark:text-white dark:border-none @error('tanggal') border-red-500 @enderror" id="tanggal" type="date" min="{{ date('Y-m-d') }}">
<div class="text-red-500 text-sm">{{ $message }}</div> @error('tanggal')
@enderror <div class="text-red-500 text-sm">{{ $message }}</div>
</div> @enderror
</div>
<div class="mt-4">
<label class="block text-gray-700 dark:text-white mb-1" for="waktu"> <div class="mt-4">
Waktu <label class="block text-gray-700 dark:text-white mb-1" for="waktu">
</label> Waktu
<select wire:model="waktu" class="w-full rounded-lg border py-2 px-3 dark:bg-gray-700 dark:text-white dark:border-none @error('waktu') border-red-500 @enderror" id="waktu"> </label>
<option value="">Pilih waktu</option> <select wire:model="waktu" class="w-full rounded-lg border py-2 px-3 dark:bg-gray-700 dark:text-white dark:border-none @error('waktu') border-red-500 @enderror" id="waktu">
@php <option value="">Pilih waktu</option>
$timeLabels = collect(range(8, 20))->mapWithKeys(function ($hour) { @php
$formatted = str_pad($hour, 2, '0', STR_PAD_LEFT) . ':00'; $timeLabels = collect(range(8, 20))->mapWithKeys(function ($hour) {
return [$formatted => $formatted]; $formatted = str_pad($hour, 2, '0', STR_PAD_LEFT) . ':00';
})->toArray(); return [$formatted => $formatted];
@endphp })->toArray();
@foreach($timeLabels as $time => $label) @endphp
@php @foreach($timeLabels as $time => $label)
$isUnavailable = in_array($time, $this->unavailableTimes); @php
$isBooked = in_array($time, $this->bookedTimes); $isUnavailable = in_array($time, $this->unavailableTimes);
$isPast = $this->tanggal == now()->format('Y-m-d') && $time <= now()->format('H:i'); $isBooked = in_array($time, $this->bookedTimes);
@endphp $isPast = $this->tanggal == now()->format('Y-m-d') && $time <= now()->format('H:i');
<option value="{{ $time }}" @endphp
{{ $isUnavailable ? 'disabled' : '' }} <option value="{{ $time }}"
class="{{ $isUnavailable ? 'text-gray-400 bg-gray-100' : '' }}" {{ $isUnavailable ? 'disabled' : '' }}
style="{{ $isUnavailable ? 'background-color: #f3f4f6; color: #9ca3af;' : '' }}"> class="{{ $isUnavailable ? 'text-gray-400 bg-gray-100' : '' }}"
{{ $label }} style="{{ $isUnavailable ? 'background-color: #f3f4f6; color: #9ca3af;' : '' }}">
@if($isBooked) {{ $label }}
(Sudah dipesan) @if($isBooked)
@elseif($isPast) (Sudah dipesan)
(Sudah lewat) @elseif($isPast)
@endif (Sudah lewat)
</option> @endif
@endforeach </option>
</select> @endforeach
@error('waktu') </select>
<div class="text-red-500 text-sm">{{ $message }}</div> @error('waktu')
@enderror <div class="text-red-500 text-sm">{{ $message }}</div>
</div> @enderror
<div class="mt-4"> </div>
<label class="block text-gray-700 dark:text-white mb-1" for="warna"> <div class="mt-4">
Background <label class="block text-gray-700 dark:text-white mb-1" for="warna">
</label> Background
<select wire:model="warna" class="w-full rounded-lg border py-2 px-3 dark:bg-gray-700 dark:text-white dark:border-none @error('warna') border-red-500 @enderror" id="warna"> </label>
<option value="">Pilih warna</option> <select wire:model="warna" class="w-full rounded-lg border py-2 px-3 dark:bg-gray-700 dark:text-white dark:border-none @error('warna') border-red-500 @enderror" id="warna">
<option value="putih">White</option> <option value="">Pilih warna</option>
<option value="abu">Grey</option> <option value="putih">White</option>
<option value="cream">Cream</option> <option value="abu">Grey</option>
<option value="spotlight">Spotlight</option> <option value="cream">Cream</option>
</select> <option value="spotlight">Spotlight</option>
@error('warna') </select>
<div class="text-red-500 text-sm">{{ $message }}</div> @error('warna')
@enderror <div class="text-red-500 text-sm">{{ $message }}</div>
</div> @enderror
</div>
<div class="mt-4">
<label class="block text-gray-700 dark:text-white mb-1" for="promo"> <div class="mt-4">
Kode Promo (jika ada) <label class="block text-gray-700 dark:text-white mb-1" for="promo">
</label> Kode Promo (jika ada)
<div class="flex gap-2"> </label>
<input wire:model="promo" class="w-full rounded-lg border py-2 px-3 dark:bg-gray-700 dark:text-white dark:border-none @error('promo') border-red-500 @enderror" id="promo" type="text" placeholder="Masukkan kode promo"> <div class="flex gap-2">
<button type="button" wire:click="applyPromo" class="bg-gray-500 text-white px-4 py-2 rounded-lg hover:bg-gray-600">Terapkan</button> <input wire:model="promo" class="w-full rounded-lg border py-2 px-3 dark:bg-gray-700 dark:text-white dark:border-none @error('promo') border-red-500 @enderror" id="promo" type="text" placeholder="Masukkan kode promo">
</div> <button type="button" wire:click="applyPromo" class="bg-gray-500 text-white px-4 py-2 rounded-lg hover:bg-gray-600">Terapkan</button>
@error('promo') </div>
<div class="text-red-500 text-sm">{{ $message }}</div> @error('promo')
@enderror <div class="text-red-500 text-sm">{{ $message }}</div>
@if($promoApplied) @enderror
<div class="text-green-500 text-sm mt-1">Promo berhasil diterapkan!</div> @if($promoApplied)
@endif <div class="text-green-500 text-sm mt-1">Promo berhasil diterapkan!</div>
</div> @endif
</div> </div>
</div>
<div class="mb-6"> <div class="mb-6">
<!-- Tipe Pembayaran - Muncul ketika Transfer Bank dipilih --> <!-- Tipe Pembayaran - Muncul ketika Transfer Bank dipilih -->
</div> </div>
<div class="mb-6"> <div class="mb-6">
<!-- Transfer Bank via Midtrans --> <!-- Transfer Bank via Midtrans -->
<div class="mt-6"> <div class="mt-6">
</div> </div>
</div> </div>
</div> </div>
<!-- End Card --> <!-- End Card -->
</div> </div>
<div class="md:col-span-12 lg:col-span-4 col-span-12"> <div class="md:col-span-12 lg:col-span-4 col-span-12">
<div class="bg-white rounded-xl shadow p-4 sm:p-7 dark:bg-slate-900"> <div class="bg-white rounded-xl shadow p-4 sm:p-7 dark:bg-slate-900">
<div class="mb-6"> <div class="mb-6">
<h2 class="text-xl font-bold underline text-gray-700 dark:text-white mb-4"> <h2 class="text-xl font-bold underline text-gray-700 dark:text-white mb-4">
Metode Pembayaran Metode Pembayaran
</h2> </h2>
<!-- Pilih Tipe Pembayaran --> <!-- Pilih Tipe Pembayaran -->
<div class="mt-4"> <div class="mt-4">
<ul class="grid w-full gap-4 md:grid-cols-2"> <ul class="grid w-full gap-4 md:grid-cols-2">
<li> <li>
<input wire:model="tipe_pembayaran" class="hidden peer" id="payment-dp" name="payment_type" type="radio" value="dp" required /> <input wire:model="tipe_pembayaran" class="hidden peer" id="payment-dp" name="payment_type" type="radio" value="dp" required />
<label for="payment-dp" class="inline-flex items-center justify-between w-full p-5 bg-white border border-gray-200 rounded-lg cursor-pointer <label for="payment-dp" class="inline-flex items-center justify-between w-full p-5 bg-white border border-gray-200 rounded-lg cursor-pointer
hover:bg-gray-100 peer-checked:border-blue-600 peer-checked:text-blue-600 dark:bg-gray-800 dark:text-gray-400 dark:peer-checked:text-blue-500 dark:border-gray-700 dark:hover:bg-gray-700"> hover:bg-gray-100 peer-checked:border-blue-600 peer-checked:text-blue-600 dark:bg-gray-800 dark:text-gray-400 dark:peer-checked:text-blue-500 dark:border-gray-700 dark:hover:bg-gray-700">
<div class="block"> <div class="block">
<div class="text-lg font-semibold">Down Payment</div> <div class="text-lg font-semibold">Down Payment</div>
<div class="text-sm">DP min. Rp 20.000</div> <div class="text-sm">DP min. Rp 20.000</div>
</div> </div>
</label> </label>
</li> </li>
<li> <li>
<input wire:model="tipe_pembayaran" class="hidden peer" id="payment-full" name="payment_type" type="radio" value="full" /> <input wire:model="tipe_pembayaran" class="hidden peer" id="payment-full" name="payment_type" type="radio" value="full" />
<label for="payment-full" class="inline-flex items-center justify-between w-full p-5 bg-white border border-gray-200 rounded-lg cursor-pointer hover:bg-gray-100 peer-checked:border-blue-600 peer-checked:text-blue-600 dark:bg-gray-800 dark:text-gray-400 dark:peer-checked:text-blue-500 dark:border-gray-700 dark:hover:bg-gray-700"> <label for="payment-full" class="inline-flex items-center justify-between w-full p-5 bg-white border border-gray-200 rounded-lg cursor-pointer hover:bg-gray-100 peer-checked:border-blue-600 peer-checked:text-blue-600 dark:bg-gray-800 dark:text-gray-400 dark:peer-checked:text-blue-500 dark:border-gray-700 dark:hover:bg-gray-700">
<div class="block"> <div class="block">
<div class="text-lg font-semibold">Full Payment</div> <div class="text-lg font-semibold">Full Payment</div>
<div class="text-sm">Bayar lunas sekarang</div> <div class="text-sm">Bayar lunas sekarang</div>
</div> </div>
</label> </label>
</li> </li>
@error('tipe_pembayaran') @error('tipe_pembayaran')
<div class="text-red-500 text-sm">{{ $message }}</div> <div class="text-red-500 text-sm">{{ $message }}</div>
@enderror @enderror
</ul> </ul>
</div> </div>
<!-- Transfer Bank via Midtrans --> <!-- Transfer Bank via Midtrans -->
<div class="mt-6"> <div class="mt-6">
<div class="grid grid-cols-2 gap-4"> <div class="grid grid-cols-2 gap-4">
</div> </div>
</div> </div>
</div> </div>
<div class="text-xl font-bold underline text-gray-700 dark:text-white mb-2"> <div class="text-xl font-bold underline text-gray-700 dark:text-white mb-2">
Rincian Reservasi Rincian Reservasi
</div> </div>
<div class="flex justify-between mb-2 font-bold"> <div class="flex justify-between mb-2 font-bold">
<span> <span>
Subtotal Subtotal
</span> </span>
<span> <span>
@if($paketfoto) {{ Number::currency(collect($selectedPakets)->sum('harga'), 'IDR') }}
{{ Number::currency($paketfoto->harga_paket_foto, 'IDR') }} </span>
@else </div>
{{ Number::currency(0, 'IDR') }} @if($promoApplied)
@endif <div class="flex justify-between mb-2">
</span> <span>
</div> Potongan Promo
@if($promoApplied) </span>
<div class="flex justify-between mb-2"> <span class="text-green-500">
<span> - {{ Number::currency($promoDiscount, 'IDR') }}
Potongan Promo </span>
</span> </div>
<span class="text-green-500"> @endif
- {{ Number::currency($promoDiscount, 'IDR') }} <hr class="bg-slate-400 my-4 h-1 rounded">
</span> <div class="flex justify-between mb-2 font-bold">
</div> <span>
@endif Total Harga
<hr class="bg-slate-400 my-4 h-1 rounded"> </span>
<div class="flex justify-between mb-2 font-bold"> <span>
<span> {{ Number::currency($this->totalPrice, 'IDR') }}
Total Harga </span>
</span> </div>
<span> </hr>
{{ Number::currency($this->totalPrice, 'IDR') }} </div>
</span> <button type="submit" class="bg-gray-500 mt-4 w-full p-3 rounded-lg text-lg text-white hover:bg-gray-600">
</div> Reservasi Sekarang
</hr> </button>
</div> <div class="bg-white mt-4 rounded-xl shadow p-4 sm:p-7 dark:bg-slate-900">
<button type="submit" class="bg-gray-500 mt-4 w-full p-3 rounded-lg text-lg text-white hover:bg-gray-600"> <div class="flex justify-between items-center mb-4">
Reservasi Sekarang <div class="text-xl font-bold underline text-gray-700 dark:text-white">
</button> Paket Foto
<div class="bg-white mt-4 rounded-xl shadow p-4 sm:p-7 dark:bg-slate-900"> </div>
<div class="text-xl font-bold underline text-gray-700 dark:text-white mb-2"> <button type="button" wire:click="$set('showModal', true)" class="bg-gray-500 text-white px-4 py-2 rounded-lg hover:bg-gray-600">
Paket Foto Tambah Paket
</div> </button>
<ul class="divide-y divide-gray-200 dark:divide-gray-700" role="list"> </div>
@if($paketfoto) <ul class="divide-y divide-gray-200 dark:divide-gray-700" role="list">
<li class="py-3 sm:py-4" wire:key="{{ $paketfoto->id }}"> @forelse($selectedPakets as $index => $paket)
<div class="flex items-center"> <li class="py-3 sm:py-4" wire:key="{{ $paket['id'] }}">
<div class="flex-shrink-0"> <div class="flex items-center">
<img alt="{{ $paketfoto->nama_paket_foto }}" class="w-12 h-12 rounded-full" src="{{ url('storage', $paketfoto->gambar) }}"> </img> <div class="flex-shrink-0">
</div> <img alt="{{ $paket['nama'] }}" class="w-12 h-12 rounded-full" src="{{ url('storage', $paket['gambar']) }}">
<div class="flex-1 min-w-0 ms-4"> </div>
<p class="text-sm font-medium text-gray-900 truncate dark:text-white"> <div class="flex-1 min-w-0 ms-4">
{{ $paketfoto->nama_paket_foto }} <p class="text-sm font-medium text-gray-900 truncate dark:text-white">
</p> {{ $paket['nama'] }}
</div> </p>
<div class="inline-flex items-center text-base font-semibold text-gray-900 dark:text-white"> </div>
{{ Number::currency($paketfoto->harga_paket_foto, 'IDR') }} <div class="flex items-center gap-4">
</div> <div class="text-base font-semibold text-gray-900 dark:text-white">
</div> {{ Number::currency($paket['harga'], 'IDR') }}
</li> </div>
@else <button type="button" wire:click="removePaket({{ $index }})" class="text-red-500 hover:text-red-700">
<li class="py-3 sm:py-4"> <svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor">
<div class="flex items-center justify-center"> <path fill-rule="evenodd" d="M9 2a1 1 0 00-.894.553L7.382 4H4a1 1 0 000 2v10a2 2 0 002 2h8a2 2 0 002-2V6a1 1 0 100-2h-3.382l-.724-1.447A1 1 0 0011 2H9zM7 8a1 1 0 012 0v6a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v6a1 1 0 102 0V8a1 1 0 00-1-1z" clip-rule="evenodd" />
<p class="text-sm text-gray-500">No package selected</p> </svg>
</div> </button>
</li> </div>
@endif </div>
</ul> </li>
</div> @empty
</div> <li class="py-3 sm:py-4">
</div> <div class="flex items-center justify-center">
</form> <p class="text-sm text-gray-500">Belum ada paket dipilih</p>
</div> </div>
</li>
@endforelse
</ul>
</div>
</div>
</div>
</form>
</div>
@if($showModal)
<div class="fixed inset-0 z-50 overflow-y-auto" aria-labelledby="modal-title" role="dialog" aria-modal="true">
<div class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
<div class="fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity" aria-hidden="true"></div>
<span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">&#8203;</span>
<div class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full">
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
<div class="sm:flex sm:items-start">
<div class="mt-3 text-center sm:mt-0 sm:text-left w-full">
<h3 class="text-lg leading-6 font-medium text-gray-900" id="modal-title">
Tambah Paket Foto
</h3>
<div class="mt-4">
<input type="text" wire:model.live="search" placeholder="Cari paket foto..." class="w-full rounded-lg border py-2 px-3 dark:bg-gray-700 dark:text-white dark:border-none">
</div>
<div class="mt-4 max-h-96 overflow-y-auto">
<ul class="divide-y divide-gray-200">
@forelse($pakets as $paket)
<li class="py-3">
<div class="flex items-center justify-between">
<div class="flex items-center">
<img src="{{ url('storage', $paket->gambar) }}" alt="{{ $paket->nama_paket_foto }}" class="w-12 h-12 rounded-full">
<div class="ml-4">
<p class="text-sm font-medium text-gray-900">{{ $paket->nama_paket_foto }}</p>
<p class="text-sm text-gray-500">{{ Number::currency($paket->harga_paket_foto, 'IDR') }}</p>
</div>
</div>
<button wire:click="addPaket({{ $paket->id }})" class="bg-gray-500 text-white px-4 py-2 rounded-lg hover:bg-gray-600">
Pilih
</button>
</div>
</li>
@empty
<li class="py-3 text-center text-gray-500">
Tidak ada paket ditemukan
</li>
@endforelse
</ul>
</div>
</div>
</div>
</div>
<div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse">
<button type="button" wire:click="$set('showModal', false)" class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm">
Tutup
</button>
</div>
</div>
</div>
</div>
@endif