silika-website/wwwroot/assets/js/wizard-ex-checkout.js

218 lines
6.4 KiB
JavaScript

/**
* Form Wizard
*/
'use strict';
// rateyo (jquery)
$(function () {
var readOnlyRating = $('.read-only-ratings');
// Star rating
if (readOnlyRating) {
readOnlyRating.rateYo({
rtl: isRtl,
rating: 4,
starWidth: '20px'
});
}
});
(function () {
// Init custom option check
window.Helpers.initCustomOptionCheck();
// libs
const creditCardMask = document.querySelector('.credit-card-mask'),
expiryDateMask = document.querySelector('.expiry-date-mask'),
cvvMask = document.querySelector('.cvv-code-mask');
// Credit Card
if (creditCardMask) {
new Cleave(creditCardMask, {
creditCard: true,
onCreditCardTypeChanged: function (type) {
if (type != '' && type != 'unknown') {
document.querySelector('.card-type').innerHTML =
'<img src="' + assetsPath + 'img/icons/payments/' + type + '-cc.png" height="28"/>';
} else {
document.querySelector('.card-type').innerHTML = '';
}
}
});
}
// Expiry Date Mask
if (expiryDateMask) {
new Cleave(expiryDateMask, {
date: true,
delimiter: '/',
datePattern: ['m', 'y']
});
}
// CVV
if (cvvMask) {
new Cleave(cvvMask, {
numeral: true,
numeralPositiveOnly: true
});
}
// Wizard Checkout
// --------------------------------------------------------------------
const wizardCheckout = document.querySelector('#wizard-checkout');
if (typeof wizardCheckout !== undefined && wizardCheckout !== null) {
// Wizard form
const wizardCheckoutForm = wizardCheckout.querySelector('#wizard-checkout-form');
// Wizard steps
const wizardCheckoutFormStep1 = wizardCheckoutForm.querySelector('#checkout-cart');
const wizardCheckoutFormStep2 = wizardCheckoutForm.querySelector('#checkout-address');
const wizardCheckoutFormStep3 = wizardCheckoutForm.querySelector('#checkout-payment');
const wizardCheckoutFormStep4 = wizardCheckoutForm.querySelector('#checkout-confirmation');
// Wizard next prev button
const wizardCheckoutNext = [].slice.call(wizardCheckoutForm.querySelectorAll('.btn-next'));
const wizardCheckoutPrev = [].slice.call(wizardCheckoutForm.querySelectorAll('.btn-prev'));
let validationStepper = new Stepper(wizardCheckout, {
linear: false
});
// Cart
const FormValidation1 = FormValidation.formValidation(wizardCheckoutFormStep1, {
fields: {
// * Validate the fields here based on your requirements
},
plugins: {
trigger: new FormValidation.plugins.Trigger(),
bootstrap5: new FormValidation.plugins.Bootstrap5({
// Use this for enabling/changing valid/invalid class
// eleInvalidClass: '',
eleValidClass: ''
// rowSelector: '.col-lg-6'
}),
autoFocus: new FormValidation.plugins.AutoFocus(),
submitButton: new FormValidation.plugins.SubmitButton()
}
}).on('core.form.valid', function () {
// Jump to the next step when all fields in the current step are valid
validationStepper.next();
});
// Address
const FormValidation2 = FormValidation.formValidation(wizardCheckoutFormStep2, {
fields: {
// * Validate the fields here based on your requirements
},
plugins: {
trigger: new FormValidation.plugins.Trigger(),
bootstrap5: new FormValidation.plugins.Bootstrap5({
// Use this for enabling/changing valid/invalid class
// eleInvalidClass: '',
eleValidClass: ''
// rowSelector: '.col-lg-6'
}),
autoFocus: new FormValidation.plugins.AutoFocus(),
submitButton: new FormValidation.plugins.SubmitButton()
}
}).on('core.form.valid', function () {
// Jump to the next step when all fields in the current step are valid
validationStepper.next();
});
// Payment
const FormValidation3 = FormValidation.formValidation(wizardCheckoutFormStep3, {
fields: {
// * Validate the fields here based on your requirements
},
plugins: {
trigger: new FormValidation.plugins.Trigger(),
bootstrap5: new FormValidation.plugins.Bootstrap5({
// Use this for enabling/changing valid/invalid class
// eleInvalidClass: '',
eleValidClass: ''
// rowSelector: '.col-lg-6'
}),
autoFocus: new FormValidation.plugins.AutoFocus(),
submitButton: new FormValidation.plugins.SubmitButton()
}
}).on('core.form.valid', function () {
validationStepper.next();
});
// Confirmation
const FormValidation4 = FormValidation.formValidation(wizardCheckoutFormStep4, {
fields: {
// * Validate the fields here based on your requirements
},
plugins: {
trigger: new FormValidation.plugins.Trigger(),
bootstrap5: new FormValidation.plugins.Bootstrap5({
// Use this for enabling/changing valid/invalid class
// eleInvalidClass: '',
eleValidClass: '',
rowSelector: '.col-md-12'
}),
autoFocus: new FormValidation.plugins.AutoFocus(),
submitButton: new FormValidation.plugins.SubmitButton()
}
}).on('core.form.valid', function () {
// You can submit the form
// wizardCheckoutForm.submit()
// or send the form data to server via an Ajax request
// To make the demo simple, I just placed an alert
alert('Submitted..!!');
});
wizardCheckoutNext.forEach(item => {
item.addEventListener('click', event => {
// When click the Next button, we will validate the current step
switch (validationStepper._currentIndex) {
case 0:
FormValidation1.validate();
break;
case 1:
FormValidation2.validate();
break;
case 2:
FormValidation3.validate();
break;
case 3:
FormValidation4.validate();
break;
default:
break;
}
});
});
wizardCheckoutPrev.forEach(item => {
item.addEventListener('click', event => {
switch (validationStepper._currentIndex) {
case 3:
validationStepper.previous();
break;
case 2:
validationStepper.previous();
break;
case 1:
validationStepper.previous();
break;
case 0:
default:
break;
}
});
});
}
})();