diff --git a/assets/js/theme/common/product-details-base.js b/assets/js/theme/common/product-details-base.js index 7293e15c83..766148a501 100644 --- a/assets/js/theme/common/product-details-base.js +++ b/assets/js/theme/common/product-details-base.js @@ -188,6 +188,7 @@ export default class ProductDetailsBase { $input: $('[data-product-stock]', $scope), }, $backordered: $('[data-product-backordered]', $scope), + $backorderPrompt: $('[data-backorder-prompt]', $scope), sku: { $label: $('dt.sku-label', $scope), $value: $('[data-product-sku]', $scope), @@ -221,8 +222,8 @@ export default class ProductDetailsBase { viewModel.priceWithoutTax.$div.hide(); } - updateQtyBackorderedMessage(qty) { - const viewModel = this.getViewModel(this.$scope); + updateQtyBackorderedMessage(qty, passedViewModel) { + const viewModel = passedViewModel || this.getViewModel(this.$scope); if (!viewModel.$backordered.length) return; @@ -240,6 +241,7 @@ export default class ProductDetailsBase { } else if (!Number.isNaN(stockFromDom)) { onHand = stockFromDom; } + const availableForBackorder = parseInt(this.context.availableForBackorder, 10) || 0; const availableToSell = parseInt(this.context.availableToSell, 10) || 0; const backordered = Math.max(0, Math.min(qty - onHand, availableForBackorder)); @@ -270,6 +272,26 @@ export default class ProductDetailsBase { if (typeof data.show_backorder_availability_prompt === 'boolean') { this.context.showBackorderAvailabilityPrompt = data.show_backorder_availability_prompt; } + if (typeof data.backorder_availability_prompt === 'string') { + this.context.backorderAvailabilityPrompt = data.backorder_availability_prompt; + } + } + + updateBackorderPrompt(passedViewModel) { + const viewModel = passedViewModel || this.getViewModel(this.$scope); + + if (!viewModel.$backorderPrompt.length) return; + + const showPrompt = this.context.showBackorderAvailabilityPrompt; + const availableForBackorder = parseInt(this.context.availableForBackorder, 10) || 0; + const availableToSell = parseInt(this.context.availableToSell, 10) || 0; + const promptText = this.context.backorderAvailabilityPrompt; + + if (showPrompt && availableToSell > 0 && availableForBackorder > 0 && promptText) { + viewModel.$backorderPrompt.text(`(${promptText})`).show(); + } else { + viewModel.$backorderPrompt.hide(); + } } /** @@ -326,9 +348,10 @@ export default class ProductDetailsBase { } this.updateBackorderContext(data); + this.updateBackorderPrompt(viewModel); const currentQty = parseInt(viewModel.quantity.$input.val(), 10) || 0; - this.updateQtyBackorderedMessage(currentQty); + this.updateQtyBackorderedMessage(currentQty, viewModel); this.updateDefaultAttributesForOOS(data); this.updateWalletButtonsView(data); diff --git a/assets/js/theme/common/product-details.js b/assets/js/theme/common/product-details.js index d1a1500ffd..3553028b96 100644 --- a/assets/js/theme/common/product-details.js +++ b/assets/js/theme/common/product-details.js @@ -379,7 +379,7 @@ export default class ProductDetails extends ProductDetailsBase { this.addToCartValidator.performCheck(); this.updateProductDetailsData(); - this.updateQtyBackorderedMessage(qty); + this.updateQtyBackorderedMessage(qty, viewModel); }); // Prevent triggering quantity change when pressing enter @@ -396,7 +396,7 @@ export default class ProductDetails extends ProductDetailsBase { const viewModel = this.getViewModel(this.$scope); const qty = parseInt(viewModel.quantity.$input.val(), 10) || 0; this.updateProductDetailsData(); - this.updateQtyBackorderedMessage(qty); + this.updateQtyBackorderedMessage(qty, viewModel); }); } diff --git a/templates/components/products/backorder-availability-prompt.html b/templates/components/products/backorder-availability-prompt.html deleted file mode 100644 index 44c55c9cad..0000000000 --- a/templates/components/products/backorder-availability-prompt.html +++ /dev/null @@ -1,7 +0,0 @@ -{{#if show_prompt}} - {{#if available_to_sell '>' 0}} - {{#if available_for_backorder '>' 0}} - ({{prompt}}) - {{/if}} - {{/if}} -{{/if}} diff --git a/templates/components/products/product-view.html b/templates/components/products/product-view.html index b35a8d0e2c..4418b403cc 100644 --- a/templates/components/products/product-view.html +++ b/templates/components/products/product-view.html @@ -3,6 +3,7 @@ {{inject 'availableForBackorder' product.available_for_backorder}} {{inject 'availableToSell' product.available_to_sell}} {{inject 'showBackorderAvailabilityPrompt' product.show_backorder_availability_prompt}} +{{inject 'backorderAvailabilityPrompt' product.backorder_availability_prompt}} {{inject 'quantityBackorderedMessage' (lang 'products.quantity_backordered' quantity='__QTY__')}}