From 636b6b756b06cb9760673ebe60c73a34dd514614 Mon Sep 17 00:00:00 2001 From: Sofia Matulis Date: Wed, 15 May 2024 11:50:47 -0400 Subject: [PATCH] Add qty rules client side validation to cart (#3471) --- assets/cart.js | 47 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/assets/cart.js b/assets/cart.js index c9bcc076431..c865869eff3 100644 --- a/assets/cart.js +++ b/assets/cart.js @@ -42,13 +42,48 @@ class CartItems extends HTMLElement { } } + resetQuantityInput(id) { + const input = this.querySelector(`#Quantity-${id}`); + input.value = input.getAttribute('value'); + this.isEnterPressed = false; + } + + setValidity(event, index, message) { + event.target.setCustomValidity(message); + event.target.reportValidity(); + this.resetQuantityInput(index); + event.target.select(); + } + + validateQuantity(event) { + const inputValue = parseInt(event.target.value); + const index = event.target.dataset.index; + let message = ''; + + if (inputValue < event.target.dataset.min) { + message = window.quickOrderListStrings.min_error.replace('[min]', event.target.dataset.min); + } else if (inputValue > parseInt(event.target.max)) { + message = window.quickOrderListStrings.max_error.replace('[max]', event.target.max); + } else if (inputValue % parseInt(event.target.step) !== 0) { + message = window.quickOrderListStrings.step_error.replace('[step]', event.target.step); + } + + if (message) { + this.setValidity(event, index, message); + } else { + event.target.setCustomValidity(''); + event.target.reportValidity(); + this.updateQuantity( + index, + inputValue, + document.activeElement.getAttribute('name'), + event.target.dataset.quantityVariantId + ); + } + } + onChange(event) { - this.updateQuantity( - event.target.dataset.index, - event.target.value, - document.activeElement.getAttribute('name'), - event.target.dataset.quantityVariantId - ); + this.validateQuantity(event); } onCartUpdate() {