diff --git a/cartridges/int_bolt_core/cartridge/scripts/services/utils/preferences.js b/cartridges/int_bolt_core/cartridge/scripts/services/utils/preferences.js index 63ea010..40efd9c 100644 --- a/cartridges/int_bolt_core/cartridge/scripts/services/utils/preferences.js +++ b/cartridges/int_bolt_core/cartridge/scripts/services/utils/preferences.js @@ -34,7 +34,8 @@ exports.getSitePreferences = function () { boltCdnUrl: boltCdnUrl, boltMultiPublishableKey: boltMultiPublishableKey, blockedCharactersList: blockedCharactersList, - boltEnableSessionRecording: Site.getCurrent().getCustomPreferenceValue('boltEnableSessionRecording') || false + boltEnableSessionRecording: Site.getCurrent().getCustomPreferenceValue('boltEnableSessionRecording') || false, + sfccBaseVersion: getSFCCBaseVersion() }; }; @@ -90,3 +91,22 @@ exports.getSystemPreference = function (preferenceID) { } return System.getPreferences().getCustom()[preferenceID]; }; + +/** + * Returns the first digit configured in SFCC base version. "6.1.2" returns 6 + * @returns {number} the first number + */ +function getSFCCBaseVersion() { + var version = 5; + var sfccBaseVersion = Site.getCurrent().getCustomPreferenceValue('sfccBaseVersion'); + if (empty(sfccBaseVersion)) { + return baseVersion; + } + + var baseVersion = sfccBaseVersion.split('.'); + if (!empty(baseVersion)) { + version = parseInt(baseVersion[0], 10); + } + + return version; +} diff --git a/cartridges/int_bolt_sfra/cartridge/client/default/js/boltModalConfigure.js b/cartridges/int_bolt_sfra/cartridge/client/default/js/boltModalConfigure.js index bb2b76b..a419324 100644 --- a/cartridges/int_bolt_sfra/cartridge/client/default/js/boltModalConfigure.js +++ b/cartridges/int_bolt_sfra/cartridge/client/default/js/boltModalConfigure.js @@ -15,6 +15,7 @@ $(document).ready(function () { $('[data-tid="instant-bolt-checkout-button"]').children().replaceWith($('[data-tid="instant-bolt-checkout-button"]').children().clone()); var createBoltOrderUrl = $('.create-bolt-order-url').val(); + var sfccBaseVersion = $('#sfccBaseVersion').val(); // add an event handler to Bolt button's click checkoutBoltButton.click(function (e) { @@ -29,7 +30,13 @@ $(document).ready(function () { id: data.basketID }; - var boltButtonApp = BoltCheckout.configure(cart, data.hints, null); // eslint-disable-line no-undef + var boltButtonApp; + if (sfccBaseVersion >= 6) { + boltButtonApp = BoltCheckout.configure(cart, data.hints, callbacks); // eslint-disable-line no-undef + } else { + boltButtonApp = BoltCheckout.configure(cart, data.hints, null); // eslint-disable-line no-undef + } + // don't open bolt modal for apple pay if ($(e.target).attr('data-tid') !== 'apple-pay-button') { boltButtonApp.open(); @@ -40,4 +47,62 @@ $(document).ready(function () { }); } }, 100); + var successRedirect = $('#successRedirect').val(); + var sfccData; + var callbacks = { + close: function () { + // This function is called when the Bolt checkout modal is closed. + if (sfccData) { + var redirect = $('
') + .appendTo(document.body) + .attr({ + method: 'POST', + action: successRedirect + }); + + $('') + .appendTo(redirect) + .attr({ + name: 'orderID', + value: sfccData.merchant_order_number + }); + + $('') + .appendTo(redirect) + .attr({ + name: 'orderToken', + value: sfccData.sfcc.sfcc_order_token + }); + + redirect.submit(); + } + }, + onCheckoutStart: function () { + // This function is called after the checkout form is presented to the user. + }, + + // eslint-disable-next-line no-unused-vars + onEmailEnter: function (email) { + // This function is called after the user enters their email address. + }, + + onShippingDetailsComplete: function () { + // This function is called when the user proceeds to the shipping options page. + // This is applicable only to multi-step checkout. + }, + + onShippingOptionsComplete: function () { + // This function is called when the user proceeds to the payment details page. + // This is applicable only to multi-step checkout. + }, + + onPaymentSubmit: function () { + // This function is called after the user clicks the pay button. + }, + success: function (transaction, callback) { + // This function is called when the Bolt checkout transaction is successful. + sfccData = transaction; + callback(); + } + }; }); diff --git a/cartridges/int_bolt_sfra/cartridge/templates/default/cart/boltButton.isml b/cartridges/int_bolt_sfra/cartridge/templates/default/cart/boltButton.isml index 5635918..35df001 100644 --- a/cartridges/int_bolt_sfra/cartridge/templates/default/cart/boltButton.isml +++ b/cartridges/int_bolt_sfra/cartridge/templates/default/cart/boltButton.isml @@ -1,5 +1,7 @@ + + diff --git a/metadata/bolt-meta-import/meta/system-objecttype-extensions.xml b/metadata/bolt-meta-import/meta/system-objecttype-extensions.xml index c7e6522..fd5c6e8 100644 --- a/metadata/bolt-meta-import/meta/system-objecttype-extensions.xml +++ b/metadata/bolt-meta-import/meta/system-objecttype-extensions.xml @@ -630,6 +630,16 @@ false false + + SFCC Base Version + SFCC base version used in success callback. + string + false + false + 0 + ^([0-9]+\.)+[0-9]+$ + 5.0.0 + @@ -649,6 +659,7 @@ + Bolt Credentials Setting - V1