Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 26 additions & 3 deletions assets/js/theme/common/product-details-base.js
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down Expand Up @@ -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;

Expand All @@ -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));
Expand Down Expand Up @@ -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();
}
}

/**
Expand Down Expand Up @@ -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);
Expand Down
4 changes: 2 additions & 2 deletions assets/js/theme/common/product-details.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
});
}

Expand Down

This file was deleted.

7 changes: 6 additions & 1 deletion templates/components/products/product-view.html
Original file line number Diff line number Diff line change
Expand Up @@ -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__')}}

<div class="productView"
Expand Down Expand Up @@ -252,7 +253,11 @@ <h2 class="productView-brand">
<label class="form-label form-label--alternate">
{{lang 'products.current_stock'}}
<span data-product-stock>{{product.stock_level}}</span>
{{> components/products/backorder-availability-prompt show_prompt=product.show_backorder_availability_prompt prompt=product.backorder_availability_prompt available_to_sell=product.available_to_sell available_for_backorder=product.available_for_backorder}}
{{#all product.show_backorder_availability_prompt product.available_to_sell product.available_for_backorder}}
<span class="productView-backorder-availability-prompt" data-backorder-prompt>({{product.backorder_availability_prompt}})</span>
{{else}}
<span class="productView-backorder-availability-prompt" data-backorder-prompt style="display:none;"></span>
{{/all}}
</label>
<p class="form-label form-label--alternate" data-product-backordered style="display:none;"></p>
</div>
Expand Down