{"version":3,"file":"QuantitySteps-xNCI69jd.js","sources":["../../src/mixins/quantityStepperPartialsMixin.vue","../../src/components/price-rows-savings-fi/PriceRowsSavingsFi.vue","../../src/mixins/numberFormatMixin.vue","../../src/components/shop-modules/quantity-steps/QuantitySteps.vue"],"sourcesContent":["<script>\nexport default {\n  methods: {\n    allowQuantityPartials(bestPrice) {\n      return bestPrice?.partPackagingAllowed;\n    },\n  },\n};\n</script>\n","<template>\n  <div\n    :class=\"{\n      'price-rows-savings-fi': true,\n      'price-rows-savings-fi--mobile': mobile,\n    }\"\n  >\n    <div\n      v-if=\"mobile\"\n      class=\"price-rows-savings-fi__label\"\n    >\n      {{ $dict.get('online-Shop.Product.Price-Rows-Savings') }}\n    </div>\n\n    <div\n      v-for=\"(item, index) in savings\"\n      :key=\"index\"\n      :class=\"{\n        'price-rows-savings-fi__row': true,\n        'price-rows-savings-fi__row--active': item.active,\n      }\"\n      @click=\"mobile ? null : rowClicked(item)\"\n    >\n      <div class=\"price-rows-savings-fi__qtd\">\n        <template v-if=\"index === 0\"> {{ item.minQty }} {{ prefix(item.unit) }} </template>\n        <template v-else>\n          {{\n            $dict.get('online-Shop.Product.Price-Rows-Quantity-Label', [\n              `${item.minQty} ${prefix(item.unit)}`,\n            ])\n          }}\n        </template>\n      </div>\n      <div class=\"price-rows-savings-fi__price\">\n        <strong data-test=\"price-rows-price\">{{ item.valueFormatted }}</strong>\n        <span class=\"price-rows-savings-fi__price-prefix\"\n          >/ {{ item.priceQty !== 1 ? item.priceQty : null }} {{ prefix(item.unit) }}</span\n        >\n      </div>\n      <div class=\"price-rows-savings-fi__saving\">\n        <span\n          v-if=\"isSaving(item)\"\n          data-test=\"price-rows-saving\"\n          class=\"price-rows-savings-fi__saving__saving badge-fi\"\n        >\n          {{\n            $dict.get('online-Shop.Product.Price-Rows-Saving-Label', [\n              item.savingsInformation.savingsInPercent,\n            ])\n          }}\n        </span>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport sellingUnitMixin from 'mixins/sellingUnitMixin';\n\nexport default {\n  name: 'PriceRowsSavingsFi',\n  mixins: [sellingUnitMixin],\n  props: {\n    savings: {\n      type: Array,\n      default: () => [],\n    },\n    mobile: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  emits: ['clicked'],\n  computed: {\n    currency() {\n      return this.savings.currency;\n    },\n  },\n  methods: {\n    prefix(unit) {\n      return unit?.code ? this.getSellingUnit(unit.code) : this.getSellingUnit('ST');\n    },\n    isSaving(item) {\n      return item.savingsInformation?.savingsInPercent;\n    },\n    rowClicked(item) {\n      this.$emit('clicked', item);\n    },\n  },\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import './price-rows-savings-fi';\n</style>\n","<script>\nexport default {\n  methods: {\n    getRawValue(value) {\n      return String(value).replace(/\\D/g, '');\n    },\n    getFormattedValue(value) {\n      const rawValue = this.getRawValue(value);\n      return new Intl.NumberFormat(this.$fischer.siteLanguage()).format(rawValue);\n    },\n  },\n};\n</script>\n","<template>\n  <div\n    v-click-outside=\"closeSavings\"\n    class=\"quantity-steps\"\n    :class=\"myTemplate\"\n  >\n    <div class=\"quantity-steps__inner\">\n      <button\n        :class=\"{\n          'quantity-steps__button': true,\n          'quantity-steps__button--hover': stepDownHover,\n          'app-view': isAppView,\n        }\"\n        :disabled=\"disabled || stepDown === null || isNaN(stepDown) || isLoading === true\"\n        data-test=\"quantity-steps-minus\"\n        @click.stop.prevent=\"quantityStepMinus()\"\n        @mouseover=\"stepDownHover = true\"\n        @mouseout=\"stepDownHover = false\"\n      >\n        <icon-fi\n          class=\"quantity-steps__button__icon\"\n          icon=\"minus\"\n          :size=\"large ? '1' : '0_8'\"\n        />\n      </button>\n\n      <div\n        v-if=\"disabled && disabledText\"\n        class=\"quantity-steps__inner__disabled-text\"\n      >\n        <span>{{ disabledText }}</span>\n      </div>\n\n      <text-input-fi\n        v-else\n        id=\"stk-prefix\"\n        ref=\"input\"\n        data-test=\"stk-prefix\"\n        :model-value=\"quantityInputValue\"\n        :class=\"{\n          'quantity-steps__input': true,\n          'text-input-fi--light text-input-fi--focus-dark': template === 'addArticle',\n          'text-input-fi--light': light,\n          'quantity-steps__input--auto-width': autoWidth,\n        }\"\n        :small=\"small && !large\"\n        :large=\"large\"\n        :disabled=\"inputDisabled\"\n        :prefix=\"prefix\"\n        :select-input-on-focus=\"selectInputOnFocus\"\n        arrow-key-control-enabled\n        @update:model-value=\"updateQuantityInputValue\"\n        @keyup-enter=\"onKeyUpEnter\"\n        @keydown-arrow-up=\"onArrowKeyUp\"\n        @keydown-arrow-down=\"onArrowKeyDown\"\n        @focus=\"quantityFocused\"\n        @blur=\"onBlur\"\n      />\n\n      <button\n        :class=\"{\n          'quantity-steps__button': true,\n          'quantity-steps__button--hover': stepUpHover,\n          'app-view': isAppView,\n        }\"\n        :disabled=\"disabled || stepUp === null || isNaN(stepUp) || isLoading === true\"\n        data-test=\"quantity-steps-plus\"\n        @click.stop.prevent=\"quantityStepPlus()\"\n        @mouseover=\"stepUpHover = true\"\n        @mouseout=\"stepUpHover = false\"\n      >\n        <icon-fi\n          class=\"quantity-steps__button__icon\"\n          icon=\"plus\"\n          :size=\"large ? '1' : '0_8'\"\n        />\n      </button>\n    </div>\n\n    <div\n      v-if=\"priceRowsSavings\"\n      class=\"quantity-steps__savings\"\n    >\n      <div class=\"quantity-steps__savings__btn\">\n        <link-fi\n          :href=\"'#'\"\n          :size=\"isMD ? 18 : 16\"\n          primary\n          @click.prevent=\"openSavings\"\n        >\n          {{ $dict.get('online-Shop.Product.Show-Price-Rows-Savings') }}\n        </link-fi>\n      </div>\n\n      <price-rows-savings-fi\n        v-if=\"showSavings && isMD\"\n        :savings=\"priceRowsSavings\"\n        class=\"quantity-steps__price-rows-savings\"\n        @clicked=\"(item) => changeQuantity(item.minQty)\"\n      />\n    </div>\n  </div>\n</template>\n\n<script>\nimport { IconFi, LinkFi, TextInputFi } from 'atoms';\nimport vClickOutside from 'click-outside-vue3';\nimport PriceRowsSavingsFi from 'components/price-rows-savings-fi/PriceRowsSavingsFi';\nimport breakpointMixin from 'mixins/breakpointMixin';\nimport numberFormatMixin from 'mixins/numberFormatMixin';\nimport qantityStepperPartialsMixin from 'mixins/quantityStepperPartialsMixin';\nimport sellingUnitMixin from 'mixins/sellingUnitMixin';\nimport { debounce } from 'throttle-debounce';\n\nconst maxInputValue = 990000;\nconst isInRange = (value, stepRange) => {\n  if (Number.isNaN(value)) {\n    return false;\n  }\n\n  const fitLowerBound = stepRange.rangeFrom !== null ? value >= stepRange.rangeFrom : true;\n  const upperBound = stepRange.rangeTo !== null ? stepRange.rangeTo : maxInputValue;\n  const fitUpperBound = value <= upperBound;\n\n  return fitLowerBound && fitUpperBound;\n};\nconst isInRemainingStock = (value, stepRange) => {\n  if (Number.isNaN(value)) {\n    return false;\n  }\n  return value <= stepRange.rangeTo;\n};\nconst isInStep = (value, stepRange) => value % stepRange.rangeValue === 0;\nconst stepDownRange = (valueParam, stepRange) => {\n  if (stepRange.rangeValue === null && stepRange.rangeFrom === null && stepRange.rangeTo === null) {\n    return null;\n  }\n  let value = valueParam;\n  const rangeTo = stepRange.rangeTo || maxInputValue;\n  const rangeFrom = stepRange.rangeFrom || 0;\n  if (value <= rangeFrom) {\n    return undefined;\n  }\n  const offset = value % stepRange.rangeValue;\n  if (offset) {\n    value -= offset;\n  } else {\n    value -= stepRange.rangeValue;\n  }\n  let steppedValue = Math.max(value, rangeFrom);\n  if (steppedValue > rangeTo) {\n    steppedValue = rangeTo; // makes sure we have a value even when there are gaps in the ranges\n  }\n  if (steppedValue === 0) {\n    return undefined;\n  }\n  return steppedValue;\n};\nconst stepUpRange = (value, stepRange) => {\n  if (stepRange.rangeValue === null && stepRange.rangeFrom === null && stepRange.rangeTo === null) {\n    return null;\n  }\n  const rangeTo = stepRange.rangeTo || maxInputValue;\n  const rangeFrom = stepRange.rangeFrom || 0;\n  if (value >= rangeTo) {\n    return undefined;\n  }\n  let steppedValue = value - (value % stepRange.rangeValue) + stepRange.rangeValue;\n  if (steppedValue < rangeFrom) {\n    steppedValue = rangeFrom; // makes sure we have a value even when there are gaps in the ranges\n  }\n  return Math.min(steppedValue, rangeTo);\n};\n\nexport default {\n  name: 'QuantitySteps',\n  components: {\n    IconFi,\n    TextInputFi,\n    LinkFi,\n    PriceRowsSavingsFi,\n  },\n  directives: {\n    clickOutside: vClickOutside.directive,\n  },\n  mixins: [sellingUnitMixin, breakpointMixin, numberFormatMixin, qantityStepperPartialsMixin],\n  props: {\n    item: {\n      type: Object,\n      default: null,\n    },\n    template: {\n      default: 'article',\n      type: String,\n    },\n    requestedQuantity: {\n      type: Number,\n      default: null,\n    },\n    noBtnMargins: {\n      type: Boolean,\n    },\n    isLoading: Boolean,\n    disabled: {\n      default: false,\n      type: Boolean,\n    },\n    disabledText: {\n      default: '',\n      type: String,\n    },\n    productId: {\n      type: [String, Number],\n      default: null,\n    },\n    light: Boolean,\n    small: {\n      default: false,\n      type: Boolean,\n    },\n    large: {\n      default: false,\n      type: Boolean,\n    },\n    priceRowsSavings: {\n      type: Array,\n      default: null,\n    },\n    selectInputOnFocus: {\n      type: Boolean,\n      default: false,\n    },\n    arrowKeyControlEnabled: {\n      type: Boolean,\n      default: false,\n    },\n    triggerRemoveEventOnZero: {\n      type: Boolean,\n      default: false,\n    },\n    autoWidth: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  emits: [\n    'arrow-key-pressed',\n    'blur',\n    'focus',\n    'keyup-enter',\n    'quantity-input',\n    'quantity-stepper-remove-item',\n    'scrollToElement',\n    'text-input',\n    'update-quantity',\n    'user-input',\n    'value-rounded',\n  ],\n  data() {\n    return {\n      // Inputfield quantity value\n      quantityInputValue: '1',\n\n      // Helper vars\n      maxInputValue,\n      isClicked: undefined,\n      timeOut: null,\n      stepDownHover: false,\n      stepUpHover: false,\n      showSavings: false,\n    };\n  },\n  computed: {\n    allowPartials() {\n      return this.allowQuantityPartials(this.item);\n    },\n    myTemplate() {\n      const classes = [];\n      if (this.template) {\n        classes.push(`quantity-steps--${this.template}`);\n      }\n      if (this.light) {\n        classes.push('quantity-steps--light');\n      }\n      if (this.small && !this.large) {\n        classes.push('quantity-steps--small');\n      }\n      if (this.large) {\n        classes.push('quantity-steps--large');\n      }\n      return classes;\n    },\n    stepRanges() {\n      return this.item?.quantityStepRanges || [{}];\n    },\n    prefix() {\n      return this.item?.unit?.code\n        ? this.getSellingUnit(this.item.unit.code)\n        : this.getSellingUnit('ST');\n    },\n    inputDisabled() {\n      if (this.disabled) {\n        return true;\n      }\n\n      if (this.stepRanges === null || this.stepRanges.length === 0) {\n        return true;\n      }\n\n      if (this.stepRanges.length === 1) {\n        const stepRange = this.stepRanges[0];\n        if (\n          stepRange.rangeFrom === null &&\n          stepRange.rangeTo === null &&\n          stepRange.rangeValue === null\n        ) {\n          return true;\n        }\n      }\n\n      return false;\n    },\n    theme() {\n      return this.template === 'article' ? 'theme--blocky' : 'theme--blocky-dark';\n    },\n    buttonClass() {\n      return [this.theme, 'ma-0', 'quantity-steps__buttons'];\n    },\n    inputValue() {\n      return parseInt(this.getRawValue(this.quantityInputValue), 10);\n    },\n    stepUp() {\n      let newQuantity;\n      this.stepRanges.forEach((stepRange) => {\n        const steppedValue = stepUpRange(this.inputValue, stepRange);\n        if (!Number.isNaN(steppedValue)) {\n          if (!(steppedValue > newQuantity)) {\n            // true if newQuantity is NaN\n            newQuantity = steppedValue;\n          }\n        }\n      });\n      if (newQuantity === undefined) {\n        newQuantity = null;\n      }\n      return newQuantity;\n    },\n    stepDown() {\n      let newQuantity;\n      this.stepRanges.forEach((stepRange) => {\n        const steppedValue = stepDownRange(this.inputValue, stepRange);\n        if (!Number.isNaN(steppedValue)) {\n          if (!(steppedValue < newQuantity)) {\n            // true if newQuantity is NaN\n            newQuantity = steppedValue;\n          }\n        }\n      });\n      if (newQuantity === undefined) {\n        newQuantity = null;\n      }\n      return newQuantity;\n    },\n  },\n  watch: {\n    requestedQuantity(value) {\n      this.quantityInputValue = this.getFormattedValue(value);\n    },\n    item: {\n      deep: true,\n      handler(item, oldItem) {\n        if (!item) {\n          return;\n        }\n        if (oldItem && oldItem.articleNo === item.aricleNo) {\n          return;\n        }\n        const quantityInputValueNumber =\n          this.requestedQuantity ||\n          (item && (item.quantity || item.requestedQuantity || item.initialQuantity)) ||\n          1;\n\n        this.quantityInputValue = this.getFormattedValue(quantityInputValueNumber);\n      },\n      immediate: true,\n    },\n  },\n  methods: {\n    focus() {\n      if (this.$refs.input) {\n        this.$refs.input.focus();\n      }\n    },\n    updateQuantityInputValue(value) {\n      if (!this.debounceInput) {\n        this.debounceInput = debounce(600, () => {\n          const currentValue = this.getRawValue(this.quantityInputValue);\n          if (currentValue > 0) {\n            if (\n              this.allowPartials ||\n              this.stepRanges.some(\n                (stepRange) =>\n                  isInStep(currentValue, stepRange) && isInRange(currentValue, stepRange),\n              )\n            ) {\n              this.$emit('user-input', currentValue);\n            }\n          }\n        });\n      }\n      this.quantityInputValue = this.getFormattedValue(value);\n      this.$emit('user-input');\n      this.debounceInput();\n    },\n    onKeyUpEnter(value) {\n      this.quantityStepInputField(value, false);\n      this.$emit('keyup-enter');\n    },\n    onBlur(value, event) {\n      this.quantityStepInputField(value, true);\n      this.$emit('blur', value, event);\n    },\n    getInputValue() {\n      return this.inputValue;\n    },\n    quantityStepPlus() {\n      if (this.isAppView) {\n        this.stepUpHover = false;\n      }\n      this.$emit('quantity-input');\n      if (this.timeOut) {\n        clearTimeout(this.timeOut);\n      }\n\n      if (this.stepUp !== null) {\n        this.quantityInputValue = this.getFormattedValue(this.stepUp);\n        this.setTimeOut();\n      }\n    },\n    quantityStepMinus() {\n      if (this.isAppView) {\n        this.stepDownHover = false;\n      }\n      this.$emit('quantity-input');\n      if (this.timeOut) {\n        clearTimeout(this.timeOut);\n      }\n\n      if (this.stepDown !== null) {\n        this.quantityInputValue = this.getFormattedValue(this.stepDown);\n        this.setTimeOut();\n      }\n    },\n    triggerInput() {\n      this.quantityStepInputField(this.quantityInputValue, true);\n    },\n    quantityStepInputField(newValue, updateOnlyOnModification) {\n      if (this.triggerRemoveEventOnZero && parseInt(newValue, 10) === 0) {\n        this.$emit('quantity-stepper-remove-item', this.item.articleNo);\n        return;\n      }\n\n      // remove all non numeric characters\n      let quantityInputValueNumber;\n      if (newValue.target) {\n        quantityInputValueNumber = this.getRawValue(newValue.target.value);\n      } else {\n        quantityInputValueNumber = this.getRawValue(newValue);\n      }\n\n      if (quantityInputValueNumber > maxInputValue) {\n        quantityInputValueNumber = this.getFormattedValue(maxInputValue);\n      }\n\n      this.quantityInputValue = String(quantityInputValueNumber);\n      if (!this.quantityInputValue.length) {\n        this.quantityInputValue = '0';\n      }\n\n      // Check if old value is equal to new value or new value is equal to initialQuantity (first request)\n      const requestedQuantity = parseInt(this.quantityInputValue, 10);\n      let isValidQuantity;\n      let isOutOfRemainingStock;\n      if (requestedQuantity > 0) {\n        // false for NaN\n        if (this.allowPartials) {\n          isValidQuantity = true;\n        } else {\n          for (let i = 0; i < this.stepRanges.length; i += 1) {\n            const stepRange = this.stepRanges[i];\n            if (isInStep(requestedQuantity, stepRange) && isInRange(requestedQuantity, stepRange)) {\n              isValidQuantity = true;\n              this.quantityInputValue = this.getFormattedValue(this.quantityInputValue);\n              break;\n            } else if (\n              this.item.articleStatus === 'REMAINING_STOCK' &&\n              !isInRemainingStock(requestedQuantity, stepRange)\n            ) {\n              isOutOfRemainingStock = true;\n              this.quantityInputValue = this.getFormattedValue(stepRange.rangeTo);\n              break;\n            }\n          }\n        }\n        if (isValidQuantity) {\n          const inputRawValue = this.getRawValue(this.quantityInputValue);\n          if (\n            updateOnlyOnModification &&\n            (inputRawValue === this.item.quantity ||\n              inputRawValue === String(this.item.requestedQuantity))\n          ) {\n            return;\n          }\n          this.sendNewQuantityToParent();\n        } else if (isOutOfRemainingStock) {\n          this.$emit('update-quantity', this.quantityInputValue, this.productId);\n          this.$emit('value-rounded', this.$dict.get('online-Shop.Product.Out-Of-Remaining-Stock'));\n        } else {\n          this.roundValue();\n        }\n      } else {\n        this.roundValue();\n      }\n      this.quantityInputValue = this.getFormattedValue(this.quantityInputValue);\n    },\n    changeQuantity(quantity) {\n      this.closeSavings();\n      this.quantityInputValue = quantity;\n      this.sendNewQuantityToParent();\n      this.quantityInputValue = this.getFormattedValue(quantity);\n    },\n    setTimeOut() {\n      this.timeOut = setTimeout(() => {\n        this.sendNewQuantityToParent();\n        this.timeOut = null;\n      }, 1000);\n    },\n    sendNewQuantityToParent() {\n      const currentInputValue = this.getRawValue(this.quantityInputValue);\n      const newQuantity =\n        typeof currentInputValue === 'string' ? parseInt(currentInputValue, 10) : currentInputValue;\n      this.$emit('update-quantity', newQuantity, this.productId);\n    },\n    roundValue() {\n      if (this.stepRanges?.length) {\n        const stepRangeValue = this.stepRanges[0].rangeValue;\n        const factor = Math.ceil(this.getRawValue(this.quantityInputValue) / stepRangeValue);\n\n        let quantityInputValueNumber = stepRangeValue * factor;\n\n        if (quantityInputValueNumber < stepRangeValue) {\n          quantityInputValueNumber = stepRangeValue;\n        }\n        this.quantityInputValue = String(quantityInputValueNumber);\n\n        this.$emit('update-quantity', this.quantityInputValue, this.productId);\n        this.$emit(\n          'value-rounded',\n          this.$dict.get('online-Shop.Product.Quantity-Rounded-Up', [stepRangeValue]),\n          'rounded-up',\n        );\n      }\n    },\n    quantityFocused() {\n      if (this.isMD) {\n        this.openSavings();\n      }\n\n      this.$emit('focus');\n    },\n    openSavings() {\n      if (this.isMD) {\n        this.showSavings = true;\n      } else {\n        this.$emit('scrollToElement');\n      }\n    },\n    closeSavings() {\n      this.showSavings = false;\n    },\n    onArrowKeyUp() {\n      if (!this.arrowKeyControlEnabled) {\n        return;\n      }\n\n      this.quantityInputValue = this.getFormattedValue(this.stepUp);\n      this.$emit('arrow-key-pressed');\n    },\n    onArrowKeyDown() {\n      if (!this.arrowKeyControlEnabled) {\n        return;\n      }\n\n      this.quantityInputValue = this.getFormattedValue(this.stepDown);\n      this.$emit('arrow-key-pressed');\n    },\n  },\n};\n</script>\n\n<style lang=\"scss\">\n@import './quantity-steps';\n</style>\n"],"names":["_sfc_main","bestPrice","sellingUnitMixin","unit","item","_a","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_createElementBlock","_normalizeClass","$props","_openBlock","_hoisted_1","_toDisplayString","_ctx","_createCommentVNode","_Fragment","_renderList","index","$event","$options","_createElementVNode","_createTextVNode","_hoisted_8","value","rawValue","maxInputValue","isInRange","stepRange","fitLowerBound","upperBound","fitUpperBound","isInRemainingStock","isInStep","stepDownRange","valueParam","rangeTo","rangeFrom","offset","steppedValue","stepUpRange","IconFi","TextInputFi","LinkFi","PriceRowsSavingsFi","vClickOutside","breakpointMixin","numberFormatMixin","qantityStepperPartialsMixin","classes","_b","newQuantity","oldItem","quantityInputValueNumber","debounce","currentValue","event","newValue","updateOnlyOnModification","requestedQuantity","isValidQuantity","isOutOfRemainingStock","i","inputRawValue","quantity","currentInputValue","stepRangeValue","factor","$data","_cache","_withModifiers","_createVNode","_component_icon_fi","_createBlock","_component_text_input_fi","_component_link_fi","_withCtx","_component_price_rows_savings_fi"],"mappings":"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"}