Utilities 5

Breakpoint is limited based on your device or window size.

<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;
      }
    }
  }