{"version":3,"file":"default/js/giftCard.js","mappings":";;;;;;;;;;AAAA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;AC3Va;;AAEb;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;;;;;;;;;ACZa;;AAEb;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAkD;AACtE;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;UC1EA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;;;;;ACtBa;;AAEb,qBAAqB,mBAAO,CAAC,gFAAQ;;AAErC;AACA;AACA,mBAAmB,mBAAO,CAAC,8GAAuB;AAClD,CAAC;;AAED,mBAAO,CAAC,mHAAyB","sources":["webpack://sfra-startup-kit/./cartridges/app_ballantynes/cartridge/client/default/js/components/giftCard.js","webpack://sfra-startup-kit/./cartridges/app_ballantynes/cartridge/client/default/js/util.js","webpack://sfra-startup-kit/./cartridges/app_storefront_base/cartridge/client/default/js/components/spinner.js","webpack://sfra-startup-kit/webpack/bootstrap","webpack://sfra-startup-kit/./cartridges/app_ballantynes/cartridge/client/default/js/giftCard.js"],"sourcesContent":["/* eslint-env jquery */\n\n\"use strict\";\n\nfunction getUrlObject() {\n // Get the URL from window.location.href or any other URL string\n const url = new URL(window.location.href);\n // Get the search parameters from the URL\n const searchParams = new URLSearchParams(url.search);\n\n return {\n url: url,\n searchParams: searchParams,\n };\n}\n\nfunction updateFormType() {\n const urlObject = getUrlObject();\n const type = urlObject.searchParams.get(\"type\");\n\n if (!type) {\n $(\".voucher-physical\").addClass(\"d-none\");\n $(\".voucher-digital\").removeClass(\"d-none\");\n $(\"#radio-digital\").prop(\"checked\", true);\n $(\".voucher-digital\").find(\"input\").attr(\"disabled\", false);\n $(\".voucher-digital\").find(\"textarea\").attr(\"disabled\", false);\n $(\".voucher-physical\").find(\"input\").attr(\"disabled\", true);\n $(\".voucher-physical\").find(\".product-quantity\").val(1);\n $(\".card-type-physical\").removeClass(\"selected\");\n $(\".card-type-egift\").addClass(\"selected\");\n } else {\n $(\".voucher-physical\").removeClass(\"d-none\");\n $(\".voucher-digital\").addClass(\"d-none\");\n $(\"#radio-physical\").prop(\"checked\", true);\n $(\".voucher-digital\").find(\"input\").attr(\"disabled\", true);\n $(\".voucher-digital\").find(\"textarea\").attr(\"disabled\", true);\n $(\".voucher-physical\").find(\"input\").attr(\"disabled\", false);\n $(\".card-type-egift\").removeClass(\"selected\");\n $(\".card-type-physical\").addClass(\"selected\");\n }\n}\n\nfunction setTypeQueryParameter(type) {\n const urlObject = getUrlObject();\n\n if (type === \"physical\") {\n urlObject.searchParams.append(\"type\", \"physical\");\n } else {\n urlObject.searchParams.delete(\"type\");\n }\n\n // Set the search params\n urlObject.url.search = urlObject.searchParams.toString();\n // Set the URL\n window.history.pushState(null, null, urlObject.url.toString());\n}\n\nvar wr = function (type) {\n var orig = window.history[type];\n return function () {\n var rv = orig.apply(this, arguments);\n var e = new Event(type);\n e.arguments = arguments;\n window.dispatchEvent(e);\n return rv;\n };\n};\n\nwindow.history.pushState = wr(\"pushState\");\n\nmodule.exports = {\n giftCard: function () {\n updateFormType();\n\n $(\".redeem-button\").addClass(\"d-none\");\n\n if ($(\".check-balance-form\").length) {\n const balanceFormUrl = $(\".check-balance-form\").attr(\"action\");\n const balanceFormUrlArr = balanceFormUrl.split(\"?\");\n if (balanceFormUrlArr.length && balanceFormUrlArr.length > 1) {\n $(\".redeem-button\").removeClass(\"d-none\");\n }\n }\n\n var currentDate = new Date();\n var maxDate = new Date();\n maxDate.setDate(maxDate.getDate() + 30);\n\n if ($(\".receipt-date\").length) {\n $(\".receipt-date\").datepicker({\n dateFormat: \"dd/mm/y\",\n minDate: currentDate,\n maxDate: maxDate,\n });\n }\n\n $(\"body\").on(\"change\", \".gift-voucher\", function () {\n $(this).val();\n setTypeQueryParameter($(this).val());\n updateFormType();\n });\n\n $(\"body\").on(\"click\", \".giftcard-values li.fixed-giftCard-value\", function () {\n $(\".giftcard-values\").find(\"li.fixed-giftCard-value\").removeClass(\"selected\");\n $(\".gift-card-amount-value\").attr(\"required\", false);\n var value = $(this).find(\".js-giftcardoption\").data(\"value\");\n $(\".gift-card-amount-value\").val(value);\n $(this).addClass(\"selected\");\n });\n\n $(\"body\").on(\"focus\", \"li.custom-giftCard-value input\", function () {\n $(\".giftcard-values\").find(\"li\").removeClass(\"selected\");\n $(\".gift-card-amount-value\").attr(\"required\", true);\n });\n\n $(\"body\").on(\"keyup\", \".receipt-message\", function () {\n const maxLength = parseInt($(this).attr(\"maxlength\"), 10);\n const messageLength = $(this).val().length;\n $(\".gift-card-message-remaining\").find(\"span\").text(maxLength - messageLength);\n });\n\n $(\"body\").on(\"submit\", \".giftcard-form\", function (e) {\n e.preventDefault();\n\n const urlObject = getUrlObject();\n const type = urlObject.searchParams.get(\"type\");\n const $form = $(this);\n $form.spinner().start();\n\n let cardAmount = 0;\n\n if ($(\".giftcard-values li.fixed-giftCard-value.selected\").length) {\n cardAmount = Number($(\".giftcard-values li.fixed-giftCard-value.selected\").find(\".js-giftcardoption\").data(\"value\"));\n } else {\n const $cardAmount = $(\".gift-card-amount-value\");\n const cardAmountMinRange = Number($cardAmount.data(\"min-range\"));\n const cardAmountMaxRange = Number($cardAmount.data(\"max-range\"));\n cardAmount = Number($cardAmount.val());\n\n if (cardAmount > cardAmountMaxRange || cardAmount < cardAmountMinRange) {\n $cardAmount.addClass(\"is-invalid\");\n $(\".custom-giftCard-value\").find(\".invalid-feedback\").text($cardAmount.data(\"range-error\"));\n $form.spinner().stop();\n return false;\n } else {\n $cardAmount.removeClass(\"is-invalid\");\n $(\".custom-giftCard-value\").find(\".invalid-feedback\").text(\"\");\n }\n }\n const form = {\n quantity: $form.find(\".product-quantity\").val(),\n cardType: type ? type : \"digital\",\n cardAmount: cardAmount\n };\n\n if (!type) {\n if (!$(\".receipt-message\").val()) {\n $(\".receipt-message\").attr(\"required\", true);\n $(\".receipt-message\").next().text($(\".receipt-message\").data(\"missing-error\"));\n $(\".receipt-message\").addClass(\"is-invalid\");\n $form.spinner().stop();\n return false;\n } else {\n $(\".receipt-message\").attr(\"required\", false);\n $(\".receipt-message\").next().text(\"\");\n $(\".receipt-message\").removeClass(\"is-invalid\");\n }\n\n form.pid = $(\".voucher-digital\").find(\"input.product-id\").val();\n\n form.recipientName = $(\"input[name$=_receiptName]\").val();\n form.recipientEmail = $(\"input[name$=_receiptEmail]\").val();\n form.recipientNameFrom = $(\"input[name$=_receiptNameFrom]\").val();\n form.recipientDate = $(\"input[name$=_receiptDate]\").val();\n form.message = $(\".receipt-message\").val();\n } else {\n form.pid = $(\".voucher-physical\").find(\"input.product-id\").val();\n }\n\n $.ajax({\n url: $form.attr(\"action\"),\n method: \"POST\",\n data: form,\n success: function (data) {\n $.spinner().stop();\n window.location.href = data.redirectUrl;\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n\n $(\"body\").on(\"submit\", \".check-balance-form\", function (e) {\n e.preventDefault();\n let clickedButtonName = $(this).find(\":submit:focus\").attr(\"name\");\n if (clickedButtonName == undefined) {\n let originalSubmitter = e.originalEvent.submitter;\n if (originalSubmitter) {\n clickedButtonName = e.originalEvent.submitter.name;\n }\n }\n const $form = $(this);\n $form.spinner().start();\n let url = $form.attr(\"action\");\n\n if (clickedButtonName === \"redeem\") {\n url = $form.data(\"redeem-url\");\n }\n\n $.ajax({\n url: url,\n type: \"post\",\n dataType: \"json\",\n data: $form.serialize(),\n success: function (data) {\n $form.spinner().stop();\n if (data.checkedBalanceMessage) {\n $(\".gift-card-balance-message\").text(data.checkedBalanceMessage).removeClass(\"d-none\");\n } else {\n $(\".gift-card-balance-message\").text(\"\").addClass(\"d-none\");\n }\n\n if (data.error) {\n $(\".gift-card-balance-message\").addClass(\"error-unassigned-category\");\n } else {\n $(\".gift-card-balance-message\").removeClass(\"error-unassigned-category\");\n }\n\n if (clickedButtonName === \"redeem\") {\n const $freeOfChargeTab = $(\".nav-item[data-method-id=FREE_OF_CHARGE]\");\n if ((data.remainingBalance || data.remainingBalance === 0) && data.remainingBalance >= 0) {\n $(\".nav-item\").addClass(\"d-none\");\n if ($freeOfChargeTab.hasClass(\"d-none\")) {\n $freeOfChargeTab.removeClass(\"d-none\");\n let freeOfChargeTabText = $(\".freeofcharge-tab\").text();\n let freeOfChargeContentText = $(\".freeofcharge-content .display-name\").text();\n if (freeOfChargeTabText.includes(\"Free of Charge\")) {\n freeOfChargeTabText = freeOfChargeTabText.replace(\"Free of Charge\", \"Gift Card\");\n freeOfChargeContentText = freeOfChargeContentText.replace(\"Free of Charge\", \"Gift Card\");\n\n } else if (freeOfChargeTabText.includes(\"BeautyVIP Voucher\") && !freeOfChargeTabText.includes(\"Gift Card\")) {\n freeOfChargeTabText = freeOfChargeTabText.replace(\"BeautyVIP Voucher\", \"Gift Card + BeautyVIP Voucher\");\n freeOfChargeContentText = freeOfChargeContentText.replace(\"BeautyVIP Voucher\", \"Gift Card + BeautyVIP Voucher\");\n }\n $(\".freeofcharge-tab\").text(freeOfChargeTabText);\n $(\".freeofcharge-content .display-name\").text(freeOfChargeContentText);\n }\n $freeOfChargeTab.trigger(\"click\");\n $(\".tab-pane\").removeClass(\"active\");\n $(\".tab-pane.freeofcharge-content\").addClass(\"active\");\n } else {\n if ($freeOfChargeTab.find(\"a\").hasClass(\"active\")) {\n $freeOfChargeTab.find(\"a\").removeClass(\"active\");\n }\n }\n\n if (data.balanceMessage) {\n const $giftCardContainer = $(\"
\");\n $giftCardContainer.append(data.balanceMessage + \"
\");\n\n // Hide AfterPay tab after applying gift card\n if (!$(\".nav-item.afterpay-tab\").hasClass(\"d-none\")) {\n $(\".nav-item.afterpay-tab\").addClass(\"d-none\");\n }\n\n if (data.appliedCardMessage && $giftCardContainer) {\n $giftCardContainer.append(data.appliedCardMessage + \"
\");\n }\n\n if (data.remainingBalanceMessage && $giftCardContainer) {\n $giftCardContainer.append(data.remainingBalanceMessage);\n }\n\n if (data.insufficientBalanceMessage && $giftCardContainer) {\n $giftCardContainer.append(\"
\" + data.insufficientBalanceMessage);\n }\n\n $(\".applied-giftcard\").append($giftCardContainer);\n }\n }\n },\n error: function () {\n $form.spinner().stop();\n window.location.reload();\n }\n });\n });\n\n $(\"body\").on(\"click\", \".remove-giftcard\", function (e) {\n e.preventDefault();\n const $giftCardContainer = $(this).closest(\"div\");\n const cardNumber = $giftCardContainer.data(\"id\");\n const $form = $(\".check-balance-form\");\n $form.spinner().start();\n $.ajax({\n url: $form.data(\"remove-url\") + \"?cardNumber=\" + cardNumber,\n type: \"post\",\n dataType: \"json\",\n success: function (data) {\n $giftCardContainer.remove();\n if ((data.remainingTotalPrice || data.remainingTotalPrice === 0) && data.remainingTotalPrice <= 0) {\n $(\".nav-item\").addClass(\"d-none\");\n\n if ($(\".nav-item[data-method-id=FREE_OF_CHARGE]\").hasClass(\"d-none\")) {\n $(\".nav-item[data-method-id=FREE_OF_CHARGE]\").removeClass(\"d-none\");\n }\n $(\".nav-item[data-method-id=FREE_OF_CHARGE]\").trigger(\"click\");\n $(\".tab-pane\").removeClass(\"active\");\n $(\".tab-pane.freeofcharge-content\").addClass(\"active\");\n } else {\n $(\".nav-item\").removeClass(\"d-none\");\n\n if (!$(\".nav-item[data-method-id=FREE_OF_CHARGE]\").hasClass(\"d-none\")) {\n $(\".nav-item[data-method-id=FREE_OF_CHARGE]\").addClass(\"d-none\");\n }\n $(\".nav-item[data-method-id=FREE_OF_CHARGE]\").find(\"a\").removeClass(\"active\");\n $(\".tab-pane\").removeClass(\"active\");\n $(\".tab-pane.windcave-mhpp-content\").addClass(\"active\");\n $(\".nav-link.windcave-mhpp-tab\").trigger(\"click\");\n }\n\n if (data.hasGiftCard) {\n // Hide AfterPay tab after removing gift card\n if (!$(\".nav-item.afterpay-tab\").hasClass(\"d-none\")) {\n $(\".nav-item.afterpay-tab\").addClass(\"d-none\");\n }\n }\n $form.spinner().stop();\n },\n error: function () {\n $form.spinner().stop();\n window.location.reload();\n }\n });\n });\n\n $(\"body\").on(\"checkout:updateCheckoutView\", function (e, data) {\n window.order = data.order;\n });\n\n $(window).on(\"pushState\", function () {\n if (window.location.search.indexOf(\"?stage=shipping\") > -1 && window.order.hasOnlyDigitalGiftCard) {\n window.location.href = window.location.origin + window.location.pathname + \"?stage=payment#payment\";\n }\n });\n },\n};\n","\"use strict\";\n\nmodule.exports = function (include) {\n if (typeof include === \"function\") {\n include();\n } else if (typeof include === \"object\") {\n Object.keys(include).forEach(function (key) {\n if (typeof include[key] === \"function\") {\n include[key]();\n }\n });\n }\n};\n","'use strict';\n\n/**\n * Show a spinner inside a given element\n * @param {element} $target - Element to block by the veil and spinner.\n * Pass body to block the whole page.\n */\nfunction addSpinner($target) {\n var $veil = $('
');\n $veil.append('
');\n if ($target.get(0).tagName === 'IMG') {\n $target.after($veil);\n $veil.css({ width: $target.width(), height: $target.height() });\n if ($target.parent().css('position') === 'static') {\n $target.parent().css('position', 'relative');\n }\n } else {\n $target.append($veil);\n if ($target.css('position') === 'static') {\n $target.parent().css('position', 'relative');\n $target.parent().addClass('veiled');\n }\n if ($target.get(0).tagName === 'BODY') {\n $veil.find('.spinner').css('position', 'fixed');\n }\n }\n $veil.click(function (e) {\n e.stopPropagation();\n });\n}\n\n/**\n * Remove existing spinner\n * @param {element} $veil - jQuery pointer to the veil element\n */\nfunction removeSpinner($veil) {\n if ($veil.parent().hasClass('veiled')) {\n $veil.parent().css('position', '');\n $veil.parent().removeClass('veiled');\n }\n $veil.off('click');\n $veil.remove();\n}\n\n// element level spinner:\n$.fn.spinner = function () {\n var $element = $(this);\n var Fn = function () {\n this.start = function () {\n if ($element.length) {\n addSpinner($element);\n }\n };\n this.stop = function () {\n if ($element.length) {\n var $veil = $('.veil');\n removeSpinner($veil);\n }\n };\n };\n return new Fn();\n};\n\n// page-level spinner:\n$.spinner = function () {\n var Fn = function () {\n this.start = function () {\n addSpinner($('body'));\n };\n this.stop = function () {\n removeSpinner($('.veil'));\n };\n };\n return new Fn();\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","\"use strict\";\n\nvar processInclude = require(\"./util\");\n\n/* eslint-disable no-undef */\n$(document).ready(function () {\n processInclude(require(\"./components/giftCard\"));\n});\n\nrequire(\"base/components/spinner\");\n"],"names":[],"sourceRoot":""}