Skip to content

Commit 30ff836

Browse files
Merge pull request #2613 from bigcommerce/BACK-471
feat(backorders): BACK-471 display backordered quantity message on PDP
2 parents 7dbbfb7 + 5f3e356 commit 30ff836

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

assets/js/theme/common/product-details-base.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ export default class ProductDetailsBase {
187187
$container: $('.form-field--stock', $scope),
188188
$input: $('[data-product-stock]', $scope),
189189
},
190+
$backordered: $('[data-product-backordered]', $scope),
190191
sku: {
191192
$label: $('dt.sku-label', $scope),
192193
$value: $('[data-product-sku]', $scope),
@@ -220,6 +221,22 @@ export default class ProductDetailsBase {
220221
viewModel.priceWithoutTax.$div.hide();
221222
}
222223

224+
updateQtyBackorderedMessage(qty) {
225+
const viewModel = this.getViewModel(this.$scope);
226+
227+
if (!viewModel.$backordered.length) return;
228+
229+
const onHand = parseInt(this.context.availableOnHand, 10) || 0;
230+
const maxBackorder = parseInt(this.context.availableForBackorder, 10) || 0;
231+
const backordered = Math.max(0, Math.min(qty - onHand, maxBackorder));
232+
233+
if (backordered > 0) {
234+
viewModel.$backordered.text(`${backordered} will be backordered`).show();
235+
} else {
236+
viewModel.$backordered.hide();
237+
}
238+
}
239+
223240
/**
224241
* Update the view of price, messages, SKU and stock options when a product option changes
225242
* @param {Object} data Product attribute data

assets/js/theme/common/product-details.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,7 @@ export default class ProductDetails extends ProductDetailsBase {
370370
this.addToCartValidator.performCheck();
371371

372372
this.updateProductDetailsData();
373+
this.updateQtyBackorderedMessage(qty);
373374
});
374375

375376
// Prevent triggering quantity change when pressing enter
@@ -383,7 +384,10 @@ export default class ProductDetails extends ProductDetailsBase {
383384
});
384385

385386
this.$scope.on('keyup', '.form-input--incrementTotal', () => {
387+
const viewModel = this.getViewModel(this.$scope);
388+
const qty = parseInt(viewModel.quantity.$input.val(), 10) || 0;
386389
this.updateProductDetailsData();
390+
this.updateQtyBackorderedMessage(qty);
387391
});
388392
}
389393

templates/components/products/product-view.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
{{inject 'outOfStockDefaultMessage' (lang 'products.out_of_stock_default_message')}}
2+
{{inject 'availableOnHand' product.available_on_hand}}
3+
{{inject 'availableForBackorder' product.available_for_backorder}}
24

35
<div class="productView"
46
data-event-type="product"
@@ -249,6 +251,7 @@ <h2 class="productView-brand">
249251
<span data-product-stock>{{product.stock_level}}</span>
250252
{{> 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}}
251253
</label>
254+
<p class="form-label form-label--alternate" data-product-backordered style="display:none;"></p>
252255
</div>
253256
{{> components/products/add-to-cart with_wallet_buttons=true}}
254257
</form>

0 commit comments

Comments
 (0)