diff --git a/resources/views/includes/cartbox/item-options.blade.php b/resources/views/includes/cartbox/item-options.blade.php index 6bb1346..f6935cf 100644 --- a/resources/views/includes/cartbox/item-options.blade.php +++ b/resources/views/includes/cartbox/item-options.blade.php @@ -61,6 +61,11 @@ class="btn btn-link" @include('igniter-orange::includes.cartbox.item-options-'.$menuOption->display_type) @endif + + @endif diff --git a/src/Livewire/CartItemModal.php b/src/Livewire/CartItemModal.php index 0b49049..d9b1eb2 100644 --- a/src/Livewire/CartItemModal.php +++ b/src/Livewire/CartItemModal.php @@ -127,6 +127,8 @@ public function boot(): void public function onSave(): void { + $this->validateMenuOptions(); + try { $cartItem = $this->cartManager->addOrUpdateCartItem([ 'menuId' => $this->menuId, @@ -140,7 +142,7 @@ public function onSave(): void $this->dispatch('hideModal'); } catch (Exception $exception) { - throw ValidationException::withMessages(['menuOptions' => $exception->getMessage()]); + throw ValidationException::withMessages(['menuOptions' => strip_tags($exception->getMessage())]); } } @@ -165,6 +167,31 @@ public function getOptionQuantityTypeValue($menuOptionValueId) return $value; } + protected function validateMenuOptions(): void + { + $errors = []; + $selectedOptions = collect($this->menuOptions); + + foreach ($this->getMenuItemData()->getOptions() as $menuOption) { + $selectedOption = $selectedOptions->get($menuOption->getKey()); + $selectedValues = array_filter((array)array_get($selectedOption, 'option_values', [])); + + if (!in_array($menuOption->option->display_type, ['quantity', 'checkbox'])) { + $selectedValues = array_filter($selectedValues, is_numeric(...)); + } + + try { + $this->cartManager->validateMenuItemOption($menuOption, $selectedValues); + } catch (Exception $exception) { + $errors['menuOptions.'.$menuOption->getKey()] = strip_tags($exception->getMessage()); + } + } + + if ($errors !== []) { + throw ValidationException::withMessages($errors); + } + } + protected function getCartItem(): ?CartItem { if (!is_null($this->cartItem)) {