218 lines
6.4 KiB
JavaScript
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;
|
|
}
|
|
});
|
|
});
|
|
}
|
|
})();
|