File "BaseWizardNavigation.vue"

Full Path: /home/pulsehostuk9/public_html/invoicer.pulsehost.co.uk/resources/scripts/components/icons/dashboard/BaseWizardNavigation.vue
File size: 2.17 KB
MIME-type: text/html
Charset: utf-8

<template>
  <div
    :class="containerClass"
    class="
      relative
      after:bg-gray-200
      after:absolute
      after:transform
      after:top-1/2
      after:-translate-y-1/2
      after:h-2
      after:w-full
    "
  >
    <a
      v-for="(number, index) in steps"
      :key="index"
      :class="stepStyle(index)"
      class="z-10"
      href="#"
      @click.prevent="$emit('click', index)"
    >
      <svg
        v-if="currentStep > index"
        :class="iconClass"
        fill="currentColor"
        viewBox="0 0 20 20"
        @click="$emit('click', index)"
      >
        <path
          fill-rule="evenodd"
          d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z"
          clip-rule="evenodd"
        ></path>
      </svg>
    </a>
  </div>
</template>

<script>
export default {
  props: {
    currentStep: {
      type: Number,
      default: null,
    },
    steps: {
      type: Number,
      default: null,
    },
    containerClass: {
      type: String,
      default: 'flex justify-between w-full my-10 max-w-xl mx-auto',
    },
    progress: {
      type: String,
      default: 'rounded-full float-left w-6 h-6 border-4 cursor-pointer',
    },
    currentStepClass: {
      type: String,
      default: 'bg-white border-primary-500',
    },
    nextStepClass: {
      type: String,
      default: 'border-gray-200 bg-white',
    },
    previousStepClass: {
      type: String,
      default:
        'bg-primary-500 border-primary-500 flex justify-center items-center',
    },
    iconClass: {
      type: String,
      default:
        'flex items-center justify-center w-full h-full text-sm font-black text-center text-white',
    },
  },

  emits: ['click'],

  setup(props) {
    function stepStyle(number) {
      if (props.currentStep === number) {
        return [props.currentStepClass, props.progress]
      }
      if (props.currentStep > number) {
        return [props.previousStepClass, props.progress]
      }
      if (props.currentStep < number) {
        return [props.nextStepClass, props.progress]
      }
      return [props.progress]
    }

    return {
      stepStyle,
    }
  },
}
</script>