<div class="steps-01 steps-content-holder wrapper bg-color-ui-01"> <div class="grid-container"> <div class="grid-x"> <div class="large-8 medium-10 small-12 cell main-steps-holder"> <div class="spacer x-large"></div> <!-- steps indicator --> <ins-steps id="insStepsEl"> <ins-step description="Step One"> </ins-step> <ins-step description="Step Two"> </ins-step> <ins-step description="Step Three"> </ins-step> </ins-steps> <!-- /steps indicator --> <div id="steps-content-holder"> <!-- step1 --> <form id="steps-01-step1-form"> <div class="spacer xxxx-large"></div> <h2 class="spacer text-center">Account Details</h2> <div class="spacer small"></div> <div class="grid-x grid-padding-x gutter"> <div class="cell large-6"> <ins-input validate id="first-name" label="First Name*" data-test="" name="first-name" value="" placeholder="First name" error-message="First Name is required"> </ins-input> </div> <div class="cell large-6"> <ins-input validate id="last-name" label="Last Name*" data-test="" name="last-name" value="" placeholder="Last name" error-message="Last Name is required"> </ins-input> </div> </div> <div class="grid-x grid-padding-x gutter"> <div class="cell large-6"> <ins-input validate id="email" field="email" label="Email*" data-test="" name="email" value="" placeholder="Email" error-message="Please provide a valid email address"> </ins-input> </div> <div class="cell large-6"> <ins-input-tel id="phone-number-field" label="Phone Number" data-test="" phonenum-value="" phonenum-placeholder="Phone Number" no-areacode> </ins-input-tel> </div> </div> </form> <!-- /step1 --> <!-- step2 --> <form id="steps-01-step2-form"> <div class="spacer xxxx-large"></div> <h2 class="spacer text-center">Delivery Details</h2> <div class="spacer small"></div> <div class="grid-x grid-padding-x gutter"> <div class="large-12 cell"> <ins-input id="search-address" label="Search address" data-test="" name="search-address" value="" placeholder="Search address" icon="icon-search"> </ins-input> </div> </div> <div class="grid-x grid-padding-x gutter"> <div class="large-6 cell"> <ins-input validate id="address1" label="Address 1" data-test="" name="address1" value="" placeholder="Address 1" error-message="Address 1 is required"> </ins-input> </div> <div class="large-6 cell"> <ins-input id="address2" label="Address 2" data-test="" name="address2" value="" placeholder="Address 2"> </ins-input> </div> </div> <div class="grid-x grid-padding-x gutter"> <div class="large-6 cell"> <ins-input id="address3" label="Address 3" data-test="" name="address3" value="" placeholder="Address 3"> </ins-input> </div> <div class="large-6 cell"> <ins-input id="city" label="City" data-test="" name="city" value="" placeholder="City"> </ins-input> </div> </div> <div class="grid-x grid-padding-x gutter"> <div class="large-6 cell"> <ins-input id="county-district" label="County District" data-test="" name="county-district" value="" placeholder="County District"> </ins-input> </div> <div class="large-6 cell"> <ins-input id="district" label="District" data-test="" name="district" value="" placeholder="District"> </ins-input> </div> </div> <div class="grid-x grid-padding-x gutter"> <div class="large-6 cell"> <ins-input validate id="suburb" label="Suburb" data-test="" name="suburb" value="" placeholder="Suburb" error-message="Suburb is required"> </ins-input> </div> <div class="large-6 cell"> <ins-input validate id="state-region" label="State/Region" data-test="" name="state-region" value="" placeholder="State/Region" error-message="State/Region is required"> </ins-input> </div> </div> <div class="grid-x grid-padding-x gutter"> <div class="large-6 cell"> <ins-input validate id="country" label="Country" data-test="" name="state-region" value="" placeholder="Country" error-message="Country is required"> </ins-input> </div> <div class="large-6 cell"> <ins-input id="country-code" label="Country Code" data-test="" name="country-code" value="" placeholder="Country Code" field="number"> </ins-input> </div> </div> <div class="grid-x grid-padding-x gutter"> <div class="large-6 cell"> <ins-input validate id="postal-code" label="Postal Code" data-test="" name="postal-code" value="" placeholder="Postal Code" field="number" error-message="Postal Code is required"> </ins-input> </div> <div class="large-6 cell"> </div> </div> </form> <!-- /step2 --> <!-- step3 --> <form id="steps-01-step3-form"> <div class="spacer xxxx-large"></div> <h2 class="spacer text-center">Time and Date</h2> <div class="spacer small"></div> <div class="grid-x grid-padding-x gutter"> <div class="cell large-6"> <ins-date-time label="Delivery Date" mode="datepicker" icon="icon-calendar" placeholder="Delivery Date" min-date="today"> </ins-date-time> </div> <div class="cell large-6"> <ins-date-time label="Delivery Time" mode="timepicker" icon="icon-clock" placeholder="Delivery Time"> </ins-date-time> </div> </div> </form> <!-- /step3 --> </div> <div class="steps-button-holder"> <div class="spacer xxx-small"></div> <ins-button label="Back" id="prevBtn" outlined disabled> </ins-button> <ins-button label="Next" solid id="nextBtn"> </ins-button> <div class="spacer xxx-small"></div> </div> </div> </div> </div> </div>
.steps-01 #steps-01-step2-form, .steps-01 #steps-01-step3-form { display: none; } .steps-01 #nextBtn { float: right; } .steps-01 ins-button button.blue.outlined:hover { color: var(--color-main, #116EC3); } .steps-01 .ins-form-field-wrap.is-invalid .ins-form-error { color: var(--color-error, #FF3366); font-family: var(--font-family-03, sans-serif); font-size: 12px; line-height: 16px; font-weight: 400; } .steps-01 .main-steps-holder { margin-left: auto; margin-right: auto; }
let insStepsEl = document.getElementById("insStepsEl"); let prevBtn = document.getElementById("prevBtn"); let nextBtn = document.getElementById("nextBtn"); let activeStep = "steps-01-step1-form"; // Use async await when calling APIs if you are expecting a return from the API prevBtn.addEventListener('insClick', async () => { nextBtn.disabled = false; let track = await insStepsEl.prev(); if (track.start) prevBtn.disabled = true; setActiveStep(track.currentStep.description); }); nextBtn.addEventListener('insClick', async () => { prevBtn.disabled = false; // console.log("validate:", activeStep); validateCurrentStep(activeStep); }); async function goToNextStep() { let track = await insStepsEl.next(); if (track.end) nextBtn.disabled = true; setActiveStep(track.currentStep.description); } function setActiveStep(currentStep) { switch (currentStep) { case 'Step One': activeStep = "steps-01-step1-form" break; case 'Step Two': activeStep = "steps-01-step2-form" break; case 'Step Three': activeStep = "steps-01-step3-form" break; default: activeStep = "steps-01-step1-form" } var displayedStep = "#" + activeStep; $(displayedStep).show(); $('#steps-content-holder > form').not(displayedStep).hide(); } function validateCurrentStep(formID) { var currentForm = document.getElementById(formID); validateForm(); async function validateForm() { if (await WebBlocks.validation.validateForm(currentForm)) { goToNextStep(); } else { return false; } } }