{"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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"}