class TestComponent extends Component
{
public $cart;
protected $cart_service;
protected $listeners = ['cart-updated' => '$refresh'];
public function mount($cart) {
$this->cart = $cart;
$this->cart_service = app(CartService::class);
}
public function hydrate()
{
$this->cart_service = app(CartService::class);
}
public function remove_item($uidentity)
{
$item = CartItem::where('cart_item_uidentity', $uidentity)->first();
if(!$item) {
return;
}
$is_bundle = $item->itemable_type === 'Bundle';
try {
$this->cart_service->remove_item($this->cart, $uidentity, $is_bundle);
$this->dispatch('cart-updated');
} catch (Exception $e) {
session()->flash('error', $e->getMessage());
}
}
public function render()
{
return view('livewire.test-component');
}
}
<!-- test-component.blade.php -->
<div>
@forelse($cart->cart_items as $item)
<div class="flex items-center my-4 space-x-4">
<button wire:click="remove_item('{{ $item->cart_item_uidentity }}')">
<i class="fas fa-close"></i>
</button>
<div class="">
@if ($item->itemable instanceof App\Models\ProductVariant)
<p class="text-sm text-gray-600 font-semibold">{{ $item->itemable->product->name }}</p>
<p class="text-xs text-gray-400">{{ $item->itemable->name }}</p>
@elseif ($item->itemable instanceof App\Models\Bundle)
<p class="text-sm text-gray-600 font-semibold">{{ $item->itemable->name }}</p>
<p class="text-xs text-gray-400">Bundle</p>
@else
<p class="text-sm text-gray-600 font-semibold text-red-600">Unknown Item</p>
@endif
</div>
</div>
@empty
<p class="text-sm text-gray-500">cart empty</p>
@endforelse
</div>
class CartService
{
// ... other methods
public function remove_item(Cart $cart, $uidentity, $is_bundle = false) {
$cart->cart_items()->where('cart_item_uidentity', $uidentity)->delete();
$this->update_cart($cart);
}
public function update_cart(Cart $cart) {
$cart->save();
}
}
<!-- cart.blade.php -->
<x-layouts.base>
<livewire:test-component :cart="$cart" />
</x-layouts.base>
still getting the 404 error popup on deleting item,